admin 管理员组

文章数量: 887021


2023年12月16日发(作者:fastapi websocket)

.

《C++程序设计》课程复习资料

一、单项选择题:

1.下列字符串中可以用作 C++标识符的是 [ ]

t C.123 D.k-ld

2.定义变量 int a=6,则 a++的值是 [ ]

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

3.已知字母A的ASCII码为65,则表示字符常量A 错误的是 [ ]

A. '101' B. 'x41' C. 65 D.“A”

4.结构化程序由三种基本结构组成,不包括 [ ]

A.顺序结构 B.选择结构 C.控制结构 D.循环结构

5.己知有定义:

const int D 5;

int i=1;

double f=0.32;

char c=15;

则下列选项错误的是 [ ]

A.++i; B. D--; C. c++; D. --f;

6.若有定义为“int *r =new int [10];”,则释放指针所指内存空间的操作是 [ ]

A. delete [ ]r; B. delete *r C. delete r; D. delete r[ ];

7.下列哪个是 C++语言的不正确的标识符? [ ]

A._No1 B. Ab1 C. bgc D. int

8.下列哪个是 C++语言的合法的字符常量? [ ]

A. ”0” B. '054' C. 'x89' D. '092'

9.定义整型变量x,y,z并赋初始值6的正确语句是 [ ]

A. int x=y=z=6; B. int x=6,y=6,z=6; C. x=y=z=6; D. int x,y,z=6;

10.用 C++语言编写的代码程序 [ ]

A.可立即执行 B.是一个源程序

C.经过编译即可执行 D.经过解释才能执行

11.将两个字符串连接起来组成一个字符串时,选用的函数是 [ ]

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

12.在程序中,预处理命令开头的字符都是 [ ]

A. * B. # C. & D. @

13.在 C++语言中,表示一条语句结束的符号是 [ ]

A. “#” B. “;” C. “}” D. “//”

14.在下面的循环语句中循环体执行的次数为 [ ]

for(int i=0; i

if (i>n/2) break;

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

15.在下面的一维数组定义中,有语法错误的语句是 [ ]

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

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

16.下面的保留字中,不能作为函数的返回类型 [ ]

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

17.下面的函数声明中,“void BC(int a, int 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. int BC(int a, int b=0);

18.假定AB为一个类,则该类的复制构造函数的声明语句为 [ ]

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

.

.

19.表达式(1,2,3,4)的结果是 [ ]

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

20.在函数中如果不说明变量的存储类型,则默认的存储类型是 [ ]

A. auto B. static C. extern D. register

21.下面字符序列中,合法的 C++常量是 [ ]

A.078 B.5L C.9e7.5 D.'AB'

a声明的自动型变量 a在没有赋值的情况下,其值为 [ ]

A.0 B.-1 C.1 D.随机数

23.设“int f(int);”和“int g(int);”是函数f和g的原形,以下将f作为语句调用的是 [ ]

A. g(f(3)) B. f(g(3)) C. g(f(3)+2) D. p=f(g(3)+1)

24.下面对构造函数和析构函数正确定义的项是 [ ]

A. X::X(参数), X::~X() B. void X::X(), void X::~X()

C. X::X(参数), X::~X(参数) D. void X::X(参数), void X::~X(参数)

25.变量生存期是指 [ ]

A.变量定义 B.变量在内存中分配存储单元到被释放期间

C.程序的运行 D.可执行代码的生存期

26.以下选项中 C++表达式不能正确表示的数学关系a<x≤b为 [ ]

A. a

C. !(a>=x) && !(x>b) D. a

27.下列定义中,定义指向数组的指针p 的是 [ ]

A. int *p[5] B. int (*p)[5] C. (int *)p[5] D. int *p[ ];

28.设有以下定义:

void f1(int * m, long & n);

int a;

long b;

则以下调用合法的是 [ ]

A.f1(a,b) B.f1(&a,b) C.f1(a,&b) D.f1(&a,&b)

29.下列各类变量中,不是局部变量的是 [ ]

er int x; f(int w)

z; int y;(定义在函数外)

30.已知p是一个指向类A数据成员m的指针,A1是类A的一个对象。如果要给m赋值为5,

( )正确的语句。 [ ]

A.A1.p=5 B.A1->p=5 C.A.*p=5 D.*A1.p=5

31.以下选项中,决定函数的返回值的类型是 [ ]

A.调用该函数的主调函数类型 语句中的表达式类型

C.定义函数时所指定的返回值类型 D.调用函数时临时决定

32.下面for语句的循环次数为 [ ]

for(int i=0,x=0; !x && i<=5; i++);

A.无穷次 B.5 C.6 D.7

33.在下面的字符数组定义中,有语法错误的语句是 [ ]

a[20]="abcdefg" a[ ]="x+y=55"

a[15]={ '1', '2'} a[10]= '5'

34.若用数组名作为函数调用的实参,传递给形参的是 [ ]

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

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

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

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

36.当使用fstream流类定义一个流对象,并打开一个磁盘文件时,文件的隐含打开方式为 [ ]

A. ios::in B. ios::out C. ios::in | ios::out D.没有

.

.

二、填空题:

1.若a是一个字符数组,则使用输入输出流对象cout向屏幕输出数组a中所存字符串的语句为_________。

2.当一个对象定义时,C++编译系统自动调用__________函数建立该对象并进行初始化。

3.C++语言的参数传递机制包括值传递和____________传递两种。

4.假定p是一个指针,则(*p)++运算首先访问__________,然后使p的值增1。

5.假定对二维数组a[3][4]进行初始化的数据为{{2, 5, 6}, {2,8},{7}},则a[1][1]被初始化为_______。

6.设px指向一个类的动态分配的对象,则执行“delete px;”语句时,将自动调用该类的_______________。

7.变量的基本类型有 、实型、字符型和枚举型。

8.语法的三种基本结构为顺序结构、选择结构和 结构。

9.一个指针指向一个Data类对象,它保存着该对象的__________,相应的指针类型为Data类。

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

11.假定用户没有给一个名为AB的类定义构造函数,则系统为其隐含定义的构造函数为________________。

12.当在程序中执行到__________________语句时,就立即结束本层循环类语句或switch语句的执行。

13.字符和字符串常数的定界符分别为_________和双引号(")。

14.应用程序中只有一个函数,这个函数的名称是__________。

15.在switch语句中,每个语句标号所含关键字case后面的表达式必须是__________表达式。

16.假定p所指对象的值为25,p+1所指对象的值为46,则*p++的值为__________。

17.假定要动态分配一个类型为Worker的具有n个元素的数组,并由r指向这个动态数组,则使用的语句为Worker * r=__________________。

18.设有如下程序结构:

class Box

{ … };

void main( )

{ Box A,B,C; }

该程序运行时,分别调用构造函数和析构函数________次。

19.若有语句int a=6;,则计算表达式 a+=a-=a*a 后,a的值为__________。

20.在进行函数调用时,将把实参的__________传递给值参数,把实参数的地址传递给引用参数。

121.关系表达式x+y>5的相反表达式为__________________。

22.假设在程序中a、b、c均被定义成整型,所赋值都大于1,则能正确表示数学式abc的表达式是__________________(不使用强制类型转换)。

23.假定a是一个一维数组,则a[i]的指针访问方式为__________________。

24.对一个类中的数据成员的初始化可以通过构造函数中的初始化表实现,也可以通过构造函数中的__________________实现。

25.C++中的标识符只能由字母、数字和__________组成。

26.C++语句cout<<__________<<120; 可以用8进制数表示(输出)120 。

27.利用“对象名.成员变量”形式访问的对象成员仅限于被声明为_____________的成员。

28.C++在调用一个函数的过程中,可以直接或间接地调用该函数本身,这种调用称为__________调用。

29.在C++程序中包含一个头文件或程序文件的预编译命令为________________。

30.假定一维数组的定义为“int a[8];”,则该数组所含元素的个数为________。

31.十六进制常量前面应该加__________为前缀。

32.变量一般需要先赋初值再参与运算,__________变量没有赋初值时,将由系统自动置为0。

33.当程序中执行到__________________语句时,将结束所在循环语句中循环体的一次执行。

34.C++中规定,数组元素的下标从_________开始。

35.假定有定义int *p,则指向p变量的指针变量pp定义语句为________________。

36.类test的析构函数名是________________。

三、判断题:

1.在C++中,自减运算符“--”可以用于变量,也可以用于常量。 [ ]

.

.

语句中必须有break语句,否则无法退出switch语句。 [ ]

3.若S表示一条 C++语句,while(1)S必定是无限循环。 [ ]

4.若有说明:int *p1,*p2,m=3,n; 则p1=&m;p2=p1; 是正确的赋值语句。 [ ]

5.在C++语言中,类中的成员函数能存取类中的私有数据。 [ ]

6.控制格式输入输出的操作子 oct不是设置域宽的。 [ ]

7.在C++中,0127是一个合法的整数,最高位的0实际上是不必要,其值就是127。 [ ]

8.如果x 是一个整型变量,则语句“int *p=new int[x];”是正确的。 [ ]

9.数组是若干相同类型的数据的集合。 [ ]

10.在C++语言中,可以使用new运算符创建的对象或对象数组,可以使用运算符delete删除之。[ ]

11.若类A是类B的友元类,且类B是类C的友元类,则类A也是类C的友元类。 [ ]

12.对于ofstream类对象file,feof成员函数的返回值为真表示打开文件失败。 [ ]

13.在switch语句中,switch后面的表达式可以为任意类型。 [ ]

14.'n'、'x6A'、'101'均是C++的字符常量。 [ ]

15.一个变量的地址就称为该变量的“指针”。 [ ]

16.如果(x==y),则(*x==*y)。 [ ]

17.函数体内声明的静态变量,至多只会被初始化一次。 [ ]

18.构造函数和析构函数都不能重载。 [ ]

19.在C++语言中,while语句的循环体有可能一遍都不执行,而do—while语句的循环体至少执行一遍。 [ ]

20.在 C++的命名标识符中,大小写字母是不加区分的。 [ ]

21.引用就是某个变量的别名,对引用的操作,实质上就是对被引用的变量的操作。 [ ]

22.在C++中,二维数组中元素排列的顺序是按行存放的,即在内存中先顺序存放第一行的元素,再存放第二行的元素。 [ ]

char *p说明了p是指向字符串的常量指针。 [ ]

24.说明或定义对象时,类名前面不需要加class关键字。 [ ]

25.在C++中,空语句表示什么都不做,因此毫无意义。 [ ]

26.预处理命令是在进行编译前执行的,然后再进行正常编译。 [ ]

27.语句“char c='c'; char p=&c;”是错误的。 [ ]

28.在一个被调用函数中,一个return语句可返回多个值给调用函数。 [ ]

29.静态成员变量是整个类的所有对象共用的。 [ ]

函数只能按规定向文件写入所指定的字符数。 [ ]

31.C++中,任何一个表达式加上一个分号就构成一个语句。 [ ]

32.在说明语句“int a(15), &b=a, *p=&a;”中,b的值与*p的值是相等的。 [ ]

33.在 C++中,函数声明时要用函数原型,即定义函数时的函数头部分。 [ ]

循环中,循环变量的作用域是该循环的循环体内。 [ ]

35.在传值调用中,要求实参与形参的类型完全一致并且个数相等。 [ ]

36.使用class定义的类成员默认的访问权限是私有的(private)。 [ ]

37.在C++中,条件运算符的结合方向为从左到右。 [ ]

四、写出程序的运行结果:

1.

#include

void main()

{

int a=10, b=15;

{

a*=3;

int b=a+20;

cout<

}

.

.

cout<

}

运行结果:

2.

#include

int SD(int a, int b, char op)

{

switch(op)

{

case '+': return a+b;

case '-': return a-b;

}

}

void main()

{

int x=20, y=8;

cout<

}

运行结果:

3.

#include

void main( )

{

static int b[][3]={{1,2,3},{4},{5,6}};

b[0][2]=12, b[1][2]=18;

cout<<**b<<"t"<<**(b+1)<<"t"<<**(b+1)<<"t"<<*(*(b+1)+2)<<"n";

cout<

}

运行结果:

4.

#include

void main()

{

char ch;

cin>>ch;

switch(ch)

{

case 'A':

case 'a': cout<<"1"<<' '; break;

case 'B':

case 'b': cout<<"2"<<' '; break;

case 'C':

case 'c': cout<<"3"<<' '; break;

default: cout<<"bad!";break;

}

}

.

.

以上程序运行时,分别输入Acb,则

运行结果:

5.

#include

void main()

{

int s1=0, s2=1;

for(int i=2; i<5; i++)

{

s1+=i;

s2*=i;

}

cout<

}

运行结果:

6.

#include

void ff(int x)

{ cout<<"ff(int): "<

void ff(double x)

{ cout<<"ff(double): "<

void main()

{

float a(88.18);

ff(a);

char b('a');

ff(b);

}

运行结果:

7.

#include

void main()

{

int s=0;

for(int i=1;i<7;i+=2)

s+=i*i;

cout<<"s="<

}

运行结果:

8.

#include

void main()

{

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

.

.

int *p=a;

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

if((i+1)%3==0)

cout<<*(p+i)<<' ';

cout<

}

运行结果:

9.

#include

class A

{

public:

A(){cout<<"1";}

~A(){cout<<"2";}

};

class B:public A

{

public:

B(){cout<<"3";}

~B(){cout<<"4";}

};

void main()

{

B b;

}

运行结果:

10.

#include

#include

int SC(int a, int b, int c)

{

if(a>b) a=b;

if(a>c) a=c;

return a;

}

void main()

{

int x,y,z;

x=5,y=15,z=25;

cout<

}

运行结果:

11.

#include

const int n=5;

.

.

void main()

{

int a[n][n]={{3,2,4,1,5},

{8,7,2,5,6},

{6,9,1,4,3},

{5,5,3,6,2},

{2,8,1,8,6}};

int s=0;

for(int i=0;i

s+=a[i][i]+a[i][n-i-1];

if(n%2==1)

s-=a[n/2][n/2];

cout<

}

运行结果:

12.

#include

class s

{

int i,j;

public:

void setij(int a,int b){i=a,j=b;}

int GetMul(){ return i*j; }

};

void main( )

{

s *p;

p=new s[3];

for(int j=0;j<3;j++)

p[j].setij(j,j); //j的平方

for(int k=0;k<3;k+=2)

cout<

delete []p;

}

运行结果:

13.

#include

int c;

void f1(int x,int *sum)

{

static int y;

x++; y++; c=c+y;

*sum=(x+y)/c;

}

void main()

{

int b=100;

.

.

f1(1,&b);

cout<

f1(2,&b);

cout<

}

运行结果:

14.

#include

void main()

{

int i, *d=new int[5];

for(i=0;i<5;i++)

{

d[i]=2*i+1;

cout<

}

delete[]d;

}

运行结果:

15.

#include

class AB

{

int a;

public:

AB(int aa=0){a=aa;}

~AB( ){cout<

};

class B:public AB

{

int b;

public:

B(int aa=0, int bb=0):AB(aa){b=bb;}

~B( ){cout<

};

void main( )

{

B x(5),y(6,7);

}

运行结果:

16.

#include

int LB(int *a, int n)

{

int s=1;

.

.

for(int i=0;i

{

s*=*a;

a++;

}

return s;

}

void main()

{

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

cout<

}

运行结果:

17.

#include

int f(int a)

{

int b=0;

static int c=3;

b++, c++;

return(a+b+c);

}

void main( )

{

int a=2,I;

for(I=0;I<3;I++)

cout<

}

运行结果:

18.

#include

class A

{

int *a;

public:

A(int x)

{ a=new int(x);

cout<<*a;}

~A()

{ delete a;

cout<<0; }

};

void main()

{

A x(3),*p;

p=new A(5);

delete p;

.

.

}

运行结果:

五、完成程序:

1.完成以下程序,计算s=1+12+123+1234+12345。

void main( )

{ int t=0, s=0, i;

for( i=1; ① ; i++)

{

t = i + ② ;

s = s + t;

}

cout<

}

回答:

2.完成以下程序,求数组中的最大元素值和最小元素值。

#include

void main()

{

int a[8]={46,38,72,55,24,63,50,37};

int max=*a, min=*a;

for(int *p=a+1;p

{

if( ① ) max=*p;

if( ② ) min=*p;

}

cout<

}

回答:

3.完成以下程序,输出斐氏数列的前20项,菲波纳契额数列具有这样的性质:F[0]=1, F[1]=2,

F[N]=F[N-1]+F[N-2]。

#include

void main()

{

int i;

long f[20]={1,2};

for(i=2 ; ① ; i++)

f[i] = ② ;

for(i=0 ; i<20 ; i++)

cout<

}

回答:

4.从键盘输入一个4行4列的实数矩阵到一个二维数组中,完成以下程序,求出主对角线上元素之积。

.

.

#include

void main()

{

double a[4][4]={0},r=1;

int i,j;

for(i=0;i<4;i++)

for(j=0;j<4;j++)

① //从键盘输入数组元素

for(i=0;i<4;i++)

for(j=0;j<4;j++)

if( ② ) r=r*a[i][j];

cout<<"积为:"<

}

回答:

20i5.完成以下程序,计算n!的值,即求(1!)+(1!+2!)+(1!+2!+3!)+…+(1!+2!+3!+…+20!)。

i1n1void main()

{

int i,n;

double s=0,t;

for(i=1;i<=20;i++)

{

① ;

for(n=1; ② ;n++)

{ t=t*n;s=s+t; }

}

cout<<"1!+(1!+2!)+…+(1!+2!+…+20 !)="<

}

回答:

6.有一个数列,它的第一项为5,第二项为8,以后每一项都是它的前两项之和,完成以下程序,产生出此数列的前10项,并依次显示出来。

#include

void main( )

{

int a[10];

a[0]=5;

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

a[i]= ② ;

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

cout<

cout<

}

回答:

.

.

六、程序改错:

1.要求下面程序的输出结果为“100 20",在第1-7行中存在着3条语句错误,指出错误语句行的行号,并改正错误。

#include

class S

{

int n;

public:

S(){ n=20; }

S(int nn){ n=nn; };

void Show(){ cout<

};

void shows(S &y) //1行

{ y->Show(); } //2行

void main() //3行

{ //4行

S s1(100),s2; //5行

*p=&s2; //6行

shows(&s1); //7行

shows(p); //8行

}

错误行的行号为 ① 改正为 ②

错误行的行号为 ③ 改正为 ④

错误行的行号为 ⑤ 改正为 ⑥

2.要求下面程序的输出结果为“2 3 1",在第1-12行中存在着3条语句错误,指出错误语句行的行号,并改正错误。

#include

class P

{ int n;

public:

void Setn(int val){ n=val; }

void Show();

};

void P:Show() //1行

{ cout<

void main() //3行

{ //4行

P ob[3],*p=ob+1; //5行

for(int i=0;i<3;i++) //6行

ob[i].Setn(i+1); //7行,设置对象数组的成员值为1,2,3

(); //8行

p=ob[2]; //9行

p->Show(); //10行

p=&ob[0]; //11行

p->Show(); //12行

}

错误行的行号为 ⑤ 改正为 ⑥

错误行的行号为 ⑦ 改正为 ⑧

错误行的行号为 ⑨ 改正为 ⑩

.

.

3.要求下面程序的输出结果为“d=16,f=25",在第1-14行中存在着3条语句错误,指出错误语句行的行号,并改正错误。

#include

class A

{ int a[10],n;

public:

A(int aa[],int nn):n(nn) { for (int I=0;I

int Get(int i){ return a[i]; }

int SumA(int n); //求a数组的前n个元素之和

};

int SumA(int n) //1行

{ //2行

int s=0; //3行

for(int j=0; j

return s; //5行

} //6行

void main() //7行

{ //8行

int b[ ]={2,5,8,10,15,20}, f, d=1; //9行

A x(b,6); //10行

for(int i=0;i<3;i++) //11行

d=d+Get(i); //12行

f=SumA(4); //13行,计算x的成员a的前4个元素之和

cout<<"d="<

}

错误行的行号为 ⑤ 改正为 ⑥

错误行的行号为 ⑦ 改正为 ⑧

错误行的行号为 ⑨ 改正为 ⑩

.

.

参考答案

一、单项选择题:

1.B 2.B 3.D 4.C 5.B 6.A 7.D 8.C 9.B 10.B 11.C 12.B 13.B 14.B 15.C

16.C 17.B 18.D 19.D 20.A 21.B 22.D 23.B 24.A 25.B 26.D 27.B 28.B 29.D 30.C

31.C 32.C 33.D 34.A 35.A 36.D

二、填空题:

1. cout<

5. 8 6. 析构函数 7. 整型 8. 循环

9. 地址 10. 10 11. AB( ){ } 12. break

13. 单引号 14. main 15. 常量 16. 25

17. new Worker[n]; 18. 3 19. -60 20.

21. x+y<=5 22. 1.0/a/b/c 或1.0/(a*b*c)

23. *(a+i) 24. 函数体 25. 下划线 26. oct

27. public 28. 递归 29. #include 30. 8

31. 0X 32. 静态 33. continue 34. 0

35. int **pp; 36. ~test( )

三、判断题:

1.× 2.× 3.× 4.√ 5.√ 6.√ 7.× 8.√13.√ 14.√ 15.√ 16.√ 17.√ 18.× 19.√ 20.×25.× 26.√ 27.√ 28.× 29.√ 30.√ 31.√ 32.√四、写出程序的运行结果:

1. 50 15

2. 28 12

3. 1 4 4 18

30

4. 1 3 2

5. 9,24

6. ff(double): 88.18

ff(int): 97。

7. s=35

8. 7 13 25

9. 1342

10.5

11.40

12. 0 4

13.3 1

1 3

14.1 3 5 7 9

15. 76

05

16.120

17.7

8

9

18. 3500

.

√ 10.√√ 22.√√ 34.×× 12.×× 24.√× 36.√× 9. 11.

21. 23.

33. 35. 37.

.

五、完成程序:

1.

① i<=5 ② t*10

2.

① *p>max ② *p

3.

① i<20 ② f[i-2] + f[i-1]

4.

① cin>>a[i][j]; ② i==j

5.

① t=1

6.

① a[1]=8;

六、程序改错:

1.

① 2

③ 7

⑤ 8

2.

① 1

③ 8

⑤ 9

3.

① 1

③ 12

⑤ 13

.

② n<=i

② a[i-1]+a[i-2]

② ()

④ shows(s1)

⑥ shows(*p) 或者② void P::Show()

④ p->Show();

⑥ p=&ob[2] 或p++

② int A::SumA(int n)

④ d=d+(i);

⑥ f=(4);

shows(s2)


本文标签: 语句 函数 定义 变量 数组