c++复习易错题Word下载.docx
《c++复习易错题Word下载.docx》由会员分享,可在线阅读,更多相关《c++复习易错题Word下载.docx(28页珍藏版)》请在冰豆网上搜索。
12,下列关于switch语句描述中,【】是正确的。
(A)switch语句中default子句只能放在最后
(B)switch语句中每个语句序列中必须有break语句
(C)switch语句中case子句后面的表达式只能是整型表达式
(D)switch语句中default子句可以没有,也可以有一个
13,执行语句:
for(i=1;
i++<
4;
)后;
变量i的值是【】。
(A)3(B)4(C)5(D)不定
14,下列for循环语句执行的次数是【】。
for(inti=0,x=0;
x&
i<
=5;
i++)
(A)5(B)无限(C)1(D)6
15,下列while循环语句的循环次数是【】。
while(inti=0)i--;
(A)0(B)1(C)2(D)无限
16,下列do...while循环的次数是【】。
intx=-1;
do
{x=x*x;
}
while(!
x);
(A)无限(B)1(C)2(D)0
17,若有以下定义和语句,且0<
10,则对数组元素地址的正确表示是【】。
inta[]={1,2,3,4,5,6,7,8,9,0},*p,i;
p=a;
(A)&
(a+1)(B)a++(C)&
p[i](D)*P
18,以下叙述中正确的是【】
(A)break语句只能用于switch语句题中
(B)continue语句的作用是使程序的执行流程跳出包含它的所有循环
(C)break语句只能用在循环体内和switch语句体内
(D)在循环体内使用break语句和continue语句的作用相同
19,已知枚举类型声明语句为:
enumCOLOR{WHITE,YELLOW,GREEN=5,RED,BLACK=10};
则下列说法错误的是【】。
(A)枚举常量WHITE的值为1(B)枚举常量RED的值为6
(C)枚举常量BLACK的值为10(D)枚举常量YELLOW的值为1
20.在32位PC机上使用C++语言,若有如下定义:
structdata
{inti;
doublef;
charch
;
}b
则结构变量b占用内存的字节数为【】。
(A)1(B)2(C)8(D)13
21,下列关于数组下标的描述中,错误的是【】。
(A)C++语言中数组元素的下标是从0开始的
(B)数组元素下标是一个整常型表达式
(C)数组元素可以用下标来表示
(D)数组元素的某维下标值应小于该维的大小值
21,intb[][3]={{1},{3,2},{4,5,6},{0}};
则b[1][2]的值为【】。
(A)0(B)6(C)2(D)3
22,下列给字符数组进行初始化中,【】是正确的。
(A)chars3[][3]={‘a’,’x’,’y’};
(B)chars2[3]="
xyz"
(C)chars1[]="
12345abcd"
(D)chars4[2[3]={"
"
mnp"
};
23,下面选项中等价的是【】。
(A)inta[2][3]={1,0,2,2,4,5}与inta[2][]={1,0,2,2,4,5};
(B)inta[][3]={1,0,2,2,4,5}与inta[2][3]={1,0,2,2,4,5};
(C)inta[2][3]={3,4,5}与inta[][3]={3,4,5};
(D)inta[2][3]={0,1}与inta[2][3]={{0},{1}};
24,下面程序的运行结果是【】。
charc[5]={'
a'
'
b'
\0'
c'
cout<
<
s;
(A)'
'
(B)ab(C)abc(D)以上三个答案均有错误
25,若有以下语句:
inta[10]={1,2,3,4,5,6,7,8,9,10},*p=&
a[3],b;
b=p[5];
则b的值为【】。
(A)5(B)6(C)8(D)9
26,若有以下定义和语句,且0<
(a+1)(B)a++(C)&
p[i](D)*P
27,设intx[]={1,2,3,4,5,6};
*p=x;
则值为3的表达式是【】。
(A)p+=2,*++p(B)p+=2,*p++(C)p+=3,*p(D)p+=2,++*p
28,设inta[]={1,2,3,4,5,6};
*p=a;
则值为5的表达式是【】。
(A)*p+5(B)*(p+4)(C)*p+=9(D)p+5
29,若用数组名作为函数调用时的实参,则实际上传递给形参的是【】。
(A)数组首地址(B)数组的第一个元素值
(C)数组中全部元素的值(D)数组元素的个数
30,对数组名作函数的参数,下面描述正确的是【】。
(A)数组名作函数的参数,调用时将实参数组复制给形参数组
(B)数组名作函数的参数,主调函数和被调函数共用一段存储单元
(C)数组名作参数时,形参定义的数组长度不能省略
(D)数组名作参数,不能改变主调函数中的数据
31,采用函数重载的目的在于【】。
(A)实现共享(B)减少空间(C)使用方便,提高可靠性(D)提高速度
32,重载函数在调用时选择的依据中,【】是错误的。
(A)参数个数(B)参数的类型(C)参数的顺序(D)函数的类型
33,在C++中,关于下列设置参数默认值的描述正确的是【】。
(A)不允许设置参数的默认值
(B)设置参数默认值只能在定义函数时设置
(C)设置参数默认值时,应该是先设置右边的再设置左边的
(D)设置参数默认值时,应全部参数都设置
34,已知函数f的原型是:
voidf(int*x,long&
y);
则以下对函数f正确的调用语句是(其中a和b是实参)
【】。
(A)f(a,b);
(B)f(&
a,b);
(C)f(a,&
b);
(D)f(&
a,&
35,下列存储标识符中,【】不属于局部变量。
(A)函数形参(B)自动类(C)外部静态类(D)寄存器类
36,下列关于析构函数的描述中,错误的是【】。
(A)析构函数的函数体都为空(B)析构函数是用来释放对象的
(C)析构函数是系统自动调用的(D)析构函数是不能重载的
37,下面的各种函数中,哪个不是类的成员函数【】。
(A)构造函数(B)友元函数(C)析构函数(D)复制构造函数
38,以下代码运行后,abcd的值为:
()
inta,b,c,d;
a=b=c=1;
d=++a||++b&
++c;
1,1,1,1B:
2,2,2,1
2,1,1,2D:
2,1,1,1
@//应该是++a||++b&
++c这样结合,++a时a=2,为真,短路求值,后面都不做
所以b=1c=1,结果为真,所以d=1
39,下列【】是语句。
;
B:
a=17C:
x+yD:
\n
A
40,下面常数中错误的是【】
0xA5B:
2.5e-2C:
3e2D:
0583
41,有如下程序
#include<
iostream.h>
voidmain()
{
intx=1,a=0,b=0;
switch(x)
{
case0:
b++;
case1:
a++;
case2:
b++;
}
cout<
"
a="
a<
b="
b<
\n"
该程序的输出结果是()
a=2,b=1B:
a=1,b=1C:
a=1,b=0D:
a=2,b=2
42,有inta=1,b=1;
执行表达式后:
(a++)&
++b,则a的值为【1】,b的值为【2】。
=======(答案1)=======2
=======(答案2)=======1
43,下列do-while循环的循环次数为()
inti=5;
i--<
endl;
i--;
}while(i!
=O);
0B:
1C:
5D:
无限
44,若a为double类型的变量,表达式a=1,a+5,a++的值为【1】
=======(答案1)=======1.0=========或=========1.00=========或=========1.000
=========或=========1.0000=========或=========1.00000
45,字符型数据在内存中的存储形式是:
【】
原码B:
补码C:
反码D:
ASCII码
46,已知:
inta[]={1,2,3,4,5,6},*p=a;
下面表达式中其值为5的是【】
p+=3;
*(p++);
p+=5;
*p++;
p+=4;
*++p;
D:
*p++;
判断共10题(共计10分)
1,局部静态变量与自动变量作用域相同,但生命周期不同.
Y
2,continue语句只能出现在循环体中.
3,当说明一个结构变量时,系统分配给它的内存是各成员所需内存量的总和。
4,作用域运算符(:
:
)只能用来限定成员函数所属的类.
N
5,静态生存期的标识符的寿命是短的,而动态生存期标识符寿命是长的.
二、程序填空题
1.以下程序将数组中的元素按逆序存放。
请在横线处填上适当的语句,将程序补充完整。
#include<
voidmain()
{
inta[12],i,j,t;
for(i=0;
12;
i++)
cin>
>
a[i];
6;
{
(1);
(2);
(3);
}//数组元素交换
}
t=a[i]a[i]=a[11-i]a[11-i]=t
2.下面程序功能是将整型数组a中的10个元素用2种方法依次输出。
#include<
voidmain()
inta[10]={1,2,3,4,5,6,7,8,9,10},i
int*p
for(i=0
10
_______
(1)______________;
//使用数组下标
for(
(2)
p<
a+10
p++)
(3);
//使用指针变量
a[i]p=a*p
3.编写程序求1!
+2!
+3!
+4!
+5!
和,(其中求阶乘是用函数来实现的),请在有下划线处补充完整。
________
(1)__________;
voidmain()
{longs=0;
for(inti=1;
____
(2)__________;
1!
="
s<
longintfac(intx)
{staticintb=1;
b*=x;
______(3)__________________;
longintfac(intx)或longintfac(int)
s+=fac(i)或s=s+fac(i)
returnb
4.编写程序是用递归算法求n!
请在有下划线处补充完整。
iostream.h>
intf1(inta);
inta=6;
(1)<
endl;
intf1(inta)
return(a==O)?
1:
(2);
功能:
求两个数的最大公约数
-------------------------------------------------------*/
5,#include<
intm,n,k;
cin>
m>
n;
k=m%n;
/***********SPACE***********/
while(【?
】)
{
m=n;
【?
】=k;
k=【?
】;
}
【?
=======(答案1)=======k!
=0=========或=========k
=======(答案2)=======n
=======(答案3)=======m%n
=======(答案4)=======n
fl(a)a*f1(a-1)
6,功能:
以下程序的功能是产生并输出杨辉三角的前七行。
1
11
121
1331
14641
15101051
1615201561
voidmain()
inta[7][7];
inti,j;
for(i=0;
7;
a[i][0]=1;
】
for(i=2;
for(j=1;
j<
i;
j++)
a[i][j]=【?
for(j=0;
a[i][j]<
\t"
】
=======(答案1)=======a[i][i]=1;
=======(答案2)=======a[i-1][j-1]+a[i-1][j]=========或========a[i-1][j]+a[i-1][j-1]
=======(答案3)=======j<
=i=========或=========i>
=j=========或=========j<
i+1
=========或=========i+1>
j
=======(答案4)=======cout<
7:
下面程序的功能是输出1到100之间每位数的乘积大于每位数的和的数。
例如:
数字26,数位上数字的乘积12大于数字之和8。
intn,k=1,s=0,m,t;
for(n=1;
n<
=100;
n++)
k=1;
s=0;
【?
while(m!
=0)
{
k=k*t;
s=s+t;
【?
}
if(k>
s)
cout<
}
=======(答案1)=======
m=n
=======(答案2)=======
t=m%10
=======(答案3)=======
m=m/10
8:
求100-1000之间的水仙花数(所谓"
水仙花数"
是指一个3位数,
其各位数字立方和等于该数本身,如图所示)
inti,i1,i2,i3,m;
for(i=100;
i<
i1=【?
i2=【?
i3=【?
m=i1*i1*i1+i2*i2*i2+i3*i3*i3;
if(i==m)
1000
i/100
i/10%10=========或=========i%100/10
=======(答案4)=======
i%10
三、改错题(指出程序中下划线那行中的错误,每行2分,共10分)
1、#include<
{int*ptr1,*ptr2,a,b,t;
请输入2个整数:
a>
b;
ptr1=&
a;
ptr2=&
if(ptr1<
ptr2)
{t=a;
a=b;
b=t;
max="
*ptr1<
min="
*ptr2<
指针使用错误,比较a,b的大小,应该加上*号,*ptr1<
*ptr2
2,#include<
voidf(intb[10])①
{
intmax,min;
max=min=b[0];
for(inti=1;
10;
{if(max<
a[i])max=a[i];
if(min>
a[i])min=a[i];
max<
min<
endl
inta[10];
intsum;
②
for(inti=0;
{cin>
sum+=a[i];
f(a);
sum
①数组作为形参,没有空间分配,不能指定数组长度,应写成voidf(intb[])
②sum变量没有初始化,应写成sum=0
3,题目:
计算并输出100—200之间的所有素数的平方根之和.
--------------------------------------------------------
注意:
不可以增加或删除程序行,也不可以更改程序的结构。
------------------------------------------------------*/
math.h>
doubles,sn;
intn,k,f,m;
s=0.0;
for(n=101;
=199;
n+=2)
sn=sqrt(n);
m=(int)sn;
k=2;
f=0;
/***********FOUND***********/
while(k<
=m&
f=0)
if(n%k==0)f=0;
m++;
if(f)s=s+sn;
=======(答案1)=======while(k<
f==0
=======(答案2)=======if(n%k==0)f=1;
=======(答案3)=======k++;
=======(答案4)=======if(!
f)s=s+sn;
=========或=========if(f==0)s=s+sn;
4,题目:
在一个具有N个数的数组中查找并删除一个数K。
-------------