清华大学C++期末试题与答案.pdf
《清华大学C++期末试题与答案.pdf》由会员分享,可在线阅读,更多相关《清华大学C++期末试题与答案.pdf(5页珍藏版)》请在冰点文库上搜索。
期终试题期终试题2007年C+程序设计期终考试试题一、填空题(20分)1采用内联函数的目的在于提高。
2采用函数重载的目的在于提高。
3用一个已知对象来初始化一个新对象时,系统会调用构造函数来完成。
4静态数据成员与一般数据成员不同,它的初始化应在进行。
5在C+中,不能为类定义对象。
6单个参数的构造函数可以提供转换功能。
7在定义派生类时,默认的继承方式是。
8在继承方式下,派生类对象的地址值可以赋值给基类的对象指针。
9虚基类的构造函数和非虚基类的构造函数在成员初始化列表中同时出现时,的构造函数优先执行。
10构造函数中调用虚函数时,采用联编。
二、选择题(请在正确答案上打上)(20分)1下列各表达式中,哪一个可能会有二义性?
已知:
inta(4),b(5);Aa+b3B+a*b+C(a=3)+a+Db+(a=3)2下列关于结构的定义中,有几处错误?
structdinta;doublea;a,d;A1B2C3D43下列关于goto语句的描述中,哪个是正确的?
Agoto语句可在一个文件中随意转向;Bgoto语句后面要跟上一个它所转向的语句;Cgoto语句可以同时转向多条语句;Dgoto语句可以从循环体内转到循环体外。
4下列哪一个描述是关于引用调用的?
A形参是指针,实参是地址值;B形参是引用,实参是变量。
C形参和实参都是变量;D形参和实参都是数组名;5定义函数模板需使用下列哪一个关键字?
AclassBinlineCtemplateDoperator6下列关于成员函数特征的描述中,哪个是错误的?
A成员函数一定是内联函数;B成员函数可以重载;C成员函数的函数体可以为空;D成员函数可以是静态的。
7已知一个类A,下列哪个是指向成员函数的指针?
假设类A有公有成员voidf()和inta。
AA*p;BintA:
*pc=&A:
a;Cvoid(A:
*pa)();DA*pp;8下列关于new运算符的描述中,哪个是错误的?
A它可以用来动态创建对象和对象数组;B使用它创建的对象或对象数组,可以使用delete删除;C使用它创建对象时要调用构造函数;D使用它创建对象数组时必须指定初始值。
9下列对派生类的描述中,哪个是错误的?
A一个派生类可以作另一个派生类的基类;B派生类中继承的基类成员的访问权限到派生类仍然保持不变。
C派生类至少有一个基类;D派生类的成员除了自己的成员外,还包含它的基类的成员;10下列运算符中,哪一个不能重载?
AC()D?
:
三、试编写求两个数中最小值的函数模板。
(5分)四、输入一字符串,去掉当中的重复字符。
如字符串“ABADB”,去掉重复字符后的字符串应为“ABD”。
(10分)五、求下列分数序列的前15项之和。
(10分),1321,813,58,35,23,12六、下面是一个利用重载运算符实现复数加和乘的类。
在该类中复数加运算的实现代码已完成,但复数乘运算还未完成,试在类体外完成之。
(7分)classcomplexpublic:
complex(doubler=0,doublei=0)real=r;imag=i;complexoperator+(constcomplex&c)returncomplex(real+c.real,imag+c.imag);complexoperator*(constcomplex&c);private:
doublereal,imag;complexcomplex:
operator*(constcomplex&c)complexc1;c1.real=real*c.real-imag*c.imag;c1.imag=real*c.imag+imag*c.real;returnc1;七、找出下列程序中的语法错误,并注明出错类型。
(8分)classAvirtualA();classB:
A;intadd(intx,inty,intz=10)returnx+y+z;intadd(intx,inty)returnx+y;voidmain()intx;constintz=5;int&y=x+1;z=x;x=&z;add(1,2);if(x=1)continue;x=newint5;return1;八、分析下列程序,并回答后面的问题。
(10分)程序内容如下:
#includeclassApublic:
A(inti=0,intj=0)a1=i;a2=j;virtualvoidPrint()couta1+a2endl;protected:
inta1,a2;classB:
publicApublic:
B(inti=0,intj=0):
A(i,j)voidPrint()couta1-a2endl;classC:
publicApublic:
C(inti=0,intj=0):
A(i,j)voidPrint()couta1*a2endl;voidmain()inti=10,j=8;Aa(i,j);Bb(i,j);Cc(i,j);A*m3=&c,&b,&a;for(intn=0;nPrint();A&ra=c;ra.Print();Aaa=c;aa.Print();请回答下列问题:
(1)执行该程序后,输出结果是什么?
802188018Pressanykeytocontinue
(2)该程序中哪些语句采用了动态联编?
(3)去掉virtualvoidPrint()中的关键字virtual后,该程序的输出结果是什么?
九、分析下列程序,并回答后面的问题。
(10分)程序内容如下:
#includeclassApublic:
A(inti)a=i;couta=aendl;A()coutAsdestructoraendl;inta;classB:
virtualpublicApublic:
B(inti,intj):
A(i)coutB:
jendl;classC:
virtualpublicApublic:
C(inti,intj):
A(i)coutC:
i+jendl;classD:
publicB,publicCpublic:
D(intk1,intk2,intk3,intk4):
B(k1,k2),C(k4,k3),A(k1)coutD:
k4endl;voidmain()Dd(1,2,3,4);Aa(5);a=A(6);couta.a=a.aendl;coutd.a=d.aendl;请回答下列问题:
(1)执行该程序后,输出结果是什么?
(2)去掉classB:
virtualpublicA和classC:
virtualpublicA中的关键字virtual后,该程序的哪个语句的执行会出现二义性?
(3)将classD:
publicB,publicC修改成classD:
publicC,publicB后,输出结果是否有变化?
(4)将B(k1,k2),C(k4,k3),A(k1)修改成C(k4,k3),B(k1,k2),A(k1)后,输出结果是否有变化?