《c++复习题及答案.doc》由会员分享,可在线阅读,更多相关《c++复习题及答案.doc(12页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、如有侵权,请联系网站删除,仅供学习与交流c+复习题及答案【精品文档】第 12 页一、选择题1. 在每个C+程序中都必须包含有这样一个函数,该函数的函数名为A 。A. main B. MAIN C. name D. function2. 若a,b均为int型变量,为了将10赋给a,将20赋给b,则对应以下cin语句的正确输入方式为 B 。(代表回车换行,代表空格)。 cin a b; A1020 B10_20 C10,20 D20_103. 在以下关于C+语言的注释的叙述中,不正确的是 C 。 AC+程序中,注释可用/*、*/形式表示,也可用/形式表示 BC+编译器在编译一个程序时,将跳过注释,
2、不对其进行处理 CC+编译器在编译一个程序时,可发现注释中的单词拼写错误 D程序中注释的多少不会影响所生成的可执行文件的长度4. 以下叙述不正确的是 C 。 A在C+程序中,严格区分大小写字母 B一个C+源程序有且仅有一个main函数 C在C+程序中,注释只能位于一条语句的后面 D一个C+程序总是从main函数开始执行5. C+语言对C语言做了很多改进,C+语言相对于C语言的最根本的变化是 D A增加了一些新的运算符B允许函数重载,并允许设置缺省参数C规定函数说明符必须用原型D引进了类和对象的概念6. C+是 C A. 面向对象的程序设计语言B. 结构化程序设计语言C. 既是面向对象的程序设计
3、语言又是结构化程序设计语言D. 非结构化程序设计语言7. 下列合法的标识符为 D A. abde+ B. #KDJF C. 67KDJ D. DK3_8. 关于字符串和字符的关系正确的是 C A. “A”与A是相同的B. 字符串是常量,字符是变量C. “A”与A是不同的if (xy)z=x; s=z*z;elsez=y;s=1/(z*z);if (xy)z=x; s=z*z;elsez=y;s=1/(z*z);D. “A ”与“A”是相同的9. 下面关于语句的说法正确的是 B A. 下面这两段程序的执行效果是一致的B. 空语句是只有一个分号的语句,它其实什么也不干C. 语句的构成不一定需要分号
4、D. 语句的书写对程序的运行不起作用,因此可以随便写都可以10. 以下各标识符中,合法的用户标识符组为 D 。A. PAd,P#d,b-b,abc,_0123,ssipedB. cin,a10,CPP,float,del_word,signedC. void,max,hiy,list,*jerD. a,temp,_isw,INT,keep,wind11. 在VC+中,以下语句的输出为 D 。 short int k= -1; cout k , (unsigned short) k endl; A-1,-1 B-1,32767 C-1,32768 D-1,6553512. 若给出以下程序,其输出
5、为 B 。 #include using namespace std; int main ( ) int a=4,b=7;cout (a=a+1,b+a,b+1) 0?sin(x):-sin(x) Bsqrt(fabs(sinx) Csqrt(sqrt(sinx*sinx) Dfabs(sqrt(sin(x)15. 下列 A 是C+语言的有效标识符?A_No1BNo.1 C12345 Dint16. C+语言中,表示一条语句结束的标号是 B A# B; C/ D17. 每个C+程序中都必须有且仅有一个 C A类B预处理命令 C主函数D语句18. 下列数据类型不是C+语言基本数据类型的是 D 。
6、A字符型 B整型 C实型 D数组19. 下列字符列中,可作为C+语言程序自定义标识符是 B 。 Aswitch Bfile Cbreak Ddo 20. 运算符 +、=、=、% 中,优先级最低的运算符是 C 。 A + B= C= D% 21. 下列字符列中,可以作为“字符串常量”的是 B 。 A ABC Bxyz Cuvw D a 22. 设变量m,n,a,b,c,d均为0,执行(m = a= =b)|(n=c= =d)后,m,n的值是 D 。 A0,0 B 0,1 C 1,0 D 1,123. 字符串vmx43np102q的长度是 A 。A 8 B 10 C 17 D 16 24. 在C+
7、语言中,自定义的标识符 D 。A能使用关键字并且不区分大小写B不能使用关键字并且不区分大小写C能使用关键字并且区分大小写D不能使用关键字并且区分大小写25. 设有代码“int a = 5;”,则执行了语句“a + = a - = a*a;”后,变量a的值是 C 。A3 B 0 C -40 D 1226. 设a为5,执行下列代码后,b的值不为2的是 C 。Ab = a/2 Bb = 6-(-a) Cb = a%2 Db = a 3 ? 3: 227. 设x和y均为bool量,则x & y为真的条件是 A 。A. 它们均为真 B. 其中一个为真 C. 它们均为假 D. 其中一个为假28. 若给定条
8、件表达式(m)?(a+): (a-),则其中表达式m C 。 A. 和(m= =0)等价 B. 和(m= =1)等价 C. 和(m!=0)等价 D. 和(m!=1)等价29. 在C+语言的if语句中,用作判断的表达式为 D 。 A. 关系表达式 B. 逻辑表达式 C. 算术表达式 D. 任意表达式30. 设i和k都是int类型,则以下for循环语句 B 。 for ( i=0, k= -1; k=1; i+, k+ ) cout *n; A. 判断循环结束的条件不合法 B. 是无限循环 C. 循环体一次也不执行 D. 循环体只执行一次31. 若有以下语句,则输出结果为 A 。 int a=2,
9、b=1; cout b?a大于b:a小于b endl; A. a大于b B. a小于b C. 1 D. 输出语句有错32. int k=10;while(k=0) k=k-1;则下面描述正确的是 C 。A. while循环执行10次 B. 循环是无限循环C. 循环体语句一次也不执行 D. 循环体语句执行一次33. int a=1,b=2,c=2,t;while(ab) t=a;a=b;b=t;c-;couta”,”b”,”c;运行结果为 D 。A. 1,2,0 B. 2,1,0 C. 1,2,1 D. 2,1,134. int x=-1;do x=x*x;while(!x);下列说法正确的是
10、C 。A. 是死循环 B. 循环执行两次C. 循环执行一次 D. 有语法错误35. 以下能正确计算1*2*3*10的程序段是 C 。A. do i=1;s=1; B. do i=1;s=0;s=s*i; i+; s=s*i;i+; while(i=10); while(i=10);C. i=1;s=1; D. i=1;s=0; do s=s*i; dos=s*i;i+; i+;while(i=10); while(i=10);36. 以下描述正确的是 C 。A. 由于do-while循环中循环体语句只是一条可执行语句,所以循环体内不能使用复合语句B. do-while循环由do开始,用whil
11、e结束,在while(表达式)后面不能写分号C. 在do-while循环体中,一定要有能使while后面表达式的值变为零(“假”)的操作D. do-while循环中,根据情况可以省略while37. C+中while和do-while循环的主要区别是 A 。A. do-while的循环体至少无条件执行一次B. while的循环控制条件比do-while的循环控制条件严格C. do-while允许从外部转到循环体内D. do-while的循环体不能是复合语句38. 下面有关for循环的正确描述是 D 。A. for循环只能用于循环次数已经确定的情况B. for循环是先执行循环体语句,后判断表达式
12、C. for循环中,不能用break语句跳出循环体D. for循环的循环体语句中,可以包含多条语句,但必须用花括号括起来39. 对for(表达式1; ;表达式3)可理解为 B 。A. for(表达式1;0;表达式3) B. for(表达式1;1;表达式3)C. for(表达式1;表达式1;表达式3)D. or(表达式1;表达式3;表达式3)40. for(i=2;i= =0;) printf(“%d”,I-);循环执行的次数是 B 。A. 无限次 B. 0次 C. 1次 D. 2次41. 在C+编程语言中,以下正确的描述是 B 。A. continue语句的作用是结束整个循环的执行B. 只能在
13、循环体内和switch语句体内使用break语句C. 在循坏体内使用break语句或continue语句的作用相同D. 从多层循环嵌套中退出,只能使用goto语句42. 下面程序段 D 。for(t=1;tx; if(x0) continue; coutt;A. 当x=0时什么也不输出C. cout永远也不执行 D. 最多允许输出100个非负整数43. 定义一个函数实现交换x和y的值,并将结果正确返回。能够实现此功能的是 C 。A. swap(int x, int y) int t; t=x; x=y; y=t; B. swap(int *x, int *y) int t; t=x; x=y;
14、 y=t; C. swap(int *x, int *y) int t; t= *x; *x = *y; *y=t; D. swap(int *x, int *y) int *t; t=x; x=y; y=t; 44. 说明语句int (*p) ( );的含义是 C 。A. p是一个指向一维数组的指针变量 B. p是指针变量, 指向一个整型数据C. p是一个指向函数的指针,该函数的返回值是一个整型 D. 以上都不对45. 设有说明int (*p) 4 ; 其中的标识符p是 C 。A. 4个指向整型变量的指针变量 B. 指向4个整型变量的函数指针C. 一个指向具有4个整型元素的一维数组的指针D.
15、 具有4个指向整型变量的指针元素的一维指针数组46. 若有如下声明,下列说法错误的是 C 。struct em char a; char b; A. struct是结构体类型关键字 B. em是结构体类型名 C. em 是用户声明的结构体变量 D. a,b是结构体成员名47. 若有下列定义,则对结构体变量的成员引用错误的是 C 。struct date int year;int month; int day;struct student int no;char name16;date birthday; stud;A. stud.no B. stud.name C. stud.birthday
16、 D. stud.birthday.year48. 下列叙述中,不正确的是 B 。A. 类的构造函数可以重载 B. 类的析构函数可以重载C. 一个类可以不定义构造函数 D. 一个类可以不定义析构函数49. 已知宏定义: #define N 3 #define Y(n) (N+1)*n) (N+1)*5+1)执行语句z=2*(N+Y(5+1); 后,变量z的值是 B 。 A. 42 B. 48 C. 52 D. 出错50. 类的构造函数的作用是 C A)一般成员函数的初始化B)类的初始化C)对象的初始化D)删除类创建的对象51. 下列说法正确的是 B A)内置函数在运行时是将该函数的目标代码插入
17、每个调用该函数的地方B)内置函数在编译时是将该函数的目标代码插入每个调用该函数的地方C)类的内置函数必须在类体内定义D)类的内置函数必须在类体外通过加关键字inline定义二、填空题1. 程序的三种基本的控制结构是: 顺序结构 、 选择结构 、 选择结构 2. 假定一个结构类型定义为:“struct D int a ; union int b ; double c ; ; D * d2 ; ;” ,则该类型的大小为20 字节。3. C+语言中的每条基本语句以; 作为结束符,每条复合语句以作为结束符。4. 关系表达式x+y5的相反表达式为x+y=0);6. 下面程序段的运行结果为 * 。x=2;
18、docout“*”;x-; while(!x=0);7. 定义内置函数的方法是在函数的返回值类型之前增加关键字 inline 。8. 假定a为一个整型数组名,则元素a4的字节地址为a+16 。9. 假定一个一维数组的定义为“char a8 ;”,则该数组所含元素的个数为8 ,所占存储空间的字节数为32 。10. 已知int a32=3, 2, 1; 则表达式“a00/a01/a02”的值是 1 。11. 若用数组名作为函数调用时的实参,则实际上传递给形参的是 数组首地址 。12. 如果一个函数无返回值,定义它时函数类型应是 void 。13. 预处理命令以 # 开头。14. 假定a是一个二维数
19、组,则aij的指针访问方式为*(ai+j) 或 *(*(a+i)+j)。15. C+在编译时,可以将所调用函数的代码直接嵌入到主调函数中,而不是将流程转出去。这种嵌入到主调函数中的函数称为 内置函数 。16. 使用内置函数可以节省运行时间,但却增加了 目标函数 的长度。17. C+允许用同一函数名定义多个函数,这些函数的参数个数和参数类型不同。这就是 函数的重载 。18. 利用C+编程语言可以建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表。这个通用函数就称为 函数模板 。19. 对一个类中的数据成员的初始化可以通过构造函数中的 初始化表实现,也可以通过构造函数中的函数
20、体 实现。20. 假定AB为一个类,则执行“AB a10;”语句时,系统自动调用该类的构造函数的次数为10 。 三、填空完成下面的程序1. #include using namespace std; int main( ) int a, b, c, x; cina; couta=ab; coutb=bc; coutc=cendl; if (a=b&b=c) coutthe three numbers are eauqlb & ac) x=a; else if (bc) x=b;else x=c; coutthe greatest number is:x=A&c=a&c=z ) n+; c=ge
21、tchar( );3. 鸡、兔共有30只,脚共有90个,下面程序段是计算鸡兔各有多少只,x代表有多少只鸡,y代表有多少只兔子,请填空完成程序。for(x=1;x=29;x+) y=30-x; if( 2*x+4*y=90 ) coutx y;4. 下面的程序是求2个或3个正整数中的最大数,用带有默认参数的函数实现。请填空完成程序。#include using namespace std;int main()int max(int a,int b, int c=0 ); int a,b,c,m1,m2; cinabc; m1= max(a,b,c); m2= max(a,b); couta,b,
22、c三个正整数中的最大数为:m1endl; couta,b两个正整数中的最大数为:m2a) a=b; if(ca) a=c; return a;四、给出下列程序运行后的输出结果1. # include using namespace std;void SB(char ch) switch(ch) case A: case a: cout well!; break; case B: case b: cout good!; break; case C: case c: cout pass!; break; default: cout bad!; break;int main( ) char a1=B
23、,a2=c,a3=f;SB(a1);SB(a2);SB(a3);SB(A);cout endl;return 0;答案:good! pass! bad! well!2. #includeusing namespace std;int main()int a,b; for(a=1,b=1;a=20) break; if(b%3= =1) b+=3;continue; b- =5;coutaendl; return 0;答案:83. #includeusing namespace std;main( )int i,j,x=0; for(i=0;i2;i+) x+; for(j=0;j=3;j+)
24、if (j%2) continue; x+; x+; cout“x=”xendl; 答案:x=84. #includeusing namespace std;main( )int i; for(i=1;i=5;i+) if(i%2) cout“*”; else continue;cout“#”; cout“$n”; 答案:*#*#*#$5. #includeusing namespace std;void main( ) int I,j,a=0; for(I=0;I2;I+) for(j=0;j4;j+) if(j%2) break; a+; a+; coutaendl;答案:46. 运行以下
25、程序时,从键盘键入right?请给出回车后运行的结果。#includeusing namespace std;void main()char c; while(c=getchar()!=?) putchar(+c);答案:sjhiu7. #includevoid main( )int I; for(I=1;I=5;I+) switch(I%2) case 0:I+; cout#;break; case 1:I+=2; cout*; default: coutn;答案:*8. #include using namespace std;int a=5; int main ( ) int a=10,
26、 b=20; int a=0,b=0; for (int i=1; i6; i+) a+=i ; b+=a;cout a bendl;return 0;答案:10 209. #includeusing namespace std;int k=1;void f(int m)m+=k; k+=m; char k=B; cout k - A n; coutm,kn;int main() int i=4; f(i); couti,kn; return 0;程序的输出第一行是 1 ,第二行是 5,6 ,第三行是 4,6 。10. # include # include int main( ) char
27、a5=student, worker, cadre, soldier, peasant; char p1, p2; p1=p2=a0;for (int i=0; i0) p1=ai;if (strcmp(ai,p2)0) p2=ai; cout p1 p2endl; return 0;答案:worker cadre11. #includeusing namespace std;int m33= 1, 2, 3 , n33= 1, 2, 3 ;int main() coutm10+n00nm01+n10n; return;程序的输出第一行是 3 ,第二行是 0 。12. #includeusing namespace std;void f (int s )static int j; dosj+=sj+1; while(+j2);int main() int k, a10=1, 2, 3, 4, 5; for(f(a),k=0; k5; k+) coutak; coutendl; for(f(a),k=0; k5; k+) coutak; coutendl; return 0;程序输出的第一行是 35345 ,程序输出的第二行是 35745 。五、编程题