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