华南理工大学高级语言程序设计(C++-II)试卷及答案(共9页).doc

上传人:飞****2 文档编号:13495917 上传时间:2022-04-29 格式:DOC 页数:9 大小:52KB
返回 下载 相关 举报
华南理工大学高级语言程序设计(C++-II)试卷及答案(共9页).doc_第1页
第1页 / 共9页
华南理工大学高级语言程序设计(C++-II)试卷及答案(共9页).doc_第2页
第2页 / 共9页
点击查看更多>>
资源描述

《华南理工大学高级语言程序设计(C++-II)试卷及答案(共9页).doc》由会员分享,可在线阅读,更多相关《华南理工大学高级语言程序设计(C++-II)试卷及答案(共9页).doc(9页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精选优质文档-倾情为你奉上华南理工大学计算机学院高级语言程序设计(C+ II)试卷学生证号:_ 姓名: _【注意事项】 1. 严格遵守考场纪律,考试时间120分钟。 2. 试卷共6页。答卷上必须填写参考人所属的学院名称、专业及本人姓名。3. 试题总分100分。所有作答必须按题号对应填写在答卷上,否则无效。4. 考试结束,试卷、答卷和草稿纸必须完整无损地一起递交。一、给出一个有理数类,实现有理数的加法运算。请按后列要求作答。1仔细、完整地阅读程序,对应题号填写注释。注释的内容包括两部分:1.本行的语句是什么;2.简述其功能或特点。例如,注释可以这样写:“友员函数;重载加法运算符(+)。” (每小

2、题1分,共10 分)#include#include#includeclass Rational private:int numerator,denominator; /(例)数据成员;表示一个有理数的分子、分母。int maxcommonFactor(int,int); /(1) void simplify( ); /(2) void DtoF(double,int&,int&); /(3) public: Rational(int n,int d=1); /(4) Rational(double x=0); /(5) Rational(); /(6) void plus(const Rat

3、ional&); /(7) Rational operator + (const Rational&); /(例)公有成员函数;重载加法运算符(+)。 void showFraction( ); /(8) operator double( ); /(9) friend ostream &operator1e-15)d*=10;n=int(x*d);Rational:Rational(int n,int d) if(d=0) cout错误! 分母不能为0。有理数将置为0。endl; numerator=0; denominator=1; else (12) ; ; simplify(); Rat

4、ional:Rational(double x) DtoF(x,numerator,denominator);simplify();Rational:Rational( ) void Rational:plus(const Rational& addend) numerator=addend.numerator*denominator+addend.denominator*numerator; denominator*=addend.denominator; simplify();Rational Rational:operator + (const Rational& t) Rational

5、 temp(0,1); temp.numerator=numerator*t.denominator+denominator*t.numerator; temp.denominator=denominator*t.denominator; temp.simplify(); return temp;void Rational:showFraction( ) if(numerator0 & denominator=0 & denominator0) coutabs(numerator)/abs(denominator); else cout-abs(numerator)/abs(denominat

6、or);Rational:operator double() return (13) ;ostream &operator (ostream &output, Rational &t) outputt.numerator/t.denominator; return output;void main() Rational a; coutdouble(a); coutendl; Rational b(2,0); b.showFraction(); coutendl; Rational c(3,4); c.showFraction(); coutendl; Rational d(1.2); d.sh

7、owFraction(); coutendl; a=b+c; coutdouble(a); coutendl;3. 根据题目要求,按对应题号作答。(每小题3分,共21分)写出上述程序的运行结果。 (14) 在上述程序中,使用成员函数重载加法运算符(+)。现假设要改用友员函数重载加法运算符(+),下面给出了函数体,请写出相应的函数原型(声明)和函数头。函数原型 (15) 函数头 (16) 函数体 Rational temp(0,1); temp.numerator=t1.numerator*t2.denominator+t1.denominator*t2.numerator; temp.deno

8、minator=t1.denominator*t2.denominator; temp.simplify(); return temp; 在上述程序中,构造函数出现重载,我们按其定义的先后分别称为构造函数1和构造函数2。注意到main函数中依次定义了对象a,b,c,d。请你分别写出这四个对象的初始化各自调用的是哪一个构造函数。 对象a初始化: (17.a) ; 对象b初始化: (17.b) ;对象c初始化: (17.c) ; 对象d初始化: (17.d) ;在上述程序中,请你补充一个复制构造函数的定义,要求用内联函数实现。(18) 复制构造函数和重载赋值运算符函数虽然都是实现数据成员的复制,但

9、执行时机不同。复制构造函数通常用于(19.a) 和传递对象参数,当函数返回类类型时,也要通过复制构造函数建立临时对象;重载赋值运算符函数用于(19.b) 。假设在上述程序的基础上,于main函数末尾处添加一行:for(int i=0;i=1;i+)c.plus(c+d); coutdouble(c) , double(d)endl; 写出这段语句的运行结果。 (20) 二、给出一些类的定义,按要求作答。1. (每小题3分,共18分)/类A#includeclass A private: double x;public: A(double px=1):x(px) double getx( ) c

10、onst return x; void show( )coutx=xendl; ;/类B私有继承类A,类B的定义及main函数如下:class B: private A private: double x;public : B(double px=2): x(px) /类B构造函数定义 void show( )coutgetx( )endl; ;void main( ) A a; a.show( ); B b(3); b.show( ); 执行上述程序,运行结果为: (21) 若把类B构造函数定义改为 B(double px=2):A(px) ,则程序运行结果为: (22) 改写上述程序中的类

11、B构造函数定义 B(double px=2): x(px) 。要求不使用“初始化式”,但函数的功能不变,且内联函数的形式也不变。按要求,类B构造函数定义可以改写成:(23) 有时需要复制A类对象的数据去创建B类对象,请用内联函数的形式写出类B的重载构造函数:(24) 假设在上述main函数的末尾添加一句:coutb.getx( )endl; 因getx( )私有,不可访问。请你在类B的定义中作一声明,保持getx( )仍为公有,使添加的语句可以运行。该声明为:(25) 在类B公有段增加一个内联函数fetch的定义,其功能是返回B类对象数据x的平方值。(26) 2 (每小题3分,共18分)下列程

12、序中,类B1,B2虚继承类A,类C多继承B1,B2。按题目要求作答。注意A为虚基类,建立间接派生类对象时,只有一个a对象的数据成员版本。#includeclass A/长度x,y public: double x,y; A(double px=1,double py=1):x(px),y(py) virtual A( ) void show( )coutx,yendl; ;class B1: virtual public A /矩形面积 public : B1(double px=2, double py=2):A(px,py) void show()coutx*yendl; ;class B

13、2: virtual public A /梯形面积 public: double z; B2(double px=3, double py=3, double pz=3):A(px,py),z(pz)void show()cout0.5*(x+y)*zendl; ;class C: public B1, public B2 /体积 public:double h;C(double px=4,double py=4,double pz=4,double ph=4):B2(px,py,pz),h(ph)void show()coutx,y/x*y*h/0.5*(x+y)*z*hshow( ); p

14、=&b1; p-show( ); p=&b2; p-show( ); p=&c; p-show( );写出上述程序的运行结果。 (27) 在类A的show函数之前加上关键字virtual,再写出上述程序的运行结果。 (28) 在(28)题基础上,于原main 函数的末尾添加 (B2)c).show( ); 结果将多显示一行: (29) 把类A的show函数改写成纯虚函数。 (30) 若类A的show函数改写成纯虚函数,原来的main函数不能正常运行,为什么?请简单说明理由。 (31) 类A的show函数改写成纯虚函数后,请你对原来的main函数作简单的删改,使其可以输出派生类的数据。 (32)

15、 三、给出一些关于使用模板的程序段,按要求作答。1下列程序用函数模板实现两个数据的交换,请把有关的语句填充完整。(每小题3分,共9分)#includetemplate void swap(34) ) (35) void main() int j=1,k=3; coutint 数据类型:nj,k; swap(j,k); coutj,kendl; double x=1.23,y=9.87; coutdouble数据类型: nx,y; swap(x,y); coutx,yendl; char p=A,q=B; coutchar 数据类型:np,q; swap(p,q); coutp,qendl ;2

16、下列程序使用了向量vector和算法sort实现数组的排序,请把有关的语句填充完整。(每小题3分,共9分)#include#include#includeusing (36) ;const int size=10;void display(vectorV,int n) int i;for(i=0;isize;i+) cout(37) ; coutendl;bool down(int x,int y) return (38) ;void main( ) int asize=10,3,17,6,15,8,13,34,25,2; vectorV(a,a+size); / 用数组对模板向量赋初值 co

17、ut输出原始数组: n; display(V,size); sort(V.begin( ),V.end( ); / 对向量按升序排序 cout输出升序排列后的数组: n ; display(V,size); sort(V.begin( ),V.end( ),down); / 对向量按降序排序 cout输出降序排列后的数组: n ; display(V,size);四、给出一个输入输出流操作的程序段,请把有关的语句填充完整。(每小题3分,共6分)#include #include #include void main( ) ofstream outstuf ; / 建立输出文件流对象 outst

18、uf.open(e:newfile.dat,(39) ); if(!outstuf)cerrerror!endl;abort( ); / 调用重载算符函数测试流 outstufThis is a file of example.n; / 写入一行内容 outstuf (40) ; 华南理工大学计算机学院高级语言程序设计(C+)试卷参考答案一、1(每小题1分,共10 分) (1) 私有成员函数;求两个整数的最大公因子。 (2) 私有成员函数;分数约简。 (3) 私有成员函数;小数转换为分数。 (4) 构造函数;参数为分子、分母形式。 (5) 重载构造函数;参数为小数形式。 (6) 析构函数;对象

19、的释放清理。 (7) 公有成员函数;实现加法运算。 (8) 公有成员函数;以分数形式输出有理数。 (9) 类型转换函数;把分数形式的对象转换成小数。 (10) 友员函数;重载插入运算符(1,1 A =2,2 A =3,3 A =1,1 (28) A =1,1 B1=4 B2=9 C =1,1/4/16 (29) B2=4(30) virtual void show( )=0; (31) 类A的show函数改写成纯虚函数,具有纯虚函数的类A成为抽象类,而抽象类是不能建立对象的。原来的main函数中,有语句“A a;” 即对类A建立对象a,因此不能正常运行。 (32) A成为抽象类后,原main函数应删除对象a的有关语句,才能正常运行。例如,可改为: B1 b1; B2 b2; C c; A* p=&b1; p-show(); p=&b2; p-show(); p=&c; p-show();三、1(每小题3分,共9分)(33) typename T(34) T& a,T& b(35) T x; x=a; a=b; b=x;2(每小题3分,共9分)(36) namespace std(37) Vi(38) xy四、(每小题3分,共6分)(39) ios:out(40) .close( )专心-专注-专业

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁