2010年全国计算机等级考试二级C++模拟试题及答案(13)
编辑推荐:
2010年全国计算机二级考试各科模拟试题冲刺专题
全国计算机等级考试二级C++语言程序设计标准预测试卷汇总
全国计算机二级考试C++笔试练习四十套
笔试部分
一、选择题
1.在深度为5的满二叉树中,叶子结点的个数为
A)32 B)31 C)16 D)15
【参考答案】 B
2.若某二叉树的前序遍历访问顺序是abdgcefh,中序遍历访问顺序是dgbaechf,则其后序遍历的结点访问顺序是
A)bdgcefha B)gdbecfha C)bdgaechf D)gdbehfca
【参考答案】 D
3.一些重要的程序语言(如C语言和Pascal语言)允许过程的递归调用。而实现递归调用中的存储分配通常用
A)栈 B)堆 C)数组 D)链表
【参考答案】 A
4.软件工程的理论和技术性研究的内容主要包括软件开发技术和
A)消除软件危机 B)软件工程管理 C)程序设计自动化 D)实现软件可重用
【参考答案】 B
5.开发软件时对提高开发人员工作效率至关重要的是
A)操作系统的资源管理功能 B)先进的软件开发工具和环境
C)程序人员的数量 D)计算机的并行处理能力
【参考答案】 B
6.在软件测试设计中,软件测试的主要目的是
A)实验性运行软件
B)证明软件正确
C)找出软件中全部错误
D)发现软件错误而执行程序
【参考答案】 D
7.数据处理的最小单位是
A)数据 B)数据元素 C)数据项 D)数据结构
【参考答案】 C
8.索引属于
A)模式 B)内模式 C)外模式 D)概念模式
【参考答案】 B
9.下述关于数据库系统的叙述中正确的是
A)数据库系统减少了数据冗余
B)数据库系统避免了一切冗余
C)数据库系统中数据的一致性是指数据类型一致
D)数据库系统比文件系统能管理更多的数据
【参考答案】 B
10.数据库系统的核心是
A)数据库 B)数据库管理系统
C)模拟模型 D)软件工程
【参考答案】 B
11.下列关于C++语言类的描述中错误的是
A)类用于描述事物的属性和对事物的操作
B)类与类之间通过封装而具有明确的独立性
C)类与类之间必须是平等的关系,而不能组成层次结构
D)类与类之间可以通过一些方法进行通信和联络
【参考答案】 C
12.C++语言中,表示一条语句结束的标号是
A)# B); C)// D)}
【参考答案】 B
13.以下叙述中正确的是
A)构成C++语言程序的基本单位是类
B)可以在一个函数中定义另一个函数
C)main()函数必须放在其他函数之前
D)所有被调用的函数一定要在调用之前进行定义
【参考答案】 A
14.已知有定义
const int D=5;
int i=1;
double f=0.32;
char c=15;
则下列选项错误的是
A)++i; B)D--; C)c++; D)--f;
【参考答案】 B
15.以下程序的输出结果是
#include
void reverse(int a[],int n)
{ int i,t;
for(i=0;i { t=a[i];a[i]=a[n-1-i];a[n-1-i]=t;} } void main() { int b[10]={1,2,3,4,5,6,7,8,9,10}; int i,s=0; reverse(b,8); for(i=6;i<10;i++)s+=b[i]; cout << s; } A)22 B)10 C)34 D)30 【参考答案】 A 16.下面程序的功能是把316表示为两个加数的和,使两个加数分别能被13和11整除,在划线处应填入的选项是 #include void main() { int i=0,j,k; do{ i++;k=316-13*i;} while( ); j=k/11; cout << "316=13*"<
A)k/11 B)k%11 C)k/11==0 D)k%11==0 【参考答案】 B 17.设有数组定义: char array[]="China";,则数组 array所占的空间为 A)4个字节 B)5个字节 C)6个字节 D)7个字节 【参考答案】 C 18.若已定义: int a[]={0,1,2,3,4,5,6,7,8,9}, *p=a,i; 其中 0≤i≤9, 则对a数组元素不正确的引用是 A)a[p-a] B)*(&a[i]) C)p[i] D)a[10] 【参考答案】 D 19.以下程序的输出结果是 #include void main() { int x=1,y=3; cout << x++ << ","; { int x=0;x+=y*2; cout << x <<"," << y << ","; } cout << x <<"," << y; } A)1,6,3,1,3 B)1,6,3,6,3 C)1,6,3,2,3 D)1,7,3,2,3 【参考答案】 C 20.函数fun的返回值是 fun(char *a,char *b) { int num=0,n=0; while(*(a+num)!=′ ′)num++; while(b[n]){*(a+num)=b[n];num++;n++;} return num; } A)字符串a的长度 B)字符串b的长度 C)字符串a和b的长度之差 D)字符串a 和b的长度之和 【参考答案】 D 21.下面程序输出的结果是 #include void main() { int i; int a[3][3]={1,2,3,4,5,6,7,8,9}; for(i=0;i<3;i++) cout << a[2-i][i]<<""; } A)1 5 9 B)7 5 3 C)3 5 7 D)5 9 1 【参考答案】 B 22.下面程序的结果为 #include int c; class A { private: int a; static int b; public: A(){a=0; c=0;} void seta(){a++;} void setb(){b++;} void setc(){c++;} void display(){cout << a << " " << b << " " << c;} }; int A::b = 0; void main() { A a1,a2; a1.seta(); a1.setb(); a1.setc(); a2.seta(); a2.setb(); a2.setc(); a2.display(); } A)1 2 1 B)1 2 2 C)1 1 2 D)2 2 2 【参考答案】 B 23.下列描述中哪个是正确的? A)私有派生的子类无法访问父类的成员 B)类A的私有派生子类的派生类C无法初始化其祖先类A对象的属性,因为类A的成员对类C是不可访问的 C)私有派生类不能作为基类派生子类 D)私有派生类的所有子孙类将无法继续继承该类的成员 【参考答案】 B 24.下列关于构造函数说法不正确的是 A)构造函数必须与类同名 B)构造函数可以省略不写 C)构造函数必须有返回值 D)在构造函数中可以对类中的成员进行初始化 【参考答案】 C 25.如果友元函数重载一个运算符时,其参数表中没有任何参数则说明该运算符是 A)一元运算符 B)二元运算符 C)选项A)和选项B)都有可能 D)重载错误 【参考答案】 D 26.在重载一个运算符时,如果其参数表中有一个参数,则说明该运算符是 A)一元成员运算符 B)二元成员运算符 C)一元友元运算符 D)选项B)和选项C)都可能 【参考答案】 D 27.下列关于模板的说法正确的是 A)模板的实参在任何时候都可以省略 B)类模板与模板类所指的是同一概念 C)类模板的参数必须是虚拟类型的 D)类模板中的成员函数全部都是模板函数 【参考答案】 D 28.表示在输出时显示小数位,和在文件输入时判断文件尾的函数分别是 A)showbase()和eof() B)showpoint()和eof() C)showpoint()和bad() D)showpoint()和good() 【参考答案】 B 29.下面程序段的运行结果是 void main() { int t, a, b, c; a=1;b=2;c=2; while(a
{ t=a;a=b;b=t;c--;} cout << a << "," << b << "," << c; } A)1,2,0 B)2,1,0 C)1,2,1 D)2,1,1 【参考答案】 A 30.下列程序中画线处应填入的语句是 class Base { public: void fun(){cout<<"Base of fun"< class Derived:public Base { void fun() { //显示基类的成员函数fun cout<<"Derived of fun"< A)fun(); B)Base.fun(); C)Base::fun(); D)Base->fun(); 【参考答案】 C 31.若定义int k=7,x=12;,则能使值为3的表达式是 A)x%=(k%=5) B)x%=(k-k%5) C)x%=k-k%5 D)(x%=k)-(k%=5) 【参考答案】 D 32.在位运算中,操作数每右移一位,其结果相当于 A)操作数乘以2 B)操作数除以2 C)操作数乘以4 D)操作数除以4 【参考答案】 B 33.有以下结构体说明和变量的定义,且指针p指向变量a,指针q指向变量b。则不能把结点b连接到结点a之后的语句是 struct node { char data; struct node *next; } a,b,*p=&a,*q=&b; A)a.next=q; B)p.next=&b; C)p->next=&b; D)(*p).next=q; 【参考答案】 B 34.一个类的友元函数能够访问该类的 A)私有成员 B)保护成员 C)公有成员 D)所有成员 【参考答案】 D 35.下面程序的输出结果是 #include #include void main() { char p1[10],p2[10]; strcpy(p1,"abc"); strcpy(p2,"ABC"); char str[50]= "xyz"; strcpy(str+2,strcat(p1,p2)); cout << str; } A)xyzabcABC B)zabcABC C)xyabcABC D)yzabcABC 【参考答案】 C 二、填空题 (1)在树形结构中,树根结点没有 【1】 。 【参考答案】 【1】前件 (2)Jackson结构化程序设计方法是英国的M.Jackson提出的,它是一种面向 【2】 的设计方法。 【参考答案】 【2】数据结构 (3)面向对象的模型中,最基本的概念是对象和 【3】 。 【参考答案】 【3】类 (4)软件设计模块化的目的是 【4】 。 【参考答案】 【4】降低复杂性 (5)数据模型按不同应用层次分成3种类型,它们是概念数据模型、 【5】 和物理数据模型。 【参考答案】 【5】逻辑数据模型 (6)派生类的成员一般分为两部分,一部分是 【6】 ,另一部分是自己定义的新成员。 【参考答案】 【6】从基类继承的成员 (7)以下程序输出的结果是 【7】 。 #include void main() { int a=5,b=4,c=3,d; d=(a>b>c); cout << d; } 【参考答案】 【7】 0 (8)设i,j,k均为int型变量,则执行完for(i=0, j=10; i<=j; i++, j--)k=i+j;语句后,k的值为 【8】 。 【参考答案】 【8】 10 (9)如果要把返回值为void的函数A声明为类B的友元函数,则应在类B的定义中加入的语句是 【9】 。 【参考答案】 【9】friend void A( ); (10)如果类B继承了类A,则称类A为类B的基类,类B称为类A的 【10】 。 【参考答案】 【10】派生类 (11)将x+y中的+运算符用友元函数重载应写为 【11】 。 【参考答案】 【11】operator+(x,y) (12)已知程序的结果为1 2 3,请填空。 #include template class A { public: T x,y,z; void display(){cout << x << " " << y << " " << z;} }; void main() { A 【12】 【13】 【14】 a1.display(); } 【参考答案】 【12】a1.x=1 【13】a1.y=2 【14】a1.z=3 (13)下列程序段的输出结果是 【15】 。 cout << fixed << 509.123456789 << endl; 【参考答案】 【15】509.123457 上机部分 一、改错题 使用VC6打开考生文件夹下的工程kt14_1,此工程包含一个源程序文件kt14_1.cpp,但该程序运行有问题,请改正程序中的错误,使该程序的输出结果为: A:noparameters B:intparameter A:noparameters B:intparameter C:intparameter 源程序文件kt14_1.cpp清单如下: #include classA { /*****************found*****************/ private: A(){cout<<"A:noparametersn";} A(inta){cout<<"A:intparametern";} }; classB:publicA { public: B(inta){cout<<"B:intparametern";} }; /*****************found*****************/ classC:publicB,publicA { public: /*****************found*****************/ C(inta)::B(a){cout<<"C:intparametern";} }; voidmain() { Bb(1); Cc(2); } 【参考答案】 (1)将private:改为:public: (2)将class C:public B,public A改为:class C:public B (3)将C(int a)::B(a){cout<<"C: int parametern"; } 改为:C(int a):B(a){cout<<"C: int parametern";} 【试题解析】 (1)一个类的构造函数和析构函数可以由系统自动生成,也可以由用户提供,但构造函数和析构函数都必须是该类的公有成员函数,否则编译时将出现错误,不能被调用; (2)A已经是B的基类,C公有继承B,A也就成为了C的基类,根据程序的运行结果可知,C是要公有继承B; (3)派生类的构造函数,初始化基类的参数,调用基类的构造函数时,使用符号“:”,而不是“::”; 二、简单应用题 编写函数fun(),它的功能是求n以内(不包括n)同时能被3与7整除的所有自然数之和的平方根s,并做为函数值返回。 例如:n为1000时,函数值应为s=153.909064。 注意:部分源程序给出如下。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序: #include #include #include doublefun(intn) { main() { clrscr(); printf("s=%fn",fun(1000)); } 【参考答案】 double fun(int n) { double s=0.0; int i; for(i=0; i /*从0~n中找到既能被3整除同时又能被7整除的数,并将这些数求和*/ if(i%3==0&&i%7==0) s=s+i; s=sqrt(s); /*对s求平方根*/ return s; } 【试题解析】 本题的解题思路是:逐个取得从0~n之间的所有数,对每次取得的数进行条件判断,条件是既能被3整除同时又能被7整除,注意:这两个条件要求同时成立,因此用到了“&&”运算符。满足条件,该数就被累加到s中去,所有符合条件的数找完后,用sqrt()函数对s求平方根。 三、综合应用题 使用VC6打开考生文件夹下的工程kt14_3。此工程包含一个kt14_3.cpp,其中定义了二维坐标类Coordinate和三维坐标类ThreeDCoord,其中ThreeDCoord类由Coordinate类public派生,但两个类的定义并不完整。请按要求完成下列操作,将程序补充完整。 (1)定义类Coordinate的保护数据成员x和y,它们都是int型的数据,代表二维坐标的横纵坐标值。请在注释“//**1**”之后添加适当的语句。 (2)根据类Coordinate定义后的成员函数Display的实现,补充该函数在类Coordinate定义体内的声明,Display为二维坐标类的虚函数。请在注释“//**2**”之后添加适当的语句。 (3)完成二维坐标类Coordinate的构造函数,将参数a和b分别赋值给数据成员x和y。请在注释“//**3**”之后添加适当的语句。 (4)根据ThreeDCoord类构造函数的声明,补充ThreeDCoord构造函数的实现,参数a和b通过调用基类的构造函数来初始化基类的数据成员x和y,c赋值给数据成员z。请在注释“//**4**”之后添加适当的语句。 输出结果如下: [1,2] [3,4,5] 注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。 源程序文件kt14_3.cpp清单如下: #include classCoordinate { protected: //**1** public: Coordinate(inta=0,intb=0); //**2** }; Coordinate::Coordinate(inta,intb) { //**3** } voidCoordinate::Display()const { cout<<'['< classThreeDCoord:publicCoordinate { intz; public: ThreeDCoord(inta=0,intb=0,intc=0); virtualvoidDisplay()const; }; //**4** voidThreeDCoord::Display()const { cout<<'['< voidmain() { Coordinatec(1,2); ThreeDCoordt(3,4,5); c.Display(); t.Display(); } 【参考答案】 (1)protected: int x; int y; (2)virtual void Display() const; (3)x=a; y=b; (4)ThreeDCoord::ThreeDCoord(int a, int b, int c) : Coordinate(a, b) 【试题解析】 本题主要考查对类数据成员的定义、构造函数、派生类及虚函数的理解,是C++类知识的一个综合考核。对虚函数的定义格式及继承类构造函数的定义格式请多加注意。相关阅读