c练习题带答案.docx
- 文档编号:26210475
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:29
- 大小:26.88KB
c练习题带答案.docx
《c练习题带答案.docx》由会员分享,可在线阅读,更多相关《c练习题带答案.docx(29页珍藏版)》请在冰豆网上搜索。
c练习题带答案
集团标准化工作小组#Q8QGGQT-GX8G08Q8-GNQGJ8-MHHGN#
c练习题带答案
一、选择题
1.C++语言属于(C)。
A)自然语言B)机器语言C)面向对象语言D)汇编语言
2.下面选项中不属于面向对象程序设计特征的是(C)。
A)继承性B)多态性C)相似性D)封装性
3.可用作C++语言用户标识符的一组标识符是(B)。
A)voiddefine+WORDB)a3_b3_123YN
C)for-abcCaseD)2aDOsizeof
4.假定一个二维数组的定义语句为“inta[3][4]={{3,4},{2,8,6}};”,则元素a[2][1]的值为(A)。
A)0B)4C)8D)6
5.下列情况中,哪一种情况不会调用拷贝构造函数(B)
A)用派生类的对象去初始化基类对象时
B)将类的一个对象赋值给该类的另一个对象时
C)函数的形参是类的对象,调用函数进行形参和实参结合时
D)函数的返回值是类的对象,函数执行返回调用者时
6.以下哪一关键字可用于重载函数的区分(C)
A)externB)staticC)constD)virtual
7.下列有关数组的叙述中,正确的是(B)
A)C++中数组的存储方式为列优先存储
B)数组名可以作为实参赋值给指针类型的形参
C)数组下标索引从1开始,至数组长度n结束
D)数组指针的语法形式为:
类型名*数组名[下标表达式];
8.下列有关继承和派生的叙述中,正确的是(C)
A)派生类不能访问通过私有继承的基类的保护成员
B)多继承的虚基类不能够实例化
C)如果基类没有默认构造函数,派生类就应当声明带形参的构造函数
D)基类的析构函数和虚函数都不能够被继承,需要在派生类中重新实现
9.实现运行时多态的机制是(A)
A)虚函数B)重载函数C)静态函数D)模版函数
10.若有下面的函数调用:
fun(a+b,3,max(n-1,b));
其中实参的个数是(A)
A)3B)4C)5D)6
11.下列关于this指针的说法正确的是(B)
A)this指针存在于每个函数之中
B)在类的非静态函数中this指针指向调用该函数的对象
C)this指针是指向虚函数表的指针
D)this指针是指向类的函数成员的指针
12.在下列关于C++函数的叙述中,正确的是(C)
A)每个函数至少要有一个参数B)每个函数都必须返回一个值
C)函数在被调用之前必须先声明D)函数不能自己调用自己
13.下列运算符中,不能重载的是(C)
A)&&B)!
=C).D)->
14.下面程序的输出结果是(B)
#include
usingnamespacestd;
inti=0;
intfun(intn)
{
staticinta=2;
a++;
returna+n;
}
voidmain()
{
intk=5;
{
inti=2;
k+=fun(i);
}
k+=fun(i);
cout< } A)13B)14C)15D)16 15.下面的程序段的运行结果为(D) charstr[]="job",*p=str; cout<<*(p+2)< A)98B)无输出结果C)字符’b’的地址D)字符’b’ 16.下面程序的输出结果是(C) #include usingnamespacestd; classA { public: A(inti){x=i;} voiddispa(){cout< private: intx; }; classB: publicA { public: B(inti): A(i+10){x=i;} voiddispb(){dispa();cout< private: intx; }; voidmain() { Bb (2); (); } A)10,2B)12,10C)12,2D)2,2 17.下面程序的输出结果是(C) #include usingnamespacestd; classBase { public: Base(inti){cout< ~Base(){} }; classBase1: virtualpublicBase { public: Base1(inti,intj=0): Base(j){cout< ~Base1(){} }; classBase2: virtualpublicBase { public: Base2(inti,intj=0): Base(j){cout< ~Base2(){} }; classDerived: publicBase2,publicBase1 { public: Derived(inta,intb,intc,intd): mem1(a),mem2(b),Base1(c), Base2(d),Base(a) {cout< private: Base2mem2; Base1mem1; }; voidmain(){DerivedobjD(1,2,3,4);} A)134122B)123412D)143212 18.下面程序的输出结果是(C) #include usingnamespacestd; classBase { public: virtualvoidf(){cout<<“f0+”;} voidg(){cout<<“g0+”;} }; classDerived: publicBase { public: voidf(){cout<<“f+”;} voidg(){cout<<“g+”;} }; voidmain(){Derivedd;Base*p=&d;p->f();p->g();} A)f+g+B)f0+g+C)f+g0+D)f0+g0+ 19.下面程序的输出结果是(C) #include usingnamespacestd; classSample { friendlongfun(Samples) { if<2)return1; return*fun(Sample); } public: Sample(longa){x=a;} private: longx; }; voidmain() { intsum=0; for(inti=0;i<4;i++) { sum+=fun(Sample(i)); } cout< }A)12B)16C)10D)34 20.以下程序的输出结果是: (D) #include usingnamespacestd; intfun(char*s) {char*p=s; while(*p! ='\0')p++; return(p-s); } voidmain(){ cout< } A.0B.1C.2D.3 21.有如下程序段: inti=1; while (1) { i++; if(i==10)break; if(i%2==0)cout<<’*’; } 执行这个程序段输出字符*的个数是(C) A.10B.3C.4 22.下列关于虚基类的描述中,错误的是(C) A.使用虚基类可以消除由多继承产生的二义性 B.构造派生类对象时,虚基类的构造函数只被调用一次 C.声明classB: virtualpublicA说明类B为虚基类 D.建立派生类对象时,首先调用虚基类的构造函数 23.有下类定义 ClassA{ Char*a; Public: A(): a(0){} A(char*aa){newchar[strlen(aa)+1]B.char[strlen(aa)+1] C.char[strlen(aa)]D.newchar[sizeof(aa)-1] 24.假定AA为一个类,a为该类私有的数据成员,GetValue()为该类公有函数成员,它返回a的值,x为该类的一个对象,则访问x对象中数据成员a的格式为(X)。 A)B)()C)x->GetValue()D)() 25.假定AA为一个类,inta()为该类的一个成员函数,若该成员函数在类定义体外定义,则函数头为(A)。 A)intAA: : a()B)intAA: a() C)AA: : a()D)AA: : inta() 26.有如下程序: #include usingnamespacestd; classTest{ public: Test(){} ~Test(){cout<<'#';} }; intmain(){ Testtemp[2],*pTemp[2]; return0; } 执行这个程序输出星号(#)的个数为(B)。 A)1B)2C)3D)4 27.有如下程序: #include usingnamespacestd; classMyClass{ public: MyClass(inti=0){cout<<1;} MyClass(constMyClass&x){cout<<2;} MyClass&operator=(constMyClass&x){cout<<3;return*this;} ~MyClass(){cout<<4;} }; intmain(){ MyClassobj1 (1),obj2 (2),obj3(obj1); obj1=obj2; return0; }运行时的输出结果是(A)。 A)1123444B) 28.有如下程序: #include usingnamespacestd; classpoint { public: staticintnumber; public: point(){number++;} ~point(){number--;} }; intpoint: : number=0; voidmain() {point*ptr; pointA,B; { point*ptr_point=newpoint[3]; ptr=ptr_point; } pointC; delete[]ptr; cout< : number; } 程序结果为(A) A)3B)4C)6D)7 29.友元运算符obj++被C++编译器解释为(D)。 A.operator++(obj)B.operator++(obj,0) B.++()D.++(0) 二、程序填空 1.用递归法求从1到n的立方和: f (1)=1(n=1) f(n)=f(n-1)+n3(n>1) #include usingnamespacestd; intf(int); intmain(){ intn,s; cout<<"inputthenumbern: "; cin>>n; s=f(n); cout<<"Theresultis"< return0; } intf(intn){请将下列程序补充完整,使得输出结果为“DestructorDerivedDestructorBase”。 #include usingnamespacestd; classBase { public: virtual~Base(){cout<<“DestructorBase”< }; classDerived: publicBase { public: ~Derived(){cout<<“DestructorDerived”< }; voidmain() { Base*pBase=newDerived; deletepBase; } 三、阅读程序,写出运行结果 1. #include #include usingnamespacestd; classCD { charname[20]; intnumber; public: voidInit(char*aa,intbb) { strcpy(name,aa); number=bb; } char*Getname(){returnname;} intGetnumber(){returnnumber;} voidOutput(){cout< }; CDdx; voidmain() { CDdy; ("歌唱祖国",30); ("义勇军进行曲",3*()+5); (); (); } 歌唱祖国30 义勇军进行曲95 2.#include usingnamespacestd; intf(inta){ return++a; } intg(int&a){ return++a; } voidmain(){ intm=0,n=0; m+=f(g(m)); n+=f(f(n)); cout<<"m="< cout<<"n="< } 3.#include usingnamespacestd; classDemo { public: Demo(){cout<<"defaultconstructor\n";} Demo(constDemo&x){cout<<"copyconstructor\n";} }; DemouserCode(Demob){Democ(b);returnc;} voidmain() { Demoa,d; cout<<"callinguserCode()\n"; d=userCode(a); } 执行上面的程序的过程中,构造函数Demo()和Demo(constDemo&x)被调用的次数分别是多少次 五、编写程序 1、编写函数计算y=1! +2! +3! ...n! ,n作为参数传递,在主函数调用该函数并输出结果。 2、编写函数找出二维数组(5*4)中元素的最大值与最小值,并返回其最大值与最小值。 测试结果。 3、编写一个三角形类,有计算面积,显示面积的功能等,并测试。 要求有参数的构造函数及复制构造函数 ^^下面关于类概念的描述中,(D)是错误的。 A)类是抽象数据类型的实现B)类是具有共同行为的若干对象的统一描述体 C)类是创建对象的样板D)类就是C语言中的结构体类型 ^^D ^^面向对象程序设计思想的主要特征中不包括(D)。 A)封装性B)多态性C)继承性D)功能分解,逐步求精 ^^D ~~01|11|1|1 ^^在C++中,函数原型不能标识()。 A)函数的返回类型B)函数参数的个数C)函数参数类型D)函数的功能 ^^D ~~01|11|1|1 ^^有关析构函数的说法不正确的是()。 A)析构函数有且仅有一个B)析构函数和构造函数一样可以有形参 C)析构函数的功能是用来释放一个对象D)析构函数无任何函数类型 ^^B ~~01|11|2|1 ^^已知X类.则当程序执行到语句,Xarray[3];时,调用了(D)次构造函数。 A)0B)1C)2D)3 ^^D ~~01|13|1|1 ^^类定义的内容允许被其他对象无限制地存取是(C)。 A)private部分B)protected部分C)public部分D)以上都不对 ^^C ~~01|01|2|1 ^^关于new运算符的下列描述中,(D)是错误的.。 A)它可以用来动态创建对象和对象数组 B)使用它创建对象或对象数组,可以使用运算符DELETE删除 C)使用它创建对象时要调用构造函数 D)使用它调用对象数组时不许指定初始值 ^^D ~~01|01|2|1 ^^对于下面程序段,表达式正确的是(B)。 classBase{public: intb;}; classBase1: publicbase{}; classBase2: publicbase{}; classDerived: publicbase1,publicbase2{public: intfun();}; Derivedd; A)d.Base1: : bB)d.Base: : bC)D)d.Base: : fun() ^^B ~~01|12|1|1 ^^可以用的形式访问派生类对象p的基类成员a其中a是(D)。 A)私有继承的公有成员B)公有继承的私有成员 C)公有继承的保护成员D)公有继承的公有成员 ^^D ^^下列关于C++类的描述中错误的是(C)。 A)类与类之间可以通过一些手段进行通信和联络 B)类用于描述事物的属性和对事物的操作 C)类与类之间必须是平等的关系, D)类与类之间可以通过封装而具有明确的独立性 ^^C ~~01|12|1|1 ^^下列描述中哪个是正确的(B)。 A)私有派生的子类无法访问父类的成员 B)类A的私有派生子类的派生类C无法初始化其祖先类A对象的属性,因为类A的成员对类C是不可访问的 C)私有派生类不能作为基类派生子类 D)私有派生类的所有子孙类将无法继续继承该类的成员 ^^B ~~01|11|1|1 ^^下列关于构造函数说法不正确的是()。 A)构造函数必须与类同名B)构造函数可以省略不写 C)构造函数必须有返回值D)在构造函数中可以对类中的成员进行初始化 ^^C ~~01|13|1|1 ^^如果友元函数重载一个运算符时,其参数表中没有任何参数则说明该运算符是(D)。 A)一元运算符B)二元运算符 C)选项A)和选项B)都可能D)重载错误 ^^D ~~01|14|1|1 ^^在重载一个运算符时,如果其参数表中有一个参数,则说明该运算符是(D)。 A)一元成员运算符B)二元成员运算符 C)一元友元运算符D)选项B)和选项C)都可能 ^^D ~~01|12|1|1 ^^一个类的友元函数能够访问该类的(D)。 A)私有成员B)保护成员C)公有成员D)所有成员 ^^D ^^下列关于类定义的说法中,正确的是(A)。 A)类定义中包括数据成员和函数成员的声明 B)类成员的缺省访问权限是保护的 C)数据成员必须被声明为私有的 D)成员函数只能在类体外进行定义 ^^ A ~~01|14|1|1 ^^通过运算符重载,可以改变运算符原有的(A)。 A)操作数类型 B)操作数个数 C)优先级 D)结合性 ^^A ~~01|14|1|1 ^^在C++语言中,数据封装要解决的问题是(D)。 A)数据的规范化B)便于数据转换C)避免数据丢失 D)防止不同模块之间数据的非法访问 ^^D ~~01|13|1|1 ^^对类成员访问权限的控制,是通过设置成员的访问控制属性实现的,下列不是访问控制属性的是(D)。 A)公有类型B)私有类型C)保护类型D)友元类型 ^^D ~~01|11|1|1 ^^在类的定义中,用于为对象分配内存空间,对类的数据成员进行初始化并执行其他内部管理操作的函数是(C)。 A)友元函数B)虚函数C)构造函数D)析构函数 ^^C ~~01|11|1|1 ^^类的析构函数的作用是(D)。 A)一般成员函数的初始化B)类的初始化 C)对象的初始化D)删除类创建的对象 ^^D ~~01|13|1|1 ^^下列说法正确的是(B)。 A)内联函数在运行时是将该函数的目标代码插入每个调用该函数的地方 B)内联函数在编译时是将该函数的目标代码插入每个调用该函数的地方 C)类的内联函数必须在类体内定义 D)类的内联函数必须在类体外通过加关键字inline定义 ^^B ~~01|12|1|1 ^^下列对派生类的描述中,错误的是(D)。 A)一个派生类可以作为另一个派生类的基类 B)派生类至少有一个基类 C)派生类的成员除了自己的成员外,还包含了它的基类的成员 D)派生类中继承的基类成员的访问权限到派生类保持不变 ^^D ~~01|12|1|1 ^^运算符的重载是对已有的运算符赋予多重含义,因此(A)。 A)可以对基本类型(如int类型)的数据,重新定义“+”运算符的含义 B)可以改变一个已有运算符的优先级和操作数个数 C)只能重载C++中已经有的运算符,不能定义新运算符 D)C++中已经有的所有运算符都可以重载 ^^A ~~01|13|1|1 ^^如果类A被说明成类B的友元,则(D)。 A)类A的成员即是类B的成员B)类B的成员即是类A的成员 C)类A的成员函数不得访问类B的成员D)类B不一定是类A的友元 ^^D ~~01|13|1|1 ^^不能作为重载函数的调用的依据是(D)。 A)参数的个数B)参数的类型C)函数的类型D)函数的名称 ^^D ~~01|13|1|1 ^^在C++语言的面向对象设计框架中,类是程序的基本组成单元。 ^^类 ~~01|13|1|1 ^^继承的方式的公有继承
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 练习题 答案