国家二级(C++)笔试模拟试卷181 (题后含答案及解析)
题型有:1. 选择题 2. 填空题
选择题(每小题2分,共70分)下列各题A、B、C、D四个选项中,只有一个选项是正确的,请将正确选项涂写在答题卡相应位置上。
1. 下列数据结构中,属于非线性结构的是 A.循环队列 B.循环队列 C.二叉树 D.带链栈
正确答案:C 解析:根据数据结构中各数据元素之间前后关系的复杂程度,一般将数据结构分为两大类型:线性结构与非线性结构。线性结构表示数据元素之间为一对一的关系,非线性结构表示数据元素之间为一对多或者多对一的关系。根据各种结构的定义可知,二叉树是一种非线性结构。
2. 下列数据结构中,能够按照“先进后出”原则存取数据的是 A.循环队列 B.栈 C.队列 D.二叉树
正确答案:B
解析:栈是限定只在一端进行插入与删除的线性表。通常称插入、删除的这一端为栈顶,另一端为栈底。栈顶元素总是最后被插入的元素,也是最先被删除的元素;栈底元素总是最先被插入的元素,也是最后才能被删除的元素。栈是按照“先进后出”或“后进先出”的原则组织数据的。
3. 对于循环队列,下列叙述中正确的是 A.队头指针是固定不变的 B.队头指针一定大于队尾指针 C.队头指针一定小于队尾指针
D.队头指针可以大于队尾指针,也可以小于队尾指针
正确答案:D 解析:循环队列是将顺序队列首尾相连形成的,随着插入元素或删除元素的进行,其队头指针及队尾指针是在不断变化的,有时可能会出现队头指针大于队尾指针的情况,也可能是队尾指针大于队头指针,故答案为D。
4. 算法的空间复杂度是指
A.算法在执行过程中所需要的计算机存储空间 B.算法所处理的数据量
C.算法程序中的语句或命令条数
D.算法在执行过程中所需要的临时工作单元数
正确答案:A
解析:算法在执行过程中所需要的临时工作单元数
5. 软件设计中划分模块的一个准则是 A.低内聚低耦合 B.高内聚低耦合 C.高内聚低耦合 D.高内聚高耦合
正确答案:B
解析:模块划分应考虑的因素包括模块之间的耦合和内聚。一般来说,要求模块之间的耦合尽可能低,即模块尽可能;要求模块的内聚程度尽可能高,即遵循高内聚、低耦合的原则。
6. 下列选项中不属于结构化程序设计原则的是 A.可封装 B.自顶向下 C.模块化 D.逐步求精
正确答案:A
解析:模块化、自顶向下和逐步求精都是结构化程序设计的原则;可封装是面向对象程序设计原则。
7. 数据库管理系统是 A.操作系统的一部分
B.在操作系统支持下的系统软件 C.一种编译系统 D.一种操作系统
正确答案:B 解析:数据库管理系统是指位于用户与操作系统之间的数据管理软件。数据库管理系统是为数据库建立、使用和维护而配置的软件。
8. 在E-R图中,用来表示实体联系的图形是 A.椭圆形 B.矩形 C.矩形
D.三角形
正确答案:C
解析:E-R图中用矩形表示实体(等同于表),用椭圆形表示实体的属性(等同于表中的字段),用菱形表示实体关系(等同于外键)。
9. E-R图中用矩形表示实体(等同于表),用椭圆形表示实体的属性(等同于表中的字段),用菱形表示实体关系(等同于外键)。
A.FA必须定义在FB之前 B.FB必须定义在FA之前
C.若FA定义在FB之后,则FA的原型必须出现在FB的定义之前 D.若FA定义在FB之后,则FA的原型必须出现在FB的定义之前
正确答案:D
解析:一个函数A要调用另外一个函数B,则B的函数原型声明一定要在A之前,但定义在前或者后都没有关系。
10. 有如下两个类的定义: class AA{}; class BB{ AA vl,*v2; BB v3: int*v4: }; 其中有一个成员变量的定义是错误的,这个变量是
A.v1 B.v2 C.v3 D.v4
正确答案:C
解析:在本类的数据成员定义中,不能定义本类的对象,否则就出现了递归定义,这是不允许的。
11. 有如下类定义: class XX{ int xdata: public: xx(int n=0):xdata(n){} } class YY:public XX{ int ydata; public: YY(int m=0,int n=0):xx(m),ydata(n){ } {; YY类的对象包含的数据成员的个数是
A.1 B.2 C.3 D.4
正确答案:B
解析:派生类继承基类,继承了基类的数据成员和成员函数,加上派生类自己新定义的数据成员,所以该类应该有2个数据成员。
12. 下列关于运算符函数的叙述中,错误的是 A.运算符函数的名称总是以operator为前缀
B.运算符函数的参数可以是对象 C.运算符函数的参数可以是对象
D.在表达式中使用重载的运算符相当于调用运算符重载函数
正确答案:C
解析:运算符函数可以重载为成员函数,也可以重载为非成员函数,如重载为友元函数。
13. 下列关于模板形参的描述中,错误的是 A.模板形参表必须在关键字template之后 B.模板形参表必须在关键字template之后 C.可以用class修饰模板形参
D.可以用typename修饰模板形参
正确答案:B
解析:对函数模板,模板的一般格式为: template<tyname类型参数>函数类型函数名(形参){函数体} 对类模板,一般格式为: template<class类型参数>class类名{……},类型参数是用一对<>括起来。
14. 在下列枚举符号中,用来表示“相对于当前位置”文件定位方式的是 A.ios_base::CHr B.ios_base::beg C.ios_base::out D.ios_base::end
正确答案:A
解析:ios_base::cur表示相对当前位置需要计算的文件字节数偏移量,ios_base::beg表示从文件头位置开始计算的文件字节数偏移量,ios_base::end表示从文件末尾位置开始计算的文件字节数偏移量。
15. 下列字符串中可以用作C++标识符的是 A.2009var B.goto
C.test-2009 D.-123
正确答案:D
解析:在C++中,变量标识符必须以大小写字母或下画线开始,是由数字或者字母下画线等组成的一个字符串,其中C++关键字不能作为标识符,不能包含-、+、*、/等运算符号。C++变量区分大小写。
16. 在下列枚举类型的定义中,包含枚举值3的是 A.entire test(RED,YELLOW,BLUE,BLACK); B.entire test(RED,YELLOW,BLUE,BLACK);
C.enum test(RED=-1,YELLOW,BLUE,BLACK); D.enum test(RED,YELLOW=6,BLUE,BLACK);
正确答案:A 解析:枚举变量中的枚举元素系统是按照常量来处理的,如果没有进行元素赋值操作,那么元素将会被系统自动从0开始自动递增地进行赋值操作,但是,如果一旦定义了某一个元素,那么系统将对下一个元素进行前一个元素的值加1操作。
17. 有如下程序段: int i=1; while(1){ i++; if(i==10)break; if(i%2==0)eout<<’$’; } 执行这个程序段输出字符*的个数为
A.10 B.3 C.4 D.5
正确答案:C
解析:相当于统计1~10之间的偶数个数,遇到偶数打印“*”,故打印*的个数为4。
18. 已知数组arr的定义如下: int arr[5]={1,2,3,4,5}; 下列语句中,输出结果不是2的是
A.cout<<*arr+1<<endl; B.tout<<*(arr+1)<<endl; C.cout<<arr[1]<<endl; D.eout<<%arr<<endl;
正确答案:D
19. 计算斐波那契数列第n项的函数定义如下: int fib(int n){ if(n==0)return 1; else if(n==1)return 2; else return fib(n-1)+fib(n-2); } 若执行函数调用表达式fih(2),函数fih被调用的次数是
A.1 B.2 C.3 D.4
正确答案:C
20. Sample是一个类,执行下列语句后,调用Sample类的构造函数的次数是Sample a[2],*P=Flew Sample;
A.0 B.1
C.2 D.3
正确答案:D
21. 下列关于虚基类的叙述中,错误的是
A.使用虚基类可以消除由多继承产生的二义性
B.构造派生类对象时,虚基类的构造函数只被调用一次 C.声明“class B:virtual public A”说明类B为虚基类 D.建立派生类对象时,首先调用虚基类的函数
正确答案:C 解析:使用虚基类的目的就是为了解决多继承路径下对基类成员的访问的二义性问题。一旦继承虚基类,那么在构造派生类对象时,虚基类构造函数就只调用一次。派生类对象调用构造函数和普通类对象一样,都是先调用基类构造函数,然后调用派生类构造函数。
22. 将运算符重载为类成员函数时,其参数表中没有参数,说明该运算符是
A.不合法的运算符 B.一元运算符
C.无操作数的运算符 D.二元运算符
正确答案:B
解析:当运算符重载为成员函数时,如果函数参数表中没有参数,则表明该重载为单目运算符,操作数就为该对象本身;如果函数参数表中有一个参数,则表示该重载为双目运算符,另外一个操作数为该对象本身。
23. 有如下模板声明: template<typename T1,typename T2>class A; 下列声明中,与上述声明不等价的是
A.template<class T1,class T2>class A; B.template<class T1,typename T2>class A; C.template<typename T1,class T2>class A; D.template<typename T1,T2>class A;
正确答案:D
解析:在模板定义中,一般情况下,class和typename可以互换。在选项D中,T2没有类型参数定义,所以和题干给出的定义不同。
24. 下列关于C++流的叙述中,错误的是 A.cout>>’A’表达式可以输出字符A B.eof( )函数可以检测是否到达文件尾
C.对磁盘文件进行流操作时,必须包含头文件fstream
D.以ios_base::out模式打开的文件不存在时,将自动建立一个新文件
正确答案:A
解析:COHt流对象后面跟的应该是插入运算符“<<”而不是提取运算符“>>”,故选项A错。
25. 有如下程序: #include<iostream> using namespace std; class Toy{ public: Toy(char*_n){strcpy(name,_n);count++;} ~Toy( ){count--;} char*GetName( ){return name;} static int getCount( ){return count;} private: char name[10]; static int count; }; int Toy::count=0: int main( ){ Toy tl(“Snoopy”),t2(“Mickey”),t3(“Barbie”); cout<<t1.getCount( )<<endl; return 0; } 程序的输出结果是
A.1 B.2 C.3
D.运行时出错
正确答案:C 解析:静态数据成员是同一个类的不同对象之间的数据共享,无论创建多少个类,均只有一个静态数据成员,通过对静态数据成员的调用,实现了数据共享。本题创建了3个Toy对象,所以调用3次构造函数,count被增加3次,故sount=3。
26. 有如下程序: #include<iostream> using namespaee std; class A{ public: A(int i):rl(i){ } void print( ){cout<<’E’<<rl<<’-’;} void print( )const}cout<<’C’<<rl*rl<<’-’;} private: int rl; }; int main( ){ A al(2);eonst A a2(4); a1.print( );a2.print( ); return 0; } 程序的输出结果是
A.运行时出错 B.E2-C16- C.C4-C16- D.E2-E4-
正确答案:B
解析:在类中重载函数的情况下,常对象调用类的常成员函数,非常对象调用类的非常成员函数,故答案为B。
27. 有如下程序: #include<iostream> using namespace std; class Name{ char name[20]; public: Name( ){strepy(name,” “);tout<<’?’;} Name(char*fname){strcpy(name,fname);cout<<’?’;} }; int main( ){ Name name[3]={Name(“张三”),Name(“李四”)}; return 0; } 运行此程序输出符号“?”的个数是
A.0 B.1
C.2 D.3
正确答案:D
解析:Name name[3]定义了一个name对象数组,有3个元素,前2个调用Name(char *fname)构造函数,第三个元素调用Name( )构造函数,故打印3个“?”。
28. 有如下程序: #include<iostreanl> using namespaee std; class AA{ public: AA( ){cout<<’1’;} }; class BB:public AA{ int k; public: BB( ):k(0){eout<<’2’;} BB(int n):k(n){cout<<’3’;} }; int main( ){ BB,b(4),c; return 0; } 程序的输出结果是
A.1312 B.132 C.32 D.1412
正确答案:A 解析:创建派生类对象时,先调用基类构造函数,然后调用派生类构造函数,b(4)先调用基类构造函数,然后调用BB的带参数构造函数,打印1和3;c调用基类AA的构造函数,然后调用BB的构造函数,打印1和2。故答案为A。
29. 有如下程序: #include<iostream> using namespace std; class C1{ public: ~Cl( ){cout<<1;} }; class C2:public C1{ public: ~C2( ){cout<<2;} }; int main( ){ C2 cb2; C1*cb1: return 0; } 程序的输出结果是
A.121 B.21 C.211 D.12
正确答案:B 解析:对象的派生撤销时,先调用派生类析构函数,然后调用基类析构函数,故答案为B。
30. 下列叙述中正确的是
A.栈是“先进先出”的线性表 B.队列是“先进后出”的线性表 C.循环队列是非线性结构
D.有序线性表既可以采用顺序存储结构,也可以采用链式存储结构
正确答案:D
解析:栈是“先进后出”的线性表;队列是“先进先出”的线性表;循环队列是队列的一种顺序存储结构,因此是线性结构;有序线性表既可以采用顺序存
储结构,又可以采用链式存储结构。
31. 支持子程序调用的数据结构是 A.栈 B.树 C.队列 D.二叉树
正确答案:A 解析:栈支持子程序调用。栈是一种只能在一端进行插入或删除操作的线性表。在主程序调用子程序时要首先保存主程序当前的状态,然后转去执行子程序,最终把子程序的执行结果返回到主程序中调用子程序的位置,继续向下执行,这种调用符合栈的特点,因此答案为A。
32. 某二叉树有5个度为2的结点,则该二叉树中的叶子结点数是 A.10 B.8 C.6 D.4
正确答案:C
解析: 对于任何一棵二叉树,其终端结点(叶子结点)数为度为2的结点数+1。所以该二叉树的叶子结点数等于5+1=6。
33. 下列排序方法中,最坏情况下比较次数最少的是 A.冒泡排序 B.简单选择排序 C.直接插入排序 D.堆排序
正确答案:D
34. 软件按功能可分为应用软件、系统软件和支撑软件。下面属于应用软件的是
A.编译程序 B.操作系统
C.教务管理系统 D.汇编程序
正确答案:C
35. 下面叙述中错误的是
A.软件测试的目的是发现错误并改正错误
B.对被调试的程序进行“错误定位”是程序调试的必要步骤
C.程序调试通常也称为Debug
D.软件测试应严格执行测试计划,排除测试的随意性
正确答案:A
解析:软件测试的目的是暴露错误,评价程序的可靠性。软件调试的目的是发现错误的位置并改正错误。软件测试和软件调试不是同一个概念。
36. 耦合性和内聚性是对模块性度量的两个标准。下列叙述中正确的是
A.提高耦合性、降低内聚性有利于提高模块的性 B.降低耦合性、提高内聚性有利于提高模块的性
C.耦合性是指一个模块内部各个元索问彼此结合的紧密程度 D.内聚性是指模块间互相连接的紧密程度
正确答案:B 解析:耦合性是模块问互相连接的紧密程度的度量,内聚性是一个模块内部各个元素间彼此结合的紧密程度的度量。良好的软件设计应尽量做到高内聚、低耦合,即减弱模块之间的耦合性和提高模块内的内聚性,这样有利于提高模块的性。
37. 数据库应用系统中的核心问题是 A.数据库设计 B.数据库系统设计 C.数据库维护
D.数据库管理员培训
正确答案:A
38. 将E-R图转换为关系模式时,实体和联系都可以表示为 A.属性 B. 键 C.关系 D.域
正确答案:C
解析:数据库逻辑设计的主要工作是将E—R图转换成指定RDBMS中的关系模式。从E-R图到关系模式的转换是比较直接的,实体与联系都可以表示成关系,E-R图中属性也可以转换成关系的属性。实体集也可以转换成关系。
39. 对C++编译器区分重载函数无任何意义的信息是 A.参数类型 B.参数个数 C.返回值类型
D.常成员函数关键字const
正确答案:C 解析:若重载函数名相同,则通过参数个数和参数类型的不同来区分该调用哪个重载函数。调用重载函数时,函数返回值类型不在参数匹配检查之列。因此,若两个函数的参数个数和类型都相同,而只有返回值类型不同,则不允许重载。
40. 有如下类定义和变量定义: class A{ public: A( ){data=0;} ~A( ){ } int GetData( )const{return data;} void SetData(int n){data=n;} private: int data; }; const A a; A b; 下列函数调用中错误的是
A.a.GetData( ); B. a.SetData(10); C.b.GetData( ); D.b.SetData(10);
正确答案:B
41. 有如下类定义和变量定义: class Parents{ public: int publicData: private: int privateData; }; class ChildA:public Parents{/类体略*/}; class ChildB:private Parents{/类体略*/}; ChildA a; ChildB b; 下列语句中正确的是
A.cout<<a.publicData<<endl; B.cout<<a.privateData<<endl; C.cout<<b.publieData<<endl; D.eout<<b.privateData<<endl;
正确答案:A
解析:派生类公有继承基类时,可以访问基类中的公有成员和保护成员;派生类私有继承基类时,不能访问基类中的任何成员。
42. 要建立文件流并打开当前目录下的文件file.dat用于输入,下列语句中错误的是
A.ifstream fin=ifstream.open(“file.dat”); B.ifstream*fir=new ifstream(“file.dat”); C.ifstream fin;fin.open(“file.dat”);
D.ifstream*fin=new ifstream( );fin->open(“file.dat”);
正确答案:A
解析:ifstream文件输入流类,进行文件打开的一般格式为:文件流对象,open(文件名,打开方式)也可以用文件流指针代替对象,即 文件流指针->0pen(文件名,打开方式)
43. 如下程序段运行时的输出结果是 int i=4;int J=1; int main( ){ inti=8,j=i; cout<<i<<j<<endl; }
A.44 B.41 C.88 D.81
正确答案:C 解析:在函数体外部定义的变量是全局变量。在主函数内部定义的变量是局部变量。当全局变量和局部变量同名时候,在函数体内,局部变量对全局变量起屏蔽作用,即全局变量在函数体内不起作用。
44. 如下程序的输出结果是 #include<lostream> #include<cstring> using namespace std; class XCD{ char*a; int b; public: XCD(char*aa,int bB) { a=new char[strlen(aA) +1]; strcpy(a,aA) ; b=bb; } char*Geta( ){return a;} int Getb( ){return b;} }; int main( ){ char*pl=“abcd”,*p2=“weirong”: int dl,6,d2=8; XCD x(pl,d1),y(p2,d2); cout<<strlen(x.Geta( ))+y.Getb( )<<endl; return 0; }
A.12 B.16 C.14 D.11
正确答案:A
解析:构造对象x,所以x.a=“abcd”,x.b=6,构造对象y,y.a=“weirong”,y.b=8,所以strlen(x.geta( ))+y.getb( )=12。
45. 有如下程序: #include<iostream> using namespaee std; class Pair{ int m; int n; public: Pair(int i,int j):m(i),n(j){ } boot operator>(pair P)const;//需在类体外给出定义 }; int main( ){ Pair pl(3,4),p2(4,3),p3(4,5); cout<<(pl>p2)<<(p2>p1)<<(p2>p3)<<(p3>p2); retum 0; } 运算符函数operator>的功能是比较两个Pair对象的大小,当左边对象大时,返回true,否则返回false。比较规则是首先比较两对象的m成员,m大者为大;当m相等时比较n,n大者为大。程序输出0101,下列对运算符重载函数的正确定义是
A.bool Pair::operator>(Pair P)eonst B.bool Pair::operator>(Pair P) {if(m!=P.m)return m>p.In;return n>p.n;} {if(m!=P.m)return m>p.m;return n>p.n;}
C.bool Pair::operator>(Pair P)eonst
D.bool Pair::operator>(Pair P) {if(m>p.m)return true;return n>p.n;} {if(Ul>p.m)return true;return n>p.n;}
正确答案:C
填空题(每空2分,共30分)请将每一个空的正确答案写在答题卡上。注
意:以命令关键字填空的必须拼写完整。
46. 数据的逻辑结构在计算机存储空间中的存放形式称为数据的______。
正确答案:模式或逻辑模式或概念模式 47. 如果一个班主任可管理多个班级,而一个班级只被一个班主任管理,则实体“班主任”与实体“班级”之间存在______联系。
正确答案:一对多 解析:实体之间的对应关系称为联系,它反映现实世界事物之间的相互关联。曲个实体间的联系可以归结为j种类型:一对一联系表现为某一实体与另一实体一一对应相关联;一对多联系表现为某一实体与相关多个实体相关联;多对多联系表现为多个实体与相关多个实体相联系。所以实体“班主任”与实体“班级”之间存在一对多联系。
48. 若按功能划分,软件测试的方法可以分为白盒测试方法和______测试方法。
正确答案:黑盒
49. 关系模型的完整性规则是对关系的某种约束条件,包括实体完整性、______和自定义完整性。
正确答案:参照完整性
50. 在关系数据库中,每一个二维表称为______。
正确答案:关系
51. 含有纯虚函数的类称为______。
正确答案:抽象类
52. 假定q所指对象的值为25,q+1所指对象的值为46,则执行”(*q)++;”语句后,q所指对象的值为______。
正确答案:26
53. 类继承中,缺省的继承方式是______。
正确答案:私有继承
54. 有如下程序: #include<iostream> using namespace std; class TestClass{ int k; public: TestClass(int x=1):k(x){} ~TestClass O{cout<<k;} }; int main( ){ TestClass
a[]={TestClass(3),TestClass(3),TestClass(3)}; TestClass *p=new TestClass[2]; delete []p; return ( ): } 这个程序的输出结果是______。
正确答案:11333 解析:定义TestClass型数组a时,将导致TestClass的构造函数被执行三次,每次执行时,其传入参数为3,定义TestClass指针p时,将执行两次默认构造函数,其参数为1,执行”delete []p”时,将执行TestClass的构造函数,输出p[0].k,p[1].k(两者均为1) ,在程序运行结束后,将释放局部变量,从而导致数组a中的三个元素被析构,输出a[0],a[1],a[2]中的值(均为3) 。
55. 执行下列程序后的输出结果是______。 #include<iostream> using namespace std; int main( ) { int x=3; int &y=x; y++; cout<<x<<end1; return 0; }
正确答案:4
56. 定义字符指针char *str=“hello”,已知sizeof(str)=4,则strlen(str)=______。
正确答案:5
57. 有如下程序: #include<iostream> using namespace std; class Base { public: Base ( ){cout<<”Base”;} }; class Derived:public Base { public:Derived( ){cout<<”Derived”;} }; intmain( ) { Derived derived; Base *p; P=& derived; return 0; } 执行上面程序的输出是______。
正确答案:BaseDerived
解析: 创建Derived类型的对象将导致Derived的构造函数被执行,而执行Derived构造函数时,首先要执行其父类的构造函数,所以先输出”Base”,然后输出”Derived”;p是一个指向Base类型的指针,对其赋值不会引起构造函数的执行,所以本题输出为”BaseDerived”。
58. 在TestClass类的定义中,对赋值运算符=进行重载。请将画线处缺失的部分补充完整。______TestClass::operator=(const TestClass& rhs) { if(this==&rhs)return *this; value=rhs.value; return *this; }
正确答案:TestClass&
解析:如果要重载一个类的运算符=,通常需要定义自己特有的拷贝构造函数。在类体中可以增加:(const & operator lestClass & rhs);然后在TestClass的类体外给出它的完整定义: TestClass& TestClass::operator=(const TestClass& rhs)
{…} 所以在TestClass类的定义中缺少了TestClass&语句。
59. 若需要把一个函数”void fun( ):”定义为一个类TestClass的友元函数,则应在类Testclass的定义中加入一条语句:______。
正确答案:friend void fun( );
60. 已知递归函数fun的定义如下: int fun(int n) {if(n<=1) return 1;//递归结束情况else return n *fun(n-2);//递归} 则函数调用语句fun(5) 的返回值是______。
正确答案:15
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- 99spj.com 版权所有 湘ICP备2022005869号-5
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务