C++试题Word格式.docx
《C++试题Word格式.docx》由会员分享,可在线阅读,更多相关《C++试题Word格式.docx(45页珍藏版)》请在冰豆网上搜索。
sizeof(a);
i++)
if(m>
a[i])
m=a[i];
cout<
m<
}
程序运行后输出结果错误,导致错误结果的程序行是【】
A.intm=a[0];
B.for(inti=1;
i++)
C.if(m>
a[i])
D.m=a[i];
4、下列选项中正确的语句组是【】
A.chars[8];
s={″Hello″};
B.char*s;
C.chars[]=″Hello″;
D.char*s;
s=″Hello″;
5、有以下程序段
inta=5,*b,**c;
c=&
b;
b=&
a;
…
}程序在执行了c=&
语句后,表达式:
**c的值是【】
A.变量a的地址
B.变量b中的值
C.变量a中的值
D.变量b的地址
6、分析下面的程序
classA{
public:
virtualvoidprint(){cout<
"
A"
l;
}
};
classB:
publicA{
voidprint(){cout<
B"
;
voidmain(){
Aa,*pa;
Bb,*pb;
pa=(A*)&
pa->
print();
pb=(B*)&
pb->
}程序的运行结果为【】
A.编译错误B.ABC.BAD.AA
7、在Windows环境下,分析程序的输出结果【】
main(){
charbuf1[20]=”Hello”;
charbuf2[20]=”world”;
if(buf1>
buf2)
buf1<
else
buf2<
A.编译错误B.HelloC.worldD.结果不确定
8、分析下面的程序,运行结果为【】
inta[]={1,2,3,4,5,6,7,8,9};
int*p=a;
*p++;
*(p+1);
A.13B.22C.12D.23
9、下面函数中能够体现面向对象的多态性的是【】
A.构造函数B.虚函数C.析构函数D.友元函数
10、构造一个类A,在该类中的将“+=”操作符重载为友元函数,则下面语法正确的是【】
A.friendAoperator+=(A&
A&
)
B.friendA&
operator+=(A,A)
C.friendA&
operator+=(A&
)
D.A&
11、下面关于数组作为参数传递的函数原型,错误的是【】
A.voidfunc(intarr[]);
B.voidfunc(intarr[][4]);
C.voidfunc(int*arr);
D.voidfunc(intarr[4]);
12、下列哪些函数有返回值【】
A.转换运算符函数B.构造函数C.析构函数D.赋值运算符函数
13、对于下面的代码,哪一个和a[i]不等价【】
inta[10];
int*ptr=a;
A.*(a+i)B.*(ptr+i)C.*ptr+iD.ptr[i]
14、多继承的析构顺序是【】
A.类自己内嵌对象虚拟基类非虚拟基类
B.类自己内嵌对象非虚拟基类虚拟基类
C.非虚拟基类虚拟基类内嵌对象类自己
D.虚拟基类非虚拟基类内嵌对象类自己
15、如果让类的所有成员在类的范围内共享某一个函数,则声明该函数为【】
A.staticB.friendC.virtualD.const
16、以下对于析造函数说法中,正确的是【】
A.每个类必须自己定义一个析构函数B.析造函数需要在程序中调用
C.一个类中只能定义一个析造函数D.析构函数可以有形式参数
17、下面哪一个变量占用了内存空间【】
A.enumCOLOR{RED,BLUE,GREEN};
中的COLOR
B.inta;
int&
r=a;
中的变量r
C.constint*p;
中的p
D.structStudent
{
intNO;
charname[20];
中的Student;
18、构造一个类时,类中有些函数系统缺省会进行构造,那么下面哪一类系统不会产生默认的函数【】
A.构造函数B.友元函数C.拷贝构造函数D.赋值运算符
19、在类的继承过程中,哪些函数能够被继承【】
A.虚函数B.构造函数C.析构函数D.友元函数
20、下面程序的输出结果是【】
inta=1,b=10;
int&
r=a;
int*p=&
*p=r++;
cout<
"
A.1,10B.2,10C.1,2D.2,1
二、填空题
1、通常C++的算法和程序结构有___________、___________、____________三种。
2、在C++中有二种参数传递方式:
值传递和_______________。
3、重载函数的特征______________________________________。
4、当建立一个新对象时,程序自动调用_______________;
当销毁一个对象时程序自动调用_____________。
5、如果类名A,则该类的拷贝构造函数原型为______________。
6、定义类的成员时,有哪三种访问控制修饰符____________、___________、__________。
7、至少包含一个___________的类称为抽象类。
8、通常情况下,内存被分成____________、____________、____________、__________4部分,其中,const变量保存在______________,局部变量保存在_______________。
9、对象的三大基本特性是____________、______________、封装性。
三、分析下列程序,写出程序的运行结果
1、voidmain()
intn=1;
for(inti=1;
i<
11;
i+=n)
{
n++;
if(i%3==2)
continue;
}
________________
________________
2、voidfn(intb)
staticinta=10;
cout<
a--<
++b<
voidmain()
for(inti=0;
4;
i++)
fn(i);
四、补充下面的程序
1、已知整型数组a中的元素按照从小到大排列,现任意向数组中插入一整数,使得该数组依然保持从小到大排列。
该函数原型如下,请将其补充完全。
voidinsert(intx,inta[],intlen)
{
for(inti=0;
len;
___[1]___//获取x插入的位置
break;
for(intj=len;
j>
i;
j--)
___[2]____;
//将x插入位置的数组元素后移
____[3]____;
//将x插入该位置
2、下面的函数将字符串s中字符逐一颠倒,该函数使用指针t指向字符串最后一个字符,然后首尾字符相互交换的方法实现,比如s=“Hello”,经过该函数后s=“olleH”,将下面的算法补充完全。
voidreverse(char*s)
charc;
char*t;
for(t=s+strlen(s)-1;
___[1]____;
t--,s++)
ch=*s;
___[2]_____;
//字符首尾字符交换
___[3]_____;
}key:
t<
s
*s=*t;
*t=ch;
3、以下的程序将输入的十进制整数n转换为b进制数(b<
=8),并将转换结果输出。
转换的方法是"
除b取余"
。
voidtransfer(intm,intk)
inta[20];
m>
0;
a[i]=___[3]____;
m/=k;
________[4]__________;
a[j];
intb,n;
请输入十进制数n和进制数b\n"
___[1]____;
___[2]____;
五、分析下面的程序,按要求将完成下列程序。
1、#include<
string.h>
A(char*pName="
noname"
name=newchar[strlen(pName)+1];
strcpy(name,pName);
protected:
char*name;
Aa;
Ab(a);
1)程序运行中会产生内存泄漏,为什么?
2)请添加一个析构函数,避免1)中的问题
3)main()函数中调用了拷贝构造函数,当只添加析构函数时,程序会出现什么问题?
添加一个拷贝构造函数,避免该问题。
2、#include<
iostream.h>
A(){}
Aoperator++(int)
Atemp(*this);
a++;
returntemp;
voiddisplay(){cout<
inta;
Aa;
(++a).display();
a++.display();
1)该程序编译出错,请判断程序出错的位置
2)将该程序补充完全,使得编译正确。
3)如果要使程序的运行结果为1和1,那么程序还需要如何改动?
答案
一、
DBCCCCBABCDDCBACCBAD
二、
地址传递
函数名称相同,参数类型或个数不同
构造函数、析构函数
A(A&
a)
public、protected、private
纯虚函数
堆区栈区全局数据区代码区全局数据区栈区
多态继承
三、
13610
10,19,28,37,4
四、
1if(x<
a[j]=a[j-1];
a[i]=x;
2t<
3.cin>
n>
transfer(n,b);
m%k
for(intj=i-1;
=0;
1、
1)对象在构造时申请了堆内存,但析构函数并没有释放,因此造成内存泄漏。
2)~A(){
delete[]name;
3)b和a共用了同一段内存,调用析构函数时,同一段内存释放了两次,出现内存错误。
这是浅拷贝带来的问题。
a){
name=newchar[strlen(a.Name)+1];
strcpy(name,a.Name);
2、
1)(++a).display();
出错
2)A&
operator++(){
a++;
return*this;
3)构造函数改为:
A():
a(0){}
C++程序设计期终考试试题
六
一、填空题(每空1分)
9、面向对象程序设计的三个主要特性是封装性______________和_______________。
10、类的数据成员是描述对象的__________________,类的成员函数描述的是对象的___________________。
11、分数
(值为3.5)用C++表达式应该表示为_____________________。
12、如果需要在输出语句中使用格式控制符,必须包含的头文件是_________________。
13、通过语句StuA.setname(“Wang”);
可以将Student类对象StuA的名字设置为Wang,则类的成员函数setname的原型是_________________________。
14、在C++中,执行cout<
012+021<
所显示的结果是___________________。
15、在C++中,表达式return10&
&
-10;
的返回值是___________________。
16、在类的定义中,类的成员默认的访问控制方式是____________________。
17、在C++中,如果函数Fun的形式参数是两个int类型的引用,返回值也是int型,这个函数的原型应该写为:
_______________________。
18、每个类都有自己的构造函数、拷贝构造函数和析构函数,这三类函数中,不可以指定为虚函数的是__________________和_______________________。
19、如果A1是Base类的一个对象,则执行语句BaseA2=A1;
将会自动调用Base类的_______________________。
20、至少包含一个纯虚函数的类称为___________________。
21、定义变量是静态类型所使用的关键字是_________________,说明变量是外部变量的关键字是___________________。
22、若有for循环语句for(intx=0;
x=3;
x++){;
},此循环语句执行的次数将是_无限___________次。
23、派生类对象要能够访问基类成员的条件有两个,即_____________________________和_______________________________。
二、选择题(每题1分):
1、采用C++面向对象程序设计来设计软件有许多优点,但是不包括【】。
A.有利于信息隐藏和数据安全
B.有利于软件重用,提高软件开发效率
C.提高模块独立性,有利于软件维护
D.降低对于软件开发人员的要求
2、以下定义的C++实数中,不正确的是【】
A.floata=3.54e2B.floata=1.0e2
C.floata=.54e2D.floata=3.54e2.0
3、在字符串中使用以下字符(字符组合)时,不需要采用转义字符的是【A】。
A.\\B.'
C.\D."
4、语句for(inti=1;
i++<
);
虽然正确,但可读性差,可以采用的等价语句是【B】。
A.for(inti=2;
5;
i++);
B.for(inti=1;
C.for(inti=1;
=4;
D.for(inti=1;
3;
5、若已定义char*p=”abcd”,*q=”cdef”;
以下语句中会出现运行错误的是【D】。
A.cout<
p;
B.p=”efgh”;
C.p=q;
D.*p=’P’;
//
6、已声明原型voidfunc(intarr[]);
在函数func中要知道数组arr的大小,可使用【】。
E.sizeof(arr)/sizeof(int)
F.sizeof(arr[])/sizeof(int)
G.sizeof(intarr[])/sizeof(int)
H.其他方法,以上方法都不正确
7、为了判断两个字符串s1和s2是否相等,应当使用【C】。
A.if(s1==s2)B.if(s1=s2)
C.if(!
strcmp(s1,s2))D.if(strcmp(s1,s2))
8、若已定义intk=1;
然后不断地执行k++操作,k值变化的趋势将是【】。
A.k值不断增加到最大值,显示溢出错误后停止
B.从1增加到最大值,再从-1减少到负数最小值,周而复始
C.从1增加到最大值,再从负数最小值增加到-1,周而复始
D.从1增加到最大值,再减少到1,周而复始;
9、设有定义语句
intA[5]={2,4,6,8,5},*p=A,i;
要求依次输出A数组5个元素的值,不能完成此操作的语句是【】。
A.for(i=0;
i++)cout<
*(p++);
B.for(i=0;
*(p+i);
C.for(i=0;
p[i];
D.for(i=0;
(*p)++;
10、下列函数中,不是类的成员函数的是【】。
A.友元函数B.析构函数
C.将数据转换为类的对象的转换函数D.拷贝构造函数
11、以下对于构造函数说法中,正确的是【】。
A.构造函数通常是自动调用的B.构造函数返回值可以是void型
C.无参数构造函数可以不止一个D.一个类中只能定义一个构造函数
12、类的对象可以访问的类的成员必须是【】类型。
A.autoB.privateC.protectedD.public
13、以下对于析构函数说法中,正确的是【】。
A.每个类必须自己定义一个析构函数B.析构函数可以有形式参数
C.一个类中只能定义一个析构函数D.析构函数需要在程序中调用
14、要在Clock类外定义一个构造函数,类中包含一个整型的数据成员m。
以下4种函数头表示中,正确的是【】。
A.voidClock:
:
Clock(intm)B.Clock:
Clock(intm)
C.intClock:
Clock(intm)D.Clock(intm=0)
15、如果已经定义了Point类的静态数据成员:
staticintk;
对这个数据成员初始化的正确表示是【】。
A.intPoint:
k=0;
B.staticintk=0;
C.staticintPoint:
D.intstaticPoint:
k=0;
16、友元函数和类的成员函数相同的地方是【】。
A.都可以通过类的对象来调用B.都可以访问类的私有成员
C.都可以通过类的对象指针来调用D.都有this指针
17、关于new运算符的下列描述中,错误的是【D】。
A.可以用来动态地创建对象或变量
B.使用它来创建对象时要调用构造函数
C.使用它创建对象时可以指定初始值
D.使用它创建对象数组时可以指定初始值
18、关于派生类newClass的以下声明中,正确的是【】。
A.classnewClass:
publicclassBase{….};
B.classnewClass:
publicBase01,Base02{….};
C.classnewClass:
publicBase01,publicBase02{….}
D.classnewClass:
publicclassBase01,publicBase02{….};
19、以下操作中不可以进行的是【】。
A.将派生类对象赋值给基类对象
B.将基类对象赋值给派生类对象
C.用基类对象的地址初始化基类的指针
D.用派生类对象的地址初始化基类的指针
20、以下说法中错误的是【】。
A.不可以定义抽象类的对象
B.不可以定义抽象类对象的指针
C.抽象类中必须定义纯虚函数
D.纯虚函数返回值可以不是void类型
三、分析题(每题4分):
按要求回答问题
1、以下程序的输出结果是____________________
程序的功能是_______________________________
#include<
iostream>
usingnamespacestd;
{intn=0;
for(inti=1;
20;
if((i%3))
continue;
n+=i;
”n=”<
n<
2、以下程序的输出结果是____________________
_____________________
#i