模拟试题一答案.docx
《模拟试题一答案.docx》由会员分享,可在线阅读,更多相关《模拟试题一答案.docx(17页珍藏版)》请在冰豆网上搜索。
模拟试题一答案
《C++程序设计》模拟试题
(一)
一、选择题(本大题共10小题,每小题2分,共20分)
1.C++源程序文件扩展名为(B)。
A..hB..cppC..1ibD..obj
2.在C++中使用流进行输入输出,其中专用于从键盘进行输入的流是(A)。
A.cinB.coutC.cerrD.clog
3.对于类中没有设置访问属性的数据成员,其默认为(C)。
A.publicB.protectedC.privateD.static
4.下列关于类和对象的叙述中,错误的是(A)。
A.一个类只能有一个对象B.对象是类的具体实例
C.类是对某一类对象的抽象D.类和对象的关系是一种数据类型与变量的关系
5.类的构造函数是在定义该类的一个(C)时被自动调用执行的。
A.成员函数B.数据成员C.对象D.友元函数
6.派生类的对象可以访问以下哪种情况继承的基类成员(D)。
A.私有继承的私有成员B.公有继承的私有成员
C.私有继承的保护成员D.公有继承的公有成员
7.intFunc(int,int);不可与下列哪个函数构成重载(B)。
A.intFunc(int,int,int);B.doubleFunc(int,int);
C.doubleFunc(double,double);D.doubleFunc(int,double);
8.假定AA为一个类,inta()为该类的一个成员函数,若该成员函数在类定义体外定义,则函数头为(A)。
A.intAA:
:
a()B.intAA:
a()
C.AA:
:
a()D.AA:
:
inta()
9.设函数voidswap(int,int)将交换两形参的值,如两整型变量inta=10;intb=15;则执行swap(a,b)后,a、b值分别为(B)。
A.10,10B.10,15
C.15,10D.15,15
10.当一个类A或函数f()被声明为另一个类B的友元后,类A或函数f()能够直接访问类B的(D)。
A.只能是公有成员B.只能是保护成员
C.只能是除私有成员之外的任何成员D.任何权限的成员
二、填空题(本大题共10小题,每小题2分,共20分)
1.若要在程序文件中进行标准输入输出操作,则必须在开始的#include命令中使用iostream.h头文件。
2.同一个函数名可以对应着多个不同的函数实现,每一类实现对应着一个函数体,称为函数重载。
3.在C++中,当一个对象被创建后,它的每一个成员函数都含有一个系统自动生成的隐含的指针,称之为this指针。
4.假定A为一个类,a()为该类公有的函数成员,x为该类的一个对象,则访问x对象中函数成员a()的格式为x.a()。
5.当类中一个字符指针成员指向具有n个字节的存储空间时,它所能存储字符串的最大长度为n-1。
6.在C++中,对于基类的protected成员,当以public方式派生一个新类时,该成员将成为派生类的protected成员。
7.能够用来作为基类派生出新类,却不能创建自己的对象的类称为抽象类。
8.在C++程序中使用的cout标识符是系统类库中定义的ostream类中的一个对象。
9.若x=5,y=10,则x>y的逻辑值为False。
10.执行“charch=14*5+2;cout<三、阅读下列程序,写出执行结果(本大题共5小题,每小题4分,共20分)
1.
#include
voidmain()
{
inta[9]={2,4,6,8,10,12,14,16,18};
for(inti=0;i<9;i++)
{
cout<if((i+1)%3==0)
cout<}
}
运行结果:
246
81012
141618
2.
#include
#include
voidmain()
{
char*a[5]={"student","worker","cadre","soldier","peasant"};
char*p1,*p2;
p1=p2=a[0];
for(inti=0;i<5;i++)
{
if(strcmp(a[i],p1)>0)
p1=a[i];
if(strcmp(a[i],p2)<0)
p2=a[i];
}
cout<}
运行结果:
worker,cadre
3.
#include
usingnamespacestd;
classSimple
{
intx,y;
public:
Simple(){x=y=0;}
Simple(inti,intj){x=i;y=j;}
voidcopy(Simple&s);
voidsetxy(inti,intj)
{x=i;y=j;}
voidprint()
{cout<<"x="<};
voidSimple:
:
copy(Simple&s)
{
x=s.x;
y=s.y;
}
voidfunc(Simples1,Simple&s2)
{
s1.setxy(30,40);
s2.setxy(70,80);
}
voidmain()
{
Simpleobj1(1,2),obj2;
obj2.copy(obj1);
func(obj1,obj2);
obj1.print();
obj2.print();
}
运行结果:
x=1,y=2
x=70,y=80
4.
#include
classA
{
public:
A();
voidShow();
~A();
private:
staticintc;
};
intA:
:
c=0;
A:
:
A()
{
cout<<"constructor."<c+=10;
}
voidA:
:
Show()
{
cout<<"c="<}
A:
:
~A()
{
cout<<"destructor."<}
voidmain()
{
Aa,b;
a.Show();
b.Show();
}
运行结果:
constructor
constructor
c=20
c=20
destructor
destructor
5.
#include
classbase
{
intn;
public:
base(){};
base(inta)
{
cout<<"constructingbaseclass"<n=a;
cout<<"n="<}
~base(){cout<<"destructingbaseclass"<};
classsubs:
publicbase
{
intm;
public:
subs(inta,intb):
base(a)
{
cout<<"constructingsubclass"<m=b;
cout<<"m="<}
~subs(){cout<<"destructingsubclass"<};
voidmain()
{
subss(1,2);
}
运行结果:
constructingbaseclass
n=1
constructingsubclass
n=2
destructingsubclass
destructingbaseclass
四、完成程序题(本大题共5小题,每小题4分,共20分)
1.
#include
classSample
{
intx,y;
public:
Sample()
{x=y=1;}
Sample(inta,intb)
{
x=a;
y=b;
}
voiddisp()
{
cout<<"x="<}
};
voidmain()
{
Samples1,s2(2,3);
s1.disp();
s2.disp();
}
输出结果为:
x=0,y=0
x=2,y=3
2.下面是一个输入半径,输出其面积和周长的C++程序,在下划线处填上正确的语句。
#include
usingnamespacestd;
constdoublepi=3.14159;
voidmain()
{
doubler;
cout<<"r=";
cin>>r;
doublel=2.0*pi*r;
doubles=pi*r*r;
cout<<"Thelongis:
"<cout<<"Theareais:
"<
}
3.
#include
usingnamespacestd;
voidmain()
{
floata,b;
floatcha(floatx,floaty);//函数cha的原型声明
a=12.5;
b=6.5;
floatc=cha(a,b);//调用函数cha
cout<}
floatcha(floatx,floaty)
{
floatw;
w=x-y;
returnw;
}
4.根据输出结果,在下划线处填上正确的语句。
#include
classBase
{
public:
virtualvoidPrint()
{
cout<<"Base:
:
Print"<}
};
classClassA:
publicBase
{
public:
voidPrint()
{cout<<"ClassA:
:
Print"<};
classClassB:
publicBase
{
public:
voidPrint()
{cout<<"ClassB:
:
Print"<};
voidmain()
{
ClassAa;
ClassBb;
Base*p;
p=&a;
p->Print();
p=&b;
p->Print();
}
输出结果为:
ClassA:
:
Print
ClassB:
:
Print
5.
#include
usingnamespacestd;
template
Tfun(Tx)//定义函数模板
{
Ty;
y=x*x;
returny;
}
voidmain()
{
floata=2.5;
cout<}
五、编程题(本大题共2小题,每小题10分,共20分)
1.创建一个雇员类employee,其数据成员有姓名、街道地址、市、省和邮政编码,将该类的对象数据打印出来。
解:
#include
#include
classemployee
{
protected:
charname[10];//姓名
charstreet[20];//街道地址
charcity[10];//市
charprov[10];//省
charpost[7];//邮政编码
intno;//记录序号
public:
employee(char[],char[],char[],char[],char[],int);
voidchangename(charstr[]);
voiddisplay();
};
employee:
:
employee(charn[],chars[],charc[],charp1[],charp2[],intnum)
{
strcpy(name,n);
strcpy(street,s);
strcpy(city,c);
strcpy(prov,p1);
strcpy(post,p2);
no=num;
}
voidemployee:
:
display()
{
cout<<"输出记录"<cout<<"姓名:
"<cout<<"街道地址:
"<cout<<"市:
"<cout<<"省:
"<cout<<"邮政编码"<}
voidmain()
{
employeeobj1("王华","中华路15号","武汉市","湖北省","430070",1);
employeeobj2("杨丽","天津路30号","南京市","江苏市","210020",2);
obj1.display();
obj2.display();
}
运行结果:
输出记录1
姓名:
王华
街道地址:
中华路15号
市:
武汉市
省:
湖北省
邮政编码:
430070
输出记录2
姓名:
杨丽
街道地址:
天津路30号
市:
南京市
省:
江苏省
邮政编码:
210020
2.设计一个学生类student,包括数据成员姓名和三门课程成绩,利用重载运算符“+”将所有学生的成绩相加放在一个对象中,再对该对象求各门课程的平均分。
解:
#include
#include
#include
classstudent
{
charname[10];
intdeg1,deg2,deg3;
public:
student(){}
student(charna[],intd1,intd2,intd3)
{
strcpy(name,na);
deg1=d1;deg2=d2;deg3=d3;
}
friendstudentoperator+(students1,students2)
{
staticstudentst;
st.deg1=s1.deg1+s2.deg1;
st.deg2=s1.deg2+s2.deg2;
st.deg3=s1.deg3+s2.deg3;
returnst;
}
voiddisp()
{
cout<}
friendvoidavg(student&s,intn)
{
cout<}
};
voidmain()
{
students1("Li",78,82,86),s2("Zheng",75,62,89);
students3("Ma",89,87,95),s4("Xu",54,78,66),s;
cout<<"输出结果"<s1.disp();
s2.disp();
s3.disp();
s4.disp();
s=s1+s2+s3+s4;
avg(s,4);
}
运行结果:
输出结果
Li788286
Zheng756289
Ma898795
Xu547866
平均分747784