C++(II)练习题.doc
《C++(II)练习题.doc》由会员分享,可在线阅读,更多相关《C++(II)练习题.doc(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) ; } 精选可编辑- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- II 练习题
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【二***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【二***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【二***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【二***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文