计算机类 二级 C++
2014年全国计算机等级《二级C++》上机考试冲刺试题(5) 43 题 含答案 C++
1 单选题 1 / 43
下列有关内联函数的叙述中,正确的是( )。
A 内联函数在调用时发生控制转移 B 内联函数必须通过关键字inline来定义 C 内联函数是通过编译器来实现的 D 内联函数函数体的最后一条语句必须是return语句
查看答案 C. 内联函数是通过编译器来实现的
2 单选题 2 / 43
语句int*P=&k;定义了指针P,与这个语句等效的语句序列是( )。
A int* p;P=&k; B int * P;P=k; C int * p;* P=&k; D int * p;* P=k;
查看答案 A. int* p;P=&k;
3 单选题 3 / 43
有如下程序: #include using namespace std; class A { public: A(){cout<<”A”;} -A(){cout<<”-A”;} }; class B:public A { A*P; public: B(){cout<<”B”;P=new A();} -B(){cout<<”~B”;delete p;} }; int main() { B obj; return 0; } 执行这个程序的输出结果是( )。
A BAA~A~B~A B ABA~B~A~A C BAA~B~A~A D ABA~A~B~A
查看答案 B. ABA~B~A~A
4 单选题 4 / 43
有如下类定义: class AA { im a: public: int getRef()const{return&a;}//① int getValue()const{return a;}//② void set(int n)const{a=n;}//③ friend void show(AA aA.const{cout< }; 其中四个函数的定义中正确的是( )。
A ① B ② C ③ D ④
查看答案 B. ②
5 单选题 5 / 43
若要对Data类中重载的加法运算符成员函数进行声明,下列选项中正确的是( )。
A Data+(DatA.; B Data operator+(DatA.; C Data+operator(DatA.; D operator+(Data,DatA.;
查看答案 B. Data operator+(DatA.;
6 单选题 6 / 43
有如下数组声明:int num[10];,下标值引用错误的是( )。
A num[10] B num[5] C num[3] D hum[o]
查看答案 A. num[10]
7 单选题 7 / 43
将前缀运算符“--”重载为非成员函数,下列原型中能正确用于类中说明的是( )。
A DeCr&operator--(int); B DeCr operator--(DeCr&,int); C friend DeCr&operator--(DeCr&); D friend DeCr operator--(DeCr&,int);
查看答案 D. friend DeCr operator--(DeCr&,int);
8 单选题 8 / 43
如果派生类以proteCted方式继承基类,则原基类的proteCted成员和publiC成员在派生类中的访问属性分别是( )。
A publiC和publiC B publiC和proteCted C proteCted和publiC D proteCted和proteCted
查看答案 D. proteCted和proteCted
9 单选题 9 / 43
在函数中,可以用aut0、extem、register和static这四个关键字中的一个来说明变量的存储类型,如果不说明存储类型,则默认的存储类型是( )。
A auto B extern C register D static
查看答案 A. auto
10 单选题 10 / 43
下列程序的输出结果是( )。 #include int rain(iltl a,int B. { if(a else retum b; retum 0; } void main() { eout<<MIN(1,MIN(2,3))< }
A 0 B 1 C 2 D 3
查看答案 B. 1
11 单选题 11 / 43
在黑盒测试方法中,设计测试用例的主要根据是( )。
A 程序内部逻辑 B 程序外部功能 C 程序数据结构 D 程序流程图
查看答案 B. 程序外部功能
12 单选题 12 / 43
在面向对象方法中,不属于“对象”基本特点的是( )。
A 一致性 B 分类性 C 多态性 D 标识唯一性
查看答案 A. 一致性
13 单选题 13 / 43
有以下程序: #include void fun(int a,int b,int C. { a=456,b=567,c=678;} void main() { int X=10,Y=20,Z=30; fun(X,Y,z); aout<<X<<’,’<<Y<<’,’<<Z< } 输出结果是( )。
A 30,20,10 B 10,20,30 C 456,567,678 D 678,567,456
查看答案 B. 10,20,30
14 单选题 14 / 43
对类的构造函数和析构函数描述正确的是( )。
A 构造函数可以重载,析构函数不能重载 B 构造函数不能重载,析构函数可以重载 C 构造函数可以重载,析构函数也可以重载 D 构造函数不能重载,析构函数也不能重裁
查看答案 A. 构造函数可以重载,析构函数不能重载
15 单选题 15 / 43
通过运算符重载,可以改变运算符原有的( )。
A 操作数类型 B 操作数个数 C 优先级 D 结合性
查看答案 A. 操作数类型
16 单选题 16 / 43
下列关于c++流的描述中,错误的是( )。
A cout>>’A’表达式可输出字符A B eof()函数可以检测是否到达文件尾 C 对磁盘文件进行流操作时,必须包含头文件fstream D 以ios_base::0ut模式打开的文件不存在时,将自动建立一个新文件
查看答案 A. cout>>’A’表达式可输出字符A
17 单选题 17 / 43
耦合性和内聚性是对模块独立性度量的两个标准。下列叙述中正确的是( )。
A 提高耦合性降低内聚性有利于提高模块的独立性 B 降低耦合性提高内聚性有利于提高模块的独立性 C 耦合性是指一个模块内部各个元素间彼此结合的紧密程度 D 内聚性是指模块间互相连接的紧密程度
查看答案 B. 降低耦合性提高内聚性有利于提高模块的独立性
18 单选题 18 / 43
若有如下类声明: Class MyClass{ publiC: MyClass( ){Cout<<1;} }; 执行下列语句 MyClass a,b[2],*p[2]; 程序的输出结果是( )。
A 11 B 111 C 1111 D 11111
查看答案 B. 111
19 单选题 19 / 43
下列函数模板的定义中,合法的是( )。
A templateT abs(T X){return x<07-x:X;} B template ClassT abs(T x){return x<07-X:x;} C template Tabs(T X){return x<07-x:X;} D template T abs(T x){return X<0?-X:x;}
查看答案 A. templateT abs(T X){return x<07-x:X;}
20 单选题 20 / 43
有如下程序: #include using namespace std; class Base{ int x: public: Base(int n=0):x(n){cout<<N;} int getX()const{return x;} }; cjass Derived:public Base{ int Y:. J;;Iublic: Derived(int m,int n):y(m),Base(n){cout<<M;} Derived(int m):Y(m){cout<<M;} }; int main() { Derived dl(3),d2(5,7); retum 0; } 执行这个程序的输出结果是( )。
A 375 B 357 C 0375 D 0557
查看答案 C. 0375
21 单选题 21 / 43
关于在调用模板函数时模板实参的使用,下列表述中正确的是( )。
A 对于虚拟类型参数所对应的模板实参,如果能从模板函数的实参中获得相同的信息,则都可以省略 B 对于虚拟类型参数所对应的模板实参,如果它们是参数表中的最后的若干个参数,则都可以省略 C 对于虚拟类型参数所对应的模板实参,若能够省略则必须省略 D 对于常规参数所对应的模板实参,任何情况下都不能省略
查看答案 D. 对于常规参数所对应的模板实参,任何情况下都不能省略
22 单选题 22 / 43
有如下程序段: int i=0,J=1; int&r=i;//① r=j;//② int*P=&i;//⑧ *P=&r;//④ 其中会产生编译错误的语句是( )。
A ④ B ③ C ② D ①
查看答案 A. ④
23 单选题 23 / 43
有如下程序: #include using namespace std; class Obj{ static int i; public: Obj(){i++;} 一Obj(){i一一;} static int getVal(){return i;} }; int Obj::i=0: void f(){Obj ob2;cout<<OB2.GETVAL();} int main(){ Obj obl; f(); Obj}ob3=new Obj;cout<getVal(); delete ob3;cout< return 0; } 执行这个程序的输出结果是( )。
A 232 B 231 C 222 D 221
查看答案 D. 221
24 单选题 24 / 43
有如下类定义: class MyBase{ int k; public: MyBase(int n=O):k(n)}} int value()eonst{return k;} }; class MyDerived:MyBase{ intj; public: MyDerived(int i):j(i)}} int getK()const{return k;} int getJ()const{return j;} }; 编译时发现有一处语法错误,对这个错误最准确的描述是( )。
A 函数9etK试图访问基类的私有成员变量k B 在类MyDerived的定义中,基类名MyBase前缺少关键字public、protected或private C 类MyDerived缺少一个无参的构造函数 D 类MyDerived的构造函数没有对基类数据成员k进行初始化
查看答案 A. 函数9etK试图访问基类的私有成员变量k
25 单选题 25 / 43
下列关于虚基类的描述,错误的是( )。
A 设置虚基类的目的是为了消除二义性 B 虚基类的构造函数在非虚基类之后调用 C 若同一层中包含多个虚基类,这些虚基类的构造函数按它们说明的次序调用 D 若虚基类由非虚基类派生而来,则仍然先调用基类构造函数,再调用派生类的构造函数
查看答案 B. 虚基类的构造函数在非虚基类之后调用
26 单选题 26 / 43
在长度为n的有序线性表中进行二分查找,最坏情况下需要比较的次数是( )。
A O(n) B O(n2) C O(1092n) D 0(n1092n)
查看答案 C. O(1092n)
27 单选题 27 / 43
在软件开发中,需求分析阶段可以使用的工具是( )。
A N—s图 B DFD图 C PAD图 D 程序流程图
查看答案 B. DFD图
28 单选题 28 / 43
有如下类声明: class Base{ protected: int amount; public: Base(int n=0):amount(n){} int getAmount()const{retum amount;} }; class Derived:public Base{ protected: int value; public: Derived(int m,int n):value(m),Base(n){} int getData()const{return value+amount;} }: 已知x是一个Derived对象,则下列表达式中正确的是( )。
A x.value+X.getAmount() B x.getData()一x.getAmount() C x.getData()一x.amount D x.value+X.amount
查看答案 B. x.getData()一x.getAmount()
29 单选题 29 / 43
有三个关系R、S和T如下:
则由关系R和s得到关系T的操作是( )。
A 自然连接 B 交 C 除 D 并
查看答案 C. 除
30 单选题 30 / 43
下面描述中,不属于软件危机表现的是( )。
A 软件过程不规范 B 软件开发生产率低 C 软件质量难以控制 D 软件成本不断提高
查看答案 A. 软件过程不规范
31 单选题 31 / 43
有如下程序: #inClude using namespaCe std: Class CD{ publiC: ~CD(){Cout<<’C’:} private: Char name[80]; }; int main(){ CD a,*b,d[2]; return 0; 执行这个程序的输出结果是( )。
A CCCC B CCC C CC D C
查看答案 B. CCC
32 单选题 32 / 43
类的析构函数是在( )调用的。
A 类创建时 B 创建对象时 C 删除对象时 D 不自动调用
查看答案 C. 删除对象时
33 单选题 33 / 43
下列关于多态性的描述,错误的是( )。
A c++语言中的多态性分为编译时的多态性和运行时的多态性 B 编译时的多态性可通过函数重载实现 C 运行时的多态性可通过模板和虚函数实现 D 实现运行时多态性的机制称为动态绑定
查看答案 C. 运行时的多态性可通过模板和虚函数实现
34 单选题 34 / 43
下列有关类成员的叙述中,正确的是( )。
A 友元函数是类的成员函数 B 类成员的默认访问权限是私有的 C 类成员函数必须声明为公有的 D 类的静态数据成员不能是常成员
查看答案 B. 类成员的默认访问权限是私有的
35 单选题 35 / 43
有如下程序: #inClude using namespaCe std; ClaSS A{ publiC: A(int i){x=i;} void dispa( ){Cout<<X<<’,’;}&NBSP;&NBSP;&NBSP; int x; }; Class B:publiC A{ publiC: B(int i):A(i+10){x=i;} vold dispb( ){dispa( );Cout<<X<<ENDL;}&NBSP;&NBSP;&NBSP; int x; }; int main( )} B b(2); b.dispb( ); return 0; } 执行这个程序的输出结果是( )。
A 10,2 B 12,10 C 12,2 D 2,2
查看答案 C. 12,2
36 单选题 36 / 43
执行下列语句段后,输出字符“*”的个数是( )。 for(int i=50;i>1;i一=2) tout<<’*’:
A 24 B 25 C 26 D 50
查看答案 B. 25
37 单选题 37 / 43
有如下类定义: Class AA{ int a: PubliC: AA(int n=O):a(n){} }; Class BB:publiC AA{ publiC: BB(int n) }; 其中横线处的缺失部分是( )。
A :a(n){} B :AA(n){} C {a(n);} D {a=n;}
查看答案 B. :AA(n){}
38 单选题 38 / 43
判断char型变量c是否为小写字母的正确表达式是( )。
A ’a’<=c<=’z’ B (c>=A.&&(c<=z) C (’a’>=C.||(’z’<=C. D (c>=’a’)&&(c<=,z,)
查看答案 D. (c>=’a’)&&(c<=,z,)
39 单选题 39 / 43
决定c++语言中函数的返回值类型的是( )。
A return语句中的表达式类型 B 调用该函数时系统随机产生的类型 C 调用该函数时的主调用函数类型 D 在定义该函数时所指定的数据类型
查看答案 D. 在定义该函数时所指定的数据类型
40 单选题 40 / 43
设int a=1,b=2;,则(a++)+b和a+++b这两个表达式的值分别为( )。
A 3,3 B 3,4 C 4,3 D 4,4
查看答案 A. 3,3
41 主观题 41 / 43
请使用VC6或使用【答题】菜单打开考生文件夹projl下的工程projl。程序中位于每个“//ERROR****found料****之后的一行语句有错误,请加以改正。改正后程序的输出结果应为: Name:Smith Age:21 ID:99999 CourseNum:12 Record:970 注意:只修改每个“//ERROR****found****”下的那一行,不要改动程序中的其他内容。 #include using namespace std; class Studentlnfo { protected: //ERROR********************found**************** char Name; int Age; int ID: int CourseNum; float Record; public: Studentlnfo(char*name,int Age,int ID,int coumeNum,float record); //ERROR ********************found******************** void~Studentlnfo(){} float AverageRecord(){ return Record/CourseNum; } void show()const{ cout<<”Name:”<<NAME<<”AGE:”<<AGE<<”ID:”<<ID <<”CourseNum:”<<COURSENUM<<”RECORD:”<<RECORD< } }; //ERROR ******************found************** StudentInfo StudentInfo(char*Name,int Age,int ID,int CourseNum,float Record) { Name=name; Age=age; this一>ID=ID: CourseNum=courseNum: Record=record; } int main() { Studentlnfo st(’’Smith”,21,99999,12,970); st.show(); return 0; }
查看答案 (1)ChAr*NAmE; (2)~StuDEntlnFo(){} (3)StuDEntlnF0::StuDEntlnFo(ChAr*nAmE,int AGE,,int ID,int EoursENum,FloAt rECorD)
42 主观题 42 / 43
请使用VC6或使用【答题】菜单打开考生文件夹proj2下的工程proj2,其中定义了vehiele类,并派生出motorcar类和bicycle类。然后以motorcar和bicycle作为基类,再派生出motorcycle类。要求将Vehicle作为虚基类,避免二义性问题。请在程序中的横线处填写适当的代码并删除横线,以实现上述类定义。此程序的正确输出结果应为: 80 150 100 1 注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“//****found****”。 #include class vehicle { private: int MaxSpeed; int Weight; public: //*************found************ vehicle(int maxspeed,int weight):—— ~vehicle(){}; int getMaxSpeed(){return MaxSpeed;} int getWeight(){retum Weight;} }; //****************found************ class bicycle:——public vehicle { private: int Height; public: bicycle(int maxspeed,int weight,int height):vehicle(maxspeed,weight),Height(height){} int getHeight(){retum Height;}; }; //*******************found************** class motorcar:——public vehicle { private: int SeatNum; public: motorcar(int maxspeed。int weight,int seatnum):vehicle(maxspeed,weight),SeatNum(seatnum){} int getSeatNum(){return SeatNum;}; }; //*****************found*************** class motorcycle:—— { public: motorcycle(int maxspeed,int weight,int height):vehicle(maxspeed,weight),bicycle(maxspeed,weight, height),motorcar(maxspeed,weight,1){} }; void main() { motorcycle a(80,150,100); cout<<A.GETMAXSPEED()< cout<<A.GETWEIGHT()< cout<<A.GETHEIGHT()< cout<<A.GETSEATNUM()< }
查看答案 (1)MAxSpEED(mAxspEED),WEiGht(wEiGht){F; (2)virtuAl (3)virtuA1 (4)puBliC BiCyClE,puBliC motorCAr
43 主观题 43 / 43
请使用VC6或使用【答题】菜单打开考生文件夹proj3下的工程文件proj3。本题创建一个小型字符串类,字符串长度不超过l00。程序文件包括pmj3.h、proj3.cpp、writeToFile.obj。补充完成重载赋值运算符函数,完成深复制功能。 屏幕上输出的正确结果应该是: Hello! Happy new year! 补充编制的内容写在“//**********333**********”与“//**********666**********”两行之间。 不得修改程序的其他部分。 注意: 程序最后调用writeToFil。函数,使用另一组不同的测试数据,将不同的运行结果输出到文件0ut?dat中。 输出函数writeToFile已经编译为obj文件。 //proj3.h #include #include using namespace std; class MiniString { pubhc: friend。8tream&operator<<(oatream&output,const MiniString&s)//重载流插入运算符 { output< friend istream&operator>>(istream&input,MiniString&8)//重载流提取运算符 { char temp[100];//用于输入的临时数组 temp[0]=’\0’://初始为空字符串 input>>setw(100)>>temp; int inLen=strlen(temp);//输入字符串长度 if(inLen!=0) } s.1ength=inLen;//赋长度 if(s.sPtr!=0)delete[]s.sPtr;//避免内存泄漏 s.sPtr=Hew char[s.1ength+1]; strcpy(s.sPtr,temp);//如果8不是空指针,则复制内容 } else s.sPtr[0]=’\0’;//如果s是空指针,则为空字符串 retum input; } void modString(const char}string2)//更改字符串内容 { if(strin92 1=0)//如果strin92不是空指针,则复制内容 { if(strlen(strin92)!=length) { length=strlen(strin92); delete[]sPtr; sPtr=new char[1ength+1];//分配内存 } strcpy(sPtr,strin92); } else sPtr[0]=’\0’;//如果string2是空指针,则为空字符串 } MiniString&operator=f const MiniString&otherString); MiniString(corot char*s=""):lengtll((s!=0)?strlen(s):0)//构造函数 { sPtT=0: if(1ength[=0) setString(S); } ~MiniString()//析构函数 {delete[]sPtr;} private: int length;//字符串长度 char*sPtr;//指向字符串起始位置 void setString(const char*string2)//辅助函数 { sPtr=Dew char[str|en(string2)+1];//分配内存 if(stnIl92!=0)strcpy(sPtr,string2);//如果string2不是空指针,则复制内容 else slur[0]='\0';//如果string2是空指针,则为空字符串 } }; //pwj3.cpp #'include #include using namespace std; #include”proj3.h” MiniString&MiniStrin9::0perator=(const MiniString&otherString) {//重载赋值运算符函数。提示:可以调用辅助函数setString //*************333********** //*************666********** } int main() { MiniSu'ing strl(”Heuo!”),str2; void writeToFile(const char*); sir2=strl;//使用重载的赋值运算符 str2.modString("Happy new year!"); cout<<STRL<<'\N': cout<<STR2<<'\N': writeToFile(""); return 0; }
查看答案 lEnGth=othErStrinG.1EnGth; //把对象字符串0thErStrinG的长度赋值给变量lEnGth sEtStrinG(othErStrinG.sPtr); //调用函数sEtstrinG,实现给类变量sptr分配空间,以及逐个把对象0thErstrinG字符串的值复制到sptr中 rEturn}this: //返回被赋值的对象