C++复习题
《C语言》总复习题

《C语言》课程综合复习资料一、单项选择1. 若有如下语句: int *p1,*p2; 则其中int所指的是(D )A. p1的类型B. *p1和*p2的类型C. p2的类型D. p1和p2所能指向变量的类型2. 下列程序段的输出结果是(C )x=9; while(x>7) {printf(“*”);x--;}A. ****B. ***C. **D. *3. 下列变量的定义及赋值正确的是(C)A. int i=0;j;B. char c=”A”;C. double x,y,z; x=y=z=100;D. float a=b=100;4. 设有语句:int x=10;x = x -= x - x;,则执行语句后,x的值为(B )A. 30B. 20C. 10D. 405. 设有语句:float x=1,y; y=x 3/2; 则y的值是(C )A. 1B. 2C. 2.0D. 2.56. 设有如下定义和执行语句,其输出结果为(A )int a=3,b=3; a = --b + 1; printf(“%d %d”,a,b);A. 3 2B. 4 2C. 2 2D. 2 37. 设有两字符串“Beijing”、“China”分别存放在字符数组str1[10],str2[10]中,下面语句中能把“China”连接到“Beijing”之后的为(C )A. strcpy(str1,str2);B. strcpy(str1, “China”);C. strcat(str1,“China”)D. strcat(“Beijing”,str2);8. 设有定义语句:char str[][20]={""Hello"",""Beijing""},*p=str; 则printf(""%d\n"",strlen(p+20)); 输出结果是(C )A. 0B. 5C. 7D. 209. 设有定义int a[ ]={1,5,7,9,11,13},*p=a 3;则*(p-2),*(a 4)的值是(A )C. 5 9D. 有错误10. 设有定义:int x=0,y=1,z=1;则运行表达式:x=y >z--后,x,y,z的值分别是(D )A. 1,1,1B. 1,2,0C. 0,1,1D. 0,2,011. 设有定义:int x=12,n=5; 则表达式x%=(n%2) 的值为(A )A. 0B. 1C. 2D. 312. 设有定义int a=3,b=4,c=5; ,则以下表达式中,值为0的表达式是(D )A. a&&bB. a<=bC. a||b c&&b-cD. !((a<b)&&!c||1)13. 设有定义int a[ ]={1,5,7,9,11,13}, *p=a 3; 则*(p-2) , *(a 4) 的值是(A )A. 5 11B. 1 9C. 5 9D. 有错误14. 设有定义char *p=“abcde\0fghjik\0”; 则printf(“%d\n”,strlen(p));输出结果是(D )A. 12B. 15C. 6D. 515. 设有int x=11;则表达式(x *1/3)的值是(A )A. 3B. 4C. 11D. 1216. 设a=3,b=4,c=-5,则逻辑表达式:a || b c && b==c 的值是(A )A. 1B. 0C. 非0D. 语法错17. 若有以下定义:int a[10],*p=a; 则*(p+3)表示的是(B )A. 元素a[3]的地址B. 元素a[3]的值C. 元素a[4]的地址D. 元素a[4]的值18. 若有以下定义:char s[20]= "programming",*ps=s;则不能代表字符g的表达式是(A )A. ps 3D. ps =3,*ps19. C语言中,函数返回值的类型是由(D )A. return语句中的表达式类型决定B. 调用函数的主调函数类型决定C. 调用函数时的临时类型决定D. 定义函数时所指定的函数类型决定20. C语言提供的合法关键字是(D )A. swicthB. chaC. CaseD. default二、读程序题1. "#include <stdio.h>void main(){ int a=4,x=3,y=2,z=1;printf(""%d\n"",(a<x ? a : z<y ? z : x)); }"2. "#include <stdio.h>void main(){ int x=12,y=0;if(x>=0){ if(x>0) y=10; }else y=-10;printf(“y=%d\n”,y);}"3. "#include <stdio.h>void main(){ int k=1;switch(k){ case 0: printf(""A""); break;case 1: printf(""B"");case 2: printf(""I"");case 3: printf(""G""); break;default: printf(""E"");}}"4. "#include <stdio.h>#define S(x) x*xvoid main(){int a,k=3,m=1;a=S(k+m);printf(""%d"",a);}"5. "#include <stdio.h>int fun(int a, int b){ if(a>b) return(a);else return(b);}void main(){ int x=3, y=8, z=6, r;r=fun(fun(x,y), 2*z);printf(""%d\n"", r);}"6.#include <stdio.h&>void main(){ int k=4,n=0;for(;n<k;){ n++;if(n%3!=0) continue;k- -;}printf(""%d,%d\n"",k,n);}三、编程题1. 写一个判断素数的函数。
c语言习题

二.填空题 1.在C语言中(以16位PC机为例),一个char数据在内存中所占字节数为 _1B__,其数值范围为 0~127 ;一个int数据在内存中所占字节数为 2B ,其数值范围为-32768~32767 ;一个long数据在内存中所占字节 数为 4B ,其数值范围为 -2147483648~2147483647 ;一个float 数据在内存中所占字节数为 4B ,其数值范围为 -3.4*1038~-3.4*10-38, 3.4*10-38~3.4*1038 。 2.C语言的标识符只能由大小写字母,数字和下划线三种字符组成,而且 第一个字符必须为 字母 。 3.字符常量使用一对 单引号 界定单个字符,而字符串常量 使用一对 双引号 来界定若干个字符的序列。
3.函数体一般包括( 变量定义序列 ) 和( 执行语句序列
二.判断题 1.一个C程序的执行总是从该程序的main函数开始,在main函数最后结 束。 【 √ 】 2.main函数必须写在一个C程序的最前面。 【 × 】 3.一个C程序可以包含若干的函数。【 √ 】 4.C程序的注释部分可以出现在程序的任何位置,它对程序的编译和运 行不起任何作用。但是可以增加程序的可读性。【 √ 】 5.C程序的注释只能是一行。【 × 】 6.C程序的注释不能是中文文字信息。【 × 】 8.可以使用Turbo C来编译和连接一个C程序。【 √ 】 9.可以使用Turbo C来运行一个C程序。【√ 】 10.可以使用Turbo C来实时调试(即动态调试)一个C程序。【 √ 】 三.简答题 1. 写出一个C程序的基本结构。 预处理命令序列 void main() { 变量定义序列 执行语句序列 } 2. 简要叙述使用Turbo C 2.0编译和运行一个程序的步骤。 1)编辑源程序,以扩展名.c存盘。
C期末考试复习题(答案)

C期末考试复习题(答案)C语言复习题一、单项选择题1、C语言源程序文件经过C编译程序编译连接之后生成一个后缀为( C )的文件。
A).c B).obj C).exe D).bas2、)完成C源文件编辑后、到生成执行文件,C语言处理系统必须执行的步骤依次为( B )A)连接、编译B)编译、连接 C)连接、运行D)运行3、关于C语言的叙述中,不正确的是(D)A)C程序可由一个或多个函数组成B)C程序必须包含一个main ()函数C)C程序的基本组成单位是函数D)注释说明只能位于一条语句的后面4、一个C程序的执行是从(A )。
A) 本程序的main函数开始,到main函数结束B) 本程序文件的第一个函数开始,到本程序文件的最后一个函数结束C) 本程序的main函数开始,到本程序文件的最后一个函数结束D) 本程序文件的第一个函数开始,到本程序main函数结束5、以下正确的叙述是(C )A) 在C语言中,main函数必须位于文件的开头B) C语言每行中只能写一条语句C) C语言本身没有输入、输出语句D) 对一个C语言进行编译预处理时,可检查宏定义的语法错误6、下列选项中,不能用作标识符的是( D)。
A) _1234_ B) _1_2 C) int_2_ D) 2_int_7、常数的书写格式决定了常数的类型和值,0x1011是( C )A)8进制整型常量B)字符常量 C)16进制整型常数D)2进制整型常数8、以下4组用户定义标识符中,全部合法的一组是( A )A)_total clu_1 sum B)if -max turbC)txt REAL 3COM D)int k_2 _0019、_( D )是合法的用户自定义标识符。
A) b-b B)float C)123a D) _isw10、以下选项中不正确的整型常量是( C )。
A) 12L B) -10 C) 1,900 D) 123U11、表达式( C )的值是0。
C语言复习题(含答案)

a=10;b=50;c=30;
if (a>b) c=%d”,a,b,c);
A、a=10,b=50,c=10B、a=10,b=30,c=10
C、a=50,b=30,c=10 D、a=50,b=30,c=50
14、在C语言中,当while语句构成的循环的条件为D时,结束循环。
A、5 B、3
C、101 D、11
22、当说明一个结构体变量时系统分配给它的内存是A。
A、各成员所需内存量的总和
B、结构中第1个成员所需内存量
C、成员中占内存量最大者所需的容量
D、结构中最后一个成员所需内存量
23、使用共用体union的目的是A。
A、将一组数据作为一个整体,以便与其中的成员共享同一存空间
A、ASCII代码值B、BCD代码值
C、内码值D、十进制代码值
12、以下程序段C。
int x=2,y=3;
printf( x>y? ”****=%d”: “###y=%d”,x,y);
A、输出控制格式错误B、输出为:****x=2
C、输出为:###y=2D、输出为:###y=3
13、以下程序的输出为B。
for (I=0; I<4; I++) a[I]=*p++;
printf(“%d\n”,a[2]);}
上面程序的输出结果是B。
A、6 B、8 C、4 D、2
19、在C语言中,如果对函数类型未加显示说明,则函数的隐含类型是A。
A、intB、charC、voidD、double
20、在C语言中,当函数调用时A。
{int I,s,n;
s=1;
printf(“enter n: “);
c语言复习题

A. 6 B. 7 C. 11 D. 12
(10) 合法的数组定义是( )。 A
A. char a[ ]= "string " ; B. int a[5] ={0,1,2,3,4,5}; C. char a= "string " ; D. char a[ ]={0,1,2,3,4,5}
A. int a[7]; B. #define N 5 long b[N]; C. char c[5]; D. int n,d[n];
(4) 对字符数组进行初始化,( )形式是错误。 B
A. char c1[ ]={'1', '2', '3'}; B. char c2[ ]=123; C. char c3[ ]={ '1', '2', '3', '\0'}; D. char c4[ ]="123";
2、若x和n都是int型变量,且x的初值为12,n的初值为5,则计算表达式x%=(n%=2)后x的值为 0 。
3、设 c='w',a=1,b=2,d=-5, 则表达式 'x'+1>c, 'y'!=c+2, -a-5*b<=d+1, b==a=2的值分别为 1 、 0 、 1 、 1 。
(8) 设有定义:char s[12] = "string" ; 则printf( "%d\n",strlen(s)); 的输出是( )。 A
A. 6 B. 7 C. 11 D. 12
(9) 设有定义:char s[12] = "string"; 则printf("%d\n ", sizeof(s)); 的输出是( )。 D
C复习题

一、填空题(每空2 分,共 20 分)1.数据结构分为逻辑结构与()。
2.在面向对象方法中,对象之间进行通信的构造称为()。
3.衡量软件的模块独立性使用耦合性和内聚性两个定性的度量标准,其()是度量一个模块功能强度的一个相对指标。
4.一名学生只能住一间宿舍,一间宿舍可住多名学生,则实体“宿舍”与实体“学生”的联系属于()的联系。
5.数据模型包括数据结构、()和数据条件。
6.若有定义:int a=10,b=8,c=4;然后顺序执行下列语句后,变量a中的值是()。
c=(b-=(a-4));a=(c%2)+(b-1);1.C语言中,用关键字()定义基本整型变量,用关键字(),定义单精度实型变量,用关键字()定义字符型变量。
2.表达式3*20/4%10的计算结果是()。
3.复合语句是将多个语句用()括起来组成一个语句。
4.程序中使用putchar( )函数和getchar( )函数,在程序的开头必()。
5.C语言的预处理语句以()开头。
6.goto语句为(),当程序执行到该语句时,转向指定位置执行。
7.return语句的功能是使程序控制从被调用函数返回到()中。
1.一个算法应具有的特点有:()、()、有零个或多个输入、有一个或多个输出、有效性。
2.在程序执行过程中,其值不发生改变的量称为(),其值可变的量称为()。
3.若有定义:int m=5,y=2;则执行表达式y+=y-=m*=y后的y值是()。
4.在三种正规循环中,当条件表达式的值为()时,就结束循环。
5.C语言中函数的参数分为()和()。
1.程序的三种基本结构为()、()和()。
2.在C语言中,用()表示语句的结束。
3.语句printf("%%d%d",123);将输出:()。
4.逻辑运算的结果值是()或()。
5.数组 int a[3][4];共定义了()个数组元素。
6.在C语言中,正确的标识符是由()组成的,且由()开头的。
c语言复习题(49题)

以下作业编程练习,每个主题至少选择4道题作为作业题(各主题中所列题目不足4题的按实际数量选做)。
每次作业计2分,作为平时成绩。
另外,此练习题作为C 语言上机考试的考题来源之一(共49题)。
一、 顺序结构程序设计========================================1 已知三角形的三边长为a ,b ,c ,计算三角形面积的公式为: area = ))()((c s b s a s s ---,s =)(21c b a ++ 要求编写程序,从键盘输入a ,b ,c 的值,计算并输出三角形的面积。
2 编程从键盘输入圆的半径r ,计算并输出圆的周长和面积。
二、 选择结构程序设计==========================================1 从键盘任意输入一个年号,判断它是否是闰年。
若是闰年,输出“Yes ”,否则输出“No ”。
已知符合下列条件之一者是闰年:能被4整除,但不能被100整除。
能被400整除。
2 通过键盘输入一个字符,判断该字符是数字字符、大写字母、小写字母、空格还是其他字符。
3 华氏和摄氏温度的转换公式为C =5/9×(F -32)。
其中,C 表示摄氏温度,F 表示华氏温度。
要求:华氏0℉~300℉,每隔20℉输出一个华氏温度对应的摄氏温度值。
4 编程判断输入整数的正负性和奇偶性。
5 编程计算分段函数e 1exx y -⎧⎪=⎨⎪-⎩ 000x x x >=< 输入x ,打印出y 值。
流程图如图1-2所示。
6 输入三角形的三条边a ,b ,c ,判断它们能否构成三角形。
若能构成三角形,指出是何种三角形(等腰三角形、直角三角形、一般三角形)。
7 在屏幕上显示一张如下所示的时间表:*****Time*****1 morning2 afternoon3 nightPlease enter your choice:操作人员根据提示进行选择,程序根据输入的时间序号显示相应的问候信息,选择1时显示"Good morning", 选择2时显示"Good afternoon", 选择3时显示"Good night",对于其他选择显示"Selection error!",用switch 语句编程实现。
C语言复习题

1. 若有定义:long int j,*p;,则操作j=(long int)p;是合法操作。
√ ×正确2. 设有说明int(*ptr)[M];其中ptr是指向含有M个整型元素的一维数组的指针。
()√ ×正确3. 对同一类型的两个指针变量而言,一个变量向另外一个变量赋值的结果是使得两个指针指向同一个对象。
√ ×正确4. 定义一个指向某种类型函数的指针后,就可以讲任何函数的首地址赋给这个指针变量。
√ ×错误正确答案为×5. 可以将一个整型指针变量的值赋给一个实型指针变量,但可能引起符号位扩展。
√ ×错误正确答案为×6. 可以将一个实型指针变量的值赋给一个整型指针变量,但可能影响指针的精度。
√ ×错误正确答案为×7. 由于指针的数据类型实际上是指定指针所能指向对象的数据类型,所以不通数据类型的指针变量不能相互赋值。
√ ×正确8. 函数中使用指针变量作为形式参数,就有可能在被调函数中操作主调函数中的实参。
√ ×正确9. 若有定义:int a[5],*p;,则操作p=a;是合法的操作。
√ ×正确10. 若有定义:int a[5],*p;,则操作p=&a[2];是合法的操作。
√ ×正确11. 若有定义:int a[5][5],*p;,则操作p=a;是合法操作。
√ ×错误正确答案为×12. 若有定义:int a[5][5],*p;,则操作p=*a;是合法操作。
√ ×正确13. 若有定义:int a[5][5],*p;,则操作p=a[0];是合法操作。
√ ×正确14. 若有定义:int a[5][5],*p;,则操作p=&a[0][0];是合法操作。
√ ×正确15. 若有定义:int a[5][5],(*p)[5];,则操作p=a;是合法操作。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C++作业题(8)一.选择填空(1) 定义重载函数的下列条件中,(C )是错误的。
A. 要求参数个数不同B. 要求参数类型不同C. 要求函数返回值类型不同D. 要求在参数个数相同时,参数类型的顺序不同(2) 关于下列虚函数的描述中,( C)是正确的。
A. 虚函数是一个static存储类的成员函数B. 虚函数是一个非成员函数C. 基类中说明了虚函数后,派生类中可不必将对应的函数说明为虚函数D. 派生类的虚函数与基类的虚函数应具有不同的类型或个数(3) 关于纯虚函数和抽象类的描述中,(C )是错误的。
A. 纯虚数是一种特殊的虚函数,它没有具体实现B. 抽象类中一定具有一个或多个纯虚函数C. 抽象类的派生类中一定不会再有纯虚函数D. 抽象类一般作为基类使用,使纯虚函数的实现由其派生类给出(4) 以下一种类中,( A)不能建立对象。
A. 抽象类B. 派生类C. 虚基类D. 基类(5)下列函数中不能重载的是( C )。
A)成员函数 B)非成员函数 C)析构函数 D)构造函数(6)下列描述中,抽象类的特征有( D )。
A)可以说明虚函数 B)可以构造函数重载 C)可以定义友员函数 D)不能说明其对象(7)下列不属于动态联编实现的条件有( D )。
A)要有说明的虚函数。
B)调用虚函数的操作是指向对象的指针或者对象引用:或者是由成员函数调用虚函数。
C)子类型关系的确立。
D)在构造函数中调用虚函数。
(8)派生类中对基类的虚函数进行替换时,派生类中说明的虚函数与基类中的被替换的虚函数之间不要求满足的是( C )。
A)与基类的虚函数具有相同的参数个数。
B)其参数的类型与基类的虚函数的对应参数类型相同。
C)基类必须定义纯虚函数。
D)其返回值或者与基类的虚函数相同,或者都返回指针或引用,并且派生类虚函数所返回的指针或引用的基类型是基类中被替换的虚函数所返回的指针或引用的基类的子类型。
(9)下列关于抽象类说法正确的是:( B )A)抽象类处于继承类层次结构的较下层。
B)抽象类刻画了一组子类的操作通用接口。
C)抽象类可以作为类直接使用。
D)抽象类可以直接定义对象。
(10)下列关于虚析构函数说法不正确的是( B )。
A)在析构函数前加上关键字virtual,就说明了虚析构函数。
B)如果一个基类的析构函数说明为虚析构函数,则它的派生类中的析构函数须用virtual 关键字说明后才是虚析构函数。
C)说明虚析构函数的目的在于使用delete删除一个对象时,能保证析构函数被正确地执行。
D)设置虚函数后,可以采用动态联编的方式选择析构函数。
(11)编译时多态性通过使用( B )获得。
A)继承 B)虚函数 C)重载函数 D)析构函数(12)可以使用( A )来阻止基类的成员函数调用派生类中的虚函数。
A)成员名限定 B)指针 C)引用 D)关键字virtual(13)抽象类应该含有( D )。
A)至多一个虚函数 B)至多一个虚函数是纯虚函数C)至少一个虚函数 D)至少一个虚函数是纯虚函数(14)一个抽象类可以说明为( A )。
A)指向抽象类对象的指针 B)类成员数据 C)抽象类的对象 D)数组元素(15)对于抽象类的使用需要注意的地方,下列不正确的说法是:( C )A)抽象类只能用作其它类的基类,不能建立抽象类对象。
B)抽象类不能用作参数类型,函数返回类型或显式转换的类型。
C)定义抽象类时至少要定义一个虚函数。
D)可以说明指向抽象类的指针和引用,此指针可以指向它的派生类,进而可以实现多态性。
(16)关于动态联编的说法,下列哪个不正确( C )A)动态联编只能通过指针或引用标识对象来操作虚函数。
B)C++使用虚函数来指定哪些函数需要用动态联编方式处理。
C)动态联编不能实现静态类型检查。
D)动态联编能够在运行时根据其类型确认调用哪个函数。
(17)将一个类的成员函数尽可能地设置成虚函数总是有益的,下列设置虚函数必须注意的情况中,哪个是错误的( D )A)只有类的成员函数才能说明为虚函数。
B)静态成员函数不能是虚函数。
C)构造函数不能是虚函数。
D)析构函数不能是虚函数。
(18)在派生类中重新定义虚函数时必须在( A )方面与基类保持一致。
A)参数个数 B)赋值 C)参数名字 D)操作内容(19)以下哪个基类中的成员函数表示纯虚函数( C )。
A)virtual void vf(int) B)void vf(int)=0; C)virtual void vf( )=0 D)virtual void vf(int){}(20)通过一个对象调用虚函数时,C++系统对该调用采用( B )。
A)动态联编 B)静态联编 C)不确定是哪种联编 D)函数重载参考答案:CCCAC DDCBB BADAC CDACB二.判断正误(1) 函数参数个数和类型都相同,只是返回值类型不同,这不是重载函数。
(×)(2)虚函数是为实现某种功能而假设的函数,派生类的虚函数定义影响其基类,而基类的虚函数定义不影响其派生类。
(×)(3)可以在类的内部说明虚函数,这时就可以定义一个虚的内联函数。
(√)(4)空的虚函数与纯虚函数都没有函数体,因此空的虚函数与纯虚函数在概念上是一样的,只是叫法不一样。
(×)(5)只要基类的析构函数被说明为虚函数,则派生类的析构函数,无论是否使用virtual进行说明,都自动地成为虚构函数。
(√)(6)虚函数是一种virtual说明的成员函数。
(√)(7)抽象类中只能有一个纯虚函数。
(×)(8)析构函数不能说明为虚函数。
(×)(9)程序中可以说明抽象类的指针或引用,但是不能说明抽象类的对象。
(√)参考答案:××√×√√××√三.分析程序运行结果1.#include<>class base{public:base(void){fc();}virtual void fc(void){cout<<"In class base"<<endl;}virtual ~base()=0{cout<<"Destructing base object..."<<endl;}};class A:public base{public:A(void){fc();}void f(void){fc();}~A(void){fd();}void fd(void){cout<<"Destructor A object..."<<endl;}};class B:public A{public:B(void){};void fc(void){cout<<"In class B"<< endl;}~B(void){fc();}void fd(void){cout<<"Destructor B object"<<endl;}};void main(void){B b;/*由于B类是A类的子类,A类是base类的子类,所以先调用base类的构造函数,再调用A类和B类的构造函数*/cout<<endl;(); .Destructing base object...In class BDestructor A object...Destructing base object...(2)#include<>class C;class A{public :int a;A(int i){a=i;}virtual void printOn(C&);};class B:public A{public:int b;B(int i,int j):A(i){b=j;}virtual void printOn(C&);};class C{friend void A::printOn(C&);friend void B::printOn(C&);int a,b,c;public:C(int i,int j,int k){a=i;b=j;c=k;} };void A::printOn(C& t){cout<<"Class A member a="<<a <<endl;cout<<"Class C member c="<< <<endl; }void B::printOn(C& t){cout<<"Class B member b="<<b<< endl;cout<<"Class C member c="<<<< endl;}void main(){//考查内容:指向基类对象的指针,可以指向其子类对象,// 使用指针调用成员函数时,根据对象不同而调用基类与其子类中相应的同名函数A a(10);B b(10,20);C c(10,20,30);A *p;p=&a;p->printOn(c);p=&b;p->printOn(c);}参考答案:Class A member a=10Class C member c=30Class B member b=20Class C member c=30(3)#include<>class base{public:virtual void a(){cout<<"a() in base\n";} virtual void b(){cout<<"b() in base\n";} virtual void c(){cout<<"c() in base\n";} virtual void d(){cout<<"d() in base\n";} virtual void e(){cout<<"e() in base\n";} virtual void f(){cout<<"f() in base\n";} };class A:public base{public:virtual void a(){cout<<"a() in A\n";}virtual void b(){cout<<"b() in A\n";}virtual void f(){cout<<"f() in A\n";} };class B:public base{public:virtual void a(){cout<<"a() in B\n";}virtual void b(){cout<<"b() in B\n";}virtual void c(){cout<<"c() in B\n";} };class C:public A,public B{public:virtual void a(){cout<<"a() in C\n";}virtual void d(){cout<<"d() in C\n";}};void main(){C cc;A *pa=&cc;pa->a(); //C类中有a(),调用pa->b(); //C类中没有b(),从其基类中寻找,先从A类中找,有则调用,无有则从B类中寻找pa->c(); //C类中没有c(),从其基类A和B中寻找,先从A类及其基类中找,有则调用;若无,则从B类及其基类中寻并调用pa->d(); //C类中有d(),调用pa->e(); //C类中没有e(),先从A类及其基类base中寻找,从base中找到,调用pa->f(); //C类中没有f(),先从A类及其基类base中寻找,在A类中找到并调用//考查内容:多态性,指向基类对象的指针可以指向其子类对象// 这种指针调用函数时先从子类中寻找,如果有则调用,如果没有则从基类中寻找}参考答案:a() in Cb() in Ac() in based() in Ce() in basef() in A(4)#include<>#include<>class A{public:A(){}virtual void func( ){cout<<"Constructing A"<<endl;} ~A( ){}virtual void fund( ){cout<<"Destructor A"<<endl;} };class B:public A{public :B( ){func();}virtual void func(){cout<<"Constructing B"<<endl;} void fun( ){func();}~B(){fund();}};class C: public B{public:C( ){}void func(){cout<<"Class C"<<endl;}~C(){fund();}void fund( ){cout<<"Destructor C"<<endl;}};void main(){C c; //分别调用A B C类的构造函数(); //先从C类中查找,没有则从其直接基类B中查找,找到并调用//构造函数调用函数 C B A}参考答案:Constructing BClass CDestructor CDestructor A(5) #include <>#include <>class base{char *p;public:base(int sz, char *bptr){p = new char [sz];strcpy( p, bptr);cout<<"constructor base"<<endl;}virtual ~base(){delete []p;cout << "destructor base\n";}};class derive: public base{char *pp;public:derive(int sz1, int sz2, char *bp,char *dptr) : base(sz1, bp) {pp = new char [sz2];strcpy( pp, dptr);cout<<"constructor derive"<<endl;}~derive(){delete [ ]pp;cout << "destructor derive\n";}};void main(){base *px=new derive(5,7,"base", "derive");delete px;}constructor baseconstructor derivedestructor derivedestructor base四.指出下列程序中的错误#include <>class A{public:virtual void f1(){ cout<<"A::f1()"<<endl; } virtual void f2(){cout<<"A::f2()"<<endl;}};struct B: A{void f1(){cout<<"B::f1()"<<endl; }void f2(int i){ cout<<"B::f2() "<<i<<endl; }}; void main(){ A *p;p=new A;p->f1(); p->f2();p=new B;p->f1(); p->f2(3);void (A::*pa)()=A::f1;p->*pa();B b;(); }五.程序设计(1)定义一个Shape类为抽象类,其中定义一个求面积的纯虚函数,从它派生出三角形(triangle)、矩形(rectangle)、圆(circle)三个子类,每个子类有各自不同的计算面积的公式:三角形(底*高*)、矩形(长*宽)、圆(*R*R)。