C++课后复习思考题

更新时间:2024-06-19 07:55:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

复习思考题

第1章复习思考题........................................................................................................ 2 第2章复习思考题........................................................................................................ 3 第3章 复习思考题...................................................................................................... 5 第4章复习思考题...................................................................................................... 14 第5章 复习思考题.................................................................................................... 18 第6章 复习思考题.................................................................................................... 20 第7章 复习思考题.................................................................................................... 24 第8,9章复习思考题................................................................................................ 28 第11章复习思考题.................................................................................................... 32 第12章复习思考题.................................................................................................... 34 第13章复习思考题.................................................................................................... 36

第1章复习思考题

1.参照例题,编写一个能输出以下信息的程序。

How are you. Fine,thank you.

2.参照例题,编写一个求两个数78、45之差的程序。 3.参照例题,编写一个求三个数14、25、16之和的程序。 4.上机运行本章的三个例题,熟悉所用系统的上机方法与步骤。 5.上机运行本章习题1、2和3。

第2章复习思考题

1. C++语言中有哪些数据类型?分别说明它们的类型关键字、取值范围、类型长度。 2.字符常量与字符串常量的区别是什么?

3.说明下面的每个数据各属于哪一种(数值常量、字符常量、字符串、标识符、保留字、运算符、标点、非法数据)?

25 18 -3.67 12.8 “4” ?4? x1 “x2” “1949.10” cin int K_name 3ab “float x ,y “ ; if endl + “\\n” ? ; “sy1.cpp” ?\\32? \\? 4.选择题

(1)下列数据类型不是C++语言基本数据类型的是( )。

A.字符型 B.整型 C.实型 D.数组 (2)在C++语言中,080是( )。

A.八进制数 B.十进制数 C.十六进制数 D.非法数

(3)下列字符列中,可作为C++语言程序自定义标识符是( )。 A.switch B.file C.break D.do (4) 运算符 +、<=、=、% 中,优先级最低的运算符是( )。 A. + B.<= C.= D.% (5) 下列字符列中,可以作为“字符串常量”的是( )。

A. ABC B.″xyz″ C.′uvw′ D. ′a′

(6) 设变量m,n,a,b,c,d均为0,执行(m = a==b)||(n=c==d)后,m,n的值是( )。 A.0,0 B. 0,1 C. 1,0 D. 1,1 (7) 字符串”vm\\x43\\\\\\np\\102q”的长度是( )。

A. 8 B. 10 C. 17 D. 16 (8) 在C++语言中,自定义的标识符( )。

A.能使用关键字并且不区分大小写 B.不能使用关键字并且不区分大小写 C.能使用关键字并且区分大小写 D.不能使用关键字并且区分大小写

(9)设有代码“int a = 5;”,则执行了语句“a + = a - = a*a;”后,变量a的值是( )。

A.3 B. 0 C. -40 D. –12 (10)设a为5,执行下列代码后,b的值不为2的是( )。

A. b = a/2 B. b = 6-(--a) C. b = a%2 D. b = a < 3 ? 3: 2 (11)下面的( )均是C语言的整型常量。 A.0xffff 和 611 B.01b 和 0xa1

C.986.012 和 0667 D.2e4 和 0x (12)数学公式

yx?ey写成C表达式,下面的( )是正确的。

A.sqrt (abs(pow(x, y) + exp(y))) B.sqrt (abs(pow(y, x) + exp(y)))

C.sqrt (fabs(pow(x, y) + exp(y))) D.sqrt (fabs(pow(y, x) + exp(y)))

5.x为int类型,y为double类型,指出下列各表达式值的类型。 (1)1/3 (2) 48L (3) 5 % 3 (4) x*3/y (5) ?x?+20 (6) (int )y (7) y != 10 (8) x<1 || x>10 (9) x>10 ? x : sqrt (x) (10) x && y (11) true (12) (char) (x+10) (13) 1.0 /3 (14) sizeof (float) (15) x,y,x+y, 6. 写出下列算术表达式的值:

(1) x+a%3*(int)(x+y)%2/4 x=2.5,a=7,y=4.7

(2) (float)(a+b)/2+(int)x%(int)y a=2,b=3,x=3.5,y=2.5 7.设程序中有说明语句

int a=20; double x=4.7; char r= ?a?; 试求出下列每个表达式的值(假定各表达式互不影响)。 (1)a++ (2) ++r

(3) 1+a/3%4 (4) 10*sizeof( int ) (5) char (a+20) (6)a==r||a==floor(x) (7) a/9.0 (8)x=pow(3,5) (9) x=(a++,r++) (10) ceil(x-0.5) (11) a=abs(a)%8-10 (12)x=fabs(-27.2)+6 (13)floor(x+0.5) (14) ceil((x-=0.5)-0.5) (15)floor(x*1000+0.5)/1000 (16)floor(x+0.5) (17)floor(x*1000)/1000 (18)a+rand()@

(19) a % =(n % = 2),n=5 (20) a + = a - = a * = a 8.设程序中有说明语句

int x=20; float y=4.7; char ch = ?k?; 试求出下列每个表达式的值(假定各表达式互不影响) (1) x==0 (2) x!=y (3) x++ >21 (4) ?a? == ?A? (5) ch != 0 (6) x>0 && y>0 (7) x>0 && 1 (8) y>0 && 0 (9) !(x||y)==!x&&!y (10) x++ !=20 || y (11) !! ch==ch (12) !(x&&y)==!x||!y

第3章 复习思考题

1.单项选择题

(1)putchar函数可以向终端输出一个( )。

A.整型变量表达式值 B.实型变量值 C.字符串

D.字符或字符型变量值 (2)

int k=10; while(k=0) k=k-1;

则下面描述正确的是( )。

A.while循环执行10次 B.循环是无限循环 C.循环体语句一次也不执行 D.循环体语句执行一次 (3)

int x=0,s=0;

while(!x!=0) s+=++x; cout<

A.运行程序段后输出0 B.运行程序段后输出1 C.程序段中的控制表达式是非法的 D.程序段执行无限次 (4)

int x=0,y=0;

while(x<15) y++,x+=++y; cout<

则运行结果为( )。

A.20,7 B.6,12 C.20,8 D.8,20 (5)

int a=1,b=2,c=2;

while(aA.1,2,0 B.2,1,0 C.1,2,1 D.2,1,1 (6)

int x=-1; do {x=x*x;} while(!x);

下列说法正确的是( )。

A.是死循环 B.循环执行两次 C.循环执行一次 D.有语法错误

(7)以下能正确计算1*2*3*…*10的程序段是( )。

A.do {i=1;s=1; B.do {i=1;s=0;

(2)#include

void main() {int I,t,sum=0; for(t=I=1;I<=10; ) {sum+=t;++I; if(I%3= =0) t=-I; else t=I;}

cout<<“sum”< void main( ) {int I;

for(I=1;I<=5;I++) switch(I%2)

{case 0:I++; cout<<“#”;break; case 1:I+=2; cout<<“*”; default: cout<<“\\n”;}} (4)#include void main() {int y=2,a=1; while(y--!=-1)

{do {a*=y;a++; } while(y--);} cout<

#include void main() {int I,j;

for(I=4;I>=1;I--)

{for(j=1;j<=I;j++) putchar(?#?); for(j=1;j<=4-I;j++) putchar(?*?); putchar(?\\n?);}} (6) #include void main() { int I,k=0; for(I=1; ;I++) {

k++;

if(k%3= =0) break; }

cout<

(7) #include

void main( ) {

int I=1; while(I<=15)

if(++I%3!=2) continue; else cout<

(8) #include

void main() {

nt a=10,y=0; do { a+=2;y+=a; if(y>50) break; } while(a=14);

cout<<“a=”<

(9) #include void main() {

int I, k=19; while(I=k-1) {

k-=3;

i f(k%5= =0) {I++;continue;} else if(k<5) break; I++; }

cout<<“I=”<

(10)#include void main() { int i=5; do {

switch(i%2) {

case 4:i--;break; case 6:i--;continue;

} i--;i--; cout<

} while(i>0);

}

4.回答下列问题

(1)C++语言提供了哪些常用的语句?

(2)条件语句的格式如何?if语句中对else子句有何规定? (3)开关语句的格式如何?break语句在开关语句中有何作用? (4)在开关语句中,case子句的条件有何特点?

(5)C++语言提供哪些循环语句?它们各自的特点是什么?它们可以相互替代吗?可以相互嵌套吗?

(6)while 和do~while循环语句有什么区别吗? (7)contine、break语句在循环中分别起到什么作用?

5.按下列要求编写程序 (1)有一个函数如下: x (x<5)

y= x+6 (5<=x<15) x-6 (x>=15) 输入x的值,计算出相应的y值。

(2)编程要求输入整数a和b,若a2+b2大于100,则输出a2+b2百位以上的数字,否则输出两数之和。 (3)根据π/4 =1-1/3+1/5-1/7+…求π的近似值,直到最后一项的值小于0.000001为止。 (4)编程输出如下图形:

* ***** ********* *************

***************** ********************* (5)求1!+2!+3!+…8!。

(6)打印出所有的“水仙花数“(它是一个三位数,其各位数字立方和等于该数本身)。 (7)编写一个程序,输入年、月,打印出该年份该月的天数。

(8)输入一个自然数,输出其各因子的连乘形式,如输入12,则输出12=1*2*2*3。 (9)求一个整数任意次方的最后三位数。

(10)猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,发现只剩一个桃子了,求猴子第一天究竟摘了多少个桃子?

第4章复习思考题

1.选择题

(1)以下正确的说法是()。

A.用户若需要调用标准函数,调用前必须重新定义 B.用户可以直接调用所有标准库函数

C.用户可以定义和标准库函数重名的函数,但是在使用时调用的是系统库函数

D.用户可以通过文件包含命令将系统库函数包含到用户源文件中,然后调用系统库函数 (2)如果一个函数无返回值,定义时它的函数类型应是()。

A.任意 B.int C.void D.无 (3)关于函数返回值的的描述正确的是()。

A.函数返回表达式的类型一定与函数的类型相同 B.函数返回值的类型决定了返回值表达式的类型

C.当函数类型与返回值表达式类型不同,将对返回值表达式的值进行类型转换 D.函数返回值类型就是返回值表达式类型

(4)下列哪个不是重载函数在调用时选择的依据( 。)

A.参数类型 B.参数个数 C.函数类型 D.函数名

(5)在参数传递过程中,对形参和实参的要求是( )。

A.函数定义时,形参一直占用存储空间 B.实参可以是常量、变量或表达式 C.形参可以是常量、变量或表达式 D.形参和实参类型和个数都可以不同 (6)下列各类变量,哪个不是局部变量( )。

A.register型变量 B.外部static变量 C.auto型变量 D.函数形参

(7)在C++语言中,关于参数默认值的描述正确的是( )。

A.只能在函数定义时设置参数默认值 B.设置参数默认值时,应当从右向左设置 C.设置参数默认值时,应当全部设置

D.设置参数默认值后,调用函数不能再对参数赋值

(8)对于一个功能不太复杂,并且要求加快执行速度,选用( )合适。

A.内联函数 B.重载函数 C.递归调用 D.嵌套调用 (9)预处理命令以( )开头。

A. * B. # C. / D. : (10)对数组名作函数的参数,下面描述正确的是( )。

A.数组名作函数的参数,调用时将实参数组复制给形参数组 B.数组名作函数的参数,主调函数和被调函数共用一段存储单元 C.数组名作参数时,形参定义的数组长度不能省略 D.数组名作参数,不能改变主调函数中的数据 2.分析程序并写出结果 (1)#include

void fun( ); int n=5; void main( ) { int n=10; cout<

cout<

(2)#include

void fun( ); void main( ) { int i;

for(i=0;i<5;i++) }

void fun( ) {

static int m=0; cout<

(3)#include

#include void fun(int array[ ],int n); void main( ) {

int a[10]={5,8}; int i; fun(a,10); for(i=0;i<10;i++) }

void fun(int array[ ],int n) { int i;

for(i=2;i

(4)#include

array[i]=array[i-1]+array[i-2]; cout<

#define M 20 #define N 10 #define L(r) r*r void main( ) {

cout<

cout<

(5)#include

int add(int x,int y=8); void main( ) {

int a=4;

cout<

int add(int x,int y) {

return x+y; }

(6)#include

int fun(double a,double b); void main( )

{ cout<

int fun(double a,double b) {

return a*b; }

(7)#include

#include void fun(char string[ ]); void main( ) {

char str[20]=\ cout<

void fun(char string[ ] ) { int i;

for(i=0;i

if (string[i]>='a' && string[i]<='z')

}

string[i]-=32;

3.编写函数将化氏温度转换为摄氏温度,公式为C=(F-32)*5/9;并在主函数中调用。 4.分别利用非递归和递归的方法编写函数求斐波那契数列第n项。 5.编写函数将字符串按逆序存放。 6.编写函数实现字符串拷贝功能。

7.编写函数利用数组名作参数计算数组arr[3][4]所有元素的和。

8.编写函数利用递归的方法计算x的n阶勒让德多项式的值。该公式如下:

(n?0)?1 ?PX(x)??x (n?1)

?((2?n-1)?x?Pn-1(x)-(n-1)?Pn-2(x))/n (n?1)?9.利用重载编写求整数绝对值和求实数绝对值两个函数。 10.利用全局变量并编写函数统计数组中奇数和偶数的个数。

第5章 复习思考题

1.指出下面程序中的错误 #include void main()

{ char x[5]=\; cout<

2.指出下面各题列出的代码中的错误。 (1)试图打印数组a的第5个元素值: cout<

(4)char a[12]= \;

3.有一个数组,内放10个整数,要求找出最小的数和它的下标。然后把它和数组中最前面的元素对换。 4.邮票组合。某人有4张3分的和3张5分的邮票。用这些邮票中的一张或若干张可以得到多少种不同的邮资?

5.用筛选法求100以内的素数。

6.有n个数,已按由小到大顺序排列好,要求输入一个数,把它插入到原有数列中,而且仍然保持有序,同时输出新的数列。

7.打印如下的杨辉三角形(要求打印出10行)

1 1 1

1 2 1 1 3 3 1

1 4 6 4 1

1 5 10 10 5 1 … … … … … …

8.有17个人围成一个圈(编号0~16),从第0号的人开始从1报数,凡报到3的倍数的人离开圈子,然后再数下去。直到最后只剩下一个人为止。问此人原来的位置是多少号?

9.将螺旋方阵存放到n×n的二维数组中并把它打印输出。要求由程序自动生成下图所示螺旋方阵。n由程序读入。

1 16 15 14 13

2 17 24 23 12

3 18 25 22 11

4 19 20 21 10

5 6 7 8 9

10.水仙花数。如果一个正整数等于组成该数的各个数字的立方和,则称该数为水仙花数,亦称阿姆斯特朗数。如407=43+03+73,407是一个水仙花数。试编写求100~999之间的所有水仙花数的程序。

11. 输入一个n×n矩阵各元素的值,求出两条对角线元素值之和。

12. 有一行字符,要求将每个单词中的第一个字母改成大写字母(如果已经是大写则不变)。

13.有三行文字,找出其中共有多少个空格、多少个单词。规定单词以一个或多个空格相隔。如果一个单词恰好在行末结束,则下一行开头应有空格。句号或逗号后面亦应有空格。(提示:注意要考虑当最后一行最后一个单词恰好结束在最后一列的情况)

14.有一行文字,要求删去其中某个字符。此行文字和要删的字符均由键盘输入。要删的字符以字符形式输入(如输入a表示要删去所有的a字符有)。

15.编写一程序,将两个字符串连接起来,不用strcat函数。

16.编写一程序,将字符串s1和s2比较,如果s1>s2,输出一个正数;s1=s2,输出0;s1

17.编写一程序,将字符数组s2中的全部字符拷贝到字符数组s1中。不用strcpy函数。拷贝时,?\\0?也要拷贝过去。?\\0?后面的字符不拷贝。

第6章 复习思考题

1.选择题:

(1)如果x是整型变量,则合法的形式是( )。

A.&(x+5)

≤10)。

A.p[i]

B.*(*(a+i))

C.a[p-a]

D.*(&a[i])

(3)以下程序的输出结果是( )。

#include void main()

{ int a[3]={10,15,20}; int *p1=a,*p2=&a[1]; *p1=*(p2-1)+5; *(p1+1)=*p1-5; cout<

B.10

C.15

D.20

(4)执行以下程序段后,m的值为 ( )。

int a[2][3]={{1,2,3},{4,5,6}}; int m,*p=&a[0][0]; m=(*p)*(*(p+2))*(*(p+4)); A.15

B.14

C.13

D.12

(5)以下程序的输出结果是( )。

#include

void fun(int x,int y,int *cp,int *dp) { *cp=x+y; }

void main() { int a,b,c,d; } A.50,30

( )。

A.funa(int *x,int *y) {

int *p; *p=*x; *x=*y; *y=*p;

B.funb(int x,int y)

{ int t; t=x; x=y; y=t;

B.30,50

C.80,-20

D.80,20

(6)要求函数的功能是交换x和y中的值,且通过正确调用返回交换结果。能正确执行此功能的函数是

a=30,b=50; fun(a,b,&c,&d); cout<

B.*x

C.&*x

D.*&x

(2)若有语句int a[10]={0,1,2,3,4,5,6,7,8,9},*p=a;则( )不是对a数组元素的正确引用(其中0≤i

}

}

B.fund(int x,int y) }

{ *x=*x+*y; *y=*x-*y; *x=*x-*y;

A.func(int *x,int *y) {

*x=*y; *y=*x; }

(7)以下程序的输出结果是( )。

#include void main() { }

A.4,2,1,1 B.4,9,3,1 int (*ptr)();

A.ptr是指向一维数组的指针变量 B.ptr是指向int 型数据的指针变量

C.ptr是指向函数的指针,该函数返回一个int型数据 D.ptr是一个函数名,该函数的返回值是指向int型数据的指针

(9)若有如下语句:

int **pp,*p,a=10,b=20; pp=&p; p=&a; p=&b;

cout<<*p<<”,”<<**p<

B.10,10

C.20,10

D.20,20

(10)设char **s;以下正确的表达式是( )。

A.s=”computer”;

B.*s=”computer”; C.**s=”computer”; D.*s=?c?;

2.编写程序,在堆内存中申请一个float型数组,把10个float型数据0.1、0.2、0.3、?、1.0赋予该数组,然后使用float型指针输出该数组的各元素值并求出其累加和。

3.编写一个函数f,将传入此函数的直角坐标值转换为极坐标值,并返回主调函数中。求极坐标的公式是:

c=

C.5,8,6,1

D.8,8,8,8

(8)设有如下定义,下面关于ptr正确叙述是( )。

char *s=\int v1=0,v2=0,v3=0,v4=0; for (int k=0;s[k];k++)

switch(s[k]) { }

default:v4++; case '1':v1++; case '3':v3++; case '2':v2++;

cout<

x2?y2 q=arctan(y/x)

若要将两值返回主调函数,有多种方式可以完成,请试之: (1)两值均以指针形参带回。

(2)由指针形参带回一个值,函数值返回另一个值。 (3)两值均以引用形参返回。

(提示:程序中可以使用C库函数sprt、pow及atan,它们的头文件为stdlib.h)

4.使用指针编写函数strcat(),实现两个字符串的首尾连接(将字符串str2接到str1的后面,str1最后面的‘\\0’被取消)。

5.编写从多个字符串中寻找最长串的函数 char *maxstr(char *str[ ],int n)

其中,str是字符串数组,n是字符串个数。函数返回值为最长串地址。 6.写一个函数,将一个n阶方阵转置。具体要求如下:

(1)初始化一个矩阵A(5×5),元素值取自随机函数,并输出。 (2)将其传递给函数,实现矩阵转置。 (3)在主函数中输出转置后的矩阵。

(提示:程序中可以使用C++库函数rand( ),其功能是产生一个随机数0~65535,其头文件为stdlib.h) 7.编写一个程序,实现在命令行中以参数的形式接收两个整数,输出这两个整数的和。

(提示:程序中可以使用C++库函数atoi(),其功能是将字符串转换成整型值,其头文件为stdlib.h) 8.使用引用参数编制程序,实现两个字符串变量的交换。例如开始时:

char *ap=”hello”; char *bp=”how are you”;

交换后使ap和bp指向的内容别是: ap:”how are you” bp:”hello”

9.下列程序能够生成由10个整数组成的安全数组。其中put()函数的作用是将值放入数组中,get()函数的作用是取出数组中某元素的值,如果在put()函数和get()函数中遇到下标越界则给出提示信息 “range error!”并退出程序。请完成put()函数和get()函数的定义。

#include #include int &put(int n); int get(int n); int array[10]; int error=-1; void main() { put(0)=10; put(1)=20; put(9)=40; cout<

运行结果是: 10

20 30

range error!

第7章 复习思考题

1.选择题

(1)下列关于结构体的说法错误的是( )。

A.结构体是由用户自定义的一种数据类型 B.结构体中可设定若干个不同数据类型的成员

C.结构体中成员的数据类型可以是另一个已定义的结构体 D.在定义结构体时,可以为成员设置默认值 (2)下列结构体定义,正确的是( )。

A. B.

record { struct record { int no; int no; char num[16]; char num[16]; float score ; float score ; } ; } C. D.

struct record { struct record { int no; int no char num[16]; char num[16] float score ; } ; float score } (3)下列声明结构体变量错误的是( )。

A.struct student { B. struct student{ int no; int no;

char name[16]; char name[16]; } st1,st2; }; struct student st1,st2;

C. D.

struct student { struct student {

int no; int no;

char name[16]; char name[16]; } ; }; student st1,st2; struct st1,st2; (4)若有同下[定义,下列说法错误的是( )。

struct em { char a; char b;

}

A.struct是结构体类型关键字 B.em 是结构体类型名 C.em 是用户声明的结构体变量 D.a,b是结构体成员名 (5)若有下列定义,则对结构体变量的成员引用错误的是( )。

struct date { int year; int month; int day;} struct student{ int no;

char name[16]; date birthday; } stud;

A. stud.no B. stud.name C. stud.birthday D. stud.birthday.year (6)若有下列定义,则错误的赋值语句是( )。

enum color {red,yellow,blue,green} col; int k;

A. col=red B. col=3 C. k=red+2 D. k=red+blue 2.写出下列程序的运行结果 (1)#include

struct ab {

char a[5]; float b; };

void main() {

ab x={\

cout<

(2) #include

struct ab {char a ; float b; };

void f(ab &y) { y.a='W'; y.b=90.5; }

void main() {

ab x={'L',89.5}; f(x);

cout<

(3) #include

union data { int m; char ch; float x; } a;

k++; }

void Csample::Display( ) {

cout<<\}

void main( ) {

Csample a,b; a.Display( ); b.Display( ); }

3.按要求编写程序。

(1)编写一个程序,设计一个产品类Product,其定义如下: class Product {

char *name; //产品名称 int price; //产品单价 int quantity; //剩余产品数量 public:

product(char *n,int p int q); //构造函数 ~product( ); //析构函数 void buy(int money); //购买产品

void get() const; //显示剩余产品数量 };

并用数据进行测试。

4.编写出程序,计算两点之间的距离。

提示:可以定义点类(Point),再定义一个类(Distance)描述两点之间的距离,其数据成员为两个点类对象,两点之间距离的计算可设计由构造函数来实现。

5.定义盒子Box类,要求具有以下成员:可设置盒子形状;可计算盒子体积;可计算盒子的表面积。 6.定义计数器类Counter。要求具有以下成员:计数器值;可进行增值和减值记数;可提供记数值。 7.编写一个程序计算两个给定的长方形的周长和面积。 8.编写一个程序,采用一个类求n!,并输出10!的值。

9.编写一个程序,设计一个Cdate类,它应该满足下面的条件:

1)用这样的格式输出日期:日-月-年。 2)输出在当前日期上加两天后的日期。

3)设置日期。

第11章复习思考题

1.选择题

(1)C++中的类有两种用法:一种是类的实例化,即生成类对象,并参与系统的运行;另一种是通过( )派生了新的类。

A.复用 B.继承 C.封装 D.引用

(2)继承具有( ),即当基类本身也是某一个类派生类时,底层的派生类也会自动继承间接基类的成员。

A.规律性 B.传递性 C.重复性 D.多样性 (3)下列对基类和派生类关系的描述中,错误的是( )。 A.派生类是基类的具体化 B.派生类是基类的子集 C.派生类是基类定义的延续 D.派生类是基类的组合

(4)下列对派生类的描述中,错误的是( )。 A.一个派生类可以作为另一个派生类的基类 B.派生类至少有一个基类

C.派生类的缺省继承方式是private

D.派生类只继承了基类的公有成员和保护成员 (5)下列对继承的描述中,错误的是( )。 A.析构函数不能被继承 B.派生类也是基类的组合

C.派生类的成员除了它自己的成员外,还包含了它的基类的成员 D.派生类中继承的基类成员的访问权限到派生类保持不变

(6)派生类的对象对它的基类成员中( )是可以访问的。 A.公有继承的公有成员 B.公有继承的私有成员 C.公有继承的保护成员 D.私有继承的公有成员 (7)下列说法错误的是( )。

A.公有继承的基类中的public成员在派生类中仍是public的 B.公有继承的基类中的private成员在派生类中仍是private的 C.私有继承的基类中的public成员在派生类中仍是private的 D.保护继承的基类中的public成员在派生类中仍是protected的 (8)下面叙述错误的是( )。

A.基类的protected成员在派生类中仍然是protected

B.基类的protected成员在public派生类中仍然是protected的 C.基类的protected成员在private派生类中是private的 D.基类的protected成员不能被派生类的对象访问 (9)C++类体系中,不能被派生类继承的有( )。

A.构造函数 B.虚函数 C.静态成员函数 D.赋值操作函数 (10)设置虚函数的声明中,正确的是( )。

A.简化程序 B.消除二义性 C.提高运行效率 D.减少目标代码 (11)下列虚基类的声明中,正确的是( )。

A.class virtual B:public A B.virtual class B:public A C.class B:public A virtual D.class B: virtual public A

(12)在下面的表达式中,不表示虚继承的是( )。 A.virtual public B.public virtual C.public D. virtual

2.比较类的三种继承方式public(公有继承)、protected(保护继承)、private(私有继承)之间的差别。

3. 派生类构造函数执行的次序是怎样的?

4. 如果在派生类B已经重载了基类A的一个成员函数fn1(),没有重载成员函数fn2(),如何调用基类的成员函数fn1(),fn2()?

5. 什么叫做虚基类?它有何作用?

6. 声明一个Shape基类,在此基础上派生出Rectangle和Circle类,二者都有GetArea()函数计算对象的面积。使用Rectangle类创建一个派生类Square。

7. 声明一个哺乳动物Mammal类,再由此派生出狗Dog类,声明一个Dog类的对象,观察基类与派生类的构造函数与析构函数的调用顺序。

8.定义一个基类有姓名、性别、年龄,再由基类派生出教师类和学生类,教师类增加工号、职称和工资,学生类增加学号、班级、专业和入学成绩。

第12章复习思考题

1.选择题

(1)下列关于动态联编的描述中,错误的是( )。 A.动态联编是以虚函数为基础

B.动态联编是运行时确定所调用的函数代码的 C.动态联编调用函数操作是指向对象的指针或对象引用 D.动态联编是在编译时确定操作函数的 (2)关于虚函数的描述中,正确的是( )。 A.虚函数是一个静态成员函数 B.虚函数是一个非成员函数

C.虚函数即可以在函数说明明定义,也可以在函数实现时定义 D.派生类的虚函数与基类中对应的虚函数具有相同的参数个数和类型 (3)下面4个选项中,( )是用来声明虚函数的。 A.virtual B.public C.using D.false (4)编译时的多态性可以通过使用( )获得。 A.虚函数和指针 B.重载函数和析构函数 C.虚函数和对象 D.虚函数和引用 (5)关于纯虚函数和抽象类的描述中,错误的是( )。 A.纯虚函数是一种特殊的虚函数,它没有具体的实现 B.抽象类是指具体纯虚函数的类

C.一个基类中说明有纯虚函数,该基类派生类一定不再是抽象类 D.抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出 (6)下列描述中,( )是抽象类的特征。

A.可以说明虚函数 B.可以进行构造函数重载 C.可以定义友元函数 D.不能说明其对象 (7)以下( )成员函数表示虚函数。

A.virtual int vf(int); B.void vf(int)=0;

C.virtual void vf()=0; D.virtual void vf(int) { }; (8)如果一个类至少有一个纯虚函数,那么就称该类为( )。 A.抽象类 B.虚函数 C.派生类 D.以上都不对 (9)要实现动态联编,必须通过( )调用虚函数。 A.对象指针 B.成员名限定 C.对象名 D.派生类名 (10)下面描述中,正确的是( )。 A.virtual可以用来声明虚函数

B.含有纯虚函数的类是不可以用来创建对象的,因为它是虚基类 C.即使基类的构造函数没有参数,派生类也必须建立构造函数 D.静态数据成员可以通过成员初始化列表来初始化 2.什么叫做多态性?在C++语言中是如何实现多态的?

3.什么叫做抽象类?抽象类有何作用?抽象类的派生类是否一定要给出纯虚函数? 4.声明一个参数为整型、无返回值、名为fun1的虚函数。

5.在C++语言中,能否声明虚构造函数?为什么?能否声明虚析构函数?有何用途?

6.实现重载函数Double(x),返回值为输人参数的两倍;参数分别为整型、长整型、浮点型、双精度型,返回值类型与参数一样。

7.声明一个Rectangle类,有长itsWidth、宽itsLength等属性,重载其构造函数Rectanle()和Rectangle(int width,int length)。

8.声明计数器Counter类,对其重载运算符“+”。

9.声明一个哺乳动物Mammal类,再由此派生出狗Dog类,二者都定义Speak( )成员函数,基类中定义为虚函数。声明一个Dog类的对象,调用Speak()函数,观察运行结果。

10.声明一个Shape抽象类,在此基础上派生出Rectangle和Circle类,二者都有GetArea( )函数计算对象的面积,GetPerim( )函数计算对象的周长。

11.应用抽象类,求圆、圆内接正方形和圆外切正方形的面积和周长。

12.分别用成员函数和友元函数重载运算符,使对实型的运算符=、+、-、*、/ 适用于复数运算。

第13章复习思考题

1. 当使用ifstream流类定义一个对象并打开一个磁盘文件时,文件的隐含打开方式是什么? 2. 当使用ofstream流类定义一个对象并打开一个磁盘文件时,文件的隐含打开方式是什么? 3. 当使用fstream流类定义一个对象并打开一个磁盘文件时,文件的隐含打开方式是什么? 4.若在程序文件中进行标准输入输出操作,则必须在文件开始的#include命令中使用哪一个头文件? 5.若在程序文件中进行文件的输入输出操作,则必须在文件开始的#include命令中使用哪一个头文件? 6.什么是格式状态标志? 7.程序中有说明语句:

int a1; char a2 ; double a3 ; 根据下面的输出要求写出相应的cout语句。

(1)输出a1、a2、a3的值,每两个值之间用5个空格间隔。; (2)以固定长度10按左对齐方式输出变量a1的值。

(3)以固定长度10按左对齐方式输出变量a1的值,如果a1值为正,要求输出前面的正号。 (4)以固定长度15按右对齐方式输出变量a3的值,用填充字符*填充不足部分(用浮点数的定点数表示法表示)。

(5)以固定长度15、小数点后保留3位、按左对齐方式输出变量a3的值。 8. 现在需要打开empfile文件,进行文件更新操作,应使用什么语句来实现? 9.在C++语言中,二进制文件可以用来存放哪些数据类型的数据?

10.执行完函数调用indata.seekg(0 ,ios : : end);后。函数indata.tellg()将返回什么值? 11.简述几种打开文件方式ios::in 、ios::out、ios::app及ios::in|ios::out之间的区别。 12.如何判断打开文件操作是否成功?

13.函数exit()的功能是什么?在程序中的作用是什么?

14.函数close()实现什么操作?为什么完成对文件的操作后应及时关闭文件? 15.顺序访问文件与随机访问文件之间的区别是什么?

16.编写一个完整的C++程序,功能是读取一个文本文件的内容,并将文件内容以10行为单位输出到屏幕上,每输出10行就询问用户是否结束程序,不是则继续输出文件后面的内容。

17.按下面每个题目的要求编写出相应的函数 (1)利用一个字符文件保存100以内的所有素数。

(2)利用一个字节文件保存10个100以内的随机整数,要求保存的所有值各不相同。

第13章复习思考题

1. 当使用ifstream流类定义一个对象并打开一个磁盘文件时,文件的隐含打开方式是什么? 2. 当使用ofstream流类定义一个对象并打开一个磁盘文件时,文件的隐含打开方式是什么? 3. 当使用fstream流类定义一个对象并打开一个磁盘文件时,文件的隐含打开方式是什么? 4.若在程序文件中进行标准输入输出操作,则必须在文件开始的#include命令中使用哪一个头文件? 5.若在程序文件中进行文件的输入输出操作,则必须在文件开始的#include命令中使用哪一个头文件? 6.什么是格式状态标志? 7.程序中有说明语句:

int a1; char a2 ; double a3 ; 根据下面的输出要求写出相应的cout语句。

(1)输出a1、a2、a3的值,每两个值之间用5个空格间隔。; (2)以固定长度10按左对齐方式输出变量a1的值。

(3)以固定长度10按左对齐方式输出变量a1的值,如果a1值为正,要求输出前面的正号。 (4)以固定长度15按右对齐方式输出变量a3的值,用填充字符*填充不足部分(用浮点数的定点数表示法表示)。

(5)以固定长度15、小数点后保留3位、按左对齐方式输出变量a3的值。 8. 现在需要打开empfile文件,进行文件更新操作,应使用什么语句来实现? 9.在C++语言中,二进制文件可以用来存放哪些数据类型的数据?

10.执行完函数调用indata.seekg(0 ,ios : : end);后。函数indata.tellg()将返回什么值? 11.简述几种打开文件方式ios::in 、ios::out、ios::app及ios::in|ios::out之间的区别。 12.如何判断打开文件操作是否成功?

13.函数exit()的功能是什么?在程序中的作用是什么?

14.函数close()实现什么操作?为什么完成对文件的操作后应及时关闭文件? 15.顺序访问文件与随机访问文件之间的区别是什么?

16.编写一个完整的C++程序,功能是读取一个文本文件的内容,并将文件内容以10行为单位输出到屏幕上,每输出10行就询问用户是否结束程序,不是则继续输出文件后面的内容。

17.按下面每个题目的要求编写出相应的函数 (1)利用一个字符文件保存100以内的所有素数。

(2)利用一个字节文件保存10个100以内的随机整数,要求保存的所有值各不相同。

本文来源:https://www.bwwdw.com/article/iie3.html

Top