收藏 分销(赏)

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

上传人:快乐****生活 文档编号:2314395 上传时间:2024-05-27 格式:DOCX 页数:52 大小:70.30KB 下载积分:14 金币
下载 相关 举报
C++课后习题第八章-第十二章.docx_第1页
第1页 / 共52页
C++课后习题第八章-第十二章.docx_第2页
第2页 / 共52页


点击查看更多>>
资源描述
______________________________________________________________________________________________________________ 第八章 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
展开阅读全文

开通  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 

客服