2010年全国计算机等级考试二级C++模拟试题及答案(10)
编辑推荐:
2010年全国计算机二级考试各科模拟试题冲刺专题
全国计算机二级考试C++试题练习汇总
全国计算机二级考试C++笔试练习四十套
笔试部分
一、选择题
1.栈和队列的共同特点是
A)都是先进先出
B)都是先进后出
C)只允许在端点处插入和删除元素
D)没有共同点
【参考答案】 C
2.已知二叉树后序遍历序列是dabec,中序遍历序列是debac,它的前序遍历序列是
A)acbed B)decab C)deabc D)cedba
【参考答案】 D
3.链表不具有的特点是
A)不必事先估计存储空间 B)可随机访问任一元素
C)插入删除不需要移动元素 D)所需空间与线性表长度成正比
【参考答案】 B
4.结构化程序设计的3种结构是
A)顺序结构、选择结构、转移结构 B)分支结构、等价结构、循环结构
C)多分支结构、赋值结构、等价结构 D)顺序结构、选择结构、循环结构
【参考答案】 D
5.为了提高测试的效率,应该
A)随机选取测试数据
B)取一切可能的输入数据作为测试数据
C)在完成编码以后制定软件的测试计划
D)集中对付那些错误群集的程序
【参考答案】 D
6.算法的时间复杂度是指
A)执行算法程序所需要的时间 B)算法程序的长度
C)算法执行过程中所需要的基本运算次数 D)算法程序中的指令条数
【参考答案】 C
7.软件生命周期中所花费用最多的阶段是
A)详细设计 B)软件编码 C)软件测试 D)软件维护
【参考答案】 D
8.数据库管理系统DBMS中用来定义模式、内模式和外模式的语言为
A)C B)Basic C)DDL D)DML
【参考答案】 C
9.下列有关数据库的描述,正确的是
A)数据库是一个DBF文件 B)数据库是一个关系
C)数据库是一个结构化的数据集合 D)数据库是一组文件
【参考答案】 C
10.下列有关数据库的描述,正确的是
A)数据处理是将信息转化为数据的过程
B)数据的物理独立性是指当数据的逻辑结构改变时,数据的存储结构不变
C)关系中的每一列称为元组,一个元组就是一个字段
D)如果一个关系中的属性或属性组并非该关系的关键字,但它是另一个关系的关键字,则称其为本关系的外关键字
【参考答案】 D
11.C++语言对C语言做了很多改进,C++语言相对于C语言的最根本的变化是
A)增加了一些新的运算符 B)允许函数重载,并允许设置缺省参数
C)规定函数说明符必须用原型 D)引进了类和对象的概念
【参考答案】 D
12.下列哪个是C++语言的有效标识符?
A)_No1 B)No.1 C)12345 D)int
【参考答案】 A
13.设有定义int x;float y;,则10+x+y值的数据类型是
A)int B)double C)float D)不确定
【参考答案】
14.下列程序的执行结果为
#include
void main()
{ int a=3,b=0;
int *p=&a;
b=+a++;
cout<<*p<<","<
A)3,4 B)4,3 C)3,4 D)4,4
【参考答案】 B
15.下面程序的运行结果为
#include
void main()
{ for(int a=0,x=0;!x&&a<=10;a++)
{ a++; }
cout<
A)10 B)11 C)12 D)0
【参考答案】 C
16.下列选项,不正确的是
A)for(int a=1;a<=10;a++); B)int a=1;
do
{ a++; }
while(a<=10)
C)int a=1; D)for(int a=1;a<=10;a++)a++;
while(a<=10)
{ a++; }
【参考答案】 B
17.下面关于数组的初始化正确的是
A)char str[]={′a′,′b′,′c′}
B)char str[2]={′a′,′b′,′c′}
C)char str[2][3]={{′a′,′b′},{′c′,′d′},{′e′,′f′}}
D)char str()={′a′,′b′,′c′}
【参考答案】 A
18.下列程序的输出结果为
#include
void main()
{ char *a[]={"hello","the","world"};
char **pa=a;
pa++;
cout<<*pa< A)hello B)the C)world D)hellotheworld 【参考答案】 B 19.决定C++语言中函数的返回值类型的是 A)return语句中的表达式类型 B)调用该函数时系统随机产生的类型 C)调用该函数时的主调用函数类型 D)在定义该函数时所指定的数据类型 【参考答案】 D 20.下列程序的输出结果是 #include int min(int a,int b) { if (a
else return b; return 0; } void main() { cout< A)0 B)1 C)2 D)3 【参考答案】 B 21.下列程序的运行结果为 #include void print(double a) { cout<<++a; } void print(int a,int b) { cout< void main() { print(1.2); cout<<" "; print(3,4); } A)1.234 B)2.234 C)1.243 D)2.243 【参考答案】 D 22.对类成员访问权限的控制,是通过设置成员的访问控制属性实现的,下列不是访问控制属性的是 A)公有类型 B)私有类型 C)保护类型 D)友元类型 【参考答案】 D 23.在类的定义中,用于为对象分配内存空间,对类的数据成员进行初始化并执行其他内部管理操作的函数是 A)友元函数 B)虚函数 C)构造函数 D)析构函数 【参考答案】 C 24.类的析构函数的作用是 A)一般成员函数的初始化 B)类的初始化 C)对象的初始化 D)删除类创建的对象 【参考答案】 D 25.下列说法正确的是 A)内联函数在运行时是将该函数的目标代码插入每个调用该函数的地方 B)内联函数在编译时是将该函数的目标代码插入每个调用该函数的地方 C)类的内联函数必须在类体内定义 D)类的内联函数必须在类体外通过加关键字inline定义 【参考答案】 B 26.下面对静态数据成员的描述中,正确的是 A)静态数据成员可以在类体内进行初始化 B)静态数据成员不可以被类的对象调用 C)静态数据成员不能受private控制符的作用 D)静态数据成员可以直接用类名调用 【参考答案】 D 27.下面对于友元函数描述正确的是 A)友元函数的实现必须在类的内部定义 B)友元函数是类的成员函数 C)友元函数破坏了类的封装性和隐藏性 D)友元函数不能访问类的私有成员 【参考答案】 C 28.在公有派生情况下,有关派生类对象和基类对象的关系,下列叙述不正确的是 A)派生类的对象可以赋给基类的对象 B)派生类的对象可以初始化基类的引用 C)派生类的对象可以直接访问基类中的成员 D)派生类的对象的地址可以赋给指向基类的指针 【参考答案】 C 29.下面程序的运行结果为 #include class A { public: A(){cout<<"1";} ~A(){cout<<"2";} }; class B:public A { public: B(){cout<<"3";} ~B(){cout<<"4";} }; void main() { B b; } A)1234 B)1324 C)1342 D)3142 【参考答案】 C 30.下列关于虚基类的描述,错误的是 A)设置虚基类的目的是为了消除二义性 B)虚基类的构造函数在非虚基类之后调用 C)若同一层中包含多个虚基类,这些虚基类的构造函数按它们说明的次序调用 D)若虚基类由非虚基类派生而来,则仍然先调用基类构造函数,再调用派生类的构造函数 【参考答案】 B 31.下列关于多态性的描述,错误的是 A)C++语言中的多态性分为编译时的多态性和运行时的多态性 B)编译时的多态性可通过函数重载实现 C)运行时的多态性可通过模板和虚函数实现 D)实现运行时多态性的机制称为动态绑定 【参考答案】 C 32.下列运算符中,在C++语言中不能重载的是 A)* B)>= C):: D)/ 【参考答案】 C 33.当使用fstream流类定义一个流对象并打开一个磁盘文件时,文件的隐含打开方式为 A)ios::in B)ios::out C)ios::in | ios::out D)以上都不对 【参考答案】 D 34.下列程序的运行结果是 #include class A { int a; public: A(){a=0;} A(int aa) { a=aa; cout<
void main() { A x,y (2),z (3); cout< A)00 B)23 C)34 D)25 【参考答案】 B 35.下面程序的输出结果是 #include class example { int a; public: example(int b){a=b++;} void print(){a=a+1; cout<
【参考答案】 【10】改变 (10)C++语言的参数传递机制包括传值和传地址两种,如果调用函数时,需要改变实参或者返回多个值,应该采取 【11】 方式。 【参考答案】 【11】传地址 (11)对于下面定义的类MyClass,请在函数f()中添加对象成员把n的值修改为50。 class MyClass { public: MyClass(int x){n = x;} void SetNum(int nl){n = nl;} private: int n; }; int f() { MyC1ass *ptr = new MyClass(45); 【12】 } 【参考答案】 【12】Ptr->SetNum(50); (12)继承的方式有公有继承、私有继承和 【13】 3种。 【参考答案】 【13】保护继承 (13)表达式operator+(x,y)还可以表示为 【14】 。 【参考答案】 【14】(x,y) (14)类模板的使用实际上是将类模板实例化成一个具体的 【15】 。 【参考答案】 【15】类 上机部分 一、改错题 使用VC6打开考生文件夹下的工程kt11_1,此工程包含一个源程序文件kt11_1.cpp,但该程序运行有问题,请改正函数中的错误,使该程序的输出结果为: Valuesare:1,2and3 Pressanykeytocontinue 源程序文件kt11_1.cpp清单如下: #include classCommonBase { public: intx; }; /*****************found*****************/ classDeriveCommonA::publicCommonBase { public: inty; }; classDeriveCommonB:publicCommonBase { public: intz; }; /*****************found*****************/ classOverlapping:publicDeriveCommonA;publicDeriveCommonB { public: voidDisplay() { cout<<"Valuesare:"< intmain() { Overlappingov; /*****************found*****************/ ov.x=1; ov.y=2; ov.z=3; ov.Display(); return0; } 【试题解析】 (1)主要考查对派生类定义的理解,C++规定的继承格式是在类名的后面加冒号,之后是继承方式和继承类的名称,题目中错误的使用了作用域运算符; (2)主要考查多继承的定义,多继承的格式基本上和单继承相同,不过在多个基类之间应该使用逗号分开,题目中错误的使用了分号,分号在C++中是结束标志; (3)主要考查对派生类的对象访问的掌握,x是类CommonBase的成员,如果不加限制的访问就会产生二义性,编译程序不知道这个x是A类的,还是B类的,所以必须使用作用域限制符“::”,为了解决这个问题可以使用虚基类。 二、简单应用题 请编写函数fun(),该函数的功能是判断字符串是否为回文,若是则函数返回1,主函数中输出YES;否则返回0,主函数中输出NO。回文是指顺读和倒读都一样的字符串。 例如:字符串LEVEL是回文,而字符串123312就不是回文。 注意:部分源程序已存在文件kt11_2.cpp中。 请勿修改主函数main和其他函数中的任何内容,仅在函数fun的花括号中填写若干语句。 文件kt11_2.cpp的内容如下: #include #include #defineN80 intfun(char*str) { } voidmain() { chars[N]; cout<<"Enterastring:"< gets(s); cout<<"\n\n"; puts(s); if(fun(s)) cout<<"YES\n"; else cout<<"NO\n"; } 【参考答案】 int fun(char *str) { int i,n=0,fg=1; char *p=str; while(*p) { n++; p++; } for(i=0;i if(str[i]==str[n-1-i]) ; else { fg=0; break; } return fg; } 【试题解析】 本题的解题思路是:先利用循环中指针的移动来求得字符串的长度n,然后用一个for循环依次取得数组中的前半部分元素,用取得的前半部分内的元素逐个与后半部分内的对应位置的元素进行比较,如果相同,不做任何工作,接着取下一个元素,继续比较;如果不相同,可以判断该字符串肯定不是回文,就给标志变量fg赋值0(fg的初始值为1)。最终把fg作为函数的返回值返回(fg值为1表明是回文,fg值为0表明不是回文)。 三、综合应用题 使用VC6打开考生文件夹下的工程kt11_3。此工程包含一个kt11_3.cpp,其中定义了类queue,但该类的定义并不完整。请按要求完成下列操作,将程序补充完整。 (1)完成类queue的无参数的构造函数的定义,要求把数据成员bl和el都初始化为0,同时输出queueinitialized。请在注释“//**1**”之后添加适当的语句。 (2)完成类queue的成员函数qput(intj)的定义,它的功能是把新的元素加入队列,过程是先依据bl的值判断数组是否已经满了,如果是就输出queueisfull,否则bl自加一,并且把参数j的值存入bl指向的数组元素中,请在注释“//**2**”之后添加适当的语句。 (3)完成类queue的成员函数qget()的定义,它的功能是把队列开头的元素提取出队列,并返回该值,过程是先比较el和bl的值判断队列是否已空,如果是就输出queueisempty,否则el自加一,并且把el指向的数组元素返回,请在注释“//**3**”之后添加适当的语句。 程序输出结果如下: queueinitialized queueinitialized 3311 4422 注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。 源程序文件kt11_3.cpp清单如下: #include classqueue { intq[100]; intbl,el; public: queue(); voidqput(intj); intqget(); }; queue::queue() { //**1** } voidqueue::qput(intj) { //**2** { cout<<"queueisfull\n"; return; } bl++; q[bl]=j; } intqueue::qget() { //**3** { cout<<"queueisempty\n"; return0; } el++; returnq[el]; } voidmain() { queueaa,bb; aa.qput(11); bb.qput(22); aa.qput(33); bb.qput(44); cout<
cout< } 【参考答案】 (1)bl=el=0; cout<<"queue initialized\n"; (2)if(bl==100) (3)if(el==bl) 【试题解析】 主要考查对于具体的一个队列类的掌握,对列是一种特殊的存储结构,应使用先进先出原则。题目中bl和el分别指向队列的开头和结尾,其中(2)是队列的标准插入操作,(3)是队列的标准的删除操作,注意它们的操作方式和先判断后操作的原则。相关阅读