收藏 分销(赏)

C++(II)练习题.doc

上传人:二*** 文档编号:4426861 上传时间:2024-09-20 格式:DOC 页数:6 大小:47KB 下载积分:5 金币
下载 相关 举报
C++(II)练习题.doc_第1页
第1页 / 共6页
本文档共6页,全文阅读请下载到手机保存,查看更方便
资源描述
一、给出一个有理数类,实现 有理数的加法运算。请按后列恳求 作答。 1.仔细 、残缺地阅读 次序 ,对应题号填写注释。注释的内容包括 两部分:1.本行的语句是什么;2.简述其功能 或特征 。比如 ,注释可以 如斯 写:“友员函数;重载加法运算符(+)。〞 〔每题1分,共10 分〕 #include<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); //(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 Rational::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*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 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 (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(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) ·在上述次序 中,应用 成员函数重载加法运算符(+)。现假设 要改用友员函数重载加法运算符(+),下面给出了函数体,请写出呼应 的函数原型(声明 )跟 函数头。 函数原型 (15) 函数头 (16) 函数体 {Rational temp(0,1); temp.simplify(); return temp; } ·在上述次序 中,构造函数出现重载,我们 按其定义 的先后分不称为构造函数1跟 构造函数2。留心 到main函数中依次定义 了东西 a,b,c,d。请你分不写出这四个东西 的初始化各自调用 的是哪一个构造函数。 东西 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.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<<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) · 改写上述次序 中的类B构造函数定义 B(double px=2): x(px){ }。恳求 不应用 “初始化式〞,但函数的功能 波动 ,且内联函数的方法 也波动 。按恳求 ,类B构造函数定义 可以 改写成: (23) ·偶尔 需要 复制A类东西 的数据去创破 B类东西 ,请用内联函数的方法 写出类B的重载构造函数: (24) ·假设 在上述main函数的末了 添加 一句:cout<<b.getx( )<<endl; 因getx( )公有,弗成 访征询 。请你在类B的定义 中作一声明 ,保持 getx( )仍为公有,使添加 的语句可以 运行 。该声明 为: (25) ·在类B公有段添加 一个内联函数fetch的定义 ,其功能 是前去 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<<","<<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;} } ; 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( ); } ·写出上述次序 的运行 结果。 (27) ·在类A的show函数之前加上关键 字virtual,再写出上述次序 的运行 结果。 (28) ·在(28)题基础上,于原main 函数的末了 添加 ((B2)c).show( ); 结果将多表示 一行: (29) ·把类A的show函数改写成纯虚函数。 (30) ·假设 类A的show函数改写成纯虚函数,原本 的main函数不克不迭 畸形 运行 ,什么缘故 ?请庞杂 说明因由 。 (31) ·类A的show函数改写成纯虚函数后,请你对原本 的main函数作庞杂 的删改 ,使其可以 输出派生类的数据。 (32) 三、给出一些关于 应用 模板的次序 段,按恳求 作答。 1.以下次序 用函数模板实现 两个数据的交换 ,请把有关的语句填充 残缺。 〔每题3分,共9分〕 #include<iostream.h> template <(33) > void swap((34) ) {(35) } 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; 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> 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) ;} 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 ; // 树破 输出文件流东西 outstuf.open("e:\\newfile.dat",(39) ); if(!outstuf){cerr<<"error!"<<endl;abort( );} // 调用 重载算符函数测试流 outstuf<<"This is a file of example.\n"; // 写入一行内容 outstuf (40) ; } 精选可编辑
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 通信科技 > 开发语言

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服