高级语言程序设计(C++II)练习题
更新时间:2023-05-14 13:29:01 阅读量: 实用文档 文档下载
C++辅导资料
《C++Ⅱ》试卷 (№ A03Ⅱa)
计算机学院《C++Ⅱ》试卷
========================
【注意事项】 1. 严格遵守考场纪律,考试时间120分钟。
2. 试卷共6页。答卷上必须填写参考人所属的学院名称、专业及本人姓名。
3. 试题总分100分。所有作答必须按题号对应填写在答卷上,否则无效。
4. 考试结束,试卷、答卷和草稿纸必须完整无损地一起递交。
一、给出一个有理数类,实现有理数的加法运算。请按后列要求作答。
1.仔细、完整地阅读程序,对应题号填写注释。注释的内容包括两部分:1.本行的语句是
什么;2.简述其功能或特点。例如,注释可以这样写:“友员函数;重载加法运算符(+)。” (每小题1分,共10 分)
#include<iostream.h>
#include<math.h>
#include<iomanip.h>
class Rational
{ private:
int numerator,denominator; //(例)数据成员;表示一个有理数的分子、分母。 int maxcommonFactor(int,int);
void simplify( );
void DtoF(double,int&,int&);
public:
Rational(int n,int d=1);
Rational(double x=0);
~Rational();
void plus(const Rational&); Rational operator + (const Rational&); //(例)公有成员函数;重载加法运算符(+)。 void showFraction( );
operator double( );
friend ostream &operator<<
(ostream &output, Rational &t);
};
2. 对应题号把函数的定义补充完整。(每小题3分,共9 分)
int Rational::maxcommonFactor(int a,int b)
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)
第 1 页 共 6 页
C++辅导资料
《C++Ⅱ》试卷 (№ A03Ⅱa)
{double s=fabs(x); d=1; while((s*d-int(s*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;}
;}
simplify(); }
Rational::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 temp(0,1);
temp.numerator=numerator*t.denominator+denominator*t.numerator;
temp.denominator=denominator*t.denominator;
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)<<"/"<<abs(denominator);}
Rational::operator double()
{return ostream &operator <<(ostream &output, Rational &t)
{output<<t.numerator<<'/'<<t.denominator; return output;}
void main()
{ Rational a; cout<<double(a); cout<<endl;
Rational b(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
分)
·写出上述程序的运行结果。
·在上述程序中,使用成员函数重载加法运算符(+)。现假设要改用友员函数重载加法运算符(+),下面给出了函数体,请写出相应的函数原型(
声明)和函数头。
函数原型 第 2 页 共 6 页
C++辅导资料
《C++Ⅱ》试卷 (№ A03Ⅱa)
函数体 {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。请你分别写出这四个对象的初始化各自调用的是哪一个构造函数。
对象a初始化
对象b初始化
对象
c初始化 对象d初始化
·在上述程序中,请你补充一个复制构造函数的定义,要求用内联函数实现。
复制构造函数和重载赋值运算符函数虽然都是实现数据成员的复制,但执行时机不同。当函数返回类类型时,
也要通过复
·假设在上述程序的基础上,于main函数末尾处添加一行:
for(int i=0;i<=1;i++)c.plus(c+d); cout<<double(c)<< ','<< double(d)<<endl;
写出这段语句的运行结果。
二、给出一些类的定义,按要求作答。
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<<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( ); }
第 3 页 共 6 页
C++辅导资料
《C++Ⅱ》试卷 (№ A03Ⅱa)
·执行上述程序,运行结果为:
·若把类B构造函数定义改为 B(double px=2):A(px){ } ,则程序运行结果为:
· 改写上述程序中的类B构造函数定义 B(double px=2): x(px){ }。要求不使用“初始化式”,但函数的功能不变,且内联函数的形式也不变。按要求,类B构造函数定义可以改写成:
·有时需要复制A类对象的数据去创建B类对象,请用内联函数的形式写出类B的重载构造函数:
·假设在上述main函数的末尾添加一句:cout<<b.getx( )<<endl; 因getx( )私有,不可访问。请你在类B的定义中作一声明,保持getx( )仍为公有,使添加的语句可以运行。该声明为:
·在类B公有段增加一个内联函数fetch的定义,其功能是返回B类对象数据x的平方值。
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<<","<<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<<"[B2]=>"<<0.5*(x+y)*z<<endl;}
} ;
第 4 页 共 6 页
C++辅导资料
《C++Ⅱ》试卷 (№ A03Ⅱa)
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<<"/"<<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( );
}
·写出上述程序的运行结果。
·在类A的show函数之前加上关键字virtual,再写出上述程序的运行结果。
·在(28)题基础上,于原main 函数的末尾添加 ((B2)c).show( ); 结果将多显示一行:
·把类A的show函数改写成纯虚函数。
·若类A的show函数改写成纯虚函数,原来的main函数不能正常运行,为什么?请简单说明理由。
·类A的show函数改写成纯虚函数后,请你对原来的main函数作简单的删改,使其可以输出派生类的数据。
三、给出一些关于使用模板的程序段,按要求作答。
1.下列程序用函数模板实现两个数据的交换,请把有关的语句填充完整。
(每小题3分,共9分)
#include<iostream.h>
void 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<<"=>"; swap(x,y); cout<<x<<","<<y<<endl;
第 5 页 共 6 页
C++辅导资料
《C++Ⅱ》试卷 (№ A03Ⅱa)
char p='A',q='B';
cout<<"char 数据类型:\n"<<p<<","<<q<<"=>"; swap(p,q); cout<<p<<","<<q<<endl ; }
2.下列程序使用了向量vector和算法sort实现数组的排序,请把有关的语句填充完整。 (每小题3分,共9分)
#include<iostream>
#include<vector>
#include<algorithm>
const int size=10;
void display(vector<int>V,int n)
bool down(int x,int y)
void main( )
{ int a[size]={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<<"输出降序排列后的数组: \n" ;
display(V,size);
}
四、给出一个输入输出流操作的程序段,请把有关的语句填充完整。 (每小题3分,共6分)
#include <iostream.h>
#include <fstream.h>
#include <stdlib.h>
void main( )
{ ofstream outstuf ; // 建立输出文件流对象
if(!outstuf){cerr<<"error!"<<endl;abort( );} // 调用重载算符函数测试流
outstuf<<"This is a file of example.\n"; // 写入一行内容
;
}
第 6 页 共 6 页
正在阅读:
高级语言程序设计(C++II)练习题05-14
U-Mail邮件服务器故障的应急预案08-15
铵盐硝酸导学案03-10
柔性防护网合同 - 图文12-25
元旦趣事作文450字06-17
主题一:《我长大了》计划、小结 - 图文11-28
《火烧云》教学设计及教学反思(优秀2篇)03-23
2015年2月份三基试卷无答案文件03-27
第七章 德育目的12-21
毕业设计05-22
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 练习题
- 程序设计
- 高级
- 语言
- II
- 2011年党校党章考试试题及答案
- BEC higher 术语翻译 课堂及课本 期末考试范围总结
- CAD_CAE技术在机械设计中的应用
- 绳索网带项目可行性研究报告(技术工艺+设备选型+财务方案+厂区规划)方案设计
- 2013版《建设工程施工合同(示范文本)》中新的合同价格形式
- 51单片机原理及应用-基于keil C与Proteus课后习题答案
- 期末考试英语试题6
- 胸部创伤试题及答案
- OLED显示技术发展最新动态
- 让音乐走进学生的心灵—新课改下小学音乐有效教学策略浅谈
- 2011年全国一级注册结构工程师专业考试所使用的规范
- 吉林省长春市第二中学2013-2014学年高二生物上学期期中试题
- 趣味语文题及答案
- EPON接入技术与应用分析
- 第7章 孔加工刀具
- 一年级奥数一笔画
- The Digital Game-Based Learning
- CMMI-工程-RD-需求调查表-V1.0
- 高端酒店式公寓访谈问卷
- 发酵酸奶在生产工艺中的优化探析