c++练习题带答案.docx
- 文档编号:11871662
- 上传时间:2023-04-06
- 格式:DOCX
- 页数:30
- 大小:22.54KB
c++练习题带答案.docx
《c++练习题带答案.docx》由会员分享,可在线阅读,更多相关《c++练习题带答案.docx(30页珍藏版)》请在冰豆网上搜索。
c++练习题带答案
一、选择题
1.语言属于(C)。
A)自然语言B)机器语言C)面向对象语言D)汇编语言
2.下面选项中不属于面向对象程序设计特征的是(C)。
A)继承性B)多态性C)相似性D)封装性
3.可用作语言用户标识符的一组标识符是(B)。
A)B)a33_123
C)D)2a
4.假定一个二维数组的定义语句为“a[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)B)C)D)
7.下列有关数组的叙述中,正确的是(B)
A)中数组的存储方式为列优先存储
B)数组名可以作为实参赋值给指针类型的形参
C)数组下标索引从1开始,至数组长度n结束
D)数组指针的语法形式为:
类型名*数组名[下标表达式];
8.下列有关继承和派生的叙述中,正确的是(C)
A)派生类不能访问通过私有继承的基类的保护成员
B)多继承的虚基类不能够实例化
C)如果基类没有默认构造函数,派生类就应当声明带形参的构造函数
D)基类的析构函数和虚函数都不能够被继承,需要在派生类中重新实现
9.实现运行时多态的机制是(A)
A)虚函数B)重载函数C)静态函数D)模版函数
10.若有下面的函数调用:
(,3,(1,b));
其中实参的个数是(A)
A)3B)4C)5D)6
11.下列关于指针的说法正确的是(B)
A)指针存在于每个函数之中
B)在类的非静态函数中指针指向调用该函数的对象
C)指针是指向虚函数表的指针
D)指针是指向类的函数成员的指针
12.在下列关于函数的叙述中,正确的是(C)
A)每个函数至少要有一个参数B)每个函数都必须返回一个值
C)函数在被调用之前必须先声明D)函数不能自己调用自己
13.下列运算符中,不能重载的是(C)
A)B)C).D)->
14.下面程序的输出结果是(B)
<>
;
i=0;
(n)
{
a=2;
;
;
}
()
{
k=5;
{
i=2;
k(i);
}
k(i);
< } A)13B)14C)15D)16 15.下面的程序段的运行结果为(D) []="",*p=; <<* (2)<<; A)98B)无输出结果C)字符’b’的地址D)字符’b’ 16.下面程序的输出结果是(C) <> ; A { : A(i){x=i;} (){< : x; }; B: A { : B(i): A(10){x=i;} (){();< : x; }; () { Bb (2); (); } A)10,2B)12,10C)12,2D)2,2 17.下面程序的输出结果是(C) <> ; { : (i){< (){} }; 1: { : 1(i,0): (j){< 1(){} }; 2: { : 2(i,0): (j){< 2(){} }; : 2,1 { : (a,b,c,d): 1(a),2(b),1(c), 2(d),(a) {< : 22; 11; }; (){(1,2,3,4);} A)134122B)123412C)14302012D)143212 18.下面程序的输出结果是(C) <> ; { : f(){<<“f0+”;} g(){<<“g0+”;} }; : { : f(){<<“”;} g(){<<“”;} }; (){d;*p=;>f();>g();} A)B)f0C)0+D)f00+ 19.下面程序的输出结果是(C) <> ; { (s) { (<2)1; *( (1)); } : (a){x=a;} : x; }; () { =0; (0;i<4;) { ((i)); } <<; }A)12B)16C)10D)34 20.以下程序的输出结果是: (D) <> ; (*s) {*; (*'\0'); (); } (){ <<("")<<; } A.0B.1C.2D.3 21.有如下程序段: 1; (1) { ; (10); (20)<<’*’; } 执行这个程序段输出字符*的个数是(C) A.10B.3C.4D.5 22.下列关于虚基类的描述中,错误的是(C) A.使用虚基类可以消除由多继承产生的二义性 B.构造派生类对象时,虚基类的构造函数只被调用一次 C.声明A说明类B为虚基类 D.建立派生类对象时,首先调用虚基类的构造函数 23.有下类定义 A{ *a; : A()(0){} A(*){把所指字符串拷贝到a所指向的存储空间 ; (); (){[]a;} }; 正确的选择是(A) A.[()+1]B.[()+1] C.[()]D.[()-1] 24.假定为一个类,a为该类私有的数据成员,()为该类公有函数成员,它返回a的值,x为该类的一个对象,则访问x对象中数据成员a的格式为(X)。 A)B)()C)>()D)() 25.假定为一个类,a()为该类的一个成员函数,若该成员函数在类定义体外定义,则函数头为(A)。 A)()B)() C)()D)a() 26.有如下程序: <> ; { : (){} (){<<'#';} }; (){ [2],*[2]; 0; } 执行这个程序输出星号(#)的个数为(B)。 A)1B)2C)3D)4 27.有如下程序: <> ; { : (0){<<1;} (){<<2;} (){<<3;*;} (){<<4;} }; (){ 1 (1)2 (2)3 (1); 12; 0; }运行时的输出结果是(A)。 A)1123444B)11114444C)121444D)11314444 28.有如下程序: <> ; { : ; : (){;} (){;} }; 0; () {*; ; { *[3]; ; } C; []; <<; } 程序结果为(A) A)3B)4C)6D)7 29.友元运算符被编译器解释为(D)。 A.()B.(,0) B.()D.(0) 二、程序填空 1.用递归法求从1到n的立方和: f (1)=1 (1) f(n) (1)3(n>1) <> ; f(); (){ ; <<"n: "; >>n; f(n); <<""< 0; } f(n){递归法求立方和函数 (1)1; (f (1)*n*n); } 3.请将下列程序补充完整,使得输出结果为“”。 <> ; { : (){<<“”<<;} }; : { : (){<<“”<<;} }; () { *=; ; } 三、阅读程序,写出运行结果 1. <> <> ; { [20]; ; : (*,) { (); ; } *(){;} (){;} (){<<<<''<<<<;} }; ; () { ; ("歌唱祖国",30); ("义勇军进行曲",3*()+5); (); (); } 歌唱祖国30 义勇军进行曲95 2.<> ; f(a){ ; } g(a){ ; } (){ 00; (g(m)); (f(n)); <<""< <<""< } 3.<> ; { : (){<<"\n";} (){<<"\n";} }; (b){c(b)c;} () { ; <<"()\n"; d=(a); } 执行上面的程序的过程中,构造函数()和()被调用的次数分别是多少次? 五、编写程序 1、编写函数计算123! ,n作为参数传递,在主函数调用该函数并输出结果。 2、编写函数找出二维数组(5*4)中元素的最大值与最小值,并返回其最大值与最小值。 测试结果。 3、编写一个三角形类,有计算面积,显示面积的功能等,并测试。 要求有参数的构造函数及复制构造函数 ^^下面关于类概念的描述中,(D)是错误的。 A)类是抽象数据类型的实现B)类是具有共同行为的若干对象的统一描述体 C)类是创建对象的样板D)类就是C语言中的结构体类型 ^^D ^^面向对象程序设计思想的主要特征中不包括(D)。 A)封装性B)多态性C)继承性D)功能分解,逐步求精 ^^D 01|11|1|1 ^^在中,函数原型不能标识()。 A)函数的返回类型B)函数参数的个数C)函数参数类型D)函数的功能 ^^D 01|11|1|1 ^^有关析构函数的说法不正确的是()。 A)析构函数有且仅有一个B)析构函数和构造函数一样可以有形参 C)析构函数的功能是用来释放一个对象D)析构函数无任何函数类型 ^^B 01|11|2|1 ^^已知X类.则当程序执行到语句,X [3];时,调用了(D)次构造函数。 A)0B)1C)2D)3 ^^D 01|13|1|1 ^^类定义的内容允许被其他对象无限制地存取是(C)。 A)部分B)部分C)部分D)以上都不对 ^^C 01|01|2|1 ^^关于运算符的下列描述中,(D)是错误的.。 A)它可以用来动态创建对象和对象数组 B)使用它创建对象或对象数组,可以使用运算符删除 C)使用它创建对象时要调用构造函数 D)使用它调用对象数组时不许指定初始值 ^^D 01|01|2|1 ^^对于下面程序段,表达式正确的是(B)。 {b;}; 1{}; 2{}; 12{();}; d; A)d.1B)d.C)D)d.: : () ^^B 01|12|1|1 ^^可以用的形式访问派生类对象p的基类成员a其中a是(D)。 A)私有继承的公有成员B)公有继承的私有成员 C)公有继承的保护成员D)公有继承的公有成员 ^^D ^^下列关于类的描述中错误的是(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 ^^在语言中,数据封装要解决的问题是(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)类的内联函数必须在类体外通过加关键字定义 ^^B 01|12|1|1 ^^下列对派生类的描述中,错误的是(D)。 A)一个派生类可以作为另一个派生类的基类 B)派生类至少有一个基类 C)派生类的成员除了自己的成员外,还包含了它的基类的成员 D)派生类中继承的基类成员的访问权限到派生类保持不变 ^^D 01|12|1|1 ^^运算符的重载是对已有的运算符赋予多重含义,因此(A)。 A)可以对基本类型(如类型)的数据,重新定义“+”运算符的含义 B)可以改变一个已有运算符的优先级和操作数个数 C)只能重载中已经有的运算符,不能定义新运算符 D)中已经有的所有运算符都可以重载 ^^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 ^^在语言的面向对象设计框架中,类是程序的基本组成单元。 ^^类 01|13|1|1 ^^继承的方式的公有继承、私有继承和保护继承三种。 ^^保护继承 01|13|1|1 ·在用定义一个类时,数据成员函数的默认访问权限是私有的)。 ^^私有的 01|13|1|1 ^^类的构造函数是在定义对象时调用的。 ^^定义对象 01|13|1|1 ^^类模板的使用实际上是将类模板实例化成一个具体的(对象)。 ^^对象 01|13|1|1 ^^如果类B继承了类A,则称类A为类B的基类,类B 称为类A的(派生类)。 ^^派生类 01|13|1|1 如果要把返回值为的函数A声明为B类的友元数,则应在类B的定义中加入语句是(12)。 02|10|1|1 ^^有如下定义: { ; : (0){;}; *; 其中类的对象名标识符是()。 ^^ 02|12|1|1 ^^用来派生新类的称为(基类),而派生出的新类称为它的子类或派生类。 ^^基类 02|12|1|1 ^^面向对象的程序设计的主要特征是继承性、封装性和多态性。 ^^封装性 02|10|1|1 ^^向对象的模型中,最基本的概念是对象和(类)。 ^^类 03|14|1|1 ^^通过使用和两个运算符进行的分配为静态存储分配。 () ^^F 03|14|1|1 ^^重载的运算符保持其原有的操作符个数、优先级和结合性不变。 () ^^T 03|10|1|1 ^^在面向对象方法中,类之间共享属性和操作的机制称为 多态 性。 () ^^F 03|12|1|1 ^^可以用的形式访问派生类对象P的基类成员a,其中a是公有继承的公有成员。 () ^^T ^^语言相对于C语言的最根本的变化是引进了类和对象的概念。 () ^^T 03|10|1|1 ^^类的析构函数的作用是删除类创建的对象。 () ^^T 02|13|1|2 ^^动态分配内存空间操作符””和()使用时必须成对出现。 ^^ 02|12|1|2 ^^用以说明类中保护成员的关键字是()。 ^^ 02|11|1|2 ^^对于任意一个类,析构函数的个数最多为()个。 ^^1 02|08|1|2 ^^若有以下定义语句: { if; }b; 则结构体变量占用的内存字节数是()。 ^^3.14*r*r 03|02|1|2 ^^分号是语句的必要组成部分。 () ^^T 03|12|2|2 ^^公有派生时,基类中所有成员在公有派生类中保持各个成员的访问权限。 () ^^T 04|12|2|2 ^^下列程序中横线处正确的语句应该是。 #<> ; { ; () {<<“: : ”<<;} }; : { : () { 显示调用基类的函数() <<“: : ”<<; } }; ^^0 04|11|2|2 ^^写出下列程序的运行结果。 <> A { : A(){<<"1";} (){<<"2";} }; A { : B(){<<"3";} (){<<"4";} }; () { Bb; } ^^1324 04|09|2|2 ^^下列程序的执行结果为。 #<> () { 10; *; *; (*); <<""< (*); <<””< } ^^1112 05|08|2|2 ^^定义描述复数的结构体变量,并实现复数的输入和输出.设计3个函数分别完成复数的加法、减法运算。 编写主函数验证复数的运算是否正确。 ^^<> { ; ; }; (c1c2) { t; 12; 12; t; } (c1c2) { t; 12; 12; t; } () {c; <<"输入复数的实部和虚部: "; >>>>; c; } (c) {<<"复数的实部: "<<<<"复数的虚部: "<<<<; } () { c12345; c1(); c2(); c3(c12); c4(c12); <<"c1: "; (c1); <<"c2: "; (c2); <<"二复数之和: "(c3); <<"二复数之差: "(c4); } 05|04|2|2 ^^用循环语句实现输出如下图形: ***** ***** ***** ***** ^^<> () { ; (1<=4) {(0<1) {<<"";} (1<=5) {<<"*";} <<'\n';} } 05|10|2|2 ^^设计一个立方体类,它能计算并输出立方体的体积和表面积。 ^^解: 类包含三个私有数据成员a(立方体边长)、(体积)和(表面积),另有两个构造函数以及()(设置立方体边长)、()(计算体积)、()(计算表面积)和()(输出结果)。 本题程序如下: <> { a; ; ; : (){} (r){;} (r){;} (){*a*a;} (){6*a*a;} () { <<"体积: "<<<<",表面积: "<<<<; } }; () { 1(4.5)2; 2(6.4); 1(); 1(); <<"1=>"; 1(); 2(); 2(); <<"2=>"; 2(); } 本程序的执行结果如下: 1=>体积: 91.125,表面积: 121.5 2=>体积: 262.144,表面积: 245.76
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c+ 练习题 答案