C++面向对象程序设计复习题集

更新时间:2024-03-13 19:37:01 阅读量: 综合文库 文档下载

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

C++面向对象程序设计复习题集

一、单项选择题

1. C++源程序文件的默认扩展名为( A )。

A. cpp B. exe C. obj D. lik

2. 由C++源程序文件编译而成的目标文件的默认扩展名为( C )。 A. cpp B. exe C. obj D. lik

3. 由C++目标文件连接而成的可执行文件的默认扩展名为( B )。 A. cpp B. exe C. obj D. lik

4. C++程序从上机到得到结果的几个操作步骤依次是( B )。 A. 编译、编辑、连接、运行 B. 编辑、编译、连接、运行 C. 编译、运行、编辑、连接 D. 编辑、运行、编辑、连接

5. 以下标识符中不全是保留字的是( B )。 A. case for int B. default then while C. bool class long D. goto return char

6. 能作为C++程序的基本单位是( C )。

A. 字符 B. 语句 C. 函数 D. 源程序文件 7. 程序中主函数的名字为( A )。

A. main B. MAIN C. Main D. 任意标识符 8. C++程序的基本模块为( D )。

A. 表达式 B. 标识符 C. 语句 D. 函数 9. 可用作C++语言用户标识符的一组标识符是( B )。

A. void define +WORD B. a3_b3 _123 YN C. for -abc Case D. 2a DO sizeof

10. 存储以下数据,占用存储字节最多的是( D )。 A. 0 B. ?0? C. “0” D. 0.0

11. 程序运行中需要从键盘上输入多于一个数据时,各数据之间应使用( D )符号作为分隔符。

A. 空格或逗号 B. 逗号或回车 C. 逗号或分号 D. 空格或回车 12. 设”int a=12;”,则执行完语句”a+=a*a;”后,a的值是( C )。 A. 12 B. 144 C. 156 D. 288

13. 假设在程序中 a、b、c 均被定义成整型,所赋的值都大于1,则下列能正确表示代数式的表达式是( D )。

A. 1.0/a*b*c B. 1/(a*b*c) C. 1/a/b/(float)c D. 1.0/a/b/c

14. 设”int a=15,b=26;”,则”cout<<(a,b);”的输出结果是( D )。

1abc 1

A. 15 B. 26,15 C. 15,26 D. 26

15. 设x是一个bool型的逻辑量,y的值为10,则表达式 x && y的值为( C )。 A. 1 B. 0 C. 与x值相同 D. 与x值相反 16. x>0 && x<=10的相反表达式为( A )。

A. x<=0 || x>10 B. x<=0 && x>10 C. x<=0 || x<=10 D. x>0 && x>10

17. x>0 || y==5的相反表达式为( B )。

A. x<=0 || y!=5 B. x<=0 && y!=5 C. x>0 || y!=5 D. x>0 && y==5

18.设x和y均为bool量,则x && y为真的条件是( A )。 A. 它们均为真 B. 其中一个为真 C. 它们均为假 D. 其中一个为假

19.设x和y均为bool量,则x || y为假的条件是( C )。 A. 它们均为真 B. 其中一个为真 C. 它们均为假 D. 其中一个为假 20. 字符串”a+b=12\\n”的长度为( B )。 A. 6 B. 7 C. 8 D. 9

21. 假定下列x和y均为int型变量,则不正确的赋值为( B )。 A. x+=y++ B. x++=y++ C. x=++y D. ++x=++y 22. 下列的符号常量定义中,错误的定义是( C )。 A. const M=10; B. const int M=20;

C. const char ch; D. const bool mark=true;

23. 循环语句“for(int i=0; i

24. 在下面循环语句中循环体执行的次数为( B )。 for(int i=0; in/2) break;

A. n/2 B. n/2+1 C. n/2-1 D. n-1

25. 在下面循环语句中内层循环体S语句的执行总次数为( D )。 for(int i=0; i

for(int j=i; j

A. n2

B. (n+1)/2 C. n(n-1)/2 D. n(n+1)/2 26. 在下面循环语句中循环体执行的次数为( C )。 int i=0,s=0; while(s<20) {i++; s+=i;} A. 4 B. 5 C. 6 D. 7

27. 在下面循环语句中循环体执行的次数为( A )。 int i=0; do i++; while(i*i<10); A. 4 B. 3 C. 5 D. 2

28. 当处理特定问题时的循环次数已知时,通常采用( A )来解决。

A. for循环 B. while循环 C. do循环 D. switch语句 29. 循环体至少被执行一次的语句为( C )。

A. for循环 B. while循环 C. do循环 D. 任一种循环

。2

30. switch语句能够改写为( B )语句。

A. for B. if C. do D. while 31. do语句能够改写为( D )语句。

A. 复合 B. if C. switch D. while 32. 在下面的一维数组定义中,哪一个有语法错误。( C ) A. int a[]={1,2,3}; B. int a[10]={0}; C. int a[]; D. int a[5];

33. 在下面的字符数组定义中,哪一个有语法错误。( D )。 A. char a[20]=”abcdefg”; B. char a[]=”x+y=55.”; C. char a[15]; D. char a[10]=’5’; 34. 在下面的二维数组定义中,正确的是( C )。

A. int a[5][]; B. int a[][5]; C. int a[][3]={{1,3,5},{2}}; D. int a[](10); 35. 假定一个二维数组的定义语句为“int a[3][4]={{3,4},{2,8,6}};”,则元素a[1][2]的值为( C )。

A. 2 B. 4 C. 6 D. 8 36. 假定一个二维数组的定义语句为“int a[3][4]={{3,4},{2,8,6}};”,则元素a[2][1]的值为( A )。

A. 0 B. 4 C. 8 D. 6

37. 若定义了函数 double *function(), 则函数function的返回值为( B )。 A. 实数型 B.实数的地址 C.指向函数的指针 D.函数的地址 38. 以下说法中正确的是( B )。

A. C++程序总是从第一个定义的函数开始执行 B. C++程序总是从main函数开始执行

C. C++函数必须有返回值,否则不能使用函数

D. C++程序中有调用关系的所有函数必须放在同一个程序文件中 39. 以下叙述中不正确的是( C )。

A. 在一个函数中,可以有多条return语句

B. 函数的定义不能嵌套,但函数的调用可以嵌套 C. 函数必须有返回值

D. 不同的函数中可以使用相同名字的变量 40. 函数重载是指( A )。

A. 两个或两个以上的函数取相同的函数名,但形参的个数或类型不同

B. 两个以上的函数取相同的名字和具有相同的参数个数,但形参的类型可以不同 C. 两个以上的函数名字不同,但形参的个数或类型相同

D. 两个以上的函数取相同的函数名,并且函数的返回类型相同 41. 以下关于函数模板叙述正确的是( C )。 A. 函数模板也是一个具体类型的函数

B. 函数模板的类型参数与函数的参数是同一个概念

C. 通过使用不同的类型参数,函数模板可以生成不同类型的函数 D. 用函数模板定义的函数没有类型 42. 下列( C )的调用方式是引用调用。

3

A. 形参和实参都是变量 B.形参是指针,实参是地址值 C. 形参是引用,实参是变量 D.形参是变量,实参是地址值

43. 为了提高程序的运行速度,可将不太复杂的功能用函数实现,此函数应选择( A )。 A. 内联函数 B.重载函数 C.递归函数 D.函数模板 44. 函数原型语句正确的是( B )。

A. int Function(void a); B.void Function (int); C. int Function(a); D.void int(double a); 45. C++中函数返回值的类型是由( B )决定的。

A. return语句中表达式的类型 B.该函数定义时的类型 C.调用函数时的调用语句 D.系统根据结果 46. 以下函数的返回结果是( A )。 int function(char *x) {

char *p=x; while(*p++); return(p-x-1); }

A. 求字符串的长度 B.将字符串x连接到字符串p后面 C. 将字符串x复制到字符串p中 D.将字符串x反向存放

47. 函数调用func((exp1,exp2),(exp3,exp4,exp5))中所含实参的个数为( B )个。 A. 1 B. 2 C. 4 D. 5 48. 设有如下函数定义

int f(char *s) { char *p=s;

while(*p!=?\\0?) p++; return(p-s); }

在主函数中用cout<

A. 用户调用标准库函数前,必须重新定义

B. 用户可以重新定义标准库函数,若如此,该函数将失去原有含义 C. 系统不允许用户重新定义标准库函数

D. 用户调用标准库函数前,不必使用预编译命令将该函数所在文件包括到用户源文件中 51. 函数调用不可以( D )。 A. 出现在一个表达式中 B. 出现在执行语句中 C. 作为一个函数的实参 D. 作为一个函数的形参 52. 以下正确的描述是( B )。

4

A. 函数的定义可以嵌套,函数的调用不可以嵌套 B. 函数的定义不可以嵌套,函数的调用可以嵌套 C. 函数的定义和函数的调用均可以嵌套 D. 函数的定义和函数的调用均不可以嵌套

53. 若用数组名作为函数调用的实参,传递给形参的是(A )。 A. 数组的首地址 B. 数组中第一个元素的值 C. 数组全部元素的值 D. 数组元素的个数 54. 以下错误的描述是( D )。

A. 被调用函数中可以不用return语句 B. 被调用函数中可以用多个return语句

C. 被调用函数中,如果有返回值,就一定要有return语句 D. 被调用函数中,一个return语句可返回多个值给调用函数 55. 以下正确的描述是( C )。 A. 不允许设置参数的默认值

B. 设置参数的默认值只能在定义函数时设置 C. 设置参数的默认值时,应该设置右边的参数 D. 设置参数的默认值时,应该全部参数都设置 56. 采用重载函数的目的是(D )。 A. 实现共享 B. 减少空间

C. 提高速度 D. 使用方便,提高可读性

57. 将两个字符串连接起来组成一个字符串时,选用( C )函数。 A. strlen() B. strcap() C. strcat() D. strcmp() 58. 以下叙述中正确的是( B )。

A. 使用#define可以为常量定义一个名字,该名字在程序中可以再赋另外的值 B. 使用const定义的常量名有类型之分,其值在程序运行时是不可改变的 C. 在程序中使用内联函数使程序的可读性变差

D. 在定义函数时可以在形参表的任何位置给出缺省形参值 59. 下面的标识符中,( C )是文件级作用域。

A. 函数形参 B.语句标号 C.外部静态类标识符 D.自动类标识符 60. 以下叙述不正确的是(D )。

A. 宏替换不占用运行时间 B. 宏名无类型

C. 宏替换只是字符替换 D. 宏名必须用大写字母表示 61. C++语言的编译系统对宏命令的处理是( D )。 A. 在程序运行时进行 B. 在程序连接时进行

C. 和C++程序的其它语句同时进行编译

D. 在对源程序中其它成分正式编译之前进行

62. 当#include后面的文件名用双引号括起来时,寻找被包含文件的方式是( B )。 A. 直接按系统设定的标准方式搜索目录

B. 先在源程序所在目录搜索,再按系统设定的标准方式搜索目录 C. 仅仅搜索源程序所在目录 D. 搜索当前逻辑盘上的所有目录

5

位置。

71.在程序执行完___主(或main)__函数后,将结束整个程序的执行过程,返回到操作系统

下的C++集成开发窗口。

72. 元素类型为int的数组a[10]共占用__40_____字节的存储空间。

73. 元素类型为double的二维数组a[4][6]共占用_192__字节的存储空间。 74. 元素类型为char的二维数组a[10][30]共占用__300___字节的存储空间。 75. 存储字符’a’和字符串”a”分别需要占用___1___和__2____个字节。 76. 空串的长度为__0___,存储它需要占用____1___个字节。 77. 字符串”\\’a\\’xy=4\\n”的长度为__8____。 78. 字符串”a:\\\\xxk\\\\数据”的长度为_11___。

79. 用于存储一个长度为n的字符串的字符数组的长度至少为___n+1___。

80. 若a是一个字符数组,则从键盘上向该数组输入一个字符串的表达式为___cin>>a___。 81. 若a是一个字符数组,则向屏幕输出a中所存字符串的表达式为____cout<

___19_____。

83. 对一个二维字符数组a进行初始化的数据为{”123”,”456”,”789”},则a[1]元素对应的字

符串为_”456”_____。

84. strlen(”apple”)的值为__5___,strcmp(”a”,”A”)的值为___1___。

85. 若需要把一个字符串”aaa”赋值到字符数组a中,则需要执行__strcpy(或

strcpy(a,”aaa”))___函数的调用来实现。

86. 假定对二维数组a[3][4]进行初始化的数据为{{3,5,6},{2,8},{7}},则a[1][1]和a[2][3]

分别被初始化为___8____和___0_____。

87. 在C++语言中,一个函数由函数头和__函数体______组成。

88. 重载一个函数的条件是:该函数必须在参数的个数或参数的__类型____上与其它同名函数

有所不同。

89. 如果一个函数只允许同一文件中的函数调用,则应在该函数定义前加上___static____C++

保留字。

90. 若“double x=100;”是文件F1.CPP中的一个全局变量定义语句,若文件F2.CPP中的某

个函数需要访问此x , 则应在文件F2.CPP中添加对x的声明语句为__extern double x_____。

91. 定义一个函数模板要用到的第一个修饰符是___template___。

92. 在函数模板的参数中,用class修饰的参数称为_虚拟类型(或类型)___参数。 93. 如果一个函数直接或间接地调用自身,这样的调用称为____递归_____调用。

94. 已知int cubin(int n){return n*n*n;}和double cubin(double n){return n*n*n;}是

一个函数模板的两个实例,假定类型参数用T表示,则该函数模板的定义是_____template T cubin(T n) {return n*n*n;______。

95. 对于无返回值函数,定义函数时要用____void_____修饰函数类型。

96. 如果一个函数定义使用了____static____修饰,则该函数不允许被其它文件中的函数调

用。

97. 如果一个函数中有多个默认参数,则默认参数必须全部处在形参表的__右边或(后面)___

部分。

98. 定义外部变量时,不用存储类说明符__extern_____,而声明外部变量时用它。

11

99.调用系统函数时,要先使用#include命令包含该系统函数的原型语句所在的__头文件____。 100. 函数形参的作用域是该函数的_____函数体_______。

101. C++提供的预处理命令有宏定义命令,条件编译命令和____文件包含命令_______。 102. 程序的编译是以___文件____为单位进行的。 103. C++程序运行时的内存空间可以分成全局数据区,堆区,栈区和__代码区(程序区)______。 104. 全局变量和静态局部变量具有静态生存期,存放在内存的___全局数据_______区中。 105. 局部变量具有局部生存期,存放在内存的___栈______区中。

106. 若二维数组a有m列,设a[0][0]位于数组的第一个位置上,则计算任一元素a[i][j]在

数组中位置序号的公式为___I*m+j+1_________。

107. 若有定义“double a[3][5];”,则a 数组中行下标和列下标的最大值分别为___2_____

和___4____。

108. 若有定义“struct AA {int a; char b; double c;}x;”,则x占用空间大小为__13______

字节。

109. 当定义一个结构体变量时,系统分配给该变量的内存大小等于各成员所需内存大小的___

总和____。

110. 一个指针类型的对象占用内存的___4____个字节的存储空间。

111. 一个指针指向一个数据对象,它保存着该数据对象的___地址_____,若数据对象为

DataType类型,则相应的指针类型为_DataType*_____。

112. 若要把一个整型指针p转换为字符指针,则采用的强制转换表达式为__(char*)p____。 113. 假定一个数据对象为int*类型,则指向该对象的指针类型为_ int**______。

114. 假定p是一个指向整数对象的指针,则用__*p______表示该整数对象,用___&p_____表

示指针变量p的地址。

115. 假定p是一个指针,则*p++运算首先访问___*p_____,然后使___p_____的值增1。 116. 假定p是一个指针,则(*p)++运算首先访问___*p_____,然后使___*p_____的值增1。 117. 假定p所指对象的值为25,p+1所指对象的值为42,则*p++的值为__25______。 118.假定p所指对象的值为25,p+1所指对象的值为42,则*++p的值为___42_____。

119. 假定p所指对象的值为25,p+1所指对象的值为42,则执行(*p)++运算后,p所指对象

的值为___26_____。

120.假定p所指对象的值为25,p+1所指对象的值为42,则执行*p++运算后,p所指对象的

值为____42____。

121. 假定对数组a[]进行初始化的数据为{2,7,9,6,5,7,10},则a[2]和a[5]分别被初始化为

____9____和____7____。

三、程序填空,对程序、函数或类中划有横线的位置,根据题意按标号把合适的内容填写到程序下面相应标号的后面。

1、打印出100到200之间的所有素数(即除1和它本身再没有其他约数的数)。 #include #include void main() {

int i,j;

for (i=100;i<=200;i++)

12

{

int temp=int(sqrt(i));

for (j=2; (1) ;j++) if (i%j==0) (2) ; if ( (3) ) cout<

cout<<'\\n'; }

(1) j<=temp (2) break (3) j>temp

2、斐波那契数列的第1和第2个数分别为0和1 ,从第三个数开始,每个数等于其前两个数之和。求斐波那契数列中的前20个数,要求每行输出5个数。

#include void main() {

int f,f1,f2,i;

cout<<” 斐波那契数列:\\n”; f1=0; f2=1;

cout<

cout<

if(_____(2)______) cout<

f2=____(3)_______;

}

cout<

(1) f1+f2 (2) i%5==0 (3) f

3、 计算?(?1)i?110i?1xi的值。 i! #include void main() {

double x,p1=1,p2=1,s=0; int i,j=1;

cout<<\输入x的值:\ cin>>x;

for(i=1;i<=10;i++) { p1*=___(1)_____;

13

p2*=____(2)____;

i+1

s+=j*p1/p2; //j的值为(-1) j=____(3)____; }

cout<

(1) x (2) I (3) -j

4、采用辗转相除法求出两个整数的最大公约数。 #include void main() {

int a,b;

cout<<\请输入两个正整数:\ cin>>a>>b;

while(a<=0 || __(1)___) {cout<<\重新输入:\ while(b) { int r; r=a%b;

___(2)___; ___(3)___; //分别修改a和b的值 }

cout<

(1) b<=0 (2) a=b (3) b=r

5、把从键盘上输入的一个大于等于3的整数分解为质因子的乘积。如输入24时得到的输出结果为“2 2 2 3”,输入50时得到的输出结果为“2 5 5”,输入37时得到的输出结果为“37”。 #include void main() {

int x;

cout<<\请输入一个整数,若小于3则重输:\ do cin>>x; while(___(1)___); int i=2; do{

while(___(2)___) { cout<

___(3)___;

14

}while(i

if(x!=1) cout<

(1) x<3 (或x<=2) (2) x%i==0 (3) i++

6、 下面函数是求两个整型参数a和b的最小公倍数。 int f2(int a, int b) {

int i=2, p=1; do {

while(a%i==0 && ___(1)___) { p*=i; a/=i; b/=i; }

___(2)___;

}while(a>=i && ___(3)___); return p*a*b; }

(1) b%i==0 (2) i++ (或++i) (3) b>=i

7、 在输出屏幕上打印出一个由字符?*?组成的等腰三角形,该三角形的高为5行,从上到下每行的字符数依次为1,3,5,7,9。 #include void main() {

int i,j;

for(i=1;___(1)___;i++) { for(j=1;j<=9;j++)

if(j<=5-i || ___(2)___) cout<<’ ’; else ___(3)___; cout<

(1) i<=5 (2) j>=5+i (3) cout<<’*’

8、 统计字符串中英文字母个数的程序。 #include int count (char str[]); void main(){

15

四、程序设计题

写一个C++程序,定义抽象基类Shape,由它派生出一个基类Point,再由Point派生出2个派生类:Circle(圆形),Rectangle(矩形),用一个函数Area分别输出以上二者的面积,2个图形的数据在定义对象时给定。并要求用+运算符对矩形长度,宽度重载,得到两个矩形的长度和与宽度和。

////////////////////////以下作为兴趣,不是复习范围的 四、写出程序运行结果 1. #include #include void main() {

int a[8]={25,48,32,85,64,18,48,29}; int max,min; max=min=a[0];

for(int i=0; i<8; i++) { if(max>a[i]) max=a[i]; if(min

cout<<\ cout<<\ }

答案: max:85

min:18

2. #include void main() {

int a,b;

for(a=1,b=2; b<50;) { cout<

cout<

cout<

答案:

1 2 3 5 8 13 21 34 55 89

21

3. #include const int M=3, N=4; void main() {

int i,j,s=0;

for(i=1;i<=M;i++) for(j=1;j<=N;j++) s+=i*j;

cout<<”s=”<

4. #include void main() {

int a=2,b=5,c=0;

if(a+b>10) c=a*b; else c=3*a+b;

if(c<=20) cout<

a=a+b; b=a+b;c+=a+b;

cout<<\ }

答案: 121

a,b,c=7,12,30

5. #include void main() {

int x=5;

switch(2*x-3) {

case 4: cout<

case 10: cout<<3*x-1<<’ ’; break; default: cout<<\ }

cout<<\ }

答案:11 14 switch end.

6. #include

22

#include

int a[4]={36,-5,73,8}; void main() {

int i,y;

for(i=0; i<4; i++) { if(a[i]<0) y=1;

else if(a[i]<10) y= a[i]* a[i]+3; else if(a[i]<60) y=4*a[i]-5;

else y=int(sqrt(a[i])); // sqrt(x)为取x的平方根函数 cout<答案: 36 139 -5 1 73 8 8 67

7. #include

int a[8]={36,25,20,43,12,70,66,35}; void main() {

int s0,s1,s2; s0=s1=s2=0;

for(int i=0; i<8; i++) { switch(a[i]%3) {

case 0: s0+=a[i];break; case 1: s1+=a[i];break; case 2: s2+=a[i];break; } }

cout<

答案: 114 138 55

9. #include const int M=20; void main() {

int c2,c3,c5; c2=c3=c5=0;

for(int i=1; i<=M; i++) {

23

if(i%2==0) c2++; if(i%3==0) c3++; if(i%5==0) c5++; }

cout<

答案: 10 6 4

10. #include void main() {

int i,j;

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

for(j=i;j<5;j++) cout<<’*’; cout<

答案:

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

11. #include void main() {

for(int i=1,s=0;i<20;i++) {

if(i%2==0 || i%3==0) continue; cout<

cout<

1 5 7 11 13 37

11. #include const int T=6; void main()

24

{

int i,j;

for(i=1;i<=T;i+=2)

for(j=2;j<=T;j+=2) {

if(i+j

}

答案: ++*+*****

12. #include void main() {

int a,b,c=0; for(a=1;a<4;a++)

for(b=6;b>1;b-=2) {

if((a+b)%2==0) c+=a+b; else c+=a*b; if(b==2) cout<

答案: 1 2 12 2 2 30 3 2 66

13. #include const int B=2; void main() {

int p=1,s=1; while(s<50) { p*=B; s+=p; }

cout<<\ }

答案: s=63

14. #include void main() {

25

int x=24,y=88; int i=2,p=1; do {

while(x%i==0 && y%i==0) { p*=i; x/=i; y/=i; } i++;

}while(x>=i && y>=i); cout<

答案: 264

15. #include const int N=3; void main() {

int a[N][N]={{7,-5,3},{2,8,-6},{1,-4,-2}}; int b[N][N]={{3,6,-9},{2,-8,3},{5,-2,-7}}; int i,j,c[N][N];

for(i=0;i

c[i][j]=a[i][j]+b[i][j]; for(i=0;i

cout<

答案: 10 1 -6 4 0 -3 6 -6 -9

16. #include int a=5;

void main() { int b=a+20; int a=10;

cout<

for(int i=1; i<6; i++) {

26

a+=i; b+=a; }

cout<

cout<

答案: 10 25 15 35 10 25

17. #include int f1(int x, int y) {

x=x+y; y=x+y;

cout<<\ return x+y; }

void main() {

int x=5,y=8; int z=f1(x,y);

cout<<\ cout<<\ }

答案:

x=13, y=21 x=5, y=8, z=34

18. #include

void f2(int& x, int& y) {

int z=x; x=y; y=z; }

void f3(int* x, int* y) {

int z=*x; *x=*y; *y=z; }

void main() {

27

int x=10,y=26;

cout<<\ f2(x,y);

cout<<\ f3(&x,&y);

cout<<\ x++; y--; f2(y,x);

cout<<\ }

答案:

x,y=10, 26 x,y=26, 10 x,y=10, 26 x,y=25, 11

19. #include

void f4(int a[], int n, int& s) {

s=0;

for(int i=0; i

void main() {

int b[8]={4,8,6,9,2,10,7,12}; int x; f4(b,5,x); cout<

int y; f4(b+3,4,y); cout<

答案:

29 28 57

20. #include void main() {

int a[8]={36,25,48,14,55,40,50,24}; int b1, b2; b1=b2=a[0];

28

for(int i=1;i<8;i++)

if(a[i]>b1) {b2=b1; b1=a[i];} else if(a[i]>b2) b2=a[i]; cout<

55 50

21. #include void main() {

char a[]=\ int i1=0, i2=0, i=0; while(a[i]) {

if(a[i]==’a’) i1++; if(a[i]==’b’) i2++; i++; }

cout<

答案: 4 3 14

五、指出程序或函数的功能 1. #include void main() {

int i,s=0;

for(i=2;i<=30;i+=2) s+=i*i; cout<<\ }

计算并输出22+42+62+...+302

的值。

2. #include #include #include void main() {

int i=10,a; while(i>0) {

a=rand()?+10;

int j, k=int(sqrt(a)+1e-5); //sqrt(x)为求x的平方根函数 for(j=2; j<=k; j++)

29

if(a%j==0) break;

if(j>k) {cout<

随机产生出10个10至99之间的素数并显示出来。

3. void trans(int x) {

char a[10]; int i=0,rem; do {

rem=x; x=x/16;

if(rem<10) a[i]=48+rem; //’0’字符的ASCII码为48 else a[i]=65+rem; //’A’字符的ASCII码为65 i++;

}while(x!=0);

while(i>0) cout<

此函数用于把十进制整数x转换为十六进制数字串输出。

5. double f1(double a, double b, char op) { switch(op) {

case ’+’: return a+b; case ’-’: return a-b; case ’*’: return a*b; case ’/’: if(b==0) {

cout<<\ exit(1); }

else return a/b;

default: cout<<\ exit(1); } }

以参数a和b为运算对象,以参数op为四则算术运算符,求出运算结果并返回。

6. #include

30

p=f; f=f->next; delete p; }

假定IntNode的类型定义为: struct IntNode {

int data; //结点值域 IntNode* next; //结点指针域 };

首先从键盘上输入一个整数给n,然后依次输入n个整数建立以表头指针为f的链表。

21. int f(const char *s) {

int i=0;

while(*s++)i++; return i; };

求出并返回字符指针参数s所指向的字符串长度。

六、程序改错,请根据程序段或函数模块的功能改写个别地方的错误

1、在下面的定义中,NODE是链表接点的结构,appendToList则是一函数,其功能是:在list所指向的链表的末尾添加一个新的值为x的接点,并返回表头指针。函数中有两处错误,指出错误所在行的行号并提出改正意见。 Struce NODE { Int data; NODE *next; };

NODE *appendToList(NODE *list,int x)

{ NODE *p=new int; //1行 p->data=x; //2行 p->next=NULL; //3行 if (list==NULL) return p; //4行 NODE *p1=list; //5行 While (p1->next!=NULL) p1=p1->next; //6行 p1=p; //7行 return list; //8行 }

错误行的行号为 2 和 8 。 分别改正为 NODE *p=new NODE; 和 p1->next=p; 。

2、假定要求下面程序的输出结果为“11/15”,其主函数中存在着三行语句错误,请指出错

36

误语句行的行号并改正错误行。 #include class Franction { int nume; int deno; public:

void FranSimp();

Franction FranADD(const Franction &x); Void InitFranction(){nume=0;deno=1;}

Void InitFranction(int n,int d){nume=n;deno=d;} Void FranOutput(){cout<

void main() //1行 { //2行 Franction a,b,c; //3行 a. InitFranction(6,15); //4行 b. InitFranction(1); //5行 c. initFranction(); //6行 c=FranAdd(a,b); //7行 cout<

错误行的行号为 5 、 7 和 8 。

分别改正为 b.InitFranction(1,3); 、 c=a.FranAdd(b); 和 c.FranOutput()。

3、下面程序段第4——9行中存在着三条语句错误,请指出错误语句的行号并说明原因。 Class A {

int a,b; const int c; public:

A(){a=b=c=0;}

A(int aa,int bb):c(aa+bb){a=aa;b=bb;} };

A a,b(1,2,3); A x(2,3),y(4);

错误行的行号为 5 、 8 和 9 。

错误原因分别为 在函数体给常量c赋值 、 定义b 多一个参数 和 定义y 少一个参数。

4、假定要求下面程序输出结果为“d=800,f=60”,在第4——23行中存在着三条语句错误,请指出错误语句的行号并改正。 #include

class A { //1行

37

int a[10];int n; //2行 public: //3行 A(int aa[],int nn):n(nn){ //4行

for (int I=0;I

错误行的行号为 5 、 19 和 20 。分别改正为 a[I]=aa[I]; 、 d*=x.Get(i); 和 int f=x.Suma96); 。

七、编程题

1. 编一程序求出满足不等式1+1/2+1/3+...+1/n≥5的最小n值。 void main() {

int i=0; double s=0;

while(s<5) s+=double(1)/++i; cout<<\ }

若采用for循环编写程序,则如下所示: #include void main() {

int i; double s=0;

for(i=1; s<5; i++) s+=1.0/i; cout<<\

//注意:此i-1的值为所求的n值

38

}

210

2. 计算1+3+3+...+3的值并输出,假定分别用i,p,s作为循环变量、累乘变量和累加变量的

标识符。

#include void main() {

int i; //用i作为循环变量 int p=1; //用p作为累乘变量 int s=1; //用s作为累加循环变量 for(i=1;i<=10;i++) {p*=3; s+=p;} cout<

222

3. 求满足不等式2+4+...+n<1000的最大n值,假定分别用i和s作为取偶数值和累加值的

变量,并限定使用do循环编程。

#include void main() {

int i=0; //用i作为依次取值偶数的变量 int s=0; //用s作为累加变量 do {

i+=2;

s+=i*i; }while(s<1000);

cout<<\ }

??a2?x2 (x?0) 4. 已知y??,求出并显示当x依次取从键盘输入的不同值时

2?(x?0) ?3ax?4ax?1 所对应的y值,要求把a定义为常量,其值设定为10.2,x的每个值由键盘输入,并假定用-100作

为键盘输入数据的终止标志,求平方根函数为sqrt(x)。 #include #include

const double a=10.2; void main() {

double x,y; cin>>x;

while(x!=-100) {

if(x<=0) y=sqrt(a*a+x*x); else y=3*a*x*x+4*a*x-1;

39

cout<>x; } }

5、 出从键盘上输入的10个整数中的最大值,要求输入变量用x表示,存储最大值的变量用max表

示。

#include void main() {

int x,max; cin>>x; max=x;

for(int i=0;i<9;i++) { cin>>x;

if(x>max) max=x; }

cout<<\ }

6、 知6≤a≤30,15≤b≤36,求满足不定方程2a+5b=126的全部整数组解。如(13, 20)就是一个整

数组解,并以(x,y)样式输出每个解。

#include void main() {

int a,b;

for(a=6;a<=30; a++) for(b=15;b<=36;b++) if(2*a+5*b==126)

cout<<'('<

7、 某班级学生进行百米跑测试,规定成绩在12秒以内(含12秒)为优秀,在12秒以上至15秒为达标,在15秒以上为不达标,编一程序,从键盘上输入每个人的成绩,以x作为输入变量,并以小于0的任何数作为终止标志,分别用变量c1,c2和c3统计并输出成绩为优秀、达标和不达标的人数。

#include void main() {

int c1,c2,c3; double x; c1=c2=c3=0; cin>>x;

while(x>0) {

40

if(x<=12) c1++;

else if(x<=15) c2++; else c3++; cin>>x; }

cout<

8、 编写一个函数,分别求出由指针a所指向的字符串中包含的每种十进制数字出现的次数,把统计结果保存在数组b的相应元素中。 void fun4(char* a, int b[]) {

int i;

for(i=0;i<10;i++) b[i]=0; while(*a) {

int j=*a-’0’;

if(j>=0 && j<=9) b[j]++; a++; } }

9、 按照下面函数原型语句编写一个函数,返回二维数组a[m][n]中所有元素的平均值,假定采用变量v存放平均值。

double Mean(double a[M][N],int m,int n);

double Mean(double a[M][N],int m,int n) {

int i,j;

double v=0.0;

for(i=0; i

10. 按照下面函数原型语句编写一个递归函数计算出数组a中n个元素的平方和并返回。 int f(int a[],int n);

int f(int a[],int n)

{

if(n==0) return 0;

41

else return a[n-1]*a[n-1]+f(a,n-1);

}

11. 按照函数原型语句“void p(int n);”编写一个递归函数显示出如下图形,此图形是n=5的情况。 55555 4444 333 22 1

void p(int n)

{

if(n!=0) {

for(int i=0; i

}

12. 按照函数原型语句“void p(int n);”编写一个递归函数显示出如下图形,此图形是n=5的情况。 1 22 333 4444 55555

void p(int n) {

if(n!=0) { p(n-1);

for(int i=0; i

13. 根据下面类中Count函数成员的原型和注释写出它的类外定义。 class AA { int* a; int n;

42

int MS; public:

void InitAA(int aa[], int nn, int ms) {

if(nn>ms) {cout<<\ MS=ms; n=nn;

a=new int[MS];

for(int i=0; i

int Count(int x); //从数组a的前n个元素中统计出其 //值等于x的个数并返回。 };

int AA::Count(int x) {

int i,c=0;

for(i=0; i

14. 根据下面类中Search函数成员的原型和注释写出它的类外定义。 class AA { int* a; int n; int MS; public:

void InitAA(int aa[], int nn, int ms) {

if(nn>ms) {cout<<\ MS=ms; n=nn;

a=new int[MS];

for(int i=0; i

int Search(int x); //从数组a的前n个元素中顺序查找值为x的第一个元素, //若查找成功则返回元素的下标,否则返回-1。 };

int AA::Search(int x) {

43

int i;

for(i=0; i

if(a[i]==x) return i; return -1; }

15. 根据下面类中MaxMin 函数成员的原型和注释写出它的类外定义。 class AA { int* a; int n; int MS; public:

void InitAA(int aa[], int nn, int ms) {

if(nn>ms) {cout<<\ MS=ms; n=nn;

a=new int[MS];

for(int i=0; i

int MaxMin(int& x, int& y); //从数组a的前n个元素中求出 //最大值和最小值,并分别由引用参数x和y带回, //同时若n大于0则返回1,否则返回0。 };

int AA::MaxMin(int& x, int& y) {

int mx,my; mx=my=a[0];

for(int i=1; imx) mx=a[i]; if(a[i]

x=mx; y=my;

if(n>0) return 1; else return 0; }

16. 根据下面类中Compare 函数成员的原型和注释写出它的类外定义。 class AA { int* a; int n; int MS; public:

44

void InitAA(int aa[], int nn, int ms) {

if(nn>ms) {cout<<\ MS=ms; n=nn;

a=new int[MS];

for(int i=0; i

}

int Compare(AA b); //比较*this与b的大小,若两者中 //的n值相同,并且数组中前n个元素值对应 //相同,则认为两者相等返回1,否则返回0。

};

int AA::Compare(AA b) {

if(n!=b.n) return 0; for(int i=0; i

if(a[i]!=b.a[i]) return 0; return 1; }

17. 根据下面类中CompareBig 函数成员的原型和注释写出它的类外定义。 class AA { int* a; int n; int MS; public:

void InitAA(int aa[], int nn, int ms) {

if(nn>ms) {cout<<\MS=ms;

n=nn;

a=new int[MS];

for(int i=0; i

int CompareBig(AA b); //比较*this与b的大小,从前向后按两数组 //中的对应元素比较,若*this中元素值大则返回1,若b中 //元素值大则返回-1,若相等则继续比较下一个元素,直到 //一个数组中无元素比较,此时若两者的n值相同则返回0, //否则若*this中的n值大则返回1,若b中的n值大则返回-1。};

int AA::CompareBig(AA b) {

int k;

45

if(n>b.n) k=b.n; else k=n; for(int i=0; i

if(a[i]>b.a[i]) return 1;

else if(a[i]

46

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

Top