C++期末复习资料1

时间:2024-04-27 18:20:52 5A范文网 浏览: 复习资料 我要投稿

一、第一章单选题

  1.在每个C++程序中都必须包含有这样一个函数,该函数的函数名为(  )。答案:A

  A.main   B.MAIN   C.name   D.function

  2.C++源程序文件的缺省扩展名为(  )。答案:A

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

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

  A.空格或逗号  B.逗号或回车  C.逗号或分号  D.空格或回车

  4.C++程序的基本模块为(  )。答案:D

  A.表达式   B.标识符   C.语句   D.函数

  5.每个C++程序文件的编译错误分为(  )类。答案:B  //warning error

  A.1    B.2    C.3    D.4

二、第一章填空题

  1.C++语言是在_________语言的基础上发展起来的。答案:C

  2.C++语言中的每条基本语句以________作为结束符。答案:;(或分号)

  3.C++语言中的每条复合语句以________作为结束符。答案:}(或右花括号)

  4.在C++每个程序行的后面或单独一行的开始使用注释的标记符为__________。答案://

  5.单行或多行注释的开始标记符为__________、结束标记符为__________。答案:/*、*/

  6.在一个C++程序文件中,若要包含另外一个头文件或程序文件,则应使用以__________标识符开始的预处理命令。#include

  7.C++程序中的所有预处理命令均以______字符开头。#

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

9.一个函数定义由________和________两部分组成。答案:函数头、函数体

  10.用于输出表达式值的标准输出流对象是________,用于从键盘上为变量输入值的标准输入流对象是________。答案:cout、cin

  11.当不需要函数返回任何值时,则应使用________标识符定义函数类型。答案:void

三、第二章单选题

  1.设x和y均为bool量,则x && y为真的条件是(  )。 答案:A

  A. 它们均为真   B. 其中一个为真

  C. 它们均为假   D. 其中一个为假

  2.设x和y均为bool量,则x || y为假的条件是(  )。 C

  A. 它们均为真   B. 其中一个为真

  C. 它们均为假   D. 其中一个为假

  3.设有语句“int a=12; a+=a*a;”,则执行结束后,a的值为(  )。C

  A. 12   B. 144   C. 156   D. 288

  4.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

  5.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

6.字符串“a+b=12/n”的长度为(  )。答案:B

  A. 6   B. 7   C. 8   D. 9

  7.在下列的常值常量定义中,错误的定义语句是(  )。答案:C

  A. const M=10;     B. const int M=20;

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

  8.枚举类型中的每个枚举常量的值都是一个(  )。 答案:A

  A. 整数          B. 浮点数

  C. 字符          D. 逻辑值

  9.含随机函数的表达式rand()%20的值在(  )区间内。答案:C

  A. 1~19        B. 1~20

  C. 0~19        D. 0~20

四、第二章填空题

  1.十进制数25表示成符合C++语言规则的八进制数为________。答案:031

  2.十进制数25表示成符合C++语言规则的十六进制数为________。答案:0x19

  3.在c++语言中,操纵符________表示输出一个换行符。答案:endl

  4.执行“cout<<char('A'+2)<<endl;”语句后得到的输出结果为________。答案:C

  5.已知'A'~'Z'的ASCII码为65~90,当执行“int x='C'+5;”语句后x的值为________。答案:72

  6.已知'A'~'Z'的ASCII码为65~90,当执行“char ch=14*5+2;cout<<ch<<endl;”语句序列后,得到的输出结果为________。答案:H

  7.假定一个枚举类型的定义为“enum RA{ab,ac,ad,ae};”,则枚举常量ac的值为________。答案:1

8.假定一个枚举类型的定义为“enum RB{a1,a2=3,a3,a4}x=a3;”,则x的值为________。答案:4

  9.char、short、int、float、double类型的大小分别为________个字节。

  10.十进制常数28和3.26的类型分别为________和________。答案:int、double

  11.若需要定义一个常值常量,并且使C++能够进行类型检查,则应在定义语句的开始使用保留字__________。答案:const //#define MAX 100

  12.使用const语句定义一个常值常量时,则必须对它同时进行__________。答案:初始化 //如const int MM=20;

  13.执行“int x=45,y=13;cout<<x/y;”语句序列后得到的输出结果为________。答案:3

  14.执行“int x=45,y=13;cout<<x%y;”语句序列后得到的输出结果为________。答案:6

15.假定x=5,则表达式2+x++的值为________。答案:7

  16.假定y=10,则表达式++y*3的值为________。答案:33

  17.表达式float(25)/4的值为________。答案:6.25

  18.表达式int(14.6)%5的值为________。答案:4

  19.表达式x=x+y表示成复合赋值表达式为__________。答案:x+=y

  20.表达式x=x+1表示成增量表达式为__________。答案:++x

  21.增量表达式++y表示成赋值表达式为__________。答案:y=y+1

  22.关系表达式(x==0)的等价表达式为________。答案:(!x)

  23.关系表达式(x!=0)的等价表达式为________。答案:(x)

  24.假定不允许使用逻辑非操作符,则关系表达式x+y>5的相反表达式为____________。答案:x+y<=5

  25.若x=5,y=10,则x>y逻辑值为________。答案:false 或0

  26.若x=5,y=10,则x!=y的逻辑值为________。答案:true 或1

  27.假定x=5,则执行“a=(x?10:20);”语句后a的值为________。答案:10

  28.执行“typedef int DataType;”语句后,在使用int定义整型变量的地方都可以使用__________来定义整型变量。答案:DataType

五、第三章单选题

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

  A. for循环   B. while循环   C. do循环   D. switch语句

  2.循环体至少被执行一次的语句为(  )语句。答案:C

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

  3.在switch语句的每个case块中,假定都是以break语句结束的,则此switch语句容易被改写为(  )语句。答案:B

  A. for   B. if   C. do   D. while

  4.for语句能够被改写为(  )语句。答案:D

  A. 复合   B. if   C. switch   D. while

  5.循环语句“for(int i=0; i<n; i++) S;”中循环体S被执行的次数为(  )。答案:C

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

6.下面循环语句执行结束后输出的i值为(  )。答案:B for(int i=0; i<n; i++) if(i>n/2) {cout<<i<<endl; break;}

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

  7.在下面循环语句中内层循环体S语句的执行总次数为(  )。答案:D for(int i=0; i<n; i++)

    for(int j=i; j<n; j++) S;//n+(n-1)+...+1

  A. n2   B. (n+1)/2   C. n(n-1)/2   D. n(n+1)/2

  8.在下面的while循环语句中,其循环体被执行的次数为(  )。答案:C int i=0,s=0; while(s<20){i++; s+=i;}//s=1,3,6,10,15,21

  A. 4   B. 5   C. 6   D. 7

  9.在下面的do循环语句中,其循环体被执行的次数为(  )。答案:A int i=0; do i++; while(i*i<10);//i=0,1,2,3

  A. 4   B. 3   C. 5   D. 2

六、第三章填空题

  1.在switch语句中,每个语句标号所含保留字case后面的表达式必须是_______。整型常量

  2.在if语句中,每个else关键字与它前面同层次并且最接近的________关键字相配套。if

  3.作为语句标号使用的C++保留字case和default只能用于________语句的定义体中。switch

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

  5.若while循环的“头”为”while(i++<=10)”,并且i的初值为0,同时在循环体中不会修改i的值,则循环体将被重复执行______次后正常结束。11

  6.若do循环的“尾”为”while(++i<10)”,并且i的初值为0,同时在循环体中不会修改i的值,则循环体将被重复执行______次后正常结束。10

  7.当在程序中执行到________语句时,将结束本层循环类语句或switch语句的执行。答案:break

  8.当在程序中执行到________语句时,将结束所在循环语句中循环体的一次执行。答案:continue

  9.在程序中执行到________语句时,将结束所在函数的执行过程,返回到调用该函数的位置。答案:return

  10.在程序执行完一个________函数调用后,将结束整个程序的执行过程,返回到操作系统或C++集成开发环境界面窗口。答案:主(或main)

七、第三章程序运行结果

  1. #include<iostream.h>

  void main()

  {

  int x=5;

  switch(2*x-3) {

  case 4: cout<<x<<’ ’;

  case 7: cout<<2*x+1<<’ ’;

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

  default: cout<<"default"<<endl;

  }

  cout<<"switch end."<<endl;

  }答案:11 14 switch end.



C++语言程序设计复习

  一、第三章函数功能

  1.#include<iostream.h>

  int SA(int a, int b) {

  if(a>b) return 1;

  else if(a==b) return 0;

  else return -1;

  }

  答案:比较两个整型参数a和b的大小,若a>b则返回1,若a==b则返回0,若a<b则返回-1。

  2.int SC(int a, int b, int c) {

  if(a>=b && a>=c) return a;

  if(b>=a && b>=c) return b;

  return c;

  }

  答案:求出a,b,c三个数中的最大值并返回。

3.int SE(int n) {//n为大于等于1的整数

  int x; cin>>x;

  if(n==1) return x;

  int m=x;

  while(--n) {cin>>x; m+=x;}

  return m;

  }

  答案:求出从键盘上输入的n个整数之和并返回。


  4.double SF(double x, int n) {//n为大于等于0的整数

  double p=1,s=1;

  for(int i=1;i<=n;i++) {p*=x; s+=p/(i+1);}

  return s;

  }

  答案:计算1+x/2+x2/3+...+xn/(n+1)的值并返回。

5.#include<math.h>

  bool SG(int x) {//x为大于等于2的整数

  int a=int(sqrt(x)); //取x的平方根

  int i=2;

  while(i<=a) {if(x%i==0) break; i++;}

  if(i<=a)return 0; else return 1;

  }

  答案:判断x是否为一个质数,若是则返回1,否则返回0。


   6.float FH() {

  float x,y=0,n=0;

  cin>>x;

  while(x!=-1) {n++; y+=x; cin>>x;}

  if(n==0) return y; else return y/n;

  }

  答案:求出从键盘上输入的一批常数的平均值,以-1作为结束输入的标志。

7.float FI(int n) {//n为大于等于1的整数

  float x,y=0;

  do {

  cin>>x; y+=x*x;

  } while(--n>0);

  return y;

 }

  答案:求出从键盘上输入的n个常数的平方和并返回

8.#include<iostream.h>

  #include<math.h>

  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=”<<i<<’*’<<x/i<<endl;

}

  答案:把从键盘上输入的一个整数x分解为所有可能的每两个因子之积。

二、第三章编写函数

  1.编写一个主函数,利用while循环,求出并显示满足不等式1+1/2+1/3+...+1/n≥5的最小n值。

  答案:

  void main(){

  int i=0; double s=0;//或int i=1; double s=1;

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

  cout<<"n="<<i<<endl;

  }

   2. 编写一个主函数,计算1+3+3^2+...+3^10的值并输出,假定分别用i,p,s作为循环变量、累乘变量和累加变量的标识符。

  void main(){

  int i;  //用i作为循环变量

  int p=1;  //用p作为累乘变量

  int s=1;  //用s作为累加循环变量

  for(i=1;i<=10;i++) {p*=3; s+=p;}

  cout<<s<<endl;

  }

3.编写一个主函数,已知6≤a≤30,15≤b≤36,求出满足不定方程2a+5b=126的全部整数组解。如(13,20)就是其中的一组解。

  答案:

  void main()

  {

  int a,b;

  for(a=6;a<=30; a++)

  for(b=15;b<=36;b++)

  if(2*a+5*b==126) cout<<'('<<a<<','<<b<<')'<<endl;

  }

 三、第四章单选题

  1.在下面的一维数组定义中,(  )语句有语法错误。答案:C

  A. int a[]={1,2,3};   B. int a[10]={0};

  C. int a[];       D. int a[5];

  2.在下面的二维数组定义中,(  )语句是正确的。答案:C

  A. int a[5][];         B. int a[][5];

  C. int a[][3]={{1,3,5},{2}};  D. int a[](10);

  3.在下面的字符数组定义中,(  )语句有语法错误。答案:D

  A. char a[20]=”abcdefg”;    B. char a[]=”x+y=55.”;

  C. char a[15]={’1’,’2’};   D. char a[10]=’5’;

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

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

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

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

  6.将两个字符串连接起来组成一个字符串时,选用(  )函数。答案:C

  A. strlen()  B. strcpy()  C. strcat()  D. strcmp()

四、第四章填空题

  1.假定一个一维数组的定义为“char* a[8];”, 该数组所含元素的个数为________,所占存储空间的字节数为________。8、32

  2. 假定一个二维数组的定义为“int a[3][5];”,则该数组所含元素的个数为________,所占存储空间的字节数为________。15、60

  3. 执行“typedef int ABC[10];”语句把ABC定义为具有10个整型元素的________类型。数组

  4. 使用“typedef char BB[10][50];”语句定义________为含有10行50列二维字符数组类型。BB

  5. 存储字符’a’需要占用存储器的________个字节空间,存储字符串”a”需要占用存储器的________个字节空间。1、2

  6. 字符串”a://xxk//数据”的长度为________,存储它的字符数组的长度至少为________。11、12

7. 若a是一个字符数组,则从键盘上向该数组输入一个字符串的表达式语句为__________,向屏幕输出a中所存字符串的表达式语句为__________。答案:cin>>a; cout<<a;

  8. 一个二维字符数组a[10][20]能够存储________个字符串,每个字符串的长度至多为________。答案:10、19

五、第四章程序运行结果

  1. #include<iostream.h>

  void main() {

  int a[10]={12,39,26,41,55,63,72,40,83,95};

  int i1=0, i2=0;

  for(int i=0;i<10;i++)

  if(a[i]%2==1) i1++; else i2++;

  cout<<i1<<' '<<i2<<endl;

  }

  答案:6 4

2. #include<iostream.h>

  void main() {

  int a[9]={36,25,48,14,55,40,32,66,60};

  int b1, b2;

  b1=b2=a[0];

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

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

  else if(a[i]>b2) b2=a[i];

  cout<<b1<<' '<<b2<<endl;

  }

  答案:66 60

3. #include<iostream.h>

  void main() {

  char a[]="abcdabcabfgacd";

  int i1=0, i2=0, i=0;

  while(a[i]) {

  if(a[i]=='a') i1++;

  if(a[i]=='b') i2++;

  i++;

  }

  cout<<i1<<' '<<i2<<' '<<i<<endl;

  }

  答案:4 3 14

六、第四章编写程序

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

  答案:

  void fun4(char* a, int b[])

  {

  int i;

  for(i=0;i<10;i++) b[i]=0;//对b数组初始化

  while(*a) {

  int j=*a-’0’;

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

  a++;

  }}

C++语言程序设计复习课

  一、第五章单选题

  1.下面的(  )函数头格式不正确。答案:D

  A.AA(int a, int b)      B.AA(int a, int b=0)

  C.AA(int a=0, int b=0)    D.AA(int a=0, int b)

  2.下面的(  )保留字不能作为函数的返回类型。答案:C

  A.void   B.int   C.new   D.long

  3.下面的函数声明中,“void BC(int a, int b);”的重载函数是(  )。答案:B

  A.int BC(int x, int y);     B.void BC(int a, char b);

  C.float BC(int a, int b, int c=0);D.void BC(int a, int b=0);

  4.声明或定义一个内联函数时,必须在函数开始使用保留字(  )。答案:C

  A.static   B.const   C.inline   D.extern

5.在下面的函数声明中,(  )存在着语法错误。答案:D

  A.int BC(int a, int);   B.int BC(int, int);

  C.int BC(int, int=5);   D.int BC(int x; int y);

6.若定义了函数double *function(), 则该函数的返回值为(  )。答案:B

  A.实数型  B.实数指针型  C.函数指针型  D.数组型

7. 下列(  )的调用方式是引用调用。答案:C

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

  C.形参是引用,实参是变量   D.形参是变量,实参是地址值

8.为了提高程序的运行速度,可将不太复杂的函数实现为(  )。答案:A

  A.内联函数 B.重载函数 C.递归函数 D.函数模板

9.下面正确的函数原型语句是(  )。答案:B

  A.int Function(void a);   B.void Function (int);

  C.int Function(a);      D.void int(doub

10. 函数调用func((exp1,exp2), exp3*exp4-exp5)中所含实参的个数为(  )个。答案:B

  A.1    B.2    C.4    D.5

11. 若用数组名作为函数调用的实参,传递给形参的是(  )答案:A

  A.数组的首地址    B.数组中第一个元素的值

  C.数组全部元素的值  D.数组元素的个数

12. 文件包含命令中被包含的文件的扩展名(  )。答案:C

  A.只能是.h  B.不能是.h  C.可以是.h或.cpp  D.只能是.cpp

二、第五章填空题

  1.在C++语言中,一个函数由______和_______组成。答案:函数头、函数体

  2.在函数外定义的变量称为全局变量,若没有被初始化则系统隐含对它所赋的初值为________。答案:0

  3.函数被调用时,实参向形参的传送分为________和_______两种传送方式。答案:引用、值

  4.重载一个函数的条件是:该函数必须在参数的_______或参数的_______上与其它同名函数有所不同。答案:个数、类型

  5.如果一个函数只允许在同一程序文件中被调用,则应在该函数定义前加上的C++保留字为__________。答案:static

  6.如果一个函数直接或间接地调用自身,这样的调用被称为____________调用。答案:递归

  7.假定一个函数模板的定义为“template<class T> T cubin(T n){return n*n*n ;}”,则类型参数为________。答案:T

8.对于无返回值函数,定义函数时要用__________作为函数类型。答案:void

  9.函数形参的作用域是该函数的____________。答案:函数体

  10.C++提供的预处理命令有宏定义命令,条件编译命令和____________。答案:文件包含命令

  11.程序的编译是以__________为单位进行的。答案:文件

三、第五章程序运行结果

  .#include<iostream.h>

  #include<stdlib.h>

  double SD(double a, double b, char op) {

  double x;

  switch(op) {

  case '+': x=a+b; break;

  case '-': x=a-b; break;

  case '*': x=a*b; break;

  case '/': if(b) x=a/b; else exit(1);

  break;

  default: exit(1);

  }

  return x;

  }

void main() {

  int x=25,y=10;

  cout<<SD(x,y,'-')<<' ';

  cout<<SD(x,y,'*')<<' ';

  cout<<SD(x+y,y,'/')<<endl;

  }

  答案:15 250 3.5


  2.#include<iostream.h>

  void main() {

  int a=10, b=20;

  cout<<a<<' '<<b<<endl;

  {a*=3;

  int b=a+35;

  cout<<a<<' '<<b<<endl;

  }

cout<<a<<' '<<b<<endl;

  }

  答案: 10 20、 30 65   、30 20


  3.#include<iostream.h>

  void WF(int& x, int y) {

  x=x+y;

  y=x+y;

  cout<<x<<","<<y<<endl;

  }

  void main() {

  int x=8, y=15;

  cout<<x<<","<<y<<endl;

  WF(x,y);

x=2*x;

  cout<<x<<","<<y<<endl;

  }

  答案: 8,15、 23,38   、46,15


  4.#include<iostream.h>

  void SelectSort(int a[], int n) {

  int i,j,k;

  for(i=1;i<n;i++) {//进行n-1次选择和交换

  k=i-1;

  for(j=i;j<n;j++)

  if(a[j]<a[k]) k=j;

  int x=a[i-1]; a[i-1]=a[k]; a[k]=x;

  }

}

  void main() {

  int i;

  int a[6]={20,15,32,47,36,28};

  SelectSort(a,6);

  for(i=0; i<6; i++) cout<<a[i]<<' ';

  cout<<endl;

  }

  答案:15 20 28 32 36 47

四、第五章函数功能

  1.bool WB(int a[], int n, int x) {

  for(int i=0;i<n;i++)

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

  return false;

  }

  答案:从数组a中顺序查找值为x的元素,若查找成功则返回真,否则返回假。


  2.template<class T>

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

  {

  int c=0

  for(int i=0;i<n;i++)

  if(a[i]>=key) c++;

  return c;

  }

答案:函数模板,从一维数组a[n]中统计出其值大于等于key的元素个数并作为函数值返回。


  3.#include<iostream.h>

  template<class TT>

  int WG(TT a, TT b) {

  if(a>b) return 1;

  else if(a==b) return 0;

  else return -1;

  }

  答案:

  模板函数,比较两个变量a和b的大小,若a>b则返回1,若a==b则返回0,若a<b则返回-1。

4. template<class Type>

  void WE(Type a[], Type b[], int n) {

  for(int i=0;i<n;i++)

  b[n-i-1]=a[i];

  }

  答案:模板函数,把数组a的每个元素按逆序放入数组b中。

五、第六章单选题

  1.假定p是一个指向float型数据的指针,则p+1所指数据的地址比p所指数据的地址大(  )字节。答案:C

  A.1    B.2    C.4    D.8

  2.假定a为一个字符数组名,则元素a[8]相对于该数组首地址的字节地址为(  )。答案:CB

  A.4    B.8    C.16    D.32

  3.假定a为一个整型数组名,则元素a[4]相对于该数组首地址的字节地址为(  )。答案:CC

  A.4    B.8    C.16    D.32

  4.假定a为一个数组名,则下面的(  )表示有错误。答案:CB

  A.a[i]   B.*a++   C.*a   D.*(a+1)

  5.用new运算符创建一维数组的正确语句是(  )。答案:C

  A.int *p=new a[10];   B.int *p=new float[10];

  C.int *p=new int[10];  D.int *p=new int[5]={1,2,3,4,5}

六、第六章填空题

  1.假定p所指对象的值为25,p+1所指对象的值为46,则*p++的值为________。答案:25

  2.假定p所指对象的值为25,p+1所指对象的值为46,则*++p的值为________。答案:46

  3.假定p所指对象的值为25,p+1所指对象的值为46,则执行“(*p)++;”语句后,p所指对象的值为________。答案:26

  4.假定p所指对象的值为25,p+1所指对象的值为46,则执行“*(p++);”语句后,p所指对象的值为________。答案:25

  5.假定a是一个指针数组,则a+i所指对象的地址比a地址大________字节。答案:4*i

  6.假定a是一个一维数组,则a[i]的指针访问方式为________。答案:*(a+i)

  7.假定a是一个二维数组,则a[i][j]的指针访问方式为____________。答案:*(a[i]+j) 或*(*(a+i)+j)

七、第六章程序运行结果

  1.#include<iomanip.h>

  void main() {

  int a[8]={3,5,7,9,11,13,15,17};

  int *p=a;

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

  cout<<setw(5)<<*p++;

  if((i+1)%4==0) cout<<endl;

  }

  }

  答案: 3  5  7  9     、 11  13  15  17

2.#include<iomanip.h>

  void main() {

  int a[9]={2,4,6,8,10,12,14,16,18};

  for(int i=0;i<9;i+=2) cout<<setw(5)<<*(a+i)<<’ ’;

  cout<<endl;

  }

  答案:2  6  10  14  18


  3.#include<iomanip.h>

  void main() {

  int x=20,y=40,*p;

  p=&x; cout<<*p<<' ';

  *p=x+10; cout<<*p<<' ';

  p=&y; cout<<*p<<endl;

  *p=y+20; cout<<x<<' '<<y<<endl;

  }

答案: 20 30 40  、 30 60


  4. #include<iomanip.h>

  int LB(int *a, int n) {

  int s=1;

  for(int i=0;i<n;i++) s*=*a++;

  return s;

  }

  void main() {

  int a[]={1,2,3,4,5,6,7,8};

  int b=LB(a,5)+LB(&a[3],3);

  cout<<"b="<<b<<endl;

  }

  答案:b=240

 C++语言程序设计复习课

  一、第六章写出函数功能

  1. #include<iostream.h>

  int* LJ(int a[], int n) {

  int k=0;

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

  if(a[i]>a[k]) k=i;

  return &a[k];

  }

  答案:求出数组a中n个元素的最大值元素,返回该元素的地址。

2. #include<iostream.h>

  void LI(int n) {

  int* a=new int[n];

  for(int i=0;i<n;i++) cin>>a[i];

  for(i=n-1;i>=0;i--) cout<<*(a+i)<<' ';

  cout<<'/n';

  delete []a;

  }

  答案:把从键盘上输入的n个整数按与输入的相反次序显示出来。

3. void LK(int a[], int n, int& m) {//int a[]同int*a

  float s=0; int i;

  for(i=0;i<n;i++) s+=a[i]; //a[i]同*(a+i)

  s/=n;

  for(i=0,m=0;i<n;i++)

  if(a[i]>=s) m++;

  }

  答案:求出数组a的n个元素中大于等于平均值的元素个数,该个数由引用参数m返回。

 二、第七章单选题

  1.假定一个结构类型的定义为 “struct A{int a,b; A* c;};”,则该类型的大小为________字节。答案:B

  A.8   B.12   C.16   D.20

  2.假定一个结构类型的定义为 “struct D{int a; union {int b; double c;};D* d[2];};”,则该类型的大小为________字节。答案:D

  A.8   B.12   C.16   D.20

  3.假定有“struct BOOK{char title[40]; float price;}; BOOK *book;”,则不正确的语句为(  )。答案:A

  A.BOOK *x=new book;  B.BOOK x={"C++ Programming",27.0};

  C.BOOK *x=new BOOK;  D.BOOK **x=&book;

  4.假定有“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;

三、第七章填空题

  1.假定要动态分配一个类型为Worker的具有n个元素的数组,并由r指向这个动态数组,则使用的语句表达式为Worker* r= _______________。答案:new Worker[n];

  2.假定要访问一个结构x中的由a指针成员所指向的对象,则表示方法为____________。答案:n*(x.a)

  3.假定要访问一个结构指针p所指对象中的b指针成员所指的对象,则表示方法为____________。答案:n*(p->b)

  4.与结构成员访问表达式p->name等价的表达式是____________。答案:n(*p).name

  5.与结构成员访问表达式(*fp).score等价的表达式是____________。答案:nfp->score

四、第七章程序运行结果

  1. #include<iostream.h>

  struct Worker {

  char name[15]; //姓名

  int age;    //年龄

  float pay;   //工资

  };

  void main() {

  Worker x={"wangfong",43,1640};

  Worker y, *p;

  y=x; p=&x; p->pay+=100;

  cout<<y.name<<' '<<y.age<<' '<<y.pay<<endl;

  cout<<p->name<<' '<<p->age+2<<' '<<p->pay+200<<endl;

  }

  答案: wangfong 43 1640    、 wangfong 45 1940

  2. #include<iostream.h>

  #include<string.h>

  struct Worker {

  char name[15]; //姓名

  int age;    //年龄

  float pay;   //工资

  };

  bool operator==(Worker& r1, Worker& r2) {

  if(strcmp(r1.name, r2.name)==0) return true;

  else return false;

  }

  void main() {

  Worker a[4]={{"abc",25,420},{"def",58,638},

  {"ghi",49,560},{"jkl",36,375}};

  Worker x={"ghi"};

  for(int i=0; i<4; i++) if(a[i]==x) break;

  cout<<a[i].name<<' '<<a[i].age<<' '<<a[i].pay<<endl;

  }

  答案:ghi 49 560


  3. #include<iostream.h>

  struct Worker {

  char name[15]; //姓名

  int age;    //年龄

  float pay;   //工资

  };

  bool operator <(Worker& r1, Worker& r2) {

  if(r1.age<r2.age) return true;

  else return false;

  }

  void main() {

  Worker a[4]={{"abc",25,420},{"def",58,638},

  {"ghi",49,560},{"jkl",36,375}};

Worker x=a[0];

  for(int i=1; i<4; i++) if(x<a[i]) x=a[i];

  cout<<x.name<<' '<<x.age<<' '<<x.pay<<endl;

  }

  答案:def 58 638

五、第七章写出函数功能

  1.void QA(Worker a[], int n) {

  for(int i=0; i<n; i++)

  cin>>a[i].name>>a[i].age>>a[i].pay;

  }

  假定结构类型Worker 的定义如下:

  struct Worker {

  char name[15]; //姓名

  int age;    //年龄

  float pay;   //工资

  };

  答案:从键盘输入n个Worker类型的记录到一维数组a中。


  2.istream& operator>>(istream& istr, Worker& x) {

  cout<<"请输入一个职工记录:姓名、年龄、工资"<<endl;

  istr>>x.name>>x.age>>x.pay;

  return istr;

  }// Worker a; cin>>a;

  假定结构类型Worker 的定义如下:

  struct Worker {

  char name[15]; //姓名

  int age;    //年龄

  float pay;   //工资

  };

  答案:重载提取操作符,用于从输入流中输入一个Worker类型的记录到x中。

3.void QB(StrNode*& f, int n) {

  if(n==0) {f=NULL; return;}

  f=new StrNode;

  cin>>f->name;

  StrNode* p=f;

  while(--n) {

  p=p->next=new StrNode;

  cin>>p->name;

  }

  p->next=NULL;

  }

  假定结构类型StrNode的定义如下:

  struct StrNode {

  char name[15]; //字符串域

  StrNode *next; //指针域

  };

  答案:建立一个具有n个结点的链表,每个结点的字符串值由键盘输入,链表的表头指针由引用变量f带回。

  4.void QC(StrNode* f) {

  while(f) {

  cout<<f->name<<' ';

  f=f->next;

  }

  }

  假定结构类型StrNode的定义如下:

  struct StrNode {

  char name[15]; //字符串域

  StrNode *next; //指针域

  };

  答案:遍历f单链表,即从表头结点开始依次输出f单链表中每个结点的值。

  5.IntNode* FindMax(IntNode *f)

  {

  if(!f) return NULL;

  IntNode *p=f;

  f=f->next;

  while(f) {

  if(f->data>p->data) p=f;

  f=f->next;

  }

  return p;

  }

  假定IntNode的类型定义为:

  struct IntNode {

  int data;    //结点值域

  IntNode* next; //结点指针域

  };

  答案:从表头指针f指向的、由IntNode类型的结点所构成的链表中查找出data域的值最大的结点并返回指向该结点的指针。

  6.int Count(IntNode *f) {

  if(!f) return 0;

  int c=0;

  while(f) {c++; f=f->next;}

  return c;

  }

  假定IntNode的类型定义为:

  struct IntNode {

  int data;    //结点值域

  IntNode* next; //结点指针域

  };

  答案:统计出以表头指针为f的链表中结点的个数。

  7.void Output(IntNode *f) {

  if(!f) return;

  while(f) {

  cout<<f->data<<’ ’;

  f=f->next;

  }

  cout<<endl;

  }

  假定IntNode的类型定义为:

  struct IntNode {

  int data;    //结点值域

  IntNode* next; //结点指针域

  };

  答案:对于以表头指针为f的链表,依次显示出每个结点的data域的值。

  六、第八章单选题

  1.当类中一个字符指针成员指向具有n个字节的存储空间时,它所能存储字符串的最大长度为________。答案:C

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

  2.假定AB为一个类,则该类的拷贝构造函数的声明语句为(  )。答案:C

  A.AB&(AB x); B.AB(AB x) C.AB(AB&); D.AB(AB* x)

  3.对类对象成员的初始化是通过执行构造函数中的(  )完成的。答案:A

  A.初始化表  B.函数体  C.参数表  D.基类表

  4.假定AB为一个类,则执行“AB a, b(3), *p;”语句时,自动调用该类构造函数的次数为(  )。答案:A

  A.2   B.3   C.4   D.5

  5.假定AB为一个类,则执行“AB a(4), b[3], *p[2];”语句时,自动调用该类构造函数的次数为(  )。答案:B

  A.3   B.4   C.6   D.9

  6.假定AB为一个类,px为指向该类动态对象数组的指针,该数组长度为n,则执行 “delete []px;”语句时,自动调用该类析构函数的次数为(  )。答案:C

  A.0   B.1   C.n   D.n+1

  7.对于类中定义的成员,其隐含访问权限为(  )。答案:C

  A.public   B.protected   C.private   D.static

  8.对于结构中定义的成员,其隐含访问权限为(  )。答案:A

  A.public   B.protected   C.private   D.static

  9.为了使类中的成员不能被类外的函数通过成员操作符访问,则不应把该成员的访问权限定义为(  )。答案:A

  A.public   B.protected   C.private   D.static

  10.一个类的友元函数或友元类能够通过成员操作符访问该类的(  )。答案:D

  A.私有成员  B.保护成员  C.公用成员  D.所有成员

  11.在一个类的定义中,通常要包含有(  )成员的定义。答案:C

  A.数据  B.函数  C.数据和函数  D.数据或函数

  12.在类作用域中能够通过直接使用该类的(  )成员名进行访问。答案:D

  A.私有   B.公用   C.保护   D.任何

  13.在关键字public后面定义的成员为类的(  )成员。答案:B

  A.私有   B.公用   C.保护   D.任何

  14.在关键字private后面定义的成员为类的(  )成员。答案:A

  A.私有   B.公用   C.保护   D.任何

  15.假定AA为一个类,a为该类公有的数据成员,x为该类的一个对象,则访问x对象中数据成员a的格式为(  )。答案:D

  A.x(a)   B.x[a]   C.x->a   D.x.a

  16.假定AA为一个类,a()为该类公有的函数成员,x为该类的一个对象,则访问x对象中函数成员a()的格式为(  )。答案:B

  A.x.a    B.x.a()    C.x->a    D.x->a()

一、第一章单选题

  1.在每个C++程序中都必须包含有这样一个函数,该函数的函数名为(  )。答案:A

  A.main   B.MAIN   C.name   D.function

  2.C++源程序文件的缺省扩展名为(  )。答案:A

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

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

  A.空格或逗号  B.逗号或回车  C.逗号或分号  D.空格或回车

  4.C++程序的基本模块为(  )。答案:D

  A.表达式   B.标识符   C.语句   D.函数

  5.每个C++程序文件的编译错误分为(  )类。答案:B  //warning error

  A.1    B.2    C.3    D.4

二、第一章填空题

  1.C++语言是在_________语言的基础上发展起来的。答案:C

  2.C++语言中的每条基本语句以________作为结束符。答案:;(或分号)

  3.C++语言中的每条复合语句以________作为结束符。答案:}(或右花括号)

  4.在C++每个程序行的后面或单独一行的开始使用注释的标记符为__________。答案://

  5.单行或多行注释的开始标记符为__________、结束标记符为__________。答案:/*、*/

  6.在一个C++程序文件中,若要包含另外一个头文件或程序文件,则应使用以__________标识符开始的预处理命令。#include

  7.C++程序中的所有预处理命令均以______字符开头。#

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

9.一个函数定义由________和________两部分组成。答案:函数头、函数体

  10.用于输出表达式值的标准输出流对象是________,用于从键盘上为变量输入值的标准输入流对象是________。答案:cout、cin

  11.当不需要函数返回任何值时,则应使用________标识符定义函数类型。答案:void

三、第二章单选题

  1.设x和y均为bool量,则x && y为真的条件是(  )。 答案:A

  A. 它们均为真   B. 其中一个为真

  C. 它们均为假   D. 其中一个为假

  2.设x和y均为bool量,则x || y为假的条件是(  )。 C

  A. 它们均为真   B. 其中一个为真

  C. 它们均为假   D. 其中一个为假

  3.设有语句“int a=12; a+=a*a;”,则执行结束后,a的值为(  )。C

  A. 12   B. 144   C. 156   D. 288

  4.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

  5.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

6.字符串“a+b=12/n”的长度为(  )。答案:B

  A. 6   B. 7   C. 8   D. 9

  7.在下列的常值常量定义中,错误的定义语句是(  )。答案:C

  A. const M=10;     B. const int M=20;

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

  8.枚举类型中的每个枚举常量的值都是一个(  )。 答案:A

  A. 整数          B. 浮点数

  C. 字符          D. 逻辑值

  9.含随机函数的表达式rand()%20的值在(  )区间内。答案:C

  A. 1~19        B. 1~20

  C. 0~19        D. 0~20

四、第二章填空题

  1.十进制数25表示成符合C++语言规则的八进制数为________。答案:031

  2.十进制数25表示成符合C++语言规则的十六进制数为________。答案:0x19

  3.在c++语言中,操纵符________表示输出一个换行符。答案:endl

  4.执行“cout<<char('A'+2)<<endl;”语句后得到的输出结果为________。答案:C

  5.已知'A'~'Z'的ASCII码为65~90,当执行“int x='C'+5;”语句后x的值为________。答案:72

  6.已知'A'~'Z'的ASCII码为65~90,当执行“char ch=14*5+2;cout<<ch<<endl;”语句序列后,得到的输出结果为________。答案:H

  7.假定一个枚举类型的定义为“enum RA{ab,ac,ad,ae};”,则枚举常量ac的值为________。答案:1

8.假定一个枚举类型的定义为“enum RB{a1,a2=3,a3,a4}x=a3;”,则x的值为________。答案:4

  9.char、short、int、float、double类型的大小分别为________个字节。

  10.十进制常数28和3.26的类型分别为________和________。答案:int、double

  11.若需要定义一个常值常量,并且使C++能够进行类型检查,则应在定义语句的开始使用保留字__________。答案:const //#define MAX 100

  12.使用const语句定义一个常值常量时,则必须对它同时进行__________。答案:初始化 //如const int MM=20;

  13.执行“int x=45,y=13;cout<<x/y;”语句序列后得到的输出结果为________。答案:3

  14.执行“int x=45,y=13;cout<<x%y;”语句序列后得到的输出结果为________。答案:6

15.假定x=5,则表达式2+x++的值为________。答案:7

  16.假定y=10,则表达式++y*3的值为________。答案:33

  17.表达式float(25)/4的值为________。答案:6.25

  18.表达式int(14.6)%5的值为________。答案:4

  19.表达式x=x+y表示成复合赋值表达式为__________。答案:x+=y

  20.表达式x=x+1表示成增量表达式为__________。答案:++x

  21.增量表达式++y表示成赋值表达式为__________。答案:y=y+1

  22.关系表达式(x==0)的等价表达式为________。答案:(!x)

  23.关系表达式(x!=0)的等价表达式为________。答案:(x)

  24.假定不允许使用逻辑非操作符,则关系表达式x+y>5的相反表达式为____________。答案:x+y<=5

  25.若x=5,y=10,则x>y逻辑值为________。答案:false 或0

  26.若x=5,y=10,则x!=y的逻辑值为________。答案:true 或1

  27.假定x=5,则执行“a=(x?10:20);”语句后a的值为________。答案:10

  28.执行“typedef int DataType;”语句后,在使用int定义整型变量的地方都可以使用__________来定义整型变量。答案:DataType

五、第三章单选题

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

  A. for循环   B. while循环   C. do循环   D. switch语句

  2.循环体至少被执行一次的语句为(  )语句。答案:C

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

  3.在switch语句的每个case块中,假定都是以break语句结束的,则此switch语句容易被改写为(  )语句。答案:B

  A. for   B. if   C. do   D. while

  4.for语句能够被改写为(  )语句。答案:D

  A. 复合   B. if   C. switch   D. while

  5.循环语句“for(int i=0; i<n; i++) S;”中循环体S被执行的次数为(  )。答案:C

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

6.下面循环语句执行结束后输出的i值为(  )。答案:B for(int i=0; i<n; i++) if(i>n/2) {cout<<i<<endl; break;}

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

  7.在下面循环语句中内层循环体S语句的执行总次数为(  )。答案:D for(int i=0; i<n; i++)

    for(int j=i; j<n; j++) S;//n+(n-1)+...+1

  A. n2   B. (n+1)/2   C. n(n-1)/2   D. n(n+1)/2

  8.在下面的while循环语句中,其循环体被执行的次数为(  )。答案:C int i=0,s=0; while(s<20){i++; s+=i;}//s=1,3,6,10,15,21

  A. 4   B. 5   C. 6   D. 7

  9.在下面的do循环语句中,其循环体被执行的次数为(  )。答案:A int i=0; do i++; while(i*i<10);//i=0,1,2,3

  A. 4   B. 3   C. 5   D. 2

六、第三章填空题

  1.在switch语句中,每个语句标号所含保留字case后面的表达式必须是_______。整型常量

  2.在if语句中,每个else关键字与它前面同层次并且最接近的________关键字相配套。if

  3.作为语句标号使用的C++保留字case和default只能用于________语句的定义体中。switch

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

  5.若while循环的“头”为”while(i++<=10)”,并且i的初值为0,同时在循环体中不会修改i的值,则循环体将被重复执行______次后正常结束。11

  6.若do循环的“尾”为”while(++i<10)”,并且i的初值为0,同时在循环体中不会修改i的值,则循环体将被重复执行______次后正常结束。10

  7.当在程序中执行到________语句时,将结束本层循环类语句或switch语句的执行。答案:break

  8.当在程序中执行到________语句时,将结束所在循环语句中循环体的一次执行。答案:continue

  9.在程序中执行到________语句时,将结束所在函数的执行过程,返回到调用该函数的位置。答案:return

  10.在程序执行完一个________函数调用后,将结束整个程序的执行过程,返回到操作系统或C++集成开发环境界面窗口。答案:主(或main)

七、第三章程序运行结果

  1. #include<iostream.h>

  void main()

  {

  int x=5;

  switch(2*x-3) {

  case 4: cout<<x<<’ ’;

  case 7: cout<<2*x+1<<’ ’;

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

  default: cout<<"default"<<endl;

  }

  cout<<"switch end."<<endl;

  }答案:11 14 switch end.



C++语言程序设计复习课

  一、第三章函数功能

  1.#include<iostream.h>

  int SA(int a, int b) {

  if(a>b) return 1;

  else if(a==b) return 0;

  else return -1;

  }

  答案:比较两个整型参数a和b的大小,若a>b则返回1,若a==b则返回0,若a<b则返回-1。

  2.int SC(int a, int b, int c) {

  if(a>=b && a>=c) return a;

  if(b>=a && b>=c) return b;

  return c;

  }

  答案:求出a,b,c三个数中的最大值并返回。

3.int SE(int n) {//n为大于等于1的整数

  int x; cin>>x;

  if(n==1) return x;

  int m=x;

  while(--n) {cin>>x; m+=x;}

  return m;

  }

  答案:求出从键盘上输入的n个整数之和并返回。


  4.double SF(double x, int n) {//n为大于等于0的整数

  double p=1,s=1;

  for(int i=1;i<=n;i++) {p*=x; s+=p/(i+1);}

  return s;

  }

  答案:计算1+x/2+x2/3+...+xn/(n+1)的值并返回。

5.#include<math.h>

  bool SG(int x) {//x为大于等于2的整数

  int a=int(sqrt(x)); //取x的平方根

  int i=2;

  while(i<=a) {if(x%i==0) break; i++;}

  if(i<=a)return 0; else return 1;

  }

  答案:判断x是否为一个质数,若是则返回1,否则返回0。


   6.float FH() {

  float x,y=0,n=0;

  cin>>x;

  while(x!=-1) {n++; y+=x; cin>>x;}

  if(n==0) return y; else return y/n;

  }

  答案:求出从键盘上输入的一批常数的平均值,以-1作为结束输入的标志。

7.float FI(int n) {//n为大于等于1的整数

  float x,y=0;

  do {

  cin>>x; y+=x*x;

  } while(--n>0);

  return y;

 }

  答案:求出从键盘上输入的n个常数的平方和并返回

8.#include<iostream.h>

  #include<math.h>

  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=”<<i<<’*’<<x/i<<endl;

}

  答案:把从键盘上输入的一个整数x分解为所有可能的每两个因子之积。

二、第三章编写函数

  1.编写一个主函数,利用while循环,求出并显示满足不等式1+1/2+1/3+...+1/n≥5的最小n值。

  答案:

  void main(){

  int i=0; double s=0;//或int i=1; double s=1;

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

  cout<<"n="<<i<<endl;

  }

   2. 编写一个主函数,计算1+3+3^2+...+3^10的值并输出,假定分别用i,p,s作为循环变量、累乘变量和累加变量的标识符。

  void main(){

  int i;  //用i作为循环变量

  int p=1;  //用p作为累乘变量

  int s=1;  //用s作为累加循环变量

  for(i=1;i<=10;i++) {p*=3; s+=p;}

  cout<<s<<endl;

  }

3.编写一个主函数,已知6≤a≤30,15≤b≤36,求出满足不定方程2a+5b=126的全部整数组解。如(13,20)就是其中的一组解。

  答案:

  void main()

  {

  int a,b;

  for(a=6;a<=30; a++)

  for(b=15;b<=36;b++)

  if(2*a+5*b==126) cout<<'('<<a<<','<<b<<')'<<endl;

  }

 三、第四章单选题

  1.在下面的一维数组定义中,(  )语句有语法错误。答案:C

  A. int a[]={1,2,3};   B. int a[10]={0};

  C. int a[];       D. int a[5];

  2.在下面的二维数组定义中,(  )语句是正确的。答案:C

  A. int a[5][];         B. int a[][5];

  C. int a[][3]={{1,3,5},{2}};  D. int a[](10);

  3.在下面的字符数组定义中,(  )语句有语法错误。答案:D

  A. char a[20]=”abcdefg”;    B. char a[]=”x+y=55.”;

  C. char a[15]={’1’,’2’};   D. char a[10]=’5’;

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

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

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

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

  6.将两个字符串连接起来组成一个字符串时,选用(  )函数。答案:C

  A. strlen()  B. strcpy()  C. strcat()  D. strcmp()

四、第四章填空题

  1.假定一个一维数组的定义为“char* a[8];”, 该数组所含元素的个数为________,所占存储空间的字节数为________。8、32

  2. 假定一个二维数组的定义为“int a[3][5];”,则该数组所含元素的个数为________,所占存储空间的字节数为________。15、60

  3. 执行“typedef int ABC[10];”语句把ABC定义为具有10个整型元素的________类型。数组

  4. 使用“typedef char BB[10][50];”语句定义________为含有10行50列二维字符数组类型。BB

  5. 存储字符’a’需要占用存储器的________个字节空间,存储字符串”a”需要占用存储器的________个字节空间。1、2

  6. 字符串”a://xxk//数据”的长度为________,存储它的字符数组的长度至少为________。11、12

7. 若a是一个字符数组,则从键盘上向该数组输入一个字符串的表达式语句为__________,向屏幕输出a中所存字符串的表达式语句为__________。答案:cin>>a; cout<<a;

  8. 一个二维字符数组a[10][20]能够存储________个字符串,每个字符串的长度至多为________。答案:10、19

五、第四章程序运行结果

  1. #include<iostream.h>

  void main() {

  int a[10]={12,39,26,41,55,63,72,40,83,95};

  int i1=0, i2=0;

  for(int i=0;i<10;i++)

  if(a[i]%2==1) i1++; else i2++;

  cout<<i1<<' '<<i2<<endl;

  }

  答案:6 4

2. #include<iostream.h>

  void main() {

  int a[9]={36,25,48,14,55,40,32,66,60};

  int b1, b2;

  b1=b2=a[0];

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

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

  else if(a[i]>b2) b2=a[i];

  cout<<b1<<' '<<b2<<endl;

  }

  答案:66 60

3. #include<iostream.h>

  void main() {

  char a[]="abcdabcabfgacd";

  int i1=0, i2=0, i=0;

  while(a[i]) {

  if(a[i]=='a') i1++;

  if(a[i]=='b') i2++;

  i++;

  }

  cout<<i1<<' '<<i2<<' '<<i<<endl;

  }

  答案:4 3 14

六、第四章编写程序

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

  答案:

  void fun4(char* a, int b[])

  {

  int i;

  for(i=0;i<10;i++) b[i]=0;//对b数组初始化

  while(*a) {

  int j=*a-’0’;

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

  a++;

  }}

C++语言程序设计复习课

  一、第五章单选题

  1.下面的(  )函数头格式不正确。答案:D

  A.AA(int a, int b)      B.AA(int a, int b=0)

  C.AA(int a=0, int b=0)    D.AA(int a=0, int b)

  2.下面的(  )保留字不能作为函数的返回类型。答案:C

  A.void   B.int   C.new   D.long

  3.下面的函数声明中,“void BC(int a, int b);”的重载函数是(  )。答案:B

  A.int BC(int x, int y);     B.void BC(int a, char b);

  C.float BC(int a, int b, int c=0);D.void BC(int a, int b=0);

  4.声明或定义一个内联函数时,必须在函数开始使用保留字(  )。答案:C

  A.static   B.const   C.inline   D.extern

5.在下面的函数声明中,(  )存在着语法错误。答案:D

  A.int BC(int a, int);   B.int BC(int, int);

  C.int BC(int, int=5);   D.int BC(int x; int y);

6.若定义了函数double *function(), 则该函数的返回值为(  )。答案:B

  A.实数型  B.实数指针型  C.函数指针型  D.数组型

7. 下列(  )的调用方式是引用调用。答案:C

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

  C.形参是引用,实参是变量   D.形参是变量,实参是地址值

8.为了提高程序的运行速度,可将不太复杂的函数实现为(  )。答案:A

  A.内联函数 B.重载函数 C.递归函数 D.函数模板

9.下面正确的函数原型语句是(  )。答案:B

  A.int Function(void a);   B.void Function (int);

  C.int Function(a);      D.void int(doub

10. 函数调用func((exp1,exp2), exp3*exp4-exp5)中所含实参的个数为(  )个。答案:B

  A.1    B.2    C.4    D.5

11. 若用数组名作为函数调用的实参,传递给形参的是(  )答案:A

  A.数组的首地址    B.数组中第一个元素的值

  C.数组全部元素的值  D.数组元素的个数

12. 文件包含命令中被包含的文件的扩展名(  )。答案:C

  A.只能是.h  B.不能是.h  C.可以是.h或.cpp  D.只能是.cpp

二、第五章填空题

  1.在C++语言中,一个函数由______和_______组成。答案:函数头、函数体

  2.在函数外定义的变量称为全局变量,若没有被初始化则系统隐含对它所赋的初值为________。答案:0

  3.函数被调用时,实参向形参的传送分为________和_______两种传送方式。答案:引用、值

  4.重载一个函数的条件是:该函数必须在参数的_______或参数的_______上与其它同名函数有所不同。答案:个数、类型

  5.如果一个函数只允许在同一程序文件中被调用,则应在该函数定义前加上的C++保留字为__________。答案:static

  6.如果一个函数直接或间接地调用自身,这样的调用被称为____________调用。答案:递归

  7.假定一个函数模板的定义为“template<class T> T cubin(T n){return n*n*n ;}”,则类型参数为________。答案:T

8.对于无返回值函数,定义函数时要用__________作为函数类型。答案:void

  9.函数形参的作用域是该函数的____________。答案:函数体

  10.C++提供的预处理命令有宏定义命令,条件编译命令和____________。答案:文件包含命令

  11.程序的编译是以__________为单位进行的。答案:文件

三、第五章程序运行结果

  .#include<iostream.h>

  #include<stdlib.h>

  double SD(double a, double b, char op) {

  double x;

  switch(op) {

  case '+': x=a+b; break;

  case '-': x=a-b; break;

  case '*': x=a*b; break;

  case '/': if(b) x=a/b; else exit(1);

  break;

  default: exit(1);

  }

  return x;

  }

void main() {

  int x=25,y=10;

  cout<<SD(x,y,'-')<<' ';

  cout<<SD(x,y,'*')<<' ';

  cout<<SD(x+y,y,'/')<<endl;

  }

  答案:15 250 3.5


  2.#include<iostream.h>

  void main() {

  int a=10, b=20;

  cout<<a<<' '<<b<<endl;

  {a*=3;

  int b=a+35;

  cout<<a<<' '<<b<<endl;

  }

cout<<a<<' '<<b<<endl;

  }

  答案: 10 20、 30 65   、30 20


  3.#include<iostream.h>

  void WF(int& x, int y) {

  x=x+y;

  y=x+y;

  cout<<x<<","<<y<<endl;

  }

  void main() {

  int x=8, y=15;

  cout<<x<<","<<y<<endl;

  WF(x,y);

x=2*x;

  cout<<x<<","<<y<<endl;

  }

  答案: 8,15、 23,38   、46,15


  4.#include<iostream.h>

  void SelectSort(int a[], int n) {

  int i,j,k;

  for(i=1;i<n;i++) {//进行n-1次选择和交换

  k=i-1;

  for(j=i;j<n;j++)

  if(a[j]<a[k]) k=j;

  int x=a[i-1]; a[i-1]=a[k]; a[k]=x;

  }

}

  void main() {

  int i;

  int a[6]={20,15,32,47,36,28};

  SelectSort(a,6);

  for(i=0; i<6; i++) cout<<a[i]<<' ';

  cout<<endl;

  }

  答案:15 20 28 32 36 47

四、第五章函数功能

  1.bool WB(int a[], int n, int x) {

  for(int i=0;i<n;i++)

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

  return false;

  }

  答案:从数组a中顺序查找值为x的元素,若查找成功则返回真,否则返回假。


  2.template<class T>

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

  {

  int c=0

  for(int i=0;i<n;i++)

  if(a[i]>=key) c++;

  return c;

  }

答案:函数模板,从一维数组a[n]中统计出其值大于等于key的元素个数并作为函数值返回。


  3.#include<iostream.h>

  template<class TT>

  int WG(TT a, TT b) {

  if(a>b) return 1;

  else if(a==b) return 0;

  else return -1;

  }

  答案:

  模板函数,比较两个变量a和b的大小,若a>b则返回1,若a==b则返回0,若a<b则返回-1。

4. template<class Type>

  void WE(Type a[], Type b[], int n) {

  for(int i=0;i<n;i++)

  b[n-i-1]=a[i];

  }

  答案:模板函数,把数组a的每个元素按逆序放入数组b中。

五、第六章单选题

  1.假定p是一个指向float型数据的指针,则p+1所指数据的地址比p所指数据的地址大(  )字节。答案:C

  A.1    B.2    C.4    D.8

  2.假定a为一个字符数组名,则元素a[8]相对于该数组首地址的字节地址为(  )。答案:CB

  A.4    B.8    C.16    D.32

  3.假定a为一个整型数组名,则元素a[4]相对于该数组首地址的字节地址为(  )。答案:CC

  A.4    B.8    C.16    D.32

  4.假定a为一个数组名,则下面的(  )表示有错误。答案:CB

  A.a[i]   B.*a++   C.*a   D.*(a+1)

  5.用new运算符创建一维数组的正确语句是(  )。答案:C

  A.int *p=new a[10];   B.int *p=new float[10];

  C.int *p=new int[10];  D.int *p=new int[5]={1,2,3,4,5}

六、第六章填空题

  1.假定p所指对象的值为25,p+1所指对象的值为46,则*p++的值为________。答案:25

  2.假定p所指对象的值为25,p+1所指对象的值为46,则*++p的值为________。答案:46

  3.假定p所指对象的值为25,p+1所指对象的值为46,则执行“(*p)++;”语句后,p所指对象的值为________。答案:26

  4.假定p所指对象的值为25,p+1所指对象的值为46,则执行“*(p++);”语句后,p所指对象的值为________。答案:25

  5.假定a是一个指针数组,则a+i所指对象的地址比a地址大________字节。答案:4*i

  6.假定a是一个一维数组,则a[i]的指针访问方式为________。答案:*(a+i)

  7.假定a是一个二维数组,则a[i][j]的指针访问方式为____________。答案:*(a[i]+j) 或*(*(a+i)+j)

七、第六章程序运行结果

  1.#include<iomanip.h>

  void main() {

  int a[8]={3,5,7,9,11,13,15,17};

  int *p=a;

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

  cout<<setw(5)<<*p++;

  if((i+1)%4==0) cout<<endl;

  }

  }

  答案: 3  5  7  9     、 11  13  15  17

2.#include<iomanip.h>

  void main() {

  int a[9]={2,4,6,8,10,12,14,16,18};

  for(int i=0;i<9;i+=2) cout<<setw(5)<<*(a+i)<<’ ’;

  cout<<endl;

  }

  答案:2  6  10  14  18


  3.#include<iomanip.h>

  void main() {

  int x=20,y=40,*p;

  p=&x; cout<<*p<<' ';

  *p=x+10; cout<<*p<<' ';

  p=&y; cout<<*p<<endl;

  *p=y+20; cout<<x<<' '<<y<<endl;

  }

答案: 20 30 40  、 30 60


  4. #include<iomanip.h>

  int LB(int *a, int n) {

  int s=1;

  for(int i=0;i<n;i++) s*=*a++;

  return s;

  }

  void main() {

  int a[]={1,2,3,4,5,6,7,8};

  int b=LB(a,5)+LB(&a[3],3);

  cout<<"b="<<b<<endl;

  }

  答案:b=240

 C++语言程序设计复习课

  一、第六章写出函数功能

  1. #include<iostream.h>

  int* LJ(int a[], int n) {

  int k=0;

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

  if(a[i]>a[k]) k=i;

  return &a[k];

  }

  答案:求出数组a中n个元素的最大值元素,返回该元素的地址。

2. #include<iostream.h>

  void LI(int n) {

  int* a=new int[n];

  for(int i=0;i<n;i++) cin>>a[i];

  for(i=n-1;i>=0;i--) cout<<*(a+i)<<' ';

  cout<<'/n';

  delete []a;

  }

  答案:把从键盘上输入的n个整数按与输入的相反次序显示出来。

3. void LK(int a[], int n, int& m) {//int a[]同int*a

  float s=0; int i;

  for(i=0;i<n;i++) s+=a[i]; //a[i]同*(a+i)

  s/=n;

  for(i=0,m=0;i<n;i++)

  if(a[i]>=s) m++;

  }

  答案:求出数组a的n个元素中大于等于平均值的元素个数,该个数由引用参数m返回。

 二、第七章单选题

  1.假定一个结构类型的定义为 “struct A{int a,b; A* c;};”,则该类型的大小为________字节。答案:B

  A.8   B.12   C.16   D.20

  2.假定一个结构类型的定义为 “struct D{int a; union {int b; double c;};D* d[2];};”,则该类型的大小为________字节。答案:D

  A.8   B.12   C.16   D.20

  3.假定有“struct BOOK{char title[40]; float price;}; BOOK *book;”,则不正确的语句为(  )。答案:A

  A.BOOK *x=new book;  B.BOOK x={"C++ Programming",27.0};

  C.BOOK *x=new BOOK;  D.BOOK **x=&book;

  4.假定有“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;

三、第七章填空题

  1.假定要动态分配一个类型为Worker的具有n个元素的数组,并由r指向这个动态数组,则使用的语句表达式为Worker* r= _______________。答案:new Worker[n];

  2.假定要访问一个结构x中的由a指针成员所指向的对象,则表示方法为____________。答案:n*(x.a)

  3.假定要访问一个结构指针p所指对象中的b指针成员所指的对象,则表示方法为____________。答案:n*(p->b)

  4.与结构成员访问表达式p->name等价的表达式是____________。答案:n(*p).name

  5.与结构成员访问表达式(*fp).score等价的表达式是____________。答案:nfp->score

四、第七章程序运行结果

  1. #include<iostream.h>

  struct Worker {

  char name[15]; //姓名

  int age;    //年龄

  float pay;   //工资

  };

  void main() {

  Worker x={"wangfong",43,1640};

  Worker y, *p;

  y=x; p=&x; p->pay+=100;

  cout<<y.name<<' '<<y.age<<' '<<y.pay<<endl;

  cout<<p->name<<' '<<p->age+2<<' '<<p->pay+200<<endl;

  }

  答案: wangfong 43 1640    、 wangfong 45 1940

  2. #include<iostream.h>

  #include<string.h>

  struct Worker {

  char name[15]; //姓名

  int age;    //年龄

  float pay;   //工资

  };

  bool operator==(Worker& r1, Worker& r2) {

  if(strcmp(r1.name, r2.name)==0) return true;

  else return false;

  }

  void main() {

  Worker a[4]={{"abc",25,420},{"def",58,638},

  {"ghi",49,560},{"jkl",36,375}};

  Worker x={"ghi"};

  for(int i=0; i<4; i++) if(a[i]==x) break;

  cout<<a[i].name<<' '<<a[i].age<<' '<<a[i].pay<<endl;

  }

  答案:ghi 49 560


  3. #include<iostream.h>

  struct Worker {

  char name[15]; //姓名

  int age;    //年龄

  float pay;   //工资

  };

  bool operator <(Worker& r1, Worker& r2) {

  if(r1.age<r2.age) return true;

  else return false;

  }

  void main() {

  Worker a[4]={{"abc",25,420},{"def",58,638},

  {"ghi",49,560},{"jkl",36,375}};

Worker x=a[0];

  for(int i=1; i<4; i++) if(x<a[i]) x=a[i];

  cout<<x.name<<' '<<x.age<<' '<<x.pay<<endl;

  }

  答案:def 58 638

五、第七章写出函数功能

  1.void QA(Worker a[], int n) {

  for(int i=0; i<n; i++)

  cin>>a[i].name>>a[i].age>>a[i].pay;

  }

  假定结构类型Worker 的定义如下:

  struct Worker {

  char name[15]; //姓名

  int age;    //年龄

  float pay;   //工资

  };

  答案:从键盘输入n个Worker类型的记录到一维数组a中。


  2.istream& operator>>(istream& istr, Worker& x) {

  cout<<"请输入一个职工记录:姓名、年龄、工资"<<endl;

  istr>>x.name>>x.age>>x.pay;

  return istr;

  }// Worker a; cin>>a;

  假定结构类型Worker 的定义如下:

  struct Worker {

  char name[15]; //姓名

  int age;    //年龄

  float pay;   //工资

  };

  答案:重载提取操作符,用于从输入流中输入一个Worker类型的记录到x中。

3.void QB(StrNode*& f, int n) {

  if(n==0) {f=NULL; return;}

  f=new StrNode;

  cin>>f->name;

  StrNode* p=f;

  while(--n) {

  p=p->next=new StrNode;

  cin>>p->name;

  }

  p->next=NULL;

  }

  假定结构类型StrNode的定义如下:

  struct StrNode {

  char name[15]; //字符串域

  StrNode *next; //指针域

  };

  答案:建立一个具有n个结点的链表,每个结点的字符串值由键盘输入,链表的表头指针由引用变量f带回。

  4.void QC(StrNode* f) {

  while(f) {

  cout<<f->name<<' ';

  f=f->next;

  }

  }

  假定结构类型StrNode的定义如下:

  struct StrNode {

  char name[15]; //字符串域

  StrNode *next; //指针域

  };

  答案:遍历f单链表,即从表头结点开始依次输出f单链表中每个结点的值。

  5.IntNode* FindMax(IntNode *f)

  {

  if(!f) return NULL;

  IntNode *p=f;

  f=f->next;

  while(f) {

  if(f->data>p->data) p=f;

  f=f->next;

  }

  return p;

  }

  假定IntNode的类型定义为:

  struct IntNode {

  int data;    //结点值域

  IntNode* next; //结点指针域

  };

  答案:从表头指针f指向的、由IntNode类型的结点所构成的链表中查找出data域的值最大的结点并返回指向该结点的指针。

  6.int Count(IntNode *f) {

  if(!f) return 0;

  int c=0;

  while(f) {c++; f=f->next;}

  return c;

  }

  假定IntNode的类型定义为:

  struct IntNode {

  int data;    //结点值域

  IntNode* next; //结点指针域

  };

  答案:统计出以表头指针为f的链表中结点的个数。

  7.void Output(IntNode *f) {

  if(!f) return;

  while(f) {

  cout<<f->data<<’ ’;

  f=f->next;

  }

  cout<<endl;

  }

  假定IntNode的类型定义为:

  struct IntNode {

  int data;    //结点值域

  IntNode* next; //结点指针域

  };

  答案:对于以表头指针为f的链表,依次显示出每个结点的data域的值。

  六、第八章单选题

  1.当类中一个字符指针成员指向具有n个字节的存储空间时,它所能存储字符串的最大长度为________。答案:C

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

  2.假定AB为一个类,则该类的拷贝构造函数的声明语句为(  )。答案:C

  A.AB&(AB x); B.AB(AB x) C.AB(AB&); D.AB(AB* x)

  3.对类对象成员的初始化是通过执行构造函数中的(  )完成的。答案:A

  A.初始化表  B.函数体  C.参数表  D.基类表

  4.假定AB为一个类,则执行“AB a, b(3), *p;”语句时,自动调用该类构造函数的次数为(  )。答案:A

  A.2   B.3   C.4   D.5

  5.假定AB为一个类,则执行“AB a(4), b[3], *p[2];”语句时,自动调用该类构造函数的次数为(  )。答案:B

  A.3   B.4   C.6   D.9

  6.假定AB为一个类,px为指向该类动态对象数组的指针,该数组长度为n,则执行 “delete []px;”语句时,自动调用该类析构函数的次数为(  )。答案:C

  A.0   B.1   C.n   D.n+1

  7.对于类中定义的成员,其隐含访问权限为(  )。答案:C

  A.public   B.protected   C.private   D.static

  8.对于结构中定义的成员,其隐含访问权限为(  )。答案:A

  A.public   B.protected   C.private   D.static

  9.为了使类中的成员不能被类外的函数通过成员操作符访问,则不应把该成员的访问权限定义为(  )。答案:A

  A.public   B.protected   C.private   D.static

  10.一个类的友元函数或友元类能够通过成员操作符访问该类的(  )。答案:D

  A.私有成员  B.保护成员  C.公用成员  D.所有成员

  11.在一个类的定义中,通常要包含有(  )成员的定义。答案:C

  A.数据  B.函数  C.数据和函数  D.数据或函数

  12.在类作用域中能够通过直接使用该类的(  )成员名进行访问。答案:D

  A.私有   B.公用   C.保护   D.任何

  13.在关键字public后面定义的成员为类的(  )成员。答案:B

  A.私有   B.公用   C.保护   D.任何

  14.在关键字private后面定义的成员为类的(  )成员。答案:A

  A.私有   B.公用   C.保护   D.任何

  15.假定AA为一个类,a为该类公有的数据成员,x为该类的一个对象,则访问x对象中数据成员a的格式为(  )。答案:D

  A.x(a)   B.x[a]   C.x->a   D.x.a

  16.假定AA为一个类,a()为该类公有的函数成员,x为该类的一个对象,则访问x对象中函数成员a()的格式为(  )。答案:B

  A.x.a    B.x.a()    C.x->a    D.x->a()


来源:网络整理 免责声明:本文仅限学习分享,如产生版权问题,请联系我们及时删除。

相关文章:

本金交换的形式包括( )A在协议生效日双方按约定汇率交04-27

根据起息日不同,外汇掉期交易的形式包括()。A远期对远期04-27

首席风险官(),中国证券监督管理委员会及其派出机构可以采04-27

外汇期权按产生期权合约的原生金融产品划分,可分为( )。A04-27

期货公司申请设立分支机构,应当向公司所在地中国证券监04-27

资产管理业务()等岗位必须相互独立,并配备专职业务人员,不04-27

下列关于期货交易所组织形式和注册资本的陈述,正确的有04-27

证券公司受期货公司委托从事介绍业务,应当提供的服务有04-27

外汇掉期交易中,如果发起方为近端卖出、远端买入,则()。A04-27

某美国机械设备进口商3个月后需支付进口货款3亿日元,则04-27

热搜文章
最新文章