1、二级 C+笔试 39及答案解析(总分:100.00,做题时间:90 分钟)一、B选择题/B(总题数:35,分数:70.00)1.下列关于 break语句的叙述不正确的是( )。(分数:2.00)A.break语句可用在循环体中,它将使执行流程跳出本层循环体B.break语句可用在 switch语句中,它将使执行流程跳出当前 switch语句C.break语句可用在 if语句中,它将使执行流程跳出当前 if语句D.break语句在一层循环体中可以出现多次2.下列程序段中有错的是( )。 Templateclass Type /A Type /B Func(Type a,b) /C retum(a
2、b)?(a):(b); /D(分数:2.00)A.B.C.D.3.关于 new运算符的错误的描述是( )。(分数:2.00)A.使用运算符 new创建对象数组时必须定义初始值B.使用运算符 new创建对象时,会调用类的构造函数C.运算符 new可以用来动态创建对象和对象数组D.使用 new运算符创建的对象可以使用运算符 delete删除4.有以下程序 #includeiostream.h float fun(int x,int y) return(x+y); void main() int a=2,b=5,c=8; coutfun(int)fun(a+c,b),a-c); 程序运行后的输出结果
3、是( )。(分数:2.00)A.编译出错B.9C.21D.9.05.有如下程序 #gincludeiostream.h void main() char ch2 5”6937“,“8254“),*p2; int i,j,S=0 for(i=0;i2:i+)pi=chi; for(i=0;i2:i+) for(j=0;pi j/0;j+=2) s=10*s+pi j-0: couts; 该程序的输出结果是( )。(分数:2.00)A.69825B.63825C.6385D.6938256.在 C+语言中,形参的缺省存储类型是( )。(分数:2.00)A.autoB.registerC.stati
4、cD.extern7.开发软件所需高成本和产品的低质量之间有着尖锐的矛盾,这种现象称做( )。(分数:2.00)A.软件投机B.软件危机C.软件工程D.软件产生8.以下程序的正确运行结果是( )。 #includeiostream.h int f(int); void main() int a=2,i; for(i=0;i3;i+)coutf(a)“ “; coutendl; int f(int a) int b=0 static int c=3; b+:c+; return(a+b+c); (分数:2.00)A.777B.7 10 13C.79 11D.7 8 99.当使用 ifstream
5、流类定义一个流对象并打开一个磁盘文件时,文件的隐含打开方式是( )。(分数:2.00)A.ios:inB.ios:outC.ios:truncD.ios:binary10.假定 MyClass为一个类,则执行 MyClassa,b(2),*p;语句时,自动调用该类构造函数( )次。(分数:2.00)A.2B.3C.4D.511.类模板的使用实际上是将类模板实例化成一个具体的( )。(分数:2.00)A.类B.对象C.函数D.模板类12.函数模板:templateclass T T add(T x,T y)returnx+y; 下列对 add函数的调用不正确的是( )。(分数:2.00)A.ad
6、d(1,2)B.=addint(1,2)C.add(1.0,2)D.add(1.0,2.0)13.下述关于 break语句的描述中,( )是不正确的。(分数:2.00)A.break语句可用于循环体内,它将退出该重循环B.break语句可用于 switch语句中,它将退出 switch语句C.break语句可用于对体内,它将退出 if语句D.break语句在一个循环体内可以出现多次14.如果一个类至少有一个纯虚函数,那么就称该类为( )。(分数:2.00)A.抽象类B.虚基类C.派生类D.以上都不对15.算法分析的目的是( )。(分数:2.00)A.找出数据结构的合理性B.找出算法中输入和输出
7、之间的关系C.分析算法的易懂性和可靠性D.分析算法的效率以求改进16.以下函数调用语句中实参的个数是( )。 excc(v1,v2), (V3,v4,V5),V6);(分数:2.00)A.3B.4C.5D.617.对于常成员函数,下面描述正确的是( )。(分数:2.00)A.类的成员函数可以操作常对象B.类的成员函数不能操作常对象C.只有常成员函数可以操作常对象D.在常成员函数中,常对象可以被更新18.下面关于运算符重载的描述错误的是( )。(分数:2.00)A.运算符重载不能改变操作数的个数、运算符的优先级、运算符的结合性和运算符的语法结构B.不是所有的运算符都可以进行重载C.运算符函数的调
8、用必须使用关键字 operatorD.在 C+语言中不可通过运算符重载创造出新的运算符19.以下不能正确进行字符串赋值初值的语句是( )。(分数:2.00)A.char str5=“good!“;B.char str=“good!“;C.char*str=“good!“;D.char str5=g,o,o,d;20.已知各变量的定义如下 int i=8,k,a,b: unsigned long w=5; double x=1.42,y=5.2; 则以下符合 C+语言语法的表达式是( )。(分数:2.00)A.a+=a-=(b=4)*(a=3)B.a=a*3+2C.x(-3)D.y=float
9、i21.关于 read()函数的下列描述中,( )是对的。(分数:2.00)A.该函数是用来从键盘输入中获取字符串B.该函数所获取的字符的多少是不受限制的C.该函数只能用于文本文件的操作中D.该函数只能按规定读取所指定的字符数22.对于某个函数调用,不给出初调用函数的声明的情况是( )。(分数:2.00)A.被调用函数是无参函数B.被调用函数是无返回值的函数C.函数的定义在调用处之前D.函数的定义有别的程序文件中23.有关析构函数的说法不正确的是( )。(分数:2.00)A.析构函数有且只有一个B.析构函数无任何函数类型C.析构函数和构造函数一样可以有形参D.析构函数的作用是在对象被撤消时收回
10、先前分配的内存空间24.当一个函数无返回值时,函数的类型应为( )。(分数:2.00)A.任意B.voidC.intD.char25.如果类 A被说明成类 B的友元,则( )。(分数:2.00)A.类 A的成员即类 B的成员B.类 B的成员即类 A的成员C.类 A的成员函数不得访问类 B的成员D.类 A的成员函数可以访问类 B的成员26.下面程序的运行结果为( )。 #includeiostream.h void main() char a=3; switch(a) case3: cout“3”: case2: cout“2”; break; default:cout“1”: (分数:2.00
11、)A.3B.321C.31D.3227.要实现动态联编,必须通过( )调用虚函数。(分数:2.00)A.对象指针B.成员名限定C.对象名D.派生类名28.下列关于继承的描述中,错误的是( )。(分数:2.00)A.析构函数不能被继承B.派生类是基类的组合C.派生类的成员除了它自己的成员外,还包含了它的基类的成员D.派生类中继承的基类成员的访问权限到派生类保持不变29.下列关于成员函数特征的描述中,错误的是( )。(分数:2.00)A.成员函数一定是内联函数B.成员函数可以重载C.成员函数可以设置参数的默认值D.成员函数可以是静态的30.定义如下一维数组:int a5,*p;,则下列描述错误的是
12、( )。(分数:2.00)A.表达式 p=p+1是合法的B.表达式 a=a+1是合法的C.表达式 p-a是合法的D.表达式 a+2是合法的31.一个函数为 void(int,char=a),另一个函数为 void f(int),则它们( )。(分数:2.00)A.不能在同一程序中定义B.可以在同一程序中定义并可重载C.可以在同一程序中定义,但不可以重载D.以上说法均不正确32.有以下函数: char fun(char*p) return p;) 则该函数的返回值是( )。(分数:2.00)A.无确切的值B.形参 p中存放的地址值C.一个临时存储单元的地址D.形参 p自身的地址值33.以下程序段
13、的执行结果是( )。 int a,y: a=10;y=10 do a+=2: y+=a; cout“a”=“a”,“”y=“y”/n”; if(y20)break; while(a=14);(分数:2.00)A.a=12,y=12B.a=12,y=12 a=14,y=1 a=16,y=28C.a=12,y=12D.a=12,y=12 a=14,y=26 a=14,y=4434.若类 A和类 B的定义如下: class A int i, public: void get(); / / ; class B:A/默认为私有派生 int k; public: void make(); / / ; vo
14、id B: :make() k=i*j; 则上述定义中, ( )是非法的表达式。(分数:2.00)A.void get();B.int k:C.void make();D.k=i*j;35.若有以下定义和语句: int s45,(*ps)5; ps=s; 则对 s数组元素的正确引用形式是( )。(分数:2.00)A.ps+1B.*(ps+3)C.ps02D.*(ps+1)+3二、B填空题/B(总题数:15,分数:30.00)36.fstream、ifstream 和 ofstream文件流类的成员函数 1 关闭文件。(分数:2.00)填空项 1:_37.类 1 支持输入操作,类 2 支持输出操
15、作。(分数:2.00)填空项 1:_填空项 1:_38.以下程序的执行结果是_。 #includeiostream.h #includeiomanip.h voidmain() coutfill(*); coutwidth(10); coutsetiosflags(ios:left)“123.45“endl; coutwidth(8); cout“123.45“endl: coutwidth(4); cout“123.45“endl; (分数:2.00)填空项 1:_39.数据库系统阶段的数据具有较高独立性,数据独立性包括物理独立性和 1 两个含义。(分数:2.00)填空项 1:_40.C+是
16、一种面向对象的程序设计语言,它充分支持面向对象思想中的三个主要特征是 1 性; 2 性和 3性。(分数:2.00)填空项 1:_填空项 1:_填空项 1:_41.如果一个模板声明列出多个参数,则多个参数之间必须使用 1 隔开,每个参数都必须重复使用关键字 2。(分数:2.00)填空项 1:_填空项 1:_42.以下程序的功能是输出 1至 100之间每位数的乘积大于每位数的和的数,例如对于数字 12,有1*21+2,故不输出该数:对于 27,有 2*72+7,故输出该数。请填空。 #includeiostream.h void main() int n,k=1,s=o,m; for (n=1:n
17、=100:n+= k=1;s=0; _, while( ) k*=m10;s+=m10; U (3) /U; if(ks)coutn: (分数:2.00)填空项 1:_43.C+语言的基本控制结构为顺序结构、选择结构和 1。(分数:2.00)填空项 1:_44.C+是通过 1 译成目标语言的。(分数:2.00)填空项 1:_45.在析构函数中调用虚函数时,采用 1 联编。(分数:2.00)填空项 1:_46.运算符重载仍然保持其原来的优先级、_和_(分数:2.00)填空项 1:_47.在程序设计阶段应该采取 1 和逐步求精的方法,把一个模块的功能逐步分解,细化为一系列具体的步骤,进而用某种程序
18、设计语言写成程序。(分数:2.00)填空项 1:_48.每个以符号 1 开头的行,为编译预处理行。(分数:2.00)填空项 1:_49.对虚函数使用对象指针或引用调用,系统使用_联编;使用对象调用时,系统使用 _联编。(分数:2.00)填空项 1:_50.以下程序的执行结果是_ #includeiostreamh #includeiomanip.h void print(int n) if(n!=0) print(n-1); for(int i=1;i=n;i+= coutsetw(3)i; coutendl; void main() print (4); (分数:2.00)填空项 1:_二级
19、 C+笔试 39答案解析(总分:100.00,做题时间:90 分钟)一、B选择题/B(总题数:35,分数:70.00)1.下列关于 break语句的叙述不正确的是( )。(分数:2.00)A.break语句可用在循环体中,它将使执行流程跳出本层循环体B.break语句可用在 switch语句中,它将使执行流程跳出当前 switch语句C.break语句可用在 if语句中,它将使执行流程跳出当前 if语句 D.break语句在一层循环体中可以出现多次解析:2.下列程序段中有错的是( )。 Templateclass Type /A Type /B Func(Type a,b) /C retum(
20、ab)?(a):(b); /D(分数:2.00)A.B.C. D.解析:3.关于 new运算符的错误的描述是( )。(分数:2.00)A.使用运算符 new创建对象数组时必须定义初始值 B.使用运算符 new创建对象时,会调用类的构造函数C.运算符 new可以用来动态创建对象和对象数组D.使用 new运算符创建的对象可以使用运算符 delete删除解析:4.有以下程序 #includeiostream.h float fun(int x,int y) return(x+y); void main() int a=2,b=5,c=8; coutfun(int)fun(a+c,b),a-c); 程
21、序运行后的输出结果是( )。(分数:2.00)A.编译出错B.9 C.21D.9.0解析:5.有如下程序 #gincludeiostream.h void main() char ch2 5”6937“,“8254“),*p2; int i,j,S=0 for(i=0;i2:i+)pi=chi; for(i=0;i2:i+) for(j=0;pi j/0;j+=2) s=10*s+pi j-0: couts; 该程序的输出结果是( )。(分数:2.00)A.69825B.63825C.6385 D.693825解析:6.在 C+语言中,形参的缺省存储类型是( )。(分数:2.00)A.auto
22、 B.registerC.staticD.extern解析:7.开发软件所需高成本和产品的低质量之间有着尖锐的矛盾,这种现象称做( )。(分数:2.00)A.软件投机B.软件危机 C.软件工程D.软件产生解析:8.以下程序的正确运行结果是( )。 #includeiostream.h int f(int); void main() int a=2,i; for(i=0;i3;i+)coutf(a)“ “; coutendl; int f(int a) int b=0 static int c=3; b+:c+; return(a+b+c); (分数:2.00)A.777B.7 10 13C.7
23、9 11D.7 8 9 解析:9.当使用 ifstream流类定义一个流对象并打开一个磁盘文件时,文件的隐含打开方式是( )。(分数:2.00)A.ios:in B.ios:outC.ios:truncD.ios:binary解析:10.假定 MyClass为一个类,则执行 MyClassa,b(2),*p;语句时,自动调用该类构造函数( )次。(分数:2.00)A.2 B.3C.4D.5解析:11.类模板的使用实际上是将类模板实例化成一个具体的( )。(分数:2.00)A.类 B.对象C.函数D.模板类解析:12.函数模板:templateclass T T add(T x,T y)retu
24、rnx+y; 下列对 add函数的调用不正确的是( )。(分数:2.00)A.add(1,2)B.=addint(1,2)C.add(1.0,2) D.add(1.0,2.0)解析:13.下述关于 break语句的描述中,( )是不正确的。(分数:2.00)A.break语句可用于循环体内,它将退出该重循环B.break语句可用于 switch语句中,它将退出 switch语句C.break语句可用于对体内,它将退出 if语句 D.break语句在一个循环体内可以出现多次解析:14.如果一个类至少有一个纯虚函数,那么就称该类为( )。(分数:2.00)A.抽象类 B.虚基类C.派生类D.以上都
25、不对解析:15.算法分析的目的是( )。(分数:2.00)A.找出数据结构的合理性B.找出算法中输入和输出之间的关系C.分析算法的易懂性和可靠性D.分析算法的效率以求改进 解析:16.以下函数调用语句中实参的个数是( )。 excc(v1,v2), (V3,v4,V5),V6);(分数:2.00)A.3 B.4C.5D.6解析:17.对于常成员函数,下面描述正确的是( )。(分数:2.00)A.类的成员函数可以操作常对象B.类的成员函数不能操作常对象C.只有常成员函数可以操作常对象 D.在常成员函数中,常对象可以被更新解析:18.下面关于运算符重载的描述错误的是( )。(分数:2.00)A.运
26、算符重载不能改变操作数的个数、运算符的优先级、运算符的结合性和运算符的语法结构B.不是所有的运算符都可以进行重载C.运算符函数的调用必须使用关键字 operator D.在 C+语言中不可通过运算符重载创造出新的运算符解析:19.以下不能正确进行字符串赋值初值的语句是( )。(分数:2.00)A.char str5=“good!“; B.char str=“good!“;C.char*str=“good!“;D.char str5=g,o,o,d;解析:20.已知各变量的定义如下 int i=8,k,a,b: unsigned long w=5; double x=1.42,y=5.2; 则以
27、下符合 C+语言语法的表达式是( )。(分数:2.00)A.a+=a-=(b=4)*(a=3) B.a=a*3+2C.x(-3)D.y=float i解析:21.关于 read()函数的下列描述中,( )是对的。(分数:2.00)A.该函数是用来从键盘输入中获取字符串B.该函数所获取的字符的多少是不受限制的C.该函数只能用于文本文件的操作中D.该函数只能按规定读取所指定的字符数 解析:22.对于某个函数调用,不给出初调用函数的声明的情况是( )。(分数:2.00)A.被调用函数是无参函数B.被调用函数是无返回值的函数C.函数的定义在调用处之前 D.函数的定义有别的程序文件中解析:23.有关析构
28、函数的说法不正确的是( )。(分数:2.00)A.析构函数有且只有一个B.析构函数无任何函数类型C.析构函数和构造函数一样可以有形参D.析构函数的作用是在对象被撤消时收回先前分配的内存空间 解析:24.当一个函数无返回值时,函数的类型应为( )。(分数:2.00)A.任意B.void C.intD.char解析:25.如果类 A被说明成类 B的友元,则( )。(分数:2.00)A.类 A的成员即类 B的成员B.类 B的成员即类 A的成员C.类 A的成员函数不得访问类 B的成员D.类 A的成员函数可以访问类 B的成员 解析:26.下面程序的运行结果为( )。 #includeiostream.h
29、 void main() char a=3; switch(a) case3: cout“3”: case2: cout“2”; break; default:cout“1”: (分数:2.00)A.3B.321C.31D.32 解析:27.要实现动态联编,必须通过( )调用虚函数。(分数:2.00)A.对象指针 B.成员名限定C.对象名D.派生类名解析:28.下列关于继承的描述中,错误的是( )。(分数:2.00)A.析构函数不能被继承B.派生类是基类的组合C.派生类的成员除了它自己的成员外,还包含了它的基类的成员D.派生类中继承的基类成员的访问权限到派生类保持不变 解析:29.下列关于成员
30、函数特征的描述中,错误的是( )。(分数:2.00)A.成员函数一定是内联函数 B.成员函数可以重载C.成员函数可以设置参数的默认值D.成员函数可以是静态的解析:30.定义如下一维数组:int a5,*p;,则下列描述错误的是( )。(分数:2.00)A.表达式 p=p+1是合法的B.表达式 a=a+1是合法的 C.表达式 p-a是合法的D.表达式 a+2是合法的解析:31.一个函数为 void(int,char=a),另一个函数为 void f(int),则它们( )。(分数:2.00)A.不能在同一程序中定义B.可以在同一程序中定义并可重载C.可以在同一程序中定义,但不可以重载 D.以上说
31、法均不正确解析:32.有以下函数: char fun(char*p) return p;) 则该函数的返回值是( )。(分数:2.00)A.无确切的值B.形参 p中存放的地址值 C.一个临时存储单元的地址D.形参 p自身的地址值解析:33.以下程序段的执行结果是( )。 int a,y: a=10;y=10 do a+=2: y+=a; cout“a”=“a”,“”y=“y”/n”; if(y20)break; while(a=14);(分数:2.00)A.a=12,y=12B.a=12,y=12 a=14,y=1 a=16,y=28C.a=12,y=12 D.a=12,y=12 a=14,y
32、=26 a=14,y=44解析:34.若类 A和类 B的定义如下: class A int i, public: void get(); / / ; class B:A/默认为私有派生 int k; public: void make(); / / ; void B: :make() k=i*j; 则上述定义中, ( )是非法的表达式。(分数:2.00)A.void get();B.int k:C.void make();D.k=i*j; 解析:35.若有以下定义和语句: int s45,(*ps)5; ps=s; 则对 s数组元素的正确引用形式是( )。(分数:2.00)A.ps+1B.*(
33、ps+3)C.ps02 D.*(ps+1)+3解析:二、B填空题/B(总题数:15,分数:30.00)36.fstream、ifstream 和 ofstream文件流类的成员函数 1 关闭文件。(分数:2.00)填空项 1:_ (正确答案:close)解析:37.类 1 支持输入操作,类 2 支持输出操作。(分数:2.00)填空项 1:_ (正确答案:istream)填空项 1:_ (正确答案:ostream)解析:38.以下程序的执行结果是_。 #includeiostream.h #includeiomanip.h voidmain() coutfill(*); coutwidth(10
34、); coutsetiosflags(ios:left)“123.45“endl; coutwidth(8); cout“123.45“endl: coutwidth(4); cout“123.45“endl; (分数:2.00)填空项 1:_ (正确答案:123.45*)解析:123.45* 123.4539.数据库系统阶段的数据具有较高独立性,数据独立性包括物理独立性和 1 两个含义。(分数:2.00)填空项 1:_ (正确答案:逻辑独立性)解析:40.C+是一种面向对象的程序设计语言,它充分支持面向对象思想中的三个主要特征是 1 性; 2 性和 3性。(分数:2.00)填空项 1:_ (
35、正确答案:封装)填空项 1:_ (正确答案:继承)填空项 1:_ (正确答案:多态)解析:41.如果一个模板声明列出多个参数,则多个参数之间必须使用 1 隔开,每个参数都必须重复使用关键字 2。(分数:2.00)填空项 1:_ (正确答案:逗号)填空项 1:_ (正确答案:class)解析:42.以下程序的功能是输出 1至 100之间每位数的乘积大于每位数的和的数,例如对于数字 12,有1*21+2,故不输出该数:对于 27,有 2*72+7,故输出该数。请填空。 #includeiostream.h void main() int n,k=1,s=o,m; for (n=1:n=100:n+
36、= k=1;s=0; _, while( ) k*=m10;s+=m10; U (3) /U; if(ks)coutn: (分数:2.00)填空项 1:_ (正确答案:m-n m m/=10)解析:43.C+语言的基本控制结构为顺序结构、选择结构和 1。(分数:2.00)填空项 1:_ (正确答案:循环结构)解析:44.C+是通过 1 译成目标语言的。(分数:2.00)填空项 1:_ (正确答案:编译程序)解析:45.在析构函数中调用虚函数时,采用 1 联编。(分数:2.00)填空项 1:_ (正确答案:静态)解析:46.运算符重载仍然保持其原来的优先级、_和_(分数:2.00)填空项 1:_
37、 (正确答案:结合性 语法结构)解析:47.在程序设计阶段应该采取 1 和逐步求精的方法,把一个模块的功能逐步分解,细化为一系列具体的步骤,进而用某种程序设计语言写成程序。(分数:2.00)填空项 1:_ (正确答案:自顶而下)解析:48.每个以符号 1 开头的行,为编译预处理行。(分数:2.00)填空项 1:_ (正确答案:#)解析:49.对虚函数使用对象指针或引用调用,系统使用_联编;使用对象调用时,系统使用 _联编。(分数:2.00)填空项 1:_ (正确答案:动态 静态)解析:50.以下程序的执行结果是_ #includeiostreamh #includeiomanip.h void print(int n) if(n!=0) print(n-1); for(int i=1;i=n;i+= coutsetw(3)i; coutendl; void main() print (4); (分数:2.00)填空项 1:_ (正确答案:1)解析:1 2 1 2 3 1 2 3 4