C++试题及答案.docx
- 文档编号:11078435
- 上传时间:2023-02-24
- 格式:DOCX
- 页数:36
- 大小:42.02KB
C++试题及答案.docx
《C++试题及答案.docx》由会员分享,可在线阅读,更多相关《C++试题及答案.docx(36页珍藏版)》请在冰豆网上搜索。
C++试题及答案
C++试卷
一、选择题(每题1分)
1.下面是关于构造函数的说法,不正确的是()。
A.C++规定,每一个类必须有一个构造函数,没有构造函数就不能创建对象
B.如果没有提供一个类的构造函数(一个都未提供),则C++提供一个默认的构造函数,该默认构造函数是个无参构造函数,它仅仅负责创建对象
C.虽然一个类定义了一个构造函数(不一定是无参构造函数),C++仍然提供默认的构造函数
D.与变量定义类似,在用默认构造函数创建对象时,如果创建的是全局对象或静态对象,则对象的位模式全为0,否则,对象值是随机的
2.在下列说法中,不正确的是()。
A.静态成员函数不能利用this指针
B.只有非静态成员才可以使用this关键字,因为静态成员没有this指针
C.析构函数不接受任何参数,也不带有任何类型的返回值
D.虚机制在构造函数和析构函数中仍然可以很好地工作,以实现多态性
3.多重继承的构造顺序一般可分为4步,下面给出这4个步骤:
step1:
任何非虚拟基类的构造函数按照它们被继承的顺序构造。
step2:
任何虚拟基类的构造函数按照它们被继承的顺序构造。
step3:
任何成员对象的构造函数按照它们声明的顺序构造。
step4:
类自己的构造函数。
这4个步骤的正确顺序是()。
A.step4、step3、step1、step2B.step2、step4、step3、step1
C.step2、step1、step3、step4D.step3、step4、step1、step2
4.若程序中有非法操作,则()。
A.eofbit置位B.failbit置位C.badbit置位D.hardbit置位
5.设置填充字符的函数是()。
A.intios:
:
width(int)B.intios:
:
width()C.charios:
:
fill(char)D.charios:
:
fill()
6.返回当前精度的成员函数是()。
A.intios:
:
width(int)B.intios:
:
width()C.intios:
:
precision()D.intios:
:
precision(int)
7.要求浮点输出时必须带有一个小数点的格式控制常量是()。
A.sowbaseB.showposC.showpointD.fixed
8.目前推荐的C++标准()虚构造函数。
A.不支持B.支持C.曾经支持过D.已经由过去的不支持改为支持
9.下列对模板的声明,正确的是()。
A.template
C.template
10.友元运算符obj++被C++编译器解释为()。
A.operator++(obj)B.operator++(obj,0)
B.obj.operator++()D.obj.operator++(0)
11.C++的运算符函数的返回类型()。
A.可以是任意类型B.不可以是int类型
C.不能是void类型D.不可以是float类型
12.声明类test的复制构造函数的正确形式是()。
A.inttestB.voidtestC.test(void)D.test(test&)
13.一个const对象()。
A.能访问所有成员函数B.只能访问const成员函数
C.也能访问volatile成员函数D.能访问const和volatile成员函数
14.下面关于类的对象性质的描述,正确的是()。
A.对象之间不可以相互赋值B.不可以说明指向对象的指针
C.对象不能用作数组元素D.一个对象能用作另一个对象的成员
二、填空题(每题2分)
1.在c++中,除具有、语句的函数不能说明为内联函数外,其它函数都可以说明为内联函数。
2.在c++中,封装可以由、和等关键字提供。
3.若example是已定义的类,在程序结束之前,共计存在个对象。
#include”example”
main()
{exampleX(0);
X=5;X.print();
X=example(10);
X.print();
}
4.由于二义性原因,一个类不能从同一个类中直接一次以上,如果必须这样做,可以使用一个。
5.在c++中,如果在多条继承路径有一个公共的基类,如果想使这个公共的基类只产生一个拷贝,则可以将这个基类说明为。
使用关键字说明。
6.简单成员函数是指声明中不含有、、关键字的函数。
7.静态成员为该类的所有共享,它们被存储于一个中。
8.在c++中声明和时使用volatile或const均是非法的。
9.当访问私有静态数据成员时,可通过定义公有的来访问。
10.有关继承,静态成员被继承,友元被继承。
11.c++不允许重载、、、运算符。
12.、、、四个运算符只能用类运算符来重载。
13.c++提供两种格式控制方式,一种是,另一种是。
14.如果Empty是从某个其它类派生出来的,而且这个其它类又有一个析构函数,c++也将为Empty写一个。
15.当一个基类定义了赋值或初始化语义,而其派生类却未定义赋值或初始化语义时,c++编译器为该派生类自动生成一个或函数。
16.如果程序员定义classEmpty{};,下列各语句将产生的函数名称是:
a. constEmptye1;//
b. Emptye2=e1;//
c. e2=e1;//
d. Empty*pe2=&e2;//
e. constEmpty*pe1=&e1;//
三、改错题(每题7分)
1.仔细阅读下面的程序,找出类定义中的错误及其理由,并以尽量少的改动使其能够正确编译运行并给出运行结果。
#include
classtest{
intm;
intGet(){returnm;}
public:
statictest(inti){m=i;}
voidSet(inti){m=i;}
voidShow(){cout< ~test(){cout< }; voidmain() { testa(25); a.Show(); a.Set(45); a.Show(); testc; c.Set(55); c.Show(); } 2.仔细阅读下面的程序,改正其中的错误并给出运行结果。 #include #include main() { ifstreamout("myfile2"); if(! out){ cout<<"can'topenmyfile2."< return1; } charstr[]="Howareyou? "; char*p=str; while(*p) {out.put(*p);} out.close(); ofstreamin("myfile2"); if(! in){ cout<<"can'topenmyfile2."< return1; } charch; while(! in){ in.get(ch); cout< } in.close(); return0; } 四、程序分析(每题10分) 1.分析下面的程序,写出输出结果。 #include #include classbase{ public: virtualchar*fun(void)const=0; }; char*base: : fun(void)const {return"base";} classderived1: virtualpublicbase{ public: char*fun(void)const{ return"derived1"; } }; classderived2: virtualpublicbase{ public: char*fun(void)const{ return"derived2"; } }; classsubderived: publicderived1,publicderived2{ public: char*fun(void)const{ char*pch; pch=newchar[strlen(derived1: : fun())+strlen(derived2: : fun())+1]; strcpy(pch,derived1: : fun()); strcat(pch,derived2: : fun()); returnpch; } }; voidmain(void){ base*pb; pb=newderived1; cout< pb=newderived2; cout< pb=newsubderived; cout< } 2.阅读程序,给出正确的输出结果。 #include classbase{ public: virtualintfun(void)const{ cout<<"base: : fun"< return10; } }; classdivide: publicbase{ public: intfun(void)const{ cout<<"divide: : fun"< return20; } }; voidmain(void){ divided; base*b1=&d; base&b2=d; baseb3; b1->fun(); b2.fun(); b3.fun(); } 五、完成程序(每题10分) 1.1.根据已有程序和输出结果完成下面的程序。 #include #include classPoint { private: _______ protected: _______ public: Point(floata,floatb,floatc){__________} floatGetx(){returnX;} floatGety(){returnY;} floatGetz(){returnZ;} }; classLine: _______Point { private: floatm; public: Line(floata,floatb,floatc,floatd)_______ {_________} voidshow() { cout< cout< cout< cout< cout< cout< } }; voidmain() { LineA(4.5,6.5,8.5,9.5); A.show(); } 程序输出结果为: 4.5 6.5 6.5 8.5 8.5 9.5 4.5 2.仔细阅读下面的程序,在下划线处填上正确的内容,然后给出正确的输出结果。 #include classbase{ inti; intj; public: base(void): i(0),j(0){} base(intI,intJ): {} intgetI(void)const{ returni; } intgetJ(void)const{ returnj; } virtualvoiddisplay(void)const{ cout<<"i="< } virtual~base(void){ display(); } }; classderived: publicbase{ intk; public: derived(void): {} derived(intI,intJ,intK): base(I,J),k(K){} voiddisplay(void)const{ cout<<"i+k="< : getI()+k<<"\t"<<"j+k="< : getJ()+k< } ~derived(void){ display(); } }; voidmain(void){ derivedd1; d1.display(); derivedd2(10,20,5); d2.display(); } 返回 计算机与信息工程学院2004-2005第二学期 《C++试卷》(B)04软件 一、单选题(每小题1分,共15分) 1、C++源程序文件的扩展名为( ) A、.CPP B、.C C、.DLL D、.EXE 2、编译程序的功能是( ) A、将汇编语言程序转换为目标程序 B、将汇编语言程序转换为高级语言程序 C、将高级语言程序转换为目标程序 D、将高级语言程序转换为汇编语言程序 3、下面的函数声明中,哪一个是”voidBC(inta,intb);”的重载函数? ( ) A、int BC(inta,intb) B、voidBC(inta,charb) C、floatBC(inta,intb,intc=0) D、voidBC(inta,intb=0) 4.如果a=1,b=2,c=3,d=4,则条件表达式“a>b? a: c c: d”的值为( ) A.3 B.2 C.1 D.4 5.在inta[][3]={{1},{3,2},{4,5,6},{0}}中,a[2][2]的值是( ) A.3 B。 2 C。 6 D。 4 6. 已知charc;char*constpc="asdf",( )是正确的。 A.pc="dfgh" B.*pc=‘b’ C.*pc++=‘y’ D.pc=&c 7.对于int*pa[5]的描述,()是正确的。 A.pa是一个指向数组的指针,所指向的数组是5个int型元素 B.pa是一个指向某数组中的第5个元素的指针,该元素是int型变量 C.pa[5]表示某个数组的第5个元素的值 D.pa是一个具有5个元素的指针数组,每个元素是一个int型指针 8.执行下列语句后的输出结果是( )。 inthot=100; int&rad=hot; hot+=100; cout< A.0; B。 100; C.200; D。 300; 9.下列对结构及其变量定义错误的是: ( ) A.structMyStruct{ B。 structMyStruct{ intnum; intnum; charch; charch; }; }my; MyStruct my; C. struct{ D。 struct{ intnum; intnum; charch; charch; } }; my; struct my; 10.下列关于指针运算的描述错误的是: () A.在一定条件下,两个指针可以相加 B.在一定条件下,两个指针可以进行关系运算 C.在一定条件下,指针可以为空 D.在一定条件下,两个指针可以相互赋值 11.在C++语言中,对函数参数默认值描述正确的是: ( ) A.函数参数的默认值只能设定一个 B.一个函数的参数若有多个,则参数默认值的设定可以不连续 C.函数参数必须设定默认值 D.在设定了参数的默认值后,该参数后面定义的所有参数都必须设定默认值 12.不能作为函数重载判断依据的是: ( ) A.参数个数 B。 参数类型 C。 函数名字 D。 返回类型 13.以下程序的输出结果是: ( ) #include voidprt(int*x,int*y,int*z){ cout<<++*x<<","<<++*y<<","<<*z++< } inta=10,c=20,b=40; voidmain(){ prt(&a,&b,&c); prt(&a,&b,&c); } A.11,42,31 B。 11,41,20 C。 11,21,40 D。 11,41,21 12,21,41 12,42,20 11,21,41 12,42,22 14.以下程序的输出结果是: ( ) #include voidfunc(char**m){ ++m; cout<<*m< } voidmain(){ staticchar*a[]={"morning","afternoon","evening"}; char**p; p=a; func(p); } A.字符o的起始地址 B。 字符a的起始地址 C.字符o D。 afernoon 15.以下程序的输出结果是: ( ) #include int fun(char*s){ char*p=s; while(*p! ='\0') p++; return(p-s); } voidmain(){ cout< } A.0 B。 1 C。 2 D。 3 二、填空题(每小题2分,共20分) 1.设 structstudent {intno;charname[12]; charsex;floatscore[4]; }stu1; 在程序执行时,系统为stu1分配 个字节的内存空间。 2.设有一函数,其代码如下: intpower(x,n) { inti,p; for(p=1,i=1;i<=n;++i) p=p*x; return(p); } 现要求取消变量i,重写该函数如下,请在空白上填上适当内容。 int power(intx,intn) { intp; for(_________;n>0;__________) p=p*x; return(p); }3.函数voidrevstr(char*s)将字符串s逆置。 例如字符串“abcde”,经过逆置后变为“edcba”。 voidrevstr(char*s) {char*p,c; if(s==NULL)return; p= ;/*p指向字符串s的最后一个有效字符*/ while(s /*交换并移动指针*/ C=*S; =*p; =c; } } 4.本程序用古典的Eratosthenes的筛法求从2起到指定范围内的素数。 如果要找出2至10中的素数,开始时筛中有2到10的数,然后取走筛中的最小的数2,宣布它是素数,并把该素数的倍数都取走。 这
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 试题 答案