1、资料内容仅供您学习参考,如有不当或者侵权,请联系改正或者删除。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.
2、 编译、 运行、 编辑、 连接 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+语言用户标
3、识符的一组标识符是( B )。A. void define +WORDB. a3_b3 _123 YNC. for -abc CaseD. 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. 假
4、设在程序中 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;”, 则”cout0 & x=10的相反表示式为( A ) 。A. x10 B. x10C. x=0 | x0 & x10 17. x0 | y=5的相反表示式为( B ) 。A. x=0 | y!=5 B. x0 | y!=5 D. x0 & y=5 18设x和y均为bool量, 则x & y为真的条件是( A )。 A. 它们均为
5、真 B. 其中一个为真 C. 它们均为假 D. 其中一个为假 19设x和y均为bool量, 则x | y为假的条件是( C )。 A. 它们均为真 B. 其中一个为真 C. 它们均为假 D. 其中一个为假 20. 字符串”a+b=12n”的长度为( 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
6、 ch; D. const bool mark=true; 23. 循环语句”for(int i=0; in; i+) couti*i ;”中循环体执行的次数为( C )。 A. 1 B. n-1 C. n D. n+1 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; in; i+) for(int j=i; jn; j+) S; A. n2 B. (n+1)/2 C. n(
7、n-1)/2 D. n(n+1)/2 26. 在下面循环语句中循环体执行的次数为( C ) 。 int i=0,s=0; while(s20) i+; s+=i; A. 4 B. 5 C. 6 D. 7 27. 在下面循环语句中循环体执行的次数为( A ) 。 int i=0; do i+; while(i*i10); A. 4 B. 3 C. 5 D. 2 28. 当处理特定问题时的循环次数已知时, 一般采用( A ) 来解决。 A. for循环 B. while循环 C. do循环 D. switch语句 29. 循环体至少被执行一次的语句为( C ) 。 A. for循环 B. whil
8、e循环 C. do循环 D. 任一种循环 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 a10=0; C. int a; D. int a5; 33. 在下面的字符数组定义中, 哪一个有语法错误。( D ) 。 A. char a20=”abcdefg”; B. char a=”x+y=55.”; C. char a
9、15; D. char a10=5; 34. 在下面的二维数组定义中, 正确的是( C )。 A. int a5; B. int a5; C. int a3=1,3,5,2; D. int a(10); 35. 假定一个二维数组的定义语句为”int a34=3,4,2,8,6;”, 则元素a12的值为( C ) 。 A. 2 B. 4 C. 6 D. 8 36. 假定一个二维数组的定义语句为”int a34=3,4,2,8,6;”, 则元素a21的值为( A ) 。 A. 0 B. 4 C. 8 D. 6 37. 若定义了函数 double *function(), 则函数function的返
10、回值为( 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. 两个或两个以上的函数
11、取相同的函数名, 但形参的个数或类型不同 B. 两个以上的函数取相同的名字和具有相同的参数个数, 但形参的类型能够不同 C. 两个以上的函数名字不同, 但形参的个数或类型相同 D. 两个以上的函数取相同的函数名, 而且函数的返回类型相同 41. 以下关于函数模板叙述正确的是( C ) 。 A. 函数模板也是一个具体类型的函数 B. 函数模板的类型参数与函数的参数是同一个概念 C. 经过使用不同的类型参数, 函数模板能够生成不同类型的函数 D. 用函数模板定义的函数没有类型 42. 下列( C ) 的调用方式是引用调用。 A. 形参和实参都是变量 B.形参是指针, 实参是地址值 C. 形参是引用
12、, 实参是变量 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. 以下函
13、数的返回结果是( 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); 在主函数中用coutf(”good”)调用上
14、述函数, 则输出结果为( B ) 。 A. 3 B. 4 C. 5 D. 6 49. 以下正确的函数原型语句是( C )。 A. double fun(int x,int y) B. double fun(int x;int y) C. double fun(int,int); D. double fun(int x,y); 50. 以下正确的说法是( B ) 。 A. 用户调用标准库函数前, 必须重新定义 B. 用户能够重新定义标准库函数, 若如此, 该函数将失去原有含义 C. 系统不允许用户重新定义标准库函数 D. 用户调用标准库函数前, 不必使用预编译命令将该函数所在文件包括到用户源文件
15、中 51. 函数调用不能够( D ) 。 A. 出现在一个表示式中 B. 出现在执行语句中 C. 作为一个函数的实参 D. 作为一个函数的形参 52. 以下正确的描述是( B ) 。 A. 函数的定义能够嵌套, 函数的调用不能够嵌套 B. 函数的定义不能够嵌套, 函数的调用能够嵌套 C. 函数的定义和函数的调用均能够嵌套 D. 函数的定义和函数的调用均不能够嵌套 53. 若用数组名作为函数调用的实参, 传递给形参的是( A ) 。 A. 数组的首地址 B. 数组中第一个元素的值 C. 数组全部元素的值 D. 数组元素的个数 54. 以下错误的描述是( D ) 。 A. 被调用函数中能够不用re
16、turn语句 B. 被调用函数中能够用多个return语句 C. 被调用函数中, 如果有返回值, 就一定要有return语句 D. 被调用函数中, 一个return语句可返回多个值给调用函数 55. 以下正确的描述是( C ) 。 A. 不允许设置参数的默认值 B. 设置参数的默认值只能在定义函数时设置 C. 设置参数的默认值时, 应该设置右边的参数 D. 设置参数的默认值时, 应该全部参数都设置 56. 采用重载函数的目的是( D ) 。 A. 实现共享 B. 减少空间 C. 提高速度 D. 使用方便, 提高可读性 57. 将两个字符串连接起来组成一个字符串时, 选用( C ) 函数。 A.
17、 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. 宏名无类型
18、C. 宏替换只是字符替换 D. 宏名必须用大写字母表示 61. C+语言的编译系统对宏命令的处理是( D )。 A. 在程序运行时进行 B. 在程序连接时进行 C. 和C+程序的其它语句同时进行编译 D. 在对源程序中其它成分正式编译之前进行 62. 当#include后面的文件名用双引号括起来时, 寻找被包含文件的方式是( B )。 A. 直接按系统设定的标准方式搜索目录 B. 先在源程序所在目录搜索, 再按系统设定的标准方式搜索目录 C. 仅仅搜索源程序所在目录 D. 搜索当前逻辑盘上的所有目录 63. 当#include后面的文件名用尖括号括起来时, 寻找被包含文件的方式是( A )。
19、A. 直接按系统设定的标准方式搜索目录 B. 先在源程序所在目录搜索, 再按系统设定的标准方式搜索目录 C. 仅仅搜索源程序所在目录 D. 搜索当前逻辑盘上的所有目录 64. 在下面存储类中, ( C ) 对象的可见性与生存期不一致。 A. 外部类 B. 自动类 C. 内部静态类 D. 寄存器类 65. 在下面存储类中, ( A ) 的对象不是局部变量。 A. 外部静态类 B. 自动类 C. 函数形参 D. 寄存器类 66. 关于局部变量, 下面说法正确的是( C )。 A. 定义该变量的程序文件中的函数都能够访问 B. 定义该变量的函数中的定义处以下的任何语句都能够访问 C. 定义该变量的复
20、合语句中的定义处以下的任何语句都能够访问 D. 定义该变量的函数中的定义处以上的任何语句都能够访问 67. 文件包含命令中被包含的文件的扩展名( C ) 。 A. 必须是.h B. 不能是.h C. 能够是.h或.cpp D. 必须是.cpp 68. 预处理命令在程序中都是以( B )符号开头的。 A. * B. # C. & D. 69. 设array为一个数组, 则表示式sizeof(array)/sizeof(array0)的结果为( B )。 A. array数组首地址 B. array数组中元素个数 C. array数组中每个元素所占的字节数 D. array数组占的总字节数 70.
21、 用new运算符创立一个含10个元素的一维整型数组的正确语句是( C )。 A. int *p=new a10; B. int *p=new float10; C. int *p=new int10; D. int *p=new int10=1,2,3,4,5 71. 下列给字符数组赋初值时, 正确的是( A )。 A. char s1=”abcdef”; B. char s24=”abcd”; C. char s323=”abc”,”xyz”; D. char s44=a,x,s,t; 72. 设有定义”static int data56;”, 设该数组在静态存储区中的起始地址为十进制的10
22、0, 若每个int型数占4个字节, 则数组元素data23的地址为( D )。 A. 115 B.124 C.130 D.160 73. 假定变量m定义为”int m=7;”, 则定义变量p的正确语句为( B ) 。 A. int p=&m; B. int *p=&m; C. int &p=*m; D. int *p=m; 74. 假定k是一个double类型的变量, 则关于变量p的正确定义语句为( D ) 。 A. double p=&k; B. int *p=&k; C. double &p=*k; D. char *p=”Thank you!”; 75. 变量s的定义为”char *s=
23、”Hello world!”;”, 要使变量p指向s所指向的同一个字符串, 则应选取( A ) 。 A. char *p=s; B. char *p=&s; C. char *p;p=*s; D. char *p; p=&s; 76. 关于void 指针, 下列说法正确的是( C ) 。 A. void 指针就是未指向任何数据的指针 B. void 指针就是已定义而未初始化的指针 C. 指向任何类型数据的指针可直接赋值给一个void 指针 D. void 指针值可直接赋给一个非void 指针 77. 假定一条定义语句为”int a10, x, *pa=a;”, 若要把数组a中下标为3的元素值赋
24、给x, 则不正确的语句为( D ) 。 A. x=pa3; B. x=*(a+3); C. x=a3; D. x=*pa+3; 78. 假定有定义”int b10; int *pb;”, 则不正确的赋值语句为( D ) 。 A. pb=b; B. pb=&b0; C. *pb=new int; D. pb=b5; 79. 假定p是具有double类型的指针变量, 则表示式+p使p的值( 以字节为单位) 增加( C ) 。 A. 1 B. 4 C. sizeof(double) D. sizeof(p) 80. 假定p指向的字符串为”string”, 则coutp+3的输出结果为( C ) 。
25、A. string B. ring C. ing D. i 81. 假定p指向的字符串为”string”, 若要输出这个字符串的地址值, 则使用( D ) 。 A. cout*p; B. coutp; C. cout&p; D. couttitle,”Wang Tao”); B. strcpy(book.title,”Wang Tao”); C. strcpy(*book.title,”Wang Tao”); D. strcpy(*book)-title,”Wang Tao”); 86. 假定有”struct BOOKchar title40; float price; BOOK *book;
26、”, 则不正确的语句为( A ) 。 A. BOOK *x=new book; B. BOOK x=C+ Programming,27.0; C. BOOK *x=new BOOK; D. BOOK *x=book; 87. 假定有”struct BOOKchar title40; float price;book;”, 则正确的语句为( B ) 。 A. BOOK &x= &book; B. BOOK &x=book; C. BOOK &x=new BOOK; D. BOOK &x=BOOK; 88. 下列对引用的陈述中不正确的是( C ) 。 A. 每一个引用都是其所引用对象的别名,因此必
27、须初始化 B. 形式上针对引用的操作实际上作用于它所引用的对象 C. 一旦定义了引用, 一切针对其所引用对象的操作只能经过该引用间接进行 D. 不需要单独为引用分配存储空间 89. 假定变量a和pa定义为”double a10, *pa=a;”, 要将12.35赋值给a中的下标为5的元素, 不正确的语句是( D ) 。 A. pa5=12.35; B. a5=12.35; C. *(pa+5)=12.35; D. *(a0+5)=12.35; 90. 假定变量b和pb定义为”int b10, *pb=b;”, 要将24赋值给b1元素中, 不正确的语句是( C ) 。 A. *(pb+1)=24
28、; B. *(b+1)=24; C. *+b=24; D. *+pb=24; 91. 假定指针变量p定义为”int *p=new int(100);”, 要释放p所指向的动态内存, 应使用语句( A ) 。 A. delete p; B. delete *p; C. delete &p; D. delete p; 92. 假定指针变量p定义为”int *p=new int30;”, 要释放p所指向的动态内存, 应使用语句( D ) 。 A. delete p; B. delete *p; C. delete &p; D. delete p; 93. 假定变量x定义为”int x=5;”, 要使
29、rx成为x的引用( 别名) , rx应定义为( D ) 。 A. int rx=x; B. int rx=&x; C. int *rx=&x; D. int &rx=x; 94. 关于消息, 下列说法中不正确的是( B ) 。 A. 发送消息的对象请求服务, 接受消息的对象提供服务 B. 消息的发送者必须了解消息的接收者如何相应消息 C. 在C+中, 消息的发送具体体现为对接收消息的对象的某个函数的调用 D. 每个对象只能接收某些特定格式的消息 95. 关于封装, 下列说法中不正确的是( D ) 。 A. 经过封装, 对象的全部属性和操作结合在一起, 形成一个整体 B. 经过封装, 一个对象的
30、实现细节被尽可能地隐藏起来( 不可见) C. 经过封装, 每个对象都成为相对独立的实体 D. 经过封装, 对象的属性都是不可见的 96. 面向对象方法的多态性是指( C ) 。 A. 一个类能够派生出多个特殊类 B. 一个对象在不同的运行环境中能够有不同的变体 C. 针对一消息, 不同的对象能够以适合自身的方式加以响应 D. 一个对象能够是由多个其它对象组合而成的 97. 软件产品在需求发生变化、 运行环境发生变化或发现软件产品本身的错误或不足时进行相应的软件更新的难易程度叫做软件的( A ) 。 A. 可维护性 B. 可复用性 C. 兼容性 D. 正确性 98. 软件产品可被全部或部分地再用
31、于新的应用的能力叫做软件的( B ) 。 A. 可维护性 B. 可复用性 C. 兼容性 D. 正确性 99. 软件产品与其它软件产品组合成一个整体的难易程度叫做软件的( C ) 。 A. 可维护性 B. 可复用性 C. 兼容性 D. 正确性 100. 软件产品准确执行软件需求规格说明书中所规定的任务的能力叫做软件的( D ) 。 A. 可维护性 B. 可复用性 C. 兼容性 D. 正确性二、 填空题 1. C+语言是在_C_语言的基础上发展起来的。 2. C+语言的编译单位是扩展名为_.cpp_的_程序_文件。 3. 行尾使用注释的开始标记符为_/_。 4. 多行注释的开始标记符和结束标记符分
32、别为_/*_和_*/_。 5. 用于输出表示式值的标准输出流对象是_cout_。 6. 用于从键盘上为变量输入值的标准输入流对象是_cin_。 7. 一个完整程序中必须有一个名为_main_的函数。 8. 一个函数的函数体就是一条_复合_语句。 9. 当执行cin语句时, 从键盘上输入每个数据后必须接着输入一个_空白_符, 然后才能继续输入下一个数据。 10. 在C+程序中包含一个头文件或程序文件的预编译命令为_#include_。 11. 程序中的预处理命令是指以_#_字符开头的命令。 12. 一条表示式语句必须以_分号_作为结束符。 13. 在#include命令中所包含的头文件, 能够是
33、系统定义的头文件, 也能够是_用户( 或编程者) _定义的头文件。 14. 使用#include命令能够包含一个头文件, 也能够包含一个_程序_文件。 15一个函数定义由_函数头_和_函数体_两部分组成。 16若一个函数的定义处于调用它的函数之前, 则在程序开始能够省去该函数的_原型( 或声明) _语句。 17C+头文件和源程序文件的扩展名分别为_.h_和_.cpp_。 18程序文件的编译错误分为_警告( warning) _和_致命( error) _两类。 19当使用_void_保留字作为函数类型时, 该函数不返回任何值。 20当函数参数表用_void_保留字表示时, 则表示该参数表为空。 21从一条函数原型语句”int fun1(void);”可知, 该函数的返回类型为_int_, 该函数带有_0_个参数。 22. 当执行cout语句输出endl数据项时, 将使C+显示输出屏幕上的光标从当前位置移动到_下一行_的开始位置。 23. 假定x=5, y=6, 则表示式x+*+y的值为_35_。 24. 假定x=5, y=6, 则表示式x-*-y的值为_25_。 25. 假定x=5, y=6, 则执行表示式