您好,欢迎来到五一七教育网。
搜索
您的当前位置:首页C++自测题

C++自测题

来源:五一七教育网
C++自测题

第一、二、三章自测题 一、选择题

(1)已知下列语句中的x和y都是int型变量,其中不正确的语句是 A)y+=++x; B)++x+=y; C)y=x++; D)x++=y; (2)若x是一个bool型变量,y是一个值为100的int型变量,则表达式 !x && y>0 的值[ ]。

A) 为true B) 为false C) 与x的值相同 D) 与x的值相反 (3)执行语句序列 int n; cin>>n; switch(n){ case 1:

case 2: cout<<'X'; case 3:

case 4: cout<<'Y'; break;

default:cout<<'Z'; }

时,不可能出现的情况是[ ]。

A)显示:X B)显示:Y C)显示:Z D)显示:XY (4)执行语句序列 int x; cin>>x;

if(x>250) cout<<'X';

if(x<250) cout<<'Y'; else cout<<'X';

时,不可能出现的情况是[ ]。

A) 显示:X B) 显示:Y C) 显示:XY D) 显示:XX 二、填空题

(1)执行 int x=2,y=7;y-=++x-2;后,x的值是____ ,y的值是 ____ 。 (2)执行 int x=9,y=-5;y+=x--+2;后,x的值是_____,y的值是______ 。 (3)与i=0;while(i<100) cout<0) cout<第四、五、六章练习题 一、选择题

(1)要定义一个具有5个元素的一维数组,并使其各元素的初值依次是30,50,-88,0和0,则下列定义语句中不正确的是[ ]。 A) int vect[]={30,50,-88}; B) int vect[]={30,50,-88,0,0}; C) int vect[5]={30,50,-88}; D) int vect[5]={30,50,-88,0,0}; (2)已知某应用系统中已经定义了函数fun,其原形是 int fun(char='A');

则下列函数中,可以在同一系统中加以重载的是[ ]。 A) int fun(); B) int fun(char);

C) int fun(char,int); D) int fun(char,double=0.0); (3)若指针p定义为 const char *p=\"Luchy!\"; 则[ ]。

A) p所指向的数据不可改变,p在定义时可以不初始化。 B) p所指向的数据不可改变,p在定义时必须初始化。 C) p本身不可改变,p在定义时可以不初始化。 D) p本身不可改变,p在定义时必须初始化。

(4)已知数组A和指针p定义为:int A[20][10],*p;,要使p指向A的首元素,正确的赋值表达式是[ ]。

A) p=&A 或 p=A[0][0] B) p=A 或 p=&A[0][0] C) p=&A[0] 或 p=A[0][0] D) p=A[0] 或 p=&A[0][0] (5)已知函数func的原形是 double func(doouble *pd,int &ri); 变量x和y的定义是

double x; int y;

把x和y分别作为第一参数和第二参数来调用函数func,正确的调用语句是[ ]。

A) func(x,&y); B) func(&x,y); C) func(&x,&y); D) func(x,y);

(6)若变量p的定义为 int **p=new int *(new int[5]);,则释放所申请到的动态空间的语句应是: 。

(7)要使字符串变量str具有初值\"Lucky\",正确的定义语句是[ ]。 A) char str[]={'L','u','c','k','y'}; B) char str[5]={'L','u','c','k','y'}; C) char str []=\"Lucky\"; D) char str [5]=\"Lucky\"; (8)已知某函数的一个形式参数被说明为MAT[3][10],在下列说明中,与此等效的形参说明是[ ]。

A) int MAT[][10] B) int MAT[3][] C) int MAT[10][3] D) int MAT[][]

(9)若指针p定义为 char * const p=\"Luchy!\"; 则[ ]。 A) p所指向的数据不可改变,p在定义时可以不初始化。 B) p所指向的数据不可改变,p在定义时必须初始化。 C) p本身不可改变,p在定义时可以不初始化。 D) p本身不可改变,p在定义时必须初始化。

(10)在下列表达式中,与下标引用A[i][j]不等效的是[ ]。 A) *(A+i+j) B) *(A[i]+j) C) *(*(A+i)+j) D) (*(A+i))[j] (11)要使语句p=new double[20];能够正常执行,变量p应定义为[ ]。 A) double p[20]; B) double p;

C) double (*p)[20]; D) double *p; 二、填空题

(1)已知数组A是一个有25个单元的int型数组,下面的语句试图按相反的顺序显示这25个单元中的整数,请补充完整: for(int i=24; ; ) cout<< <<' '; (2)利用函数模板

template T total(T data[]) { T s=0;

for(int i=0;i求数组 int A[]={21,34,12,56,78,9,30}; 中各元素之和并将结果显示输出;完成此任务的语句是:cout<< 。 (3)若p是double型指针变量,其指针值为8080,则p-2的指针值为 。 (4)已知数组A定义为 long A[3][10];,P是一个一维数组;要使下标访问A[i][j]与P[i][j]等效,数组P应定义为: 。 (5)已知函数reverse的原形是:char *reverse(const char *);,pf是指向reverse的指针,则pf的定义是: 。 (6)若变量p的定义为 int **p=new int *(new int[5]);,则释放所申请到的动态空间的语句应是: 。

(7)已知数组A是一个有25个单元的int型数组,下面的语句序列试图求出这25个整数之和,并将结果显示在屏幕上,请补充完整: int s=0

for(int i=0; ; ) ; cout<(8)若int DOUBLE(int n){ return n+n;}和long DOUBLE(long n){ return n+n;}是一个函数模板的两个实例,则该函数模板应定义为: (9)p1、p2都是字符指针,p1指向字符串\"GOOD_MORNING\",p2-p1的值为8,则执行cout<<*p2;时显示在屏幕上的是: 。 (10)已知执行语句

for(int i=0;i<3;i++) cout<Red,Blue,Yello,

由此可知,一维数组COLOR的定义是: 。 (11)已知指针变量pf的定义是:char *(*pf)(int)=ITOS;,则函数ITOS的原形是: 。 (12) 若变量p的定义为 int &p=*new int;,则释放所申请到的动态空间的语句应是: 。 三、程序分析题:读懂程序,描述程序的输出结果 (1) #include void halfSort(int data[],int leadings,int size) { for(int i=0;ifor(int j=i+1;j{ int a[]={21,12,53,74,25,16,7,38}; halfSort(a,3,8);

for(int i=0;i<8;i++) cout<(2) #include void halfSort(int data[],int leadings,int size) { for(int i=0;ifor(int j=i+1;jdata[s]) s=j;

if(s!=i){ int x=data[i]; data[i]=data[s]; data[s]=x; } }} void main()

{ int a[]={21,12,53,74,25,16,7,38}; halfSort(a,3,8);

for(int i=0;i<8;i++) cout<四、程序设计题

⑴函数 void Min_Max(int data[],int size); 的参数data是一个具有size个元素的一维数组。Min_Max的功能是:调整存储于data中的整数序列的排列顺序,使得最小整数成为数组的第一个元素,最大整数成为数组的最后一个元素,其他整数应尽可能地保持在原来的位置上。例如,执行语句序列

int A[]={88,33,55,22,44,99,77,66}; #define SIZE (sizeof(A)/sizeof(A[0])) Min_Max(A,SIZE);

for( int i=0;i22,33,55,88,44,66,77,99, 请实现函数Min_Max。

⑵函数 char *allTrim(char *str); 的功能是去除参数字符串str的前导空格和尾部空格(如果有的话),其返回值就是参数字符串str。例如,执行下面的语句序列

char s[]=\" ABCD XYZ \"; cout<cout<后,显示在屏幕上的应当是: ABCD XYZ ! ABCD XYZ! ABCD XYZ!

请实现函数allTrim。

第七、八、九章练习题 一、选择题

(1)执行下列语句序列

struct AA{ int ival; char cval;}; struct BB{ int ival; AA ra;};

struct CC{ int ival; AA ra; BB rb;};

CC rc={66,{rc.ival+1,rc.ra.ival+1},{69,{70,71}}}; cout<A) 66,67,68 B) 67,68,69 C) 66,67,70 D) 67,69,70 (2)类的默认的无参构造函数[ ]。 A) 在任何情况下都存在

B) 仅当未定义无参构造函数时存在 C) 仅当未定义有参构造函数时存在

D) 仅当未定义任何构造函数时存在 (3)语句ofstream f(\"SALARY.DAT\| ios::binary); 的功能是建立流对象f,并试图打开文件SALARY.DAT并与之连接,而

且[ ]。

A) 若文件存在,将文件指针定位于文件尾;若文件不存在,建立一个新文件。

B) 若文件存在,将其截为空文件;若文件不存在,打开失败。 C) 若文件存在,将文件指针定位于文件首;若文件不存在,建立一个新文件。

D) 若文件存在,打开失败;若文件不存在,建立一个新文件。 (4) 执行下列语句序列

struct AA{ int ival; char cval;}; struct BB{ int ival; AA ra;};

struct CC{ int ival; AA *ra; BB rb;}; CC rc={66,new AA,{69,{70,71}}}; rc.ra->ival=rc.ival+1;

rc.ra->cval=rc.ra->ival+1;

cout<ival<<','<A) 67,69,70 B) 66,67,70 C) 67,68,69 D) 66,67,68 (5) 类的默认的拷贝构造函数[ ]。 A) 在任何情况下都存在 B) 仅当未定义拷贝构造函数时存在 C) 仅当未定义有参构造函数时存在

D) 仅当未定义任何构造函数时存在 (6)语句ofstream f(\"SALARY.DAT\| ios::trunc); 的功能是建立流对象f,并试图打开文件SALARY.DAT并与之连接,而且[ ]。

A) 若文件存在,将文件指针定位于文件尾;若文件不存在,建立一个新文件。

B) 若文件存在,将其截为空文件;若文件不存在,打开失败。 C) 若文件存在,将文件指针定位于文件首;若文件不存在,建立一个新文件。 D) 若文件存在,打开失败;若文件不存在,建立一个新文件。 二、填空题

(1)请补充完整下面类说明中的拷贝构造函数: class MyClass{ int *p; int size;

public:

MyClass(int n):size(n),p(new int[size]){}

~MyClass(){delete []p;}

MyClass( ):size(mc.size),p( ) {for(int i=0; ;i++) p[i]=mc.p[i]; } }; (2)请补充完整下面类说明中的拷贝构造函数: class MyClass{ int *p; int size;

public:

MyClass(int n):size(n),p(new int[size]){}

~MyClass(){delete []p;}

MyClass(MyClass& mc):size( ),p(new int[size]) { for(int i=0;i(3) 下面的程序的输出是: ********-5 -5******** 请补充完整: #include void main(){ int i=-5;

cout<< _____________________<cout<(4) 下面的程序的输出是: 7.00000 7

请将下面程序补充完整: #include void main(){ double x=7;

cout<<________________________ <cout<三、改错题:每题有一处错误,请在出错语句后用注释说明出错原因并提出更改意见 (1)class Location {

int X , Y ; protected:

int SetZero(int zeroX, int zeroY); private:

int length, height;

public:

void Location(int initX, int initY); int GetX( ); int GetY( ); }; (2) #include

template

TYPE MAX(TYPE data[]){ //data中各元素都是正整数,函数的功能

//是返回其中的最大整数

TYPE s=0;

for(int i=0;is) s=data[i]; return s; } void main(){

int d[]={23,32,,67,45,56,12,78};

cout<(d); }

(3) #include

void showArray(int *a){//显示a[0]、a[1]、a[2]...直到遇见数据0为止 while(*a) cout<<*a++<<' '; } void main()

{ int d[]={1,2,3,4,5,6,0}; showArray(&d); }

(4) 下面的程序试图颠倒数组中数据的排列顺序,因此应当显示输出:8 7 6 5 4 3 2 1,程序中有一处逻辑错误: #include void rep(int data[],int size) { for(int i=0;ivoid main() {

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

rep(a,8);

for(int i=0;i<8;i++) cout<(5)下面的程序有一处语法错误: #include class Pair{ int X, Y; public:

Pair (int initX, int initY): X(initX), Y(initY){} int sumXY(){return X+Y; }; };

void main() {

Pair A1(5,3);

cout<(6)下面的程序有一处语法错误: #include

template

TYPE MAX(TYPE data[]) // data中各元素都是正整数,函数的功能是返回其中的最大整数 { TYPE s=0;

for(int i=0;is) s=data[i]; return s; }

void main()

{ int d[]={23,32,,67,45,56,12,78}; cout<⑺ 下面的程序有一处逻辑错误:

#include

void showArray(int a[]){//显示a[0]、a[1]、a[2]....直到遇见数据0为止 while(*a) cout<<*++a<<' '; }

void main()

{ int d[]={1,2,3,4,5,6,0}; showArray(d);}

⑻ 下面的程序试图颠倒数组中数据的排列顺序,因此应当显示输出:8 7 6 5 4 3 2 1,程序中有一处逻辑错误: #include void rep(int data[],int size) { for(int i=0;idata[i]=data[size-i-1]; data[size-i-1]=s; } } void main()

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

for(int i=0;i<8;i++) cout<四、程序分析题:读懂程序,描述程序的输出结果 (1) #include void main(){

ofstream outf(\"D:\\\em.dat\ outf<<123<<456; outf.close();

ifstream inf(\"D:\\\em.dat\"); int k; inf>>k; inf.close(); cout<程序输出结果:

(2) #include void main(){

cout.setf(ios::fixed); cout.precision(2);

char old_fill=cout.fill('*'); cout.width(10);

cout<<2345.678<程序输出结果(注意格式细节):

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 517ttc.cn 版权所有 赣ICP备2024042791号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务