elsereturn-1。
//6分
}
训练第二套
一、单项选择题(每小题2分,共20分)
1.字符串”a+b=12\n”的长度为()。
A.6B.7C.8D.9
2.假定一个二维数组的定义语句为“inta[3][4]={{3,4},{2,8,6}}。
”,则元素a[2][1]的值为()。
A.0B.4C.8D.6
3.以下正确的描述是()。
A.函数的定义可以嵌套,函数的调用不可以嵌套
B.函数的定义不可以嵌套,函数的调用可以嵌套
C.函数的定义和函数的调用均可以嵌套
D.函数的定义和函数的调用均不可以嵌套
4.设有定义“doublearray[10]。
”,则表达式sizeof(array)/sizeof(array[0])的结果为array数组的()。
A.首地址B.元素个数
C.每个元素所占的字节数D.总字节数
5.若使p指向包含30个整型元素的动态数组空间,则使用的定义语句为()。
A.int*p=newint[30]。
B.int*p=newint(30)。
C.int*p=new[30]。
D.*p=newint[30]。
6.软件产品与其他软件产品组合成一个整体的难易程度叫做软件的()。
A.可维护性B.可复用性C.兼容性D.正确性
7.在多文件结构的程序中,通常把类的声明单独存放于()中。
A.主文件B.实现文件C.库文件D.头文件
8.在一个用数组实现的队列类中,假定数组长度为MS,队首元素位置为first,队列长度为length,则队首的后一个位置为()。
A.first+1B.(first+1)%MS
C.(first-1)%MSD.(first+length)%MS
9.假定一个类的构造函数为“A(intaa=1,intbb=0){a=aa。
b=bb。
}”,则执行“Ax(4)。
”语句后,x.a和x.b的值分别为()。
A.1和0B.1和4C.4和1D.4和0
10.假定AB为一个类,则执行“ABa
(2),b[3],*p[4]。
”语句时共调用该类构造函数的次数为()。
A.3B.4C.5D.9
二、填空题(每小题2分,共20分)
1.用于输出表达式值的标准输出流对象是____________。
2.假定x=5,y=6,则表达式x--*--y的值为__________。
3.假定x是一个逻辑量,则x||true的值为__________。
4.C++提供的预处理命令有宏定义命令,条件编译命令和____________命令。
5.假定a是一个一维数组,则a[i]的指针访问方式为________。
6.变量v定义为“doublev=23.4。
”,要使指针pv指向v,则定义pv的语句为______________。
7.若在类的定义体中只给出了一个成员函数的原型,则在类外给出完整定义时,其函数名前必须加上________和两个冒号分隔符。
8.若采用x.abc(y)表达式调用一个成员函数,在成员函数中使用的________就代表了类外的x对象。
9.假定用户没有给一个名为AB的类定义析构函数,则系统为其定义的析构函数为__________。
10.假定用户只为类AB定义了一个构造函数"AB(intaa,intbb=0){a=aa。
b=bb。
}",则定义该类的对象时,其实参表中至多带有_________个实参。
三、程序填充题,根据题意在横线上填写合适的内容。
(每小题6分,共24分)
1.下面函数是求两个整型参数a和b的最小公倍数。
intf2(inta,intb)
{
inti=2,p=1。
do{
while(a%i==0&&____________){
p*=i。
a/=i。
b/=i。
}
i++。
}while(a>=i&&____________)。
returnp*a*b。
}
2.对数组a中的元素按相反次序重新排列。
voidPV(inta[],intn)
{
inti。
for(i=0。
ii++){
intx=a[i]。
____________________。
____________________。
}
}
3.假定有定义为“structNODE{intdata。
NODE*next。
}。
”,下面算法是把以L为表头指针的链表中各结点依次按相反次序链接并返回新链表的表头指针。
NODE*f8(NODE*L)
{
if(L==NULL)returnNULL。
NODE*p=NULL,*q=L,*t。
//p为新链表的表头指针,初始值为空
while(q!
=NULL){
t=q。
q=q->next。
t->next=__________。
p=__________。
}
returnp。
}
4.类A的定义
classA{
int*a。
intn。
intMaxLen。
public:
A():
a(0),n(0),MaxLen(0){}//无参构造函数
A(int*aa,intnn,intMM){//带参构造函数
n=nn。
MaxLen=MM。
if(n>MaxLen)exit
(1)。
a=newint[MaxLen]。
for(inti=0。
ii++)____________。
//利用数组aa给数组a赋值
}
~A(){______________。
}//释放动态存储空间
intGetValue(inti){returna[i]。
}//函数体返回a[i]的值
}。
四、理解问答题,分别写出前2小题的程序运行结果和指出后2小题的程序或函数功能。
(每小题6分,共24分)
1.#include
constintB=2。
voidmain()
{
intp=1,s=1。
while(s<50){
p*=B。
s+=p。
}
cout<<"s="<
}
运行结果:
2.#include
classCE{
private:
inta,b。
intgetmin(){return(a
a:
b)。
}
public:
intc。
voidSetValue(intx1,intx2,intx3){
a=x1。
b=x2。
c=x3。
}
intGetMin()。
}。
intCE:
:
GetMin(){
intd=getmin()。
return(dd:
c)。
}
voidmain()
{
intx=5,y=12,z=8。
CE*ep=newCE。
ep->SetValue(x+y,y-z,10)。
cout<GetMin()<}
运行结果:
3.intff(intx,inty,charop){
intz。
switch(op){
case'+':
cout<cin>>z。
if(x+y==z)return1。
elsereturn0。
break。
case'-':
cout<cin>>z。
if(x-y==z)return1。
elsereturn0。
break。
case'*':
cout<cin>>z。
if(x*y==z)return1。
elsereturn0。
break。
case'/':
cout<cin>>z。
if(x/y==z)return1。
elsereturn0。
break。
default:
cout<<"运算符错,退出!
"。
exit
(1)。
}
}
函数功能:
4.char*f(char*s){
intn=strlen(s)。
char*r=newchar[n+1]。
for(inti=0。
ii++)
if(s[i]>='a'&&s[i]<='z')r[i]=s[i]-'a'+'A'。
elser[i]=s[i]。
r[n]=’\0’。
returnr。
}
函数功能:
五、编程题(每小题6分,共12分)
1.按照下面函数原型语句编写一个递归函数求出并返回数组a中n个元素的平方和。
intf(inta[],intn)。
2.根据下面类中拷贝构造函数的原型写出它的类外定义。
classArray{
int*a。
//指向动态分配的整型数组空间
intn。
//记录数组长度
public:
Array(intaa[],intnn)。
//构造函数,利用aa数组长度nn初始化n,
//利用aa数组初始化a所指向的数组空间
Array(Array&aa)。
//拷贝构造函数
}。
答案供参考
一、单项选择题每小题2分,共20分)
1.B2.A3.B4.B5.A
6.C7.D8.B9.D10.B
二、填空题(每小题2分,共20分)
1.cout2.253.true(或1)4.文件包含5.*(a+i)
6.double*pv=&v。
7.类名8.*this9.~AB(){}10.2
三、程序填充题,根据题意在横线上填写合适的内容。
(每小题6分,共24分)
评分标准:
每空3分。
1.b%i==0、b>=i
2.a[i]=a[n-i-1]、a[n-i-1]=x
3.p、t
4.a[i]=aa[i]、delete[]a
四、理解问答题,分别写出前2小题的程序运行结果和指出后2小题的程序或函数功能。
(每小题6分,共24分)
评分标准:
第3、4小题根据叙述完整程度酌情给分。
1.s=63
2.4
3.以参数x和y作为运算对象,以参数op所存字符作为运算符,要求从键盘上输入运算结果,若正确则返回1否则返回0。
4.根据参数s所指向的字符串,生成一个由r所指向的新字符串并返回,该字符串使s字符串中的小写字母均变为大写。
五、编程题(每小题6分,共12分)
评分标准:
按编程完整程度酌情给分。
1.intf(inta[],intn)
{
if(n==0)return0。
//1分
elsereturna[n-1]*a[n-1]+f(a,n-1)。
//6分
}
2.Array:
:
Array(Array&aa){
n=aa.n。
//1分
a=newint[n]。
//3分
for(inti=0。
ii++)a[i]=aa.a[i]。
//6分
}
训练第三套
一、单项选择题(每小题2分,共20分)
1.C++程序的基本功能模块为()。
A.表达式B.标识符C.语句D.函数
2.当处理特定问题的循环次数已知时,通常采用()来解决。
A.for循环B.while循环C.do循环D.switch语句
3.下面函数原型语句正确的是()。
A.intFunction(voida)。
B.voidFunction(int)。
C.intFunction(a)。
D.int(doublea)。
4.假定变