版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、华南理工大学计算机学院高级语言程序设计(C+ II)试卷学生证号:_ 姓名: _【注意事项】 1. 严格遵守考场纪律,考试时间120分钟。 2. 试卷共6页。答卷上必须填写参考人所属的学院名称、专业及本人姓名。3. 试题总分100分。所有作答必须按题号对应填写在答卷上,否则无效。4. 考试结束,试卷、答卷和草稿纸必须完整无损地一起递交。一、给出一个有理数类,实现有理数的加法运算。请按后列要求作答。1仔细、完整地阅读程序,对应题号填写注释。注释的内容包括两部分:1.本行的语句是什么;2.简述其功能或特点。例如,注释可以这样写:“友员函数;重载加法运算符(+)。” (每小题1分,共10 分)#in
2、clude<iostream.h>#include<math.h>#include<iomanip.h>class 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
3、); /(5) Rational(); /(6) void plus(const Rational&); /(7) Rational operator + (const Rational&); /(例)公有成员函数;重载加法运算符(+)。 void showFraction( ); /(8) operator double( ); /(9) friend ostream &operator<< /(10) (ostream &output, Rational &t);2 对应题号把函数的定义补充完整。(每小题3分,共9 分)int Ratio
4、nal:maxcommonFactor(int a,int b) if(a%b=0)return b; return (11) ;void Rational:simplify( ) int temp=maxcommonFactor(abs(numerator),abs(denominator); if(temp=1)return; numerator/=temp;denominator/=temp; return;void Rational:DtoF(double x,int & n,int & d) double s=fabs(x); d=1; while(s*d-int(s
5、*d)>1e-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(); Rational:Rational(double x) DtoF(x,numerator,denominator);simplify();Rational:Rational( ) void Rational:plus(const Ratio
6、nal& addend) numerator=addend.numerator*denominator+addend.denominator*numerator; denominator*=addend.denominator; simplify();Rational Rational:operator + (const Rational& t) Rational temp(0,1); temp.numerator=numerator*t.denominator+denominator*t.numerator; temp.denominator=denominator*t.de
7、nominator; temp.simplify(); return temp;void Rational:showFraction( ) if(numerator<0 && denominator<0 | numerator>=0 && denominator>0) cout<<abs(numerator)<<"/"<<abs(denominator); else cout<<"-"<<abs(numerator)<<&quo
8、t;/"<<abs(denominator);Rational:operator double() return (13) ;ostream &operator <<(ostream &output, Rational &t) output<<t.numerator<<'/'<<t.denominator; return output;void main() Rational a; cout<<double(a); cout<<endl; Rational b(
9、2,0); b.showFraction(); cout<<endl; Rational c(3,4); c.showFraction(); cout<<endl; Rational d(1.2); d.showFraction(); cout<<endl; a=b+c; cout<<double(a); cout<<endl;3. 根据题目要求,按对应题号作答。(每小题3分,共21分)·写出上述程序的运行结果。 (14) ·在上述程序中,使用成员函数重载加法运算符(+)。现假设要改用友员函数重载加法运算符(+),
10、下面给出了函数体,请写出相应的函数原型(声明)和函数头。函数原型 (15) 函数头 (16) 函数体 Rational temp(0,1); temp.numerator=t1.numerator*t2.denominator+t1.denominator*t2.numerator; temp.denominator=t1.denominator*t2.denominator; temp.simplify(); return temp; ·在上述程序中,构造函数出现重载,我们按其定义的先后分别称为构造函数1和构造函数2。注意到main函数中依次定义了对象a,b,c,d。请你分别写出这
11、四个对象的初始化各自调用的是哪一个构造函数。 对象a初始化: (17.a) ; 对象b初始化: (17.b) ;对象c初始化: (17.c) ; 对象d初始化: (17.d) ;·在上述程序中,请你补充一个复制构造函数的定义,要求用内联函数实现。(18) 复制构造函数和重载赋值运算符函数虽然都是实现数据成员的复制,但执行时机不同。复制构造函数通常用于(19.a) 和传递对象参数,当函数返回类类型时,也要通过复制构造函数建立临时对象;重载赋值运算符函数用于(19.b) 。·假设在上述程序的基础上,于main函数末尾处添加一行:for(int i=0;i<=1;i+)c.
12、plus(c+d); cout<<double(c)<< ','<< double(d)<<endl; 写出这段语句的运行结果。 (20) 二、给出一些类的定义,按要求作答。1. (每小题3分,共18分)/类A#include<iostream.h>class A private: double x;public: A(double px=1):x(px) double getx( ) const return x; void show( )cout<<"x="<<x<
13、<endl; ;/类B私有继承类A,类B的定义及main函数如下:class B: private A private: double x;public : B(double px=2): x(px) /类B构造函数定义 void show( )cout<<getx( )<<endl; ;void main( ) A a; a.show( ); B b(3); b.show( ); ·执行上述程序,运行结果为: (21) ·若把类B构造函数定义改为 B(double px=2):A(px) ,则程序运行结果为: (22) · 改写上述
14、程序中的类B构造函数定义 B(double px=2): x(px) 。要求不使用“初始化式”,但函数的功能不变,且内联函数的形式也不变。按要求,类B构造函数定义可以改写成:(23) ·有时需要复制A类对象的数据去创建B类对象,请用内联函数的形式写出类B的重载构造函数:(24) ·假设在上述main函数的末尾添加一句:cout<<b.getx( )<<endl; 因getx( )私有,不可访问。请你在类B的定义中作一声明,保持getx( )仍为公有,使添加的语句可以运行。该声明为:(25) ·在类B公有段增加一个内联函数fetch的定义,其
15、功能是返回B类对象数据x的平方值。(26) 2 (每小题3分,共18分)下列程序中,类B1,B2虚继承类A,类C多继承B1,B2。按题目要求作答。注意A为虚基类,建立间接派生类对象时,只有一个a对象的数据成员版本。#include<iostream.h>class A/长度x,y public: double x,y; A(double px=1,double py=1):x(px),y(py) virtual A( ) void show( )cout<<"A =>"<<x<<","<<
16、y<<endl; ;class B1: virtual public A /矩形面积 public : B1(double px=2, double py=2):A(px,py) void show()cout<<"B1=>"<<x*y<<endl; ;class B2: virtual public A /梯形面积 public: double z; B2(double px=3, double py=3, double pz=3):A(px,py),z(pz)void show()cout<<"
17、B2=>"<<0.5*(x+y)*z<<endl; ;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()cout<<"C =>"<<x<<","<<y<<"/"<<x*y*h<<"/&quo
18、t;<<0.5*(x+y)*z*h<<endl; ;void main() A a; B1 b1; B2 b2; C c; A* p=&a; p->show( ); p=&b1; p->show( ); p=&b2; p->show( ); p=&c; p->show( );·写出上述程序的运行结果。 (27) ·在类A的show函数之前加上关键字virtual,再写出上述程序的运行结果。 (28) ·在(28)题基础上,于原main 函数的末尾添加 (B2)c).show( ); 结
19、果将多显示一行: (29) ·把类A的show函数改写成纯虚函数。 (30) ·若类A的show函数改写成纯虚函数,原来的main函数不能正常运行,为什么?请简单说明理由。 (31) ·类A的show函数改写成纯虚函数后,请你对原来的main函数作简单的删改,使其可以输出派生类的数据。 (32) 三、给出一些关于使用模板的程序段,按要求作答。1下列程序用函数模板实现两个数据的交换,请把有关的语句填充完整。(每小题3分,共9分)#include<iostream.h>template <(33) >void swap(34) ) (35) v
20、oid main() int j=1,k=3; cout<<"int 数据类型:n"<<j<<","<<k<<"=>" swap(j,k); cout<<j<<","<<k<<endl; double x=1.23,y=9.87; cout<<"double数据类型: n"<<x<<","<<y<<&qu
21、ot;=>" swap(x,y); cout<<x<<","<<y<<endl; char p='A',q='B' cout<<"char 数据类型:n"<<p<<","<<q<<"=>" swap(p,q); cout<<p<<","<<q<<endl ;2下列程序使用了向量vector
22、和算法sort实现数组的排序,请把有关的语句填充完整。(每小题3分,共9分)#include<iostream>#include<vector>#include<algorithm>using (36) ;const int size=10;void display(vector<int>V,int n) int i;for(i=0;i<size;i+) cout<<(37) <<" " cout<<endl;bool down(int x,int y) return (38) ;vo
23、id main( ) int asize=10,3,17,6,15,8,13,34,25,2; vector<int>V(a,a+size); / 用数组对模板向量赋初值 cout<<"输出原始数组: n" display(V,size); sort(V.begin( ),V.end( ); / 对向量按升序排序 cout<<"输出升序排列后的数组: n" ; display(V,size); sort(V.begin( ),V.end( ),down); / 对向量按降序排序 cout<<"输出
24、降序排列后的数组: n" ; display(V,size);四、给出一个输入输出流操作的程序段,请把有关的语句填充完整。(每小题3分,共6分)#include <iostream.h>#include <fstream.h>#include <stdlib.h>void main( ) ofstream outstuf ; / 建立输出文件流对象 outstuf.open("e:newfile.dat",(39) ); if(!outstuf)cerr<<"error!"<<endl
25、;abort( ); / 调用重载算符函数测试流 outstuf<<"This is a file of example.n" / 写入一行内容 outstuf (40) ; 华南理工大学计算机学院高级语言程序设计(C+)试卷参考答案一、1(每小题1分,共10 分) (1) 私有成员函数;求两个整数的最大公因子。 (2) 私有成员函数;分数约简。 (3) 私有成员函数;小数转换为分数。 (4) 构造函数;参数为分子、分母形式。 (5) 重载构造函数;参数为小数形式。 (6) 析构函数;对象的释放清理。 (7) 公有成员函数;实现加法运算。 (8) 公有成员函数;
26、以分数形式输出有理数。 (9) 类型转换函数;把分数形式的对象转换成小数。 (10) 友员函数;重载插入运算符(<<)。2(每小题3分,共9分)(11) maxcommonFactor(b,a%b) ;(12) numerator=n ; denominator=d ;(13) double(numerator)/double(denominator) ;3.(每小题3分,共21分)(14) 0 错误! 分母不能为0。有理数将置为0。 0/1 3/4 6/50.75(15) friend Rational operator + (const Rational &t1,const Rational &t2);(16) Rational operator + (const Rational &t1, const Rational &t2) (17.a)构造函数2; (17.b)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度货物买卖合同的支付担保
- 2024年建筑工人劳务合同模板
- 《辉山乳业内部控制问题研究》
- 《水稻非选择性阳离子通道离子转运效率的遗传多样性分析》
- 《BH化工厂员工培训体系优化研究》
- 132氧化剂和还原剂(基础过关A练)-2021-2022学年高一化学课时过关提优AB练(原卷版)
- 2024城市智慧交通管理系统集成服务合同
- 《准公共物品私人供给研究》
- 2024年钦州客运从业资格证
- 2024年河南资格证客运题库
- 3C战略三角模型
- 高标准农田建设示范工程质量管理体系与措施
- 学生顶岗实习安全教育课件
- 公司组织架构图模板课件
- 辽宁省葫芦岛市各县区乡镇行政村村庄村名居民村民委员会明细
- 植物种子的传播方式课件
- 电缆敷设施工方案及安全措施
- 百合干(食品安全企业标准)
- 肺血栓栓塞症临床路径(县级医院版)
- 国开成本会计第10章综合练习试题及答案
- T∕CSCS 012-2021 多高层建筑全螺栓连接装配式钢结构技术标准-(高清版)
评论
0/150
提交评论