《C++程序设计》模拟试题二含 答案.docx
《《C++程序设计》模拟试题二含 答案.docx》由会员分享,可在线阅读,更多相关《《C++程序设计》模拟试题二含 答案.docx(16页珍藏版)》请在冰点文库上搜索。
《C++程序设计》模拟试题二含答案
《C++程序设计》模拟试题
(二)
一、选择题(本大题共10小题,每小题2分,共20分)
1.下列关于析构函数描述正确的是(D)。
A.可以重载B.函数体中必须有delete语句
C.返回类型是void类型D.不能指定返回类型
2.下面有关重载函数的说法中正确的是(C)。
A.重载函数必须具有不同的返回值类型
B.重载函数形参个数必须不同
C.重载函数必须有不同的形参列表
D.重载函数名可以不同
3.下列关于单目运算符++、--的叙述中正确的是(D)。
A.它们的运算对象可以是任何变量和常量
B.它们的运算对象可以是char型变量和int型变量,但不能是float型变量
C.它们的运算对象可以是int型变量,但不能是double型变量和float型变量
D.它们的运算对象可以是char型变量、int型变量和float型变量
4.关于异常处理,下列说法中错误的是(B)。
A.在C++程序中,由throw表达式抛出异常,throw抛出的可以是任何类型的数据
B.在一个try-catch结构中,只能有一个try语句块和一个catch语句块
C.当抛出异常后,系统会寻找匹配的catch语句,转到离出现异常最近的try-catch结构去处理
D.当某条语句抛出异常时,跟在其后的语句将被跳过转到catch语句处,此时在try块中抛出异常前创建的对象将被自动释放
5.对于公有继承,基类中的私有成员在派生类中将(A)。
A.仍然是基类的私有成员B.成为派生类的私有成员
C.可以被派生类的成员函数直接访问D.可以被派生类的对象直接访问
6.下面关于抽象类的说法中错误的是(C)。
A.抽象类是包含有纯虚函数的类
B.抽象类是一种特殊的类
C.抽象类可以定义自己的对象
D.抽象类可以派生新类
7.假定一条定义语句为“inta[10],x,*pa=a;”,若要把数组a中下标为3的元素值赋给x,则不正确的语句为(D)。
A.x=pa[3];B.x=*(a+3);
C.x=a[3];D.x=*pa+3;
8.若类X是类Y的友元类,则下列说法中正确的是(A)。
A.类X的所有成员都可以访问类Y的私有成员
B.类Y的所有成员都可以访问类X的私有成员
C.只有类Y的公有成员才能访问类X的私有成员
D.只有类X的公有成员才能访问类Y的私有成员
9.派生类的成员函数可以直接访问基类的(B)成员。
A.所有B.公有和保护
C.保护和私有D.公有和私有
10.C++中函数返回值的类型是由(B)决定的。
A.return语句中表达式的类型B.该函数定义时的类型
C.调用函数时的调用语句D.系统根据结果
二、填空题(本大题共10小题,每小题2分,共20分)
1.在C++程序中使用的cin标识符是系统类库中定义的istream类中的一个对象。
2.假定一个二维数组的定义语句为“inta[3][4]={{3,4},{2,8,6}};”,则元素a[2][1]的值为0。
3.在一个类的定义中,包含有数据成员和成员函数的定义。
4.C++的基类指针可以访问派生类对象,但不能访问派生类对象的private成员。
5.假定A为一个类,inta()为该类的一个成员函数,若该成员函数在类定义体外定义,则函数头为intAA:
:
a()。
6.执行语句“chara[10]={"abcd"},*p;p=a;”后,*(p+4)的值是'/0'。
7.假定变量x定义为“intx=5;”,要将rx定义为x的引用(别名),应使用的语句为int&rx=x;。
8.假定指针变量p定义为“int*p=newint;”,要释放p所指向的动态内存,应使用的语句是deletep;。
9.有如下类声明:
classFoo{intbar;};
则Foo类的成员bar的访问属性是private。
10.有二维字符数组“chars[4][6]={"zhang","gao","tang","wang"};”,执行程序“cout<
三、阅读下列程序,写出执行结果(本大题共5小题,每小题4分,共20分)
1.#include
classSample
{
intx,y;
public:
Sample(){x=y=0;}
Sample(inta,intb){x=a;y=b;}
voiddisp()
{
cout<<"x="<}
};
voidmain()
{
Samples(2,3),*p=&s;
p->disp();
}
运行结果:
x=2,y=3
2.#include
classSample
{
intx;
public:
Sample(){};
Sample(inta){x=a;}
Sample(Sample&a){x=a.x+1;}
voiddisp(){cout<<"x="<};
voidmain()
{
Samples1
(2),s2(s1);
s1.disp();
s2.disp();
}
运行结果:
x=2
x=3
3.#include
classSample
{
charc1,c2;
public:
Sample(chara){c2=(c1=a)-32;}
voiddisp()
{
cout<}
};
voidmain()
{
Samplea('a'),b('b');
a.disp();
b.disp();
}
运行结果:
a转换为A
b转换为B
4.#include
classSample
{
intx,y;
public:
Sample(){x=y=0;}
Sample(inta,intb){x=a;y=b;}
voiddisp()
{
cout<<"x="<}
};
voidmain()
{
Samples1,s2(1,2),s3(10,20);
Sample*pa[3]={&s1,&s2,&s3};
for(inti=0;i<3;i++)
pa[i]->disp();
}
运行结果:
x=0,y=0
x=1,y=2
x=10,y=20
5.#include
voidswap(int&,int&);
voidmain()
{
inta=15,b=22,c=9,d=30;
cout<<"1522930";
if(a
if(bif(cif(a
if(bif(a
cout<}
voidswap(int&x,int&y)//自定义函数代码从这里开始
{
inttemp;
temp=x;
x=y;
y=temp;
}
运行结果:
1522930
3022159
四、完成程序题(本大题共5小题,每小题4分,共20分)
1.下面是一个实现两个数相加的程序,在下划线处填上正确的语句。
#include
intadd(intx,inty)
{
returnx+y;
}
doubleadd(doublex,doubley)
{
returnx+y;
}
voidmain()
{
inta=4,b=6;
doublec=2.6,d=7.4;
cout<}
2.设计一个函数用于计算两点之间的距离,,在下划线处填上正确的语句。
#include
#include
classPoint
{
intx,y;
public:
Point(inti,intj){x=i;y=j;}
intgetx(){returnx;}
intgety(){returny;}
voiddisp()
{
cout<<"("<}
};
floatdistance(Point&p1,Point&p2)
{
floatd;
d=sqrt((p1.getx()-p2.getx())*(p1.getx()-p2.getx())+
(p1.gety()-p2.gety())*(p1.gety()-p2.gety()));
returnd;
}
voidmain()
{
Pointp1(2,2),p2(5,5);
p1.disp();
cout<<"与";p2.disp();
cout<<"之间距离="<}
3.根据程序的运行结果,在下划线处填上正确的语句。
#include
classSample
{
protected:
intx;
public:
Sample(){x=0;}
Sample(intval){x=val;}
voidoperator++()
{x++;}
};
classDerived:
publicSample
{
inty;
public:
Derived()
{
x=0;
y=0;
}
Derived(intval1,intval2)
{
x=val1;
y=val2;
}
voidoperator--()
{
x--;
y--;
}
voiddisp()
{
cout<<"x="<}
};
voidmain()
{
Derivedd(3,5);
d.disp();
d++;
d.disp();
d--;
d.disp();
}
运行结果:
x=3y=5
x=4y=5
x=3y=4
4.定义函数模板用于计算一个数的绝对值,在下划线处填上正确的语句。
#include
template
Tabs(Tx)
{
return(x>0?
x:
-x);
}
voidmain()
{
cout<}
5.将下面程序补充完整,使程序执行结果为9。
#include
classClass
{
public:
Class(int);
intget();
private:
intx;
};
Class:
:
Class(inta)
{
x=a;
}
intClass:
:
get()
{
returnx*x;
}
voidmain()
{
Classa(3);
cout<}
五、编程题(本大题共2小题,每小题10分,共20分)
1.设计一个立方体类Box,计算并输出立方体的体积和表面积。
解:
Box类包含三个私有数据成员a(立方体边长)、volume(体积)和area(表面积),另有两个构造函数以及seta()(设置立方体边长)、getvolume()(计算体积)、getarea()(计算表面积)和disp()(输出结果)。
本题程序如下:
#include
classBox
{
floata;
floatvolume;
floatarea;
public:
Box(){}
Box(floatr){a=r;}
voidseta(floatr){a=r;}
voidgetvolume(){volume=a*a*a;}
voidgetarea(){area=6*a*a;}
voiddisp()
{
cout<<"体积:
"<"<
}
};
voidmain()
{
Boxobj1(3.5),obj2;
obj2.seta(5.4);
obj1.getvolume();
obj1.getarea();
cout<<"obj1=>";
obj1.disp();
obj2.getvolume();
obj2.getarea();
cout<<"obj2=>";
obj2.disp();
}
运行结果:
obj1=>体积:
42.875,表面积:
73.5
obj2=>体积:
157.464,表面积:
174.96
2.设计一个学生类student,包括学生姓名、成绩,设计一个友元函数,输出成绩对应的等级:
大于等于90:
优;80~90:
良;70~79:
中;60~69:
及格;小于60:
不及格。
解:
#include
#include
#include
classstudent
{
charname[10];
intdeg;
charlevel[7];
public:
student(charna[],intd)
{
strcpy(name,na);
deg=d;
}
char*getname(){returnname;}
friendvoidtrans(student&s)
{
if(s.deg>=90)
strcpy(s.level,"优");
elseif(s.deg>=80)
strcpy(s.level,"良");
elseif(s.deg>=70)
strcpy(s.level,"中");
elseif(s.deg>=60)
strcpy(s.level,"及格");
else
strcpy(s.level,"不及格");
}
voiddisp()
{
cout<}
};
voidmain()
{
studentst[]={student("王华",78),student("李明",92),student("张伟",62),student("孙强",88)};
cout<<"输出结果:
"<cout<for(inti=0;i<4;i++)
{
trans(st[i]);
st[i].disp();
}
}
运行结果:
输出结果:
姓名成绩等级
王华78中
李明92优
张伟62及格
孙强88良