cout«"世';}
while(l<=x<=2);(l<=x)=1,0bool型
A.将输出㈱B.将输出##*
C.是死循环D.含有不合法的控制表达式
9.以下正确的说法是(D)o
A.用户若需要调用标准函数,调用前必须重新定义
B.用户可以直接调用所有标准库函数
C.用户可以定义和标准库函数重名的函数,但是在使用时调用的是系统库函数
D.用户可以通过文件包含命令将系统库函数包含到用户源文件中,然后调用系统库函数
10.在参数传递过程中,对形参和实参的要求是(B)o
A.函数定义时,形参一直占用存储空间
B.实参可以是常量、变量或表达式
C.形参可以是常量、变量或表达式
D.形参和实参类型和个数都可以不同
11.对数组名作函数的参数,下面描述正确的是(B)o
A.数组名作函数的参数,调用时将实参数组复制给形参数组
B.数组名作函数的参数,主调函数和被调函数共用一段存储单元
C.数组名作参数时,形参定义的数组长度不能省略
D.数组名作参数,不能改变主调函数中的数据
12.若有语句inta[10]={0,1,2,3,4,5,6,7,8,9},*p=a;贝0(B)不是对a数组元素的正确引用(其中0WiClO)。
A.p[i]B.*(*(a+i))C.a[p-a]D.*(&a[i])
13.以下程序的输出结果是(B)。
ttinclude
voidmain()
{chars[]="12134211",*p;
intvl=0,v2=0,v3=0,v4=0;vlv2v3v4
for(p=s;*p;p++)2434
switch(*p)
{
case'I':
vl++;
case'3':
v3++:
case'2':
v2++;
default:
v4++;
}
cout«vl«z,,,/«v2«,,,,/«v3«/,,,,«v4«endl;
}
A.4,2,1,1B.4,7,5,8C.7,3,2,1D.8,8,8,8
二、
(1)c++语言是从早期的C语言逐渐发展演变而来的.与C语言相比,它在求解问题方法上进行的最大改进是(B)
A)面向过程B)面向对象C)安全性D)复用性
(2)C++语言的跳转语句中,对于break和continue说法正确的是(B)
A)break语句只应用与循环体中
B)continue语句只应用与循环体中
C)break是无条件跳转语句,continue不是
D)break和continue的跳转范围不够明确,容易产生问题
(3)for(intx=0,y=o;!
x&&y<=5;y++)语句执行循环的次数是(C)
A)0B)5C)6D)无次数
(4)考虑函数原型voidtest(inta,intb=7,char="*"),下面的函数调用中,
属于不合法调用的是(C)
A)test(5);B)test(5,8);C)test(6,"#")D)test(O,O."*");
⑴已知下列语句中的x和y都是int型变量,其中不正确的语句是(D)
A)y+=++x;B)++x+=y;C)y=x++;D)x++=y;
⑵若X是一个bool型变量,y是一个值为100的int型变量,则表达式!
x&&y>0的值(D)o
A)为trueB)为falseC)与x的值相同D)与x的值相反
(3)执行语句序列
intn;
cin»n;
switch(n){
case1:
case2:
coutvv'X';
case3:
case4:
coutvv'Y';break;
default:
cout<<1Z*;}
时,不可能出现的情况号[A]。
_
A)显示:
XB)显示:
YC)显示:
ZD)显示:
XY
(4)执行语句序列
intx;
cin»x;
if(x>250)coutvv'X';
if(x<250)coutvv'Y';
elsecoutvv'X';
时,不可能出现的情外是[C]。
A)显示:
XB)显示:
YC)显示:
XYD)显示:
XX
(5)要定义一个具有5个元素的一维数组,并使其各元素的初值依次是30,50,-88,0和0,则下列定义语句中不正确的是[A]。
A)intvect[]=(30,50,-88);B)intvect[]=(30,50,-88,0,0};
C)intvect[5]=(30,50,-88};D)intvect[5]={30,50,-88,0,0};
(7)若指针p定义为constchar*p=nLuchy!
n;贝U[A]。
A)p所指向的数据不可改变,p在定义时可以不初始化。
B)p所指向的数据不可改变,p在定义时必须初始化。
C)p本身不可改变,p在定义时可以不初始化。
D)p本身不可改变,p在定义时必须初始化。
(8)
intA[20][10],*p;,要使p指向A的首元素,
B)p=A或p=&A[0][0]
D)p=A[0]或p=&A[0][0]
已知数组A和指针p定义为:
正确的赋值表达式是[D]。
A)p=&A或p=A[0][0]
C)p=&A[0]或p=A[0][0]
(9)已知函数func的原形是
doublefunc(doouble*pd,int&ri);
变量x和y的定义是
doublex;inty;
把x和y分别作为第一参数和第二参数来调用函数func,正确的调用语句是[B]。
A)func(x,&y);B)func(&x,y);C)func(&x,&y);D)func(x,y);
(10)要使字符串变量str具有初值"Lucky",正确的定义语句是(C)。
A)charstr[]={'L','u','c','k','y'};B)charstr[5]={,L','u','c','k,,'y'};
C)charstr[]="Lucky";D)charstr[5]="Lucky";
(11)已知某函数的一个形式参数被说明为MAT[3][10],在下列说明中,与此等效的形参说明是[A]。
A)intMAT[][10]
C)intMAT[10][3]
B)intMAT[3][]
D)intMAT[][]
(12)若指针p定义为char*="Luchy!
";贝lJ[D]o
A)p所指向的数据不可改变,p在定义时可以不初始化。
B)p所指向的数据不可改变,p在定义时必须初始化。
C)p本身不可改变,p在定义时可以不初始化。
D)p本身不可改变,p在定义时必须初始化。
(13)在下列表达式中,与下标引用A[i][j]不等效的是[A]。
A)*(A+i+j)B)*(A[i]+j)C)*(*(A+i)+j)D)(*(A+i))[j]
(14)要使语句p=newdouble[20];能够正常执行,变量p应定义为[D]。
A)doublep[20];B)doublep;
C)double(*p)[20];D)double*p;
三、1.下列变量名中,(B)是合法的。
B.abc
下列各种运算符丘(A)优先级最高。
D.while
B.&&C.==
3,设变量m,n,a,b,c,d均为0,执行(m=a==b)&&(n=c==d)后,m,n的值是(D)。
C.
A.0,0
1,0
4.字符串”\t\v\\\0which\n”的长度是(B)o
A.4B.10C.9D.字符串有非法字符,输出值不确定
5.设a=2,b=3,c=2;计算a+=b*=(++b-c++)中a、b>c的值(C)。
A.8、6、2B.2、4、2C.10、8、3D.5、3、3
6.已知:
inti=5,下列do-while循环语句的循环次数为(D)。
do{cout«i一<i—;
}while(i!
=0);
D.无限
A.0B.1
7.下面关于循环语句的描述中,(B)是错误的。
A.循环体内可以包含有循环语句
B.循环体内必须同时出现break语句和continue语句
C.循环体内可以出现选择语句
D.循环体内可以是空语句
8.下面程序段(B)。
if(!
y){cout«wx";continue;}cout«>,#”:
}
while(x>=l&&x<=2):
A.将输出##B.将输出㈱#
C.是死循环D.含有不合法的控制表达式
9.在函数的定义格式中,下面各组成部分中,(D)是可以省略的。
A.函数名B.函数体C.函数数据类型说明D.函数参数
10.在函数的引用调用时,实参和形参应该是使用(C)。
A.变量值和变量B.地址值和指针C变量值和引用D.地址值和引用
11.以下关于文件操作的叙述中,不正确的是(B)o
A.打开文件的目的是使文件对象与磁盘文件建立联系
B.文件读写过程中,程序将直接与磁盘文件进行数据交换
C.关闭文件的目的之一是保证将输出的数据写入硬盘文件
D.关闭文件的目的之一是释放内存中的文件对象
12.若有语句inta[10]={0,1,2,3,4,5,6,7,8,9},*p=a;贝0(B)不是对a数组元素的正确引用(其中0WiClO)。
A.p[i]B.*(*(a+i))C.a[p-a]D.*(&a[i])
13.以下程序的输出结果是(A)。
ftinclude
voidmain()
{chars[]=〃abcdefbcde”,*p=s;
intvl=0,v2=0,v3=0,v4=0;
for(p;*p;p++)
switch(*p)
(
case'a':
vl++;break;
case'b':
v3++;break;
case'e':
v2++;break;
default:
v4++;
}
cout«vl«,z,,,«v2«/z,,/«v3«,z,z,«v4«endl;
}
A.1,2,2,5B.4,7,5,8C.1,5,3,10D.8,8,8,8
18:
下列一维数组定义正确的是(B)o
A.x=6;intnum[x];B.constintx=6;floata[x];
B.constfloatx=6;intb[x];D.constintx=6;intc[x];答案:
B,
19:
下面选项中等价的是(B)o
A.inta[2][3]={l,0,2,2,4,5)与inta[2][]=(1,0,2,2,4,5}:
B.inta[][3]={1,0,2,2,4,5}与inta[2]⑶=(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}};答案:
B,
20:
下面程序的输出结果是(A)o
#include
voidmain()
(inta[3][3]={{1,2},{3,4},{5}};
intsum=0;
for(int1=1:
I<3;I++)
for(intj=O;j<=I;j++)
sum+=a[I][j];
cout<}
A,12B.14C.15D.13
答案:
A
21:
下列数组的定义中,(C)是错误的。
A.charcal[]={'c','m,,,n,};B.charca2="name”;
C.charca3[4]="your";D.intarray[]={1,2,3,4);答案:
C
22:
下面程序的输出结果是(C)o
#include
#include,zstring,h"
voidmain()
{chara[]=,zwelcome",b[]=,zwell,z:
strcpy(a,b);
cout«a«endl;
}
A.weHomeB.wellomC.wellD.wellwe
答案:
C
23:
下面关于数组的说法正确的是(D)。
A.它与普通变量没什么区别B.它的元素的数据类型可以相同,也可以不同
C.它用数组名标识其元素D.数组的元素的数据类型是相同的
24:
下列说法正确的是(C)o
A.字符型数组与整型数组可通用
B.字符型数组与字符串其实没什么区别
C.当字符串放在字符数组中,这时要求字符数组长度比字符串长1个单元,因为要放字符串终结符,\0,
D.字符串的输出可以用它所存储的数组来输出,也可以字符串的形式整体输出,结果没区别
25:
给出下面定义:
chara[]="abcd";
charb[]={'a,,zbz,'c',zdz);
则下列说法正确的是(A)o
A.数组a与数组b等价B.数组a和数组b的长度相同C.数组a的长度大于数组b的长度D.数组a的长度小于数组b的长度
26:
下面程序的输出结果为(A)o
#include
#include
voidmain()
{charst[20]="hello\0\t\\”;
cout«strlen(st);
cout«sizeof(st)«endl;cout«st;
A.520B.1220C.520D.1120
Hellohello\0\t\\hello\thello\
27:
下面程序的输出结果是(A)o
#include"iostream,h"
voidmain()
{intn[2],I,j,k=2;
for(I=0;Ifor(j=0;jn[j]=n[I]+l;
cout«n[j-2]:
}
A.不确定的值B.3C.2D.1
四、
(1)下面概念中,不属于面向对象方法的是。
A)对象、消息B)继承、多态C)类、封装D)过程调用
答案:
D
知识点:
面向对象的程序设计方法、对象、方法、属性及继承与多态性
评析:
面向对象方法是一种运用对象、类、封装、继承、多态和消息等概念来构造、测试、重构软件的方法。
面向对象方法从对象出发,发展出对象、类、消息、继承等概念。
(2)下列描述中不正确的是o
A)字符型数组中可以存放字符串
B)可以对字符型数组进行整体输入、输出
C)可以对整型数组进行整体输入、输出
D)不能在赋值语句中通过赋值运算符“=”对字符型数组进行整体赋值
答案:
C
知识点:
对数组的理解
评析:
C语言规定只能逐个引用数组元素而不能一次引用整个数组。
字符数组的输入、输出可以将整个字符串一次输入或输出。
所以,选项C的说法是不正确的。
(3)以下程序的输出结果是o
main()
(inti,x[3][3]={9,8,7,6,5,4,3,2,l},*p=&x[l][l];
for(i=0;i<4;i+=2)
Cout«p[i];
)
A)52B)51053D)97
答案C
知识点:
通过指针引用数组元素
评析:
题中*p=&x[l][l];是指将数组x的数组元素x[l][l]的地址赋值给指针变量P,使P指向X[l][l]这个数组元素,那么p[0]即为指针变量p当前所指向的数组元素x[l][l]的值。
具体执行时如下所示:
i=0时,输出p[0],也就是x[l][l],输出是5;
i=2时,输出p[2],即p[2+0],也就是x[2][0],输出是3。
(4)以下程序的运行结果是o
#include"stdio.h"
main()
(
inta[]=(1,2,3,4,5,6,7,8,9,10,11,12};
int*p=a+5,*q=NULL;
*q=*(p+5);
printf("%d%d\n",*p,*q);
}
A)运行后报错B)66C)612D)55
答案:
A
知识点:
通过指针引用数组
评析:
_题目中没有给q分配存储单元,只是简单地给它愚了一个值,所以程序的运行结果是611NULLpointerassignment>也就是运行后报错。
(5)若已定义:
inta[9],*p=a;并在以后的语句中未改变p的值,不能表示a[l]地址的表
达式是o
A)p+1B)a+1C)a++D)++p
答案C
知识点:
数组地址的表示
评析:
数组名是指针常量,是个固定的指针,不能对数组名赋予一个新的地址值,也不能使这个指针常量“移动”,指向数组的其他元素。
(6)以下程序的输出结果是o
main()
(inta=-l,b=l,k;
if((++a<0)&&!
(b--<=0))
printf("%d%d\n",a,b);
else
printf("%d%d\n",b,a);
}
A)-11B)01
C)10D)00
答案C
知识点:
if条件的判断
评析:
逻辑运算符的优先次序如下:
!
(非)一&&(与)一11(或),但本题需特别注意的是短路的概念:
对于&&运算符,其两边表达式的值只要有一边为假,则整个与运算表达式的值即为假,系统在执行时,先运算&&左边的表达式,若为假,则系统不会再判断&&运算符右边的表达式了,直接运用短路原理得整个与运算表达式的值为0o由于++a是先运算后使用,b--是先使用后运算。
所以本题在执行++a后,a值为0,不满足条件,所以a为0,根据短路原理,b仍为1,接下去执行else语句,输出10。
(9)请读程序:
#include
func(inta,intb)(
intc;
c=a+b;
returnc;
)
main()(
intx=6,y=7,z=8,r;
r=func((x--,y++,x+y),z--);
printf("%d\n",r);
}
上面程序的输出结果是o
A)11B)20C)21D)31
答案C
知识点:
自增、自减运算
评析:
函数func()的作用是返回两个形参的和,第一个形参是x、y分别自减和自增后的和,其中(x-,y++,x+y)是一"逗号表达式,它的值应该等于x+y,所以整个表达式(x--,y++,x+y)的值为13,而第二个形参的值为8(根据语法规则,应当先使用,后自增),所以func()的返回值为13+8=21o
(10)请读程序:
#include
main()
(
inta,b;
for(a=1,b=1;a<=100;a++)(
if(b>=20)break;
if(b%3==1){b+=3;continue;}
b-=5;
}
printf("%d\n",a);
)
上面程序的输出结果是o
A)7B)809D)10
答案B
知识点:
break语句和continue语句
评析:
break语句的作用是用于跳出循环体,继续执行循环体下面的语句;而continue语句的作用是用于跳出本次循环,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定。
“%”是求余运算符,执行第一次循环时,条件(b%3==1)为真,b=4,继续下一次循环,如此反复,当b=22时,条件(b>=20)为假,跳出循环,此时共循环8次,即a=8o
(13)请选出以下程序的输出结果o
#include
sub(int*s,inty)
(staticintt=3;
y=s[t];t--;
}
main()
(inta[]=(l,2,3,4},i,x=0;
for(i=0;i<4;i++){
sub(a,x);printf("%d",x);}
printf("\n");
}
A)1234B)432100000D)4444
答案C
知识点:
函数的形参和实参的关系
评析:
x作为函数sub()的实参时,函数对x值的改变没有返回主函数,并不能使得x的值变化,所以在打印时,x的值是始终不变的,即为Oo
(14)若有以下说明和语句,请选出哪个是对c数组元素的正确引用。
intc[4][5],(*cp)[5];
cp=c;
A)cp+lB)*(cp+3)C)*(cp+l)+3D)*(*cp+2)
答案D
知识点:
数组元素的引用
评析:
cp=c这个语句是将数组第0行的地址赋给了cpocp+1使指针指向二维数组c的第一行;*(cp+3)是数组c的第三行的第0列的地址值;*(cp+l)+3是数组c的第一