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

更新时间:2024-04-17 18:56:01 阅读量: 综合文库 文档下载

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

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

一、单项选择题

21. 假定下列x和y均为int型变量,则不正确的赋值为( B )。 A. x+=y++ B. x++=y++ C. x=++y D. ++x=++y

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

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

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

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

A. C++程序总是从第一个定义的函数开始执行 B. C++程序总是从main函数开始执行 C. C++函数必须有返回值,否则不能使用函数

D. C++程序中有调用关系的所有函数必须放在同一个程序文件中 40. 函数重载是指( A )。

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

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

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

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

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 )决定的。

。 1

) 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反向存放 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. 作为一个函数的形参 55. 以下正确的描述是( C )。 A. 不允许设置参数的默认值

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

C. 提高速度 D. 使用方便,提高可读性 58. 以下叙述中正确的是( B )。

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

D. 在定义函数时可以在形参表的任何位置给出缺省形参值

2

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. 搜索当前逻辑盘上的所有目录

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

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

64. 在下面存储类中, ( C ) 对象的可见性与生存期不一致。

A. 外部类 B. 自动类 C. 内部静态类 D. 寄存器类 65. 在下面存储类中,( A )的对象不是局部变量。

A. 外部静态类 B. 自动类 C. 函数形参 D. 寄存器类 66. 关于局部变量,下面说法正确的是( C )。 A. 定义该变量的程序文件中的函数都可以访问

B. 定义该变量的函数中的定义处以下的任何语句都可以访问 C. 定义该变量的复合语句中的定义处以下的任何语句都可以访问 D. 定义该变量的函数中的定义处以上的任何语句都可以访问

69. 设array为一个数组,则表达式sizeof(array)/sizeof(array[0])的结果为( B )。 A. array数组首地址 B. array数组中元素个数

C. array数组中每个元素所占的字节数 D. array数组占的总字节数

70. 用new运算符创建一个含10个元素的一维整型数组的正确语句是( C )。 A. int *p=new a[10]; B. int *p=new float[10];

C. int *p=new int[10]; D. int *p=new int[10]={1,2,3,4,5} 71. 下列给字符数组赋初值时,正确的是( A )。

A. char s1[]=”abcdef”; B. char s2[4]=”abcd”;

C. char s3[2][3]={“abc”,”xyz”}; D. char s4[4][]={?a?,?x?,?s?,?t?};

72. 设有定义“static int data[5][6];”,设该数组在静态存储区中的起始地址为十进制的100,若每个int

型数占4个字节,则数组元素data[2][3]的地址为( D )。

3

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=”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 a[10], x, *pa=a;”,若要把数组a中下标为3的元素值赋给x,则不正确的语

句为( D )。

A. x=pa[3]; B. x=*(a+3); C. x=a[3]; D. x=*pa+3; 78. 假定有定义“int b[10]; int *pb;”,则不正确的赋值语句为( D )。 A. pb=b; B. pb=&b[0]; C. *pb=new int; D. pb=b[5];

79. 假定p是具有double类型的指针变量,则表达式++p使p的值(以字节为单位)增加( C )。 A. 1 B. 4 C. sizeof(double) D. sizeof(p) 80. 假定p指向的字符串为”string”,则cout<

81. 假定p指向的字符串为”string”,若要输出这个字符串的地址值,则使用( D )。 A. cout<<*p; B. cout<

82. 定义p并使p指向动态空间中的包含30个整数的数组所使用的定义语句为( A )。 A. int *p=new int[30]; B. int *p=new int(30); C. int *p=new [30]; D. *p=new int[30];

83. 假定p是具有int**类型的指针变量,则给p赋值的正确语句为( B )。 A. p=new int; B. p=new int*; C. p=new int**; D. p=new int[10]; 84. 要使语句“p=new int[10][20];”能够正常执行,p应被事先定义为( D )。 A. int *p; B. int **p; C. int *p[20]; D. int(*p)[20];

85. 假定有“struct BOOK{char title[40]; float price;}; BOOK *book=new BOOK;”,则正确的语句为( A )。 A. strcpy(book->title,”Wang Tao”); B. strcpy(book.title,”Wang Tao”); C. strcpy(*book.title,”Wang Tao”); D. strcpy((*book)->title,”Wang Tao”);

86. 假定有“struct BOOK{char title[40]; float price;}; BOOK *book;”,则不正确的语句为( A )。 A. BOOK *x=new book; B. BOOK x={\ C. BOOK *x=new BOOK; D. BOOK *x=book;

87. 假定有“struct BOOK{char title[40]; float price;}book;”,则正确的语句为( B )。 A. BOOK &x= &book; B. BOOK &x=book; C. BOOK &x=new BOOK; D. BOOK &x=BOOK; 88. 下列对引用的陈述中不正确的是( C )。

A. 每一个引用都是其所引用对象的别名,因此必须初始化

4

B. 形式上针对引用的操作实际上作用于它所引用的对象

C. 一旦定义了引用,一切针对其所引用对象的操作只能通过该引用间接进行 D. 不需要单独为引用分配存储空间

89. 假定变量a和pa定义为“double a[10], *pa=a;”,要将12.35赋值给a中的下标为5的元素,不正确的

语句是( D )。

A. pa[5]=12.35; B. a[5]=12.35; C. *(pa+5)=12.35; D. *(a[0]+5)=12.35;

90. 假定变量b和pb定义为“int b[10], *pb=b;”,要将24赋值给b[1]元素中,不正确的语句是( C )。 A. *(pb+1)=24; 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 int[30];”,要释放p所指向的动态内存,应使用语句( D )。 A. delete p; B. delete *p; C. delete &p; D. delete []p;

93. 假定变量x定义为“int x=5;”,要使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. 通过封装,一个对象的实现细节被尽可能地隐藏起来(不可见) C. 通过封装,每个对象都成为相对独立的实体 D. 通过封装,对象的属性都是不可见的 96. 面向对象方法的多态性是指( C )。 A. 一个类可以派生出多个特殊类

B. 一个对象在不同的运行环境中可以有不同的变体

C. 针对一消息,不同的对象可以以适合自身的方式加以响应 D. 一个对象可以是由多个其他对象组合而成的

二、填空题

2. C++语言的编译单位是扩展名为___.cpp_____的__程序_____文件。 4. 多行注释的开始标记符和结束标记符分别为_/*________和___*/_____。 8. 一个函数的函数体就是一条__复合_____语句。

10. 在C++程序中包含一个头文件或程序文件的预编译命令为__#include______。

13. 在#include命令中所包含的头文件,可以是系统定义的头文件,也可以是___用户(或编程者)____定义的头文件。

14. 使用#include命令可以包含一个头文件,也可以包含一个_程序___文件。 15.一个函数定义由_函数头____和__函数体____两部分组成。

16.若一个函数的定义处于调用它的函数之前,则在程序开始可以省去该函数的_原型(或声明)____语句。 18.程序文件的编译错误分为___警告(warning)____和__致命(error)___两类。

21.从一条函数原型语句“int fun1(void);”可知,该函数的返回类型为__int____,该函数带有_0___个参数。

5

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,则执行表达式y*=x++计算后,x和y的值分别为___6_______和___30_______。 26. 假定x=5,y=6,则执行表达式y+=x--计算后,x和y的值分别为____4______和____11______。 31. signed char类型的值域范围是__-128______至__+127______之间的整数。 34. bool和char类型的数据分别占用____1_____和_____1___个字节。 35. unsigned short int和int类型的长度分别为_____2____和___4_____。 36. 字符串”This\\’s a book.\\n”的长度为_____15_____。 37. 字符串”\\nThis\\’s a pen\\n\\n”的长度为_____15_____。

40. 假定x和y为整型,其值分别为16和5,则x%y和x/y的值分别为____1____和___3_____。

41. 假定x和y为整型,其值分别为16和5,则x/y和double(x)/y的值分别为____3______和_____3.2____。 42. 假定x是一个逻辑量,则x && true的值为____x_____。

43. 假定x是一个逻辑量,则x || true的值为_____true(或1)____。 44. 假定x是一个逻辑量,则x && false的值为_____false(或0)____。 45. 假定x是一个逻辑量,则x || false的值为____x______。 46. 假定x是一个逻辑量,则!x || false的值为____!x______。 47. 假定x是一个逻辑量,则x && !x的值为_____false(或0)_____。 48. 假定x是一个逻辑量,则x || !x的值为____ true(或1)_____。

52. 设enum Printstatus{ready,busy,error}; 则 cout<

55. 枚举类型中的每个枚举值都是一个_____枚举常量_____,它的值为一个___整数______。 56. 常数100和3.62的数据类型分别为____int____和___double_____。

57. 若x=5, y=10, 则计算y*=++x表达式后,x和y的值分别为_ 6___和___60___。

58. 假定x和ch分别为int型和char型,则sizeof(x)和sizeof(ch)的值分别为___4___和__1____。 59. 假定x=10,则表达式x<=10?20:30的值为__20____。

60. 表达式sqrt(81)和pow(6,3)的值分别为___9___和__216____。

61. 含随机函数的表达式rand() 的值在__0___至__9____区间内。

62. 在switch语句中,每个语句标号所含关键字case后面的表达式必须是整型_常量______。 63. 在if语句中,每个else关键字与它前面同层次并且最接近的____if____关键字相配套。 64. 作为语句标号使用的C++保留字case和default只能用于____switch____语句的定义体中。

65. 执行switch语句时,在进行作为条件的表达式求值后,将从某个匹配的标号位置起向下执行,当碰到下一个标号位置时__不停止______执行。

66. 若while循环的“头”为“while(i++<=10)”,并且i的初值为0,同时在循环体中不会修改i的值,则循

环体将被重复执行____11__次后正常结束。

67. 若do循环的“尾”为“while(++i<10)”,并且i的初值为0,同时在循环体中不会修改I 的值,则循环体

将被重复执行___10___次后正常结束。

70. 在程序中执行到___return__语句时,将结束所在函数的执行过程,返回到调用该函数的位置。

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

窗口。

6

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<

82. 一个二维字符数组a[10][20]能够存储_____10___个字符串,每个字符串的长度至多为___19_____。 83. 对一个二维字符数组a进行初始化的数据为{”123”,”456”,”789”},则a[1]元素对应的字符串为

_”456”_____。

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_____,而声明外部变量时用它。

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. 当定义一个结构体变量时,系统分配给该变量的内存大小等于各成员所需内存大小的___总和____。

7

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++) {

int temp=int(sqrt(i));

for (j=2; (1) ;j++)

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

(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;

8

cout<

cout<

if(_____(2)______) cout<

f2=____(3)_______;

}

cout<

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

10 3、 计算?(?1)i?1xi的值。

i?1i! #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)_____; p2*=____(2)____;

s+=j*p1/p2; //j的值为(-1)i+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<<\重新输入:\

9

while(b) {

int r;

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

r=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)___;

}while(i

}

(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)___);

10

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(){ char s1[80];

cout <<”Enter a line:”; cin >>s1;

cout <<”count=”<

int count(char str[]){

int num=0; //给统计变量赋初值 for(int i=0;str[i];i++)

if (str[i]>=?a? && str[i]<=?z? ||___(1)___ ) ___(2)___; ___(3)___; }

(1) str[i]>=?A? && str[i]<=?Z? (2) num++ (3) return num

9、 主函数调用一个fun函数将字符串逆序。

#include 11

#include

___(1)___; void main( ) { char s[80]; cin>>s; ___(2)___;

cout<<”逆序后的字符串:”<

void fun(char ss[]) { int n=strlen(ss);

for(int i=0; ___(3)____; i++) { char c=ss[i]; ss[i]=ss[n–1–i]; ss[n–1–i]=c; } }

(1) void fun(char ss[]) (2) fun(s) (3) i

10、 从一个字符串中删除所有同一个给定字符后得到一个新字符串并输出。 #include const int len=20;

void delstr(char a[],char b[],char c); void main() {

char str1[len],str2[len];

char ch; cout<<\输入一个字符串:\ cin>>str1;

cout<<\输入一个待删除的字符:\

cin>>ch;

delstr(str1,str2,ch);

cout<

void delstr(char a[],char b[],char c) { int j=0;

for(int i=0; ___(1)___; i++)

if(___(2)___) b[j++]=a[i];

b[j]=___(2)___;

}

(1) a[i] (或a[i]!=’\\0’) (2) a[i]!=c 3) '\\0'

12

11、 采用指针访问方式从键盘给数组a[N]输入数据,然后对元素值重新按逆序存放并输出。 #include const int N=8; void main() {

int a[N],*p,*q;

for(p=a; p

}

for(p=a;p

(1) cin>>*p (2) p++ (或++p) (3) q-- (或--q) 13、 对数组a[n]按升序进行的选择排序算法 void SelectSort(int a[], ___(1)___) { int i,j,k;

for(i=1;i

k=i-1; for(j=i;j

if(a[j]

int x=a[i-1]; a[i-1]=a[k]; ___(3)___;

}

}

(1) int n (2) k=j (3) a[k]=x

14、 对数组a[n]按升序进行的插入排序算法 void InsertSort(___(1)___, int n) { int i,j,x;

for(i=1;i

x=a[i]; for(j=i-1;j>=0;j--) //为x顺序向前寻找合适的插入位置

if(x

else ___(3)___;

13

a[j+1]=x;

}

}

(1) int a[] (或int* a) (2) a[j+1]=a[j] (3) break

15、 用插入排序方法对table指针数组中size个指针所指向的字符串进行按升序排序的算法。 void sort(char *table[], int size){ for(int i=1,___(1)___; i++){ char *p=table[i];

for(int j=i-1; j>=0 ; j--)

if(strcmp(p,table[j])<0) ___(2)___; else break; table[j+1]=___(3)___; } }

(1) i

四、写出程序运行结果 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() {

14

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

cout<

b=a+b;

}

cout<

cout<

} 答案:

1 2 3 5 8 13 21 34 55 89

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=”<

} 答案: s=60

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()

15

{

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 #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;

}

16

}

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++) { 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()

17

{

for(int i=1,s=0;i<20;i++) { if(i%2==0 || i%3==0) continue; cout<

s+=i;

}

cout<

} 答案:

1 5 7 11 13 37

11. #include const int T=6; void main() { int i,j;

for(i=1;i<=T;i+=2) for(j=2;j<=T;j+=2) { if(i+j

else cout<<’*’;

}

}

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

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()

18

{

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

s+=p;

}

cout<<\

}

答案: s=63

14. #include void main() { 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

for(j=0;j

cout<

cout<

}

19

}

答案: 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++) { 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; }

20

void f3(int* x, int* y)

{ int z=*x; *x=*y; *y=z; } void main()

{ 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<

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];

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<

21

} 答案:

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 五、指出程序或函数的功能 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++)

if(a%j==0) break;

if(j>k) {cout<

}

}

随机产生出10个10至99之间的素数并显示出来。 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<<\

22

exit(1);

}

}

以参数a和b为运算对象,以参数op为四则算术运算符,求出运算结果并返回。 6. #include #include void main() { int x,y; cin>>x;

y=int(sqrt(x)); //sqrt(x)为求x的算术平方根 for(int i=1;i<=y;i++)

if(x%i==0) cout<<”x=”<

把从键盘上输入的一个整数x分解为所有可能的每两个因子之积。 9. int s1(int n) {

int x; if(n==1) x=1; else x=s1(n-1)+n*n; return x; }

求出1+22+32+...+n2的值。 11. template

bool fun8(T a[], int n, T key) {

for(int i=0;i

if(a[i]==key) return true;

return false ;

}

函数模板,从一维数组a[n]中查找值为key的元素,若查找成功则返回真否则返回假。12. void f2(double a[], int n) { int i; double sum=0; for(i=0;i

for(i=0;i

if(a[i]>=sum) cout<

cout<

}

显示输出数组a[n]中大于等于平均值的所有元素值。 13. void f4(char a[M][N]) {

23

int c1,c2,c3; c1=c2=c3=0;

for(int i=0;i

if(strlen(a[i])<5) c1++;

else if(strlen(a[i])>=5 && strlen(a[i])<15) c2++; else c3++;

cout<

}

对于二维字符数组a中保存的M个字符串,分别统计并输出其长度小于5、大于等于5且小于15、大于等于15的字符串个数。

14. void fun3(int a[][N], int m, int n, int& row, int& col) {

int x=a[0][0]; row=col=0;

for(int i=0;i

for(int j=0;j

x=a[i][j]; row=i; col=j;

if(a[i][j]>x) {

}

}

从一个二维整型数组中查找具有最大值的元素,由引用参数row和col带回该元素的行号和列号。 21. int f(const char *s) {

int i=0; while(*s++)i++; return i; };

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

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

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

#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<

24

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行 int a[10];int n; //2行 public: //3行 A(int aa[],int nn):n(nn){ //4行

for (int I=0;I

25

int a[]={2,5,8,10,15,20}; //16行 Ax(a,6); //17行 Int d=1; //18行 For (int I=0;I<4;I++) d*=x.a[I]; //19行 Int f=SumA(6); //20行 Cout<<”d=”<

错误行的行号为 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值 }

2. 计算1+3+32+...+310的值并输出,假定分别用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<

3. 求满足不等式22+42+...+n2<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<<\

26

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

2??3ax?4ax?1 (x?0) 值,要求把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; cout<>x;

} }

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

{ int x,max;

cin>>x; max=x;

cin>>x;

if(x>max) max=x;

}

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

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) {

if(x<=12) c1++; else c3++; cin>>x; }

else if(x<=15) c2++;

cout<

8、 编写一个函数,分别求出由指针a所指向的字符串中包含的每种十进制数字出现的次数,把统计结果保存

27

在数组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

return v; }

13. 根据下面类中Count函数成员的原型和注释写出它的类外定义。 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 Count(int x); //从数组a的前n个元素中统计出其 //值等于x的个数并返回。}; int AA::Count(int x) { int i,c=0;

for(i=0; i

if(a[i]==x) c++; return c; }

14. 根据下面类中Search函数成员的原型和注释写出它的类外定义。 class AA {

int* a; int n;

28

int MS;

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

public:

int Search(int x); //从数组a的前n个元素中顺序查找值为x的第一个元素,

//若查找成功则返回元素的下标,否则返回-1。};

int AA::Search(int x) { 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

if(a[i]

if(a[i]>mx) mx=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:

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

29

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; if(n>b.n) k=b.n; else k=n; for(int i=0; ib.a[i]) return 1;

else if(a[i]

if(k==n && k==b.n) return 0;

else if(k

else return -1; }

30

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

Top