分享
分销 收藏 举报 申诉 / 52
播放页_导航下方通栏广告

类型C++课后习题第八章-第十二章.docx

  • 上传人:快乐****生活
  • 文档编号:2314395
  • 上传时间:2024-05-27
  • 格式:DOCX
  • 页数:52
  • 大小:70.30KB
  • 下载积分:14 金币
  • 播放页_非在线预览资源立即下载上方广告
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    C++ 课后 习题 第八 第十二
    资源描述:
    ______________________________________________________________________________________________________________ 第八章 1. 请检查下面的程序,找出其中的错误(先不要上机,在纸面上作人工检查),并改正。然后上机调试,使之能正常运行。运行时从键盘输入时、分、秒的值,检查输出是否正确。 原文: #include <iostream> using namespace std; class Time { void set_time(void) ; void show_time(void); int hour; int minute; int sec; }; Time t; int main() { set_time(); show_time(); return 0; } void set_time(void) { cin>>t.hour; cin>>t.minute; cin>>t.sec; } void show_time(void) { cout<<t.hour<<":"<<t.minute<<":"<<t.sec<<endl; } 改: #include <iostream> using namespace std; class Time { public: //成员改为公用的 int hour; int minute; int sec; }; Time t; void set_time(void) {//在 main 函数之前定义 cin>>t.hour; cin>>t.minute; cin>>t.sec; } void show_time(void) { //在 main 函数之前定义 cout<<t.hour<<":"<<t.minute<<":"<<t.sec<<endl; } int main() { set_time(); show_time(); return 0; } 2. 改写例8.1程序,要求: (1) 将数据成员改为私有的; (2) 将输入和输出的功能改为由成员函数实现; (3) 在类体内定义成员函数; #include <iostream> using namespace std; class Time { public: void set_time(void) { cin>>hour; cin>>minute; cin>>sec; } void show_time(void) { cout<<hour<<":"<<minute<<":"<<sec<<endl; } private: int hour; int minute; int sec; }; Time t; int main() { t.set_time(); t.show_time(); return 0; } 3. 在第2题的基础上进行如下修改:在类体内声明成员函数,而在类外定义成员函数。 #include <iostream> using namespace std; class Time { public: void set_time(void); void show_time(void); private: int hour; int minute; int sec; }; void Time::set_time(void) { cin>>hour; cin>>minute; cin>>sec; } void Time::show_time(void) { cout<<hour<<":"<<minute<<":"<<sec<<endl; } Time t; int main() { t.set_time(); t.show_time(); return 0; } 4. 在第8.3.3节中分别给出了包含类定义的头文件student.h,包含成员函数定义的源文件studnet.cpp以及包含主函数的源文件main.cpp。请对该程序完善化,在类中增加一个对数据成员赋初值的成员函数set_value。 原文8.3.3: #include <iostream> using namespace std; class Student { public: void display() { cout<<"num:"<<num<<endl; cout<<"name:"<<name<<endl; cout<<"sex:"<<sex<<endl; }; private: int num; char name[20]; char sex ; }; int main() { Student stud; stud.display(); return 0; } 改: main.cpp #include<iostream> #include "student.h" using namespace std; int main() { Student s ; s.SetValue(); s.Display(); return 0; } Student.h using namespace std; class Student { public: void Display(); void SetValue(); private: int num; char name[20]; char sex; }; Student.cpp #include<iostream> #include"student.h" using namespace std; void Student :: Display() { cout << "num:" << num << endl; cout << "name:" << name << endl; cout << "sex:" << sex << endl; } void Student :: SetValue() { cin >> num >> name >> sex; } 5. 将例8.4改写为一个多文件的程序: (1) 将类定义放在头文件arraymax.h中; (2) 将成员函数定义放在源文件arrymax.cpp中; (3) 主函数放在源文件file1.cpp中。 原文例8.4: #include <iostream> using namespace std; class Array_max { public: void set_value(); void max_value(); void show_value(); private: int array[10]; int max; }; void Array_max::set_value() { int i; for (i=0; i<10; i++) cin>>array[i]; } void Array_max::max_value() { int i; max=array[0]; for (i=1; i<10; i++) if(array[i]>max) max=array[i]; } void Array_max::show_value() { cout<<"max="<<max<<endl; } int main() { Array_max arrmax; arrmax.set_value(); arrmax.max_value(); arrmax.show_value(); return 0; } 改: main.cpp #include<iostream> #include"arraymax.h" using namespace std; int main() { ArrayMax arrmax; arrmax.SetValue(); arrmax.MaxValue(); arrmax.ShowMax(); return 0; } arraymax.h class ArrayMax { public: void SetValue(); //设置数组元素值 void MaxValue(); //找出最大值 void ShowMax(); //输出最大值 private: int array[10]; //整型数组 int max; //数组最大值 }; arraymax.cpp #include<iostream> #include"arraymax.h" using namespace std; void ArrayMax :: SetValue() { int i; for(i = 0; i < 10; i++) { cin >> array[i]; } } void ArrayMax :: MaxValue() { int i; max = array[0]; for(i = 1; i < 10; i++) { if(max < array[i]) { max = array[i]; } } } void ArrayMax :: ShowMax() { cout << "max=" << max << endl; } 6. 需要求3个长方柱的体积,请编写一个基于对象的程序。数据成员包括length(长)、width(宽)和weight(高)。要求用成员函数实现以下功能。 (1) 由键盘分别输入3个长方柱的长、宽和高。 (2) 计算长方柱的体积; (3) 输出3个长方柱的体积。 #include <iostream> using namespace std; class Box { public: void get_value(); float volume(); void display(); public: float lengh; float width; float height; }; void Box::get_value() { cout<<"please input lengh, width,height:"; cin>>lengh;//由键盘分别输入3个长方柱的长、宽和高。 cin>>width; cin>>height; } float Box::volume() { return(lengh*width*height);//计算长方体体积。 } void Box::display() { cout<<volume()<<endl; } int main() { Box box1,box2,box3;//输出3个长方体的体积。 box1.get_value(); cout<<"volmue of bax1 is "; box1.display(); box2.get_value(); cout<<"volmue of bax2 is "; box2.display(); box3.get_value(); cout<<"volmue of bax3 is "; box3.display(); return 0; } 第九章 2. 分析下面的程序,写出其运行时的输出结果。 #include <iostream> using namespace std; class Date { public: Date(int,int,int); Date(int,int); Date(int); Date(); void display(); private: int month; int day; int year; }; Date::Date(int m,int d,int y):month(m),day(d),year(y) { } Date::Date(int m,int d):month(m),day(d) { year=2005; } Date::Date(int m):month(m) { day=1; year=2005; } Date::Date() { month=1; day=1; year=2005; } void Date::display() { cout<<month<<"/"<<day<<"/"<<year<<endl; } int main() { Date d1(10,13,2005); Date d2(12,30); Date d3(10); Date d4; d1.display(); d2.display(); d3.display(); d4.display(); return 0; } 3. 如果将第2题程序的第5行改为用默认参数,即Date(int=1;int=1;int=2005);分析程序有无问题。上机编译,分析出错信息,修改程序使之能通过编译。要求保留上面一行给出的构造函数,同时能输出与第2题程序相同的输出结果。 改: #include <iostream> using namespace std; class Date { public: Date(int=1,int=1,int=2005); void display(); private: int month; int day; int year; }; Date::Date(int m,int d,int y):month(m),day(d),year(y) { } void Date::display() { cout<<month<<"/"<<day<<"/"<<year<<endl; } int main() { Date d1(10,13,2005); Date d2(12,30); Date d3(10); Date d4; d1.display(); d2.display(); d3.display(); d4.display(); return 0; } 4. 建立一个对象数组,内放5个学生的数据(学号、成绩),用指针指向数组首元素,输出第1,3,5学生的数据。 #include <iostream> using namespace std; class Student { public: Student(int n,float s):num(n),score(s) {} void display(); private: int num; float score; }; void Student::display() { cout<<"num="<<num<<" "<<"score="<<score<<endl; } int main() { Student stud[5]= { Student(101,78.5),Student(102,85.5),Student(103,98.5), Student(104,100.0),Student(105,95.5) }; Student *p=stud; for(int i=0; i<=2; p=p+2,i++) p->display(); return 0; } 5. 建立一个对象数组,内放5个学生的数据(学号、成绩),设立一个函数max,用指向对象的指针做函数参数,在max函数中找出5个学生中成绩最高者,并输出其学号。 #include <iostream> using namespace std; class Student { public: Student(int n,float s):num(n),score(s) {} int num; float score; }; int main() { Student stud[5]= { Student(101,78.5),Student(102,85.5),Student(103,98.5), Student(104,100.0),Student(105,95.5) }; void max(Student* ); Student *p=&stud[0]; max(p); return 0; } void max(Student *arr) { float max_score=arr[0].score; int k=0; for(int i=1; i<5; i++) if(arr[i].score>max_score) { max_score=arr[i].score; k=i; } cout<<"num="<<arr[k].num<<" "<<"max_score="<<max_score<<endl; } 6. 阅读下面程序,分析其执行过程,写出输出结果 #include <iostream> using namespace std; class Student { public: Student(int n,float s):num(n),score(s) {} void change(int n,float s) { num=n; score=s; } void display() { cout<<num<<" "<<score<<endl; } private: int num; float score; }; int main() { Student stud(101,78.5); stud.display(); stud.change(101,80.5); stud.display(); return 0; } 7. 将第6题程序分别作一下修改,分析所修改部分的含义以及编译和运行的情况。 (1) 将main函数第2行改为const Student stud(01,78.5); (2) 在(1)的基础上修改程序,使之能正常运行,用change函数修改数据成员mun和score的值。 (3) 将main函数改为 int main(){ Student stud(101,78.5); Student *p=&stud; P- >display(); P->change(101,80.5); P-display(); return 0; } 其他部分仍同第6题程序。 (4) 在(2)的基础上将main函数第3行改为 const Student *p=&stud; (5) 再把main函数第3行改为 Student *const p=&stud; (1) [Error] passing 'const Student' as 'this' argument of 'void Student::display()' discards qualifiers [-fpermissive] [Error] passing 'const Student' as 'this' argument of 'void Student::change(int, float)' discards qualifiers [-fpermissive] [Error] passing 'const Student' as 'this' argument of 'void Student::display()' discards qualifiers [-fpermissive] (2) #include <iostream> using namespace std; class Student { public: Student(int n,float s):num(n),score(s) {} void change(int n,float s) const { num=n; score=s; } void display() const { cout<<num<<" "<<score<<endl; } private: mutable int num; mutable float score; }; int main() { const Student stud(101,78.5); stud.display(); stud.change(101,80.5); stud.display(); return 0; } (3) #include <iostream> using namespace std; class Student { public: Student(int n,float s):num(n),score(s) {} void change(int n,float s) { num=n; score=s; } void display() { cout<<num<<" "<<score<<endl; } private: int num; float score; }; int main() { Student stud(101,78.5); Student *p=&stud; p->display(); p->change(101,80.5); p->display(); return 0; } (4) #include <iostream> using namespace std; class Student { public: Student(int n,float s):num(n),score(s) {} void change(int n,float s) { num=n; score=s; } void display() const { cout<<num<<" "<<score<<endl; } private: int num; float score; }; int main() { Student stud(101,78.5); const Student *p=&stud; p->display(); stud.change(101,80.5); p->display(); return 0; } (5) #include <iostream> using namespace std; class Student { public: Student(int n,float s):num(n),score(s) {} void change(int n,float s) { num=n; score=s; } void display() { cout<<num<<" "<<score<<endl; } private: int num; float score; }; int main() { Student stud(101,78.5); Student * const p=&stud; p->display(); p->change(101,80.5); p->display(); return 0; } 8. 修改第6题程序,增加一个fun函数,改写main函数。改为在fun函数中调用change和display函数。在fun函数中使用对象引用(Student&)作为形参。 #include <iostream> using namespace std; class Student { public: Student(int n,float s):num(n),score(s) {} void change(int n,float s) { num=n; score=s; } void display() { cout<<num<<" "<<score<<endl; } private: int num; float score; }; void fun(Student &stu) { stu.display(); stu.change(101,80.5); stu.display(); } int main() { Student stud(101,78.5); void fun(Student&); fun(stud); return 0; } 9. 商店销售某一商品,每天公布统一的折扣(discount)。同时允许销售人员在销售时灵活掌握售价(price),在此基础上,一次购10件以上者,还可以享受9.8折优惠。现已知当天3个销货员销售情况为 销货员号(num) 销货件数(quantity) 销货单价(price) 101 5 23.5 102 12 24.56 103 100 21.5 请编写程序,计算出当日此商品的总销售款sum以及每件商品的平均售价。要求用静态数据成员和静态成员函数。(提示:将折扣discount,总销售款sum和商品销售总件数n声明为静态数据成员,再定义静态成员函数average(求平均售价)和display(输出结果))。 #include <iostream> using namespace std; class Product { public: Product(int n,int q,float p):num(n),quantity(q),price(p) {} void total(); static float average(); static void display(); private: int num; int quantity; float price; static float discount; static float sum; static int n; }; void Product::total() { float rate=1.0; if(quantity>10) rate=0.98*rate; sum=sum+quantity*price*rate*(1-discount); n=n+quantity; } void Product::display() { cout<<sum<<endl; cout<<average()<<endl; } float Product::average() { return(sum/n); } float Product::discount=0.05; float Product::sum=0; int Product::n=0; int main() { Product Prod[3]= { Product(101,5,23.5),Product(102,12,24.56),Product(103, 100,21.5) }; for(int i=0; i<3; i++) Prod[i].total(); Product::display(); return 0; } 10. 将例9.13程序中的display函数不放在Time类中,而作为类外的普通函数,然后分别在Time和Date类中将display声明为友元函数。在主函数中调用display函数,display函数分别引用Time和Date两个类的对象的私有数据,输出年、月、日和时、分、秒。 #include <iostream> using namespace std; class Date; class Time { public: Time(int,int,int); friend void display(const Date &,const Time &); private: int hour; int minute; int sec; }; Time::Time(int h,int m,int s) { hour=h; minute=m; sec=s; } class Date { public: Date(int,int,int); friend void display(const Date &,const Time &); private: int month; int day; int year; }; Date::Date(int m,int d,int y) { month=m; day=d; year=y; } void display(const Date &d,const Time &t) { cout<<d.month<<"/"<<d.day<<"/"<<d.year<<endl; cout<<t.hour<<":"<<t.minute<<":"<<t.sec<<endl; } int main() { Time t1(10,13,56); Date d1(12,25,2004); display(d1,t1); return 0; } 11. 将例9.13中的Time类声明为Date类的友元类,通过Time类中的display函数引用Date类对象的私有数据,输出年、月、日和时、分、秒。 #include <iostream> using namespace std; class Time; class Date { public: Date(int,int,int); friend Time; private: int month; int day; int year; }; Date::Date(int m,int d,int y):month(m),day(d),year(y) { } class Time { public: Time(int,int,int); void display(const Date &); private: int hour; int minute; int sec; }; Time::Time(int h,int m,int s):hour(h),minute(m),sec(s) { } void Time::display(const Date &d) { cout<<d.month<<"/"<<d.day<<"/"<<d.year<<endl; cout<<hour<<":"<<minute<<":"<<sec<<endl; } int main() { Time t1(10,13,56); Date d1(12,25,2004); t1.display(d1); return 0; } 12. 将例9.14改写为在类模板外定义各成员函数。 #include <iostream> using namespace std; template<class numtype> class Compare { public: Compare(numtype a,numtype b); numtype max(); numtype min(); private: numtype x,y; }; template <class numtype> Compare<numtype>::Compare(numtype a,numtype b) { x=a; y=b; } template <class numtype> numtype Compare<numtype>::max() { return (x>y)?x:y; } template <class numtype> numtype Compare<numtype>::min() { return (x<y)?x:y; } int main() { Compare<int> cmp1(3,7); cout<<cmp1.max()<<" is the Maximum of two integer numbers."<<endl; cout<<cmp1.min()<<" is the Minimum of two integer numbers."<<endl<<endl; Compare<float> cmp2(45.78,93.6); cout<<cmp2.max()<<" is the Maximum of two float numbers."<<endl; cout<<cmp2.min()<<" is the Minimum of two float numbers."<<endl<<endl; Compare<char> cmp3('a','A'); cout<<cmp3.max()<<" is the Maximum of two characters."<<endl; cout<<cmp3.min()<<" is the Minimum of two characters."<<endl; return 0; } 第十章 1. 定义一个复数类Complex,重载运算符“+”,使之能用于复数的加法运算。将运算符函数重载为非成员、非友元的普通函数。编写程序,求两个复数之和。 #include <iostream> using namespace std; c
    展开阅读全文
    提示  咨信网温馨提示:
    1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
    2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
    3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
    4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
    5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
    6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

    开通VIP折扣优惠下载文档

    自信AI创作助手
    关于本文
    本文标题:C++课后习题第八章-第十二章.docx
    链接地址:https://www.zixin.com.cn/doc/2314395.html
    页脚通栏广告

    Copyright ©2010-2026   All Rights Reserved  宁波自信网络信息技术有限公司 版权所有   |  客服电话:0574-28810668    微信客服:咨信网客服    投诉电话:18658249818   

    违法和不良信息举报邮箱:help@zixin.com.cn    文档合作和网站合作邮箱:fuwu@zixin.com.cn    意见反馈和侵权处理邮箱:1219186828@qq.com   | 证照中心

    12321jubao.png12321网络举报中心 电话:010-12321  jubao.png中国互联网举报中心 电话:12377   gongan.png浙公网安备33021202000488号  icp.png浙ICP备2021020529号-1 浙B2-20240490   


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

    自信网络  |  ZixinNetwork