1、C+复习 答案基本知识1.1 选择题1.C+源程序文件的扩展名为 A 。A) .CPP B) .C C).DDL D) .EXE2. D 不是C+语言的基本数据类型。 A)字符类型 B)整数类型 C)逻辑类型 D)枚举类型3.下列表达式的值为false的是 C A)13 & 54) C) 3&0&1 D) !(58)|(2n为false或mn&mn)B) switch语句结构中必须有default语句C) if语句结构中必须有else语句 D)如果至少有一个操作数为true,则包含运算符的表达式为true9.下列关于指针运算的描述错误的是 A 。A) 在一定条件下,两个指针可以相加B)在一定条
2、件下,两个指针可以进行逻辑判断C)在一定条件下,指针可以为空值D)在一定条件下,两个指针可以相互赋值10.下列对变量的引用错误的是 C 。A) int a ;int &p=a:B)char a;char &p = aC)int a; int &p;p=a;D)float a;float &p=a;1.2 填空题11.程序文件的编译错误分为 语法错误 和 连接错误 。12.字符串类型的变量一般用 字符指针 和 数组 类型的变量表示。13.空字符串的长度是 0 。14.设int x = 10,则表达式x=10?20 : 30的值为 20 。15.一个指针类型的对象占用内存的 4 个字节的存储空间。
3、16.除了在 函数参数是引用类型 和 函数返回类型时对变量的引用 的情况下,定义引用变量必须初始化。17.对于嵌套的ifelse语句,C+语法规定else总是与 离它最近的且尚未配对的if语句 匹配。18.下列程序计算出0到9之间的任意3个不相同的数字组成的三位数共有多少种不同的组合方式。请完成下列程序。#include Void main() Int i,j,k,count = 0; For(i=9;i=1;i) For(j=9;j=0;j) If ( i= = j ) continue; else For(k=0;k=9;k+) If ( (k !=i)& (k !=j) ) count+
4、; Coutcountend1;1.3 阅读程序19.写成下列程序的运行结果。 #include Void main() Int a22 = 1,2,3,4,*p; P = a0 +1; Cout *pend1;答案:220.写出下列程序的运行结果。 #include Void main() Int i,j; For(i = 5; i0; i-) For(j=i; j0; j-) Cout*; Cout end1; 答案:* * * * *1.4 编写程序 21.已知一个三角形中三条边的长度分别为a,b和c,请利用下列公式求出三角形的面积,其中s=(a+b+c)/2。注意:构成三角形的条件是三
5、角形任意两条边长度之和大于第三条边。22.直角三角形的三条边满足勾股定律:两条直角边的平方和等于斜边的平方。编写程序,找出三条边的长度都小于50的所有直角三角形。函数2.1 选择题23.当一个函数无返回值时,函数的类型应为 B 。A) 任意 B) void C) int D)char24.在C+语言中函数返回值的类型时由 C 决定的。A) 调用该函数时系统临时 B) return语句中的表达式类型 C)定义该函数时所指定的函数类型 D) 调用该函数时的主调函数类型25.在不同文件的函数中,对全局变量的引用要加上 D 关键字。A) register B) auto C) static D)ext
6、ern26.不能实现函数之间数据传递的是 B 。A)全局变量 B) 局部变量 C) 函数接口 D)函数返回值27.对下列程序段的描述正确的是 A 。 #include Int Fun (int x,int y) Return x+y; Void main() Int i+ 10; CoutFun (i+,i)end1; A) 程序输出结果不能确定 B) 程序输出结果是20 C) 程序输出结果是21 D) 程序输出结果是222.2 填空题28.函数的调用方式分为两种: 传值 调用和 引用 调用。其中, 传值 调用又根据C+中变量值的不同分为:传递变量本身值的调用和 传递变量地址 的 传址 调用。
7、29.在调用一个函数的过程中可以直接或间接地调用该函数,这种调用称为 递归 调用,该函数称为 递归函数 。30.假定一个函数的参数说明为int x,则等价的指针参数说明为 int *x 。31.下面的函数Fun将一个整数字符串转换为一个整数。请完成下列函数定义。 #include Int Fun (char*str) Int num,digital,len; Num = 0 /给变量num赋初值 Len = strlen(str); While (*str != NULL) Difital = *str-0; For (int i = 0; ilen-1 ; i+) Digital *=10;
8、 Len-; Str + Num += digital; Return 2.3 阅读程序32.阅读下列程序,找出程序中的错误,并说明错误原因。 Int& Fun(int index,int a) Int r= aindex; Return r ; 答案:函数Fun的返回值为int&,即返回值对int型的引用。由于变量r是局部变量,因此它的作用域在Fun函数调用完毕之后就结束了,它所占用的内存空间也将被释放。因此,不能返回对局部变量的引用。33.写出下列程序的运行结果。 #include void Fun1 (int* x, int* y) Int p; P =*x; *x =*y; *y =
9、p; void Fun2 (int* x, int* y) Int *p; P =x; x =y; y = p; Void main() Int a = 5, b = 10; Fun1 (&a, &b); Couta bend1; Fun2 (&a, &b); Couta bend1; 答案: 10 5 10 534.写出下列程序的运行结果。 #include Int Fun (int* x) Coutx; If (x=o) Coutend1; Return 0; Else Return x *x + Fun (x-1); Void main()Int x = Fun(6);Coutxend1
10、; 答案: 6543210 9135.写出下列程序的运行结果。 #include Int f (int a) Return +a; Int g (int& a) Return +a; Void main() Int m = 0, n = 0; M +=f(g(m); N +=f(f(n); Coutm =mend1; Coutn = nend1; 答案: M = 3 N = 22.4 编写程序36.编写一个函数,该函数返回给定字符串大写字母字符的个数。例如,字符串“Chinese Computer Wrold”中,大写字母字符的个数为3个。37.编写一个函数,求输入的两个自然数的最大公约数。3
11、8.编写一个函数Strlen(char*s),求字符串s的长度,并进行测试。类与对象3.1选择题39.对类的构造函数和析构函数描述正确的是 A 。A) 构造函数可以重载,析构函数不能重载 B) 构造函数不能重载,析构函数可以重载 C) 构造函数可以重载,析构函数也可以重载 D) 构造函数不能重载,析构函数也不能重载 40.下面对于友元函数描述正确的是 C 。A)友元函数的实现必须在类的内部定义B)友元函数时类的成员函数C)友元函数破坏了类的封装性和隐蔽性D)友元函数不能访问类的私有成员41.下面对静态数据成员的描述中,正确的是 D 。A)静态数据成员可以在类体内进行初始化B)静态数据成员不可以
12、被类的对象调用C)静态数据成员不能受private控制符的作用D)静态数据成员可以直接用类名调用3.2 填空题42.在C语言中,编程的单位是 函数 ;在C+语言中,编程的单位是 类 。43.在结构定义中,数据和成员函数默认权限是 公有(public) 。在类定义中,数据和成员函数默认权限是 私有(private) 。44. new 运算符对指定类型对象动态分配内存并返回该类型的 指针 。45.非成员函数应声明为类的 友元函数 才能访问这个类的private成员。46.完成下面的类定义。 Class MyClass Public;MyClass()x=0; friend Int GetNum(
13、MyClass my); Private; Int x ; ; Int GetNum( MyClass my)Return my.x; 3.3 阅读程序47.阅读下面类的定义,找出程序中的错误,并说明错误原因。 Class my Public; My a; Private; Int x ; ;答案:语句My a;错误。编译器在处理一个定义性声明的类时,在没有遇到标识声明结束的右花括号之前,所声明的类名是引用性声明。引用性声明的类名不能用于那些导致建立对象的声明中。这是因为对应程序中声明的每一个对象,编译器都要确定存储的布局。3.4编写程序48.设计一个类CRectangle,要求如下所述。(1
14、)该类中的私有成员变量存放Rectangle的长和宽,并且设置它们的默认值是1.(2)通过成员函数设置其长和宽,并确保长和宽都在(0,50)范围之内。(3)求周长Perimeter。49.定义一个类Student记录学生计算机课程的成绩。要求使用静态成员变量或静态成员函数计算全班学生计算机课程的总成绩和平均成绩。类与对象的高级操作4.1 选择题50.假定MyClass为一个类,则执行MyClass a3,*p2;语句时,自动调用该类构造函数 B 次A) 2 B) 3 C) 4 D)5类MyClass的定义如下:Class MyClass Public; MyClass() MyClass(in
15、t i) value = new int(i); Int*value;51.若要对value赋值,则下面语句正确的是 D 。A)MyClass my;my.value = 10;B)MyClass my;*my.value = 10; C)MyClass my;my.*value = 10;D)MyClass my(10)52.关于new运算符的错误的描述是 A 。A) 使用运算符new创建对象数组必须定义初始值B) 使用运算符new创建对象时,会调用类的构造函数C) 运算符new可以用来动态创建对象和对象数值D) 使用new运算符创建的对象可以使用运算符delete删除4.2 填空题53.常
16、量对象应 初始化 ,并且不能在生成之后修改。54.指向数组的指针是指 该指针指向一个数组 。55.有如下定义语句:MyClass p10;则系统自动调用该类构造函数 10 次。当类对象数组p离开它的作用域时,系统自动调用该类析构函数 10 次。4.3 阅读程序56.写出下列程序的运行结果。#includeclass MY_CLASSPublic:Void DisplayMessage(const char*Text,int Type) CoutMessage:Text = Text; CoutText = Type + 10end1;Void DisplayMessage(const char
17、*Text,unsigned int Type) CoutMessage:Text = Text; CoutText = Type end1;Void main()Unsigned char value = 0;MyClass my;My.DisplayMessage(Hello!,value);答案:Message:Text o Hello! Text = 1057.写出下列程序的运行结果。#includeclass MYClassPublic:MyClass(int a)x = a;Void Fun1x+;Void Fun2x+= 2;Void Fun3x+= 3;Void Print()
18、coutx = end1;Private:Int x;Void main()MyClass my(8);Void(MyClass:*pf)();My,Print();Pf=MyClass:Fun1;(my,*pf)();My,Print();Pf=MyClass:Fun2;(my,*pf)();My,Print();Pf=MyClass:Fun3;(my,*pf)();My,Print();答案:X = 8X = 9X = 11X = 14运算符重载5.1选择题58.下了运算符中, A 运算符在C+中不能重载。A) ?: B) C) new D) &59.下面对C+运算符的正确的描述是 D 。
19、A) 只有类成员运算符 B) 只有友元运算符 C) 只有非成员和非友元运算符 D) 上述三者都有60.下列关于运算符重载的描述中,正确的是 D 。A) 运算符重载可以改变运算符的操作数的个数B) 运算符重载可以改变优先级C) 运算符重载可以改变结合性D) 运算符重载不可以改变语法结构5.2 填空题61.单目运算符作为类成员函数重载时 没有 行参;双目运算符作为 类成员函数 重载时需要声明其右操作数,作为 友元函数 重载时需声明全部操作数。62.利用成员函数对二元运算符重载,其左操作数为 this指针 ,右操作数为 成员函数参数 。63.通过重载函数调用运算符实现下列数字函数的抽象:F(x,y)
20、=ax2+by+c继承与派生6.1 选择题64.C+语言建立类族是通过 C 实现的。A) 类的嵌套 B) 虚函数 C) 类的继承 D)抽象类65.下列对基类和派生类关系的描述中,错误的是 B 。A)派生类是基类的具体化 B)派生类是基类的子集C)派生类是基类定义的延续 D)派生类是基类的组合66.派生类的对象对它的基类成员中 A 是可以访问的。A)公有继承的公有成员 B)公有继承的私有成员 C)公有继承的保护成员 D)私有继承的公有成员67.派生类的构造函数的成员初始化列表中,不能包含 C 。A)基类的构造函数 B)派生类中子对象的初始化C)基类中子对象的初始化 D)派生类中一般数据成员的初始
21、化68.带有虚基类的多层派生类构造函数的成员初始化列表中都要列出虚基类的构造函数,这样将对虚基类的子对象初始化 D A)与虚基类下面的派生类个数有关 B)多次 C)两次 D) 一次69.下面叙述错误的是 C 。A)派生类可以使用private派生 B)对基类成员的访问必须是无二义性的C)基类成员的访问能力在派生类中维持不变 D)赋值兼容规则也适用于多继承的组合6.2填空题70.派生类可以调用其 基类 中不具备的数据和操作。71.C+提供的 多继承 机制允许一个派生类继承多个基类,即使这些基类是相互无关的。72.当用protected继承从基类派生一个类时,基类的public成员成为派生类的 保
22、护protected 成员,protected成员成为派生类的 保护protectde 成员。73.当撤销一个含有基类和子对象成员的派生类对象时,将首先完成 派生类 的析构函数定义体的执行,接着完成 子对象成员 的析构函数定义体的执行,最后完成 基类 的析构函数定义体的执行。74.指向基类的对象的指针变量也可以指向 派生类 的对象。6.3阅读程序75.写出下列程序的运行结果。#include #include Class BasePublic: Int x;Void Print()cout”Base:x is”xend1;Class Derivde1:public BasePublic: Vo
23、id Print() ;Class Derivde2:private BasePublic:Derivde2()Base:x=4;Int x;Void Print() cout”Derived2s Base:x is”Base:xend1; cout”Derived2:x is”xend1;Void main()Base objB;Derived1 objD1;Derived2 objD2;objD2.x=1+( objD1.x=1+( objB.x=1);objB.Print();objD1.Print();objD2.Print();答案:Basw:x is 1Derivde1:x is
24、2Derivde2s Base:x is 4Derivde2:x is 3多态性7.1 选择题76.下列关于动态联编的描述中,错误的是 D 。A)动态联编是以虚函数为基础的B)动态联编是在运行时确定所调用的函数代码的C)动态联编调用函数操作是指向对象的指针或对象引用D)动态联编是在编译时确定操作函数的77.编译时的多态性可以通过使用 C 获得。A)虚函数和指针 B)重载函数和析构函数 C)虚函数和对象 D)虚函数和引用78.关于虚函数和抽象类的描述中,错误的是 C 。A)纯虚函数是一种特殊的虚函数,它没有具体的实现B)抽象类是指具有纯虚函数的类 C)一个基类中说明有纯虚函数,该基类的派生类一定
25、不再是抽象类D)抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出79.下面的描述中,正确的是 A A)virtual可以用来声明虚函数 B)含有纯虚函数的类是不可以用来创建对象的,因为它是虚基类 C)即使基类的构造函数没有参数,派生类也必须建立构造函数D)静态数据成员可以通过成员初始化列表来初始化7.2 填空题80.静态联编所支持的多态性称为 编译时的(静态) 多态性,动态联编所支持的多态性则称为 运行时的(动态) 多态性,动态多态性由 虚函数 来支持。81.C+中 不支持 虚构造函数,但 支持 虚析构函数。7.3 阅读程序82.写出下列程序的运行结果。#include Class Ba
26、sePublic: Base(int i=1) : x(i)Virtual int sum() const return x;Private:Int x;Class Derived:public BasePublic:Derived(int i=0, int j=0):Base(i),y(j)Int sum() const return Base:sum()+y;Private:Int y;Void Call(Base b)Coutsum=b.sum()end1;Void main()Base b (10);Derived d (10,40);Call (b);Call(d);答案:Sum=10Sum=1083.写出下列程序的运行结果。 #include Class BasePublic:Base() coutConstructor of Base.end1;fun();Virtual void fun()coutBase:fun()called.end1;Class Derived : public BasePublic:Derived()cout
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1