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; i 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 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 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 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 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 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 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 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 15 四、程序设计题 写一个C++程序,定义抽象基类Shape,由它派生出一个基类Point,再由Point派生出2个派生类:Circle(圆形),Rectangle(矩形),用一个函数Area分别输出以上二者的面积,2个图形的数据在定义对象时给定。并要求用+运算符对矩形长度,宽度重载,得到两个矩形的长度和与宽度和。 ////////////////////////以下作为兴趣,不是复习范围的 四、写出程序运行结果 1. #include 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 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 int i,j,s=0; for(i=1;i<=M;i++) for(j=1;j<=N;j++) s+=i*j; cout<<”s=”< 4. #include 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 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< 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 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 int i,j; for(i=0;i<5;i++) { for(j=i;j<5;j++) cout<<’*’; cout< 答案: ***** **** *** ** * 11. #include 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 24 { int i,j; for(i=1;i<=T;i+=2) for(j=2;j<=T;j+=2) { if(i+j } 答案: ++*+***** 12. #include 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 int p=1,s=1; while(s<50) { p*=B; s+=p; } cout<<\ } 答案: s=63 14. #include 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 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 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 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 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 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 int i,s=0; for(i=2;i<=30;i+=2) s+=i*i; cout<<\ } 计算并输出22+42+62+...+302 的值。 2. #include 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 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 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 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 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 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< 5、 出从键盘上输入的10个整数中的最大值,要求输入变量用x表示,存储最大值的变量用max表 示。 #include 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 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 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; 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
正在阅读:
C++面向对象程序设计复习题集03-13
2010II考勤管理软件01-31
标准化考评员考试试卷答案11-12
美丽的四洞沟作文800字06-20
美术写生实习报告01-23
教育心理学分章习题简版09-19
鱼的启示作文500字06-17
公司员工外出管理制度11-22
《平凡的世界》中的现实主义11-08
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- C++
- 习题集
- 程序设计
- 面向
- 对象
- 基因频率的计算问题归类例析
- 电子商务企业并购动因及绩效分析毕业论文
- 感恩节预备讲章回顾神的恩典
- 金融学形考第3章参考答案
- 《关注光污染》的案例分析
- 2017年9月份统考题库练习题
- 小说二题
- 人力资源管理未来发展十大趋势
- 先进员工事迹材料(多篇范文)
- 中药鉴定学培训试题(含答案)
- 珠海夜校 - 广东财经大学《财务管理》复习题
- 安全生产管理人员和特种作业人员持证上岗制度
- 北京门头沟区2011年初三化学毕业考试带答案
- 2019-2020年四年级英语下册 Unit 5教案 广东版开心
- 2016届高考数学文一轮复习学案67二项分布及其应用
- 2008年二级建造师考试《水利水电工程》练习题(二)
- 小学语文五年级下册群文阅读《反复结构的童话故事阅读》教学设计
- 土力学第2章复习题
- 2016年广东省汕头市龙湖区中考英语一模试卷含答案
- 小学二年级语文第一单元教学设计方案