C++相关习题.doc_第1页
C++相关习题.doc_第2页
C++相关习题.doc_第3页
C++相关习题.doc_第4页
C++相关习题.doc_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

小强出品 5.编写程序自定义一个简单的时间类TimeType,它具有数据成员h、m、s,用来表示当前时间的时、分、秒。而后设计该类欲实现的功能,进而设计出相应的类成员函数,实现对时分秒的增加、判断两个时间是否相等以及对时间的输出等操作。试完成其各个成员函数,并编写主函数,说明TimeType类对象,对定义的各成员函数进行调用,以验证它们的正确性。实现方法及要求:(1)通过自定义类TimeType,对“时间数据”进行各种所指定的处理。一个“时间数据”可通过“时、分、秒”来唯一确定,从而为该类设立私有数据成员h、m、s来表示这一数据。由于要对“时间”进行多种不同的处理,进而设立不同的类成员函数来实现其各自的设定功能。(2)对时间进行增加的成员函数可分别为incrementSec()、incrementMin()、incrementHou(),在定义这三个成员函数时要注意所谓“进位”处理:秒数超过60要“进位”到分,超过60分要“进位”到时,而超过24时后要“甩掉”24以上的部分等。例如,秒数超过60则“进位”到分,可通过如下语句来实现:if(s=60)m+=s/60;s=s%60;判断超过24时而后“甩掉”24以上的部分,则可使用语句:if(h=24) h=h%24;(3)编写类似于如下样式的主函数,说明TimeType类对象,并通过类对象对TimeType类的各个成员函数进行调用,以验证每个成员函数的正确性。void main() TimeType t1(11,48,59),t2(11,59,48),t3;cout“t1=”; t1.printTime(); / printTime()实现时间的输出功能cout“t2=”; t2.printTime();cout“t3=”; t3.printTime();if(t1.equal(t2) cout“t1=t2”endl;else cout“t1!=t2”endl;t1.incrementMin(30);cout”;cout“t1=”; t1.printTime();# include using namespace std;class TimeType private: int h,m,s; public: TimeType(int h0=0,int m0=0,int s0=0); void incSec(int sec); void incMin(int min); void incHour(int hrs); bool equal(TimeType t2); void printTime();TimeType:TimeType(int h0,int m0,int s0) h=h0; m=m0; s=s0;void TimeType:incSec(int sec) s=s+sec; m=m+s/60; s=s%60; h=h+m/60; m=m%60;void TimeType:incMin(int min) m=m+min; h=h+m/60; m=m%60;void TimeType:incHour(int hrs) h=h+hrs;bool TimeType:equal(TimeType t2) int time1=(h*60+m)*60+s; int time2=(t2.h*60+t2.m)*60+t2.s; return time1=time2? true:false;void TimeType:printTime() cout现在是:h时; coutm分; couts秒endl;int main() TimeType t1(11,48,59),t2(11,59,48),t3; coutt1=; t1.printTime(); coutt2=; t2.printTime(); coutt3=; t3.printTime(); if(t1.equal(t2) coutt1等于t2endl; else coutt1不等于t2endl; t1.incMin(30); coutt1=; t1.printTime();8.编写程序设计一个学生类(CStudent),它具有的私有数据成员是:注册号、姓名、数学、外语、计算机课程的成绩。具有的公有成员函数是:求三门课程总成绩的函数sum(),求三门课平均成绩的函数average(),显示学生数据信息的函数display(),设置学生数据信息的函数setData()。然后通过主函数,从键盘对学生对象的数组(全班学生信息)进行输入,而后求出每个学生的总成绩、平均成绩,并显示全班学生总成绩最高的那个同学的全部数据信息。实现方法:(1)可按如下样式设计自定义类CStudent的各数据成员以及成员函数。 class CStudent /学生类CStudent unsigned long reg_num; /数据成员:注册号 char name30; /数据成员:姓名 float math,eng,comp; /数据成员:数学、英语、计算机成绩 public: float sum(); /求三门课程总成绩的函数 float average(); /求三门课程平均成绩的函数 void display(); /显示学生数据信息的函数void setData(); /设置学生数据信息的函数;(2)在类体外编写出各公有成员函数的具体实现。而后编写主函数,通过使用“CStudentstu50;”语句来说明一个CStudent类对象的数组stu,而后通过各对象stui来处理并求取每个学生的总成绩、平均成绩等。(3)在主函数中输入要处理的学生人数TOTAL(小于等于50的正整数),输入全班TOTAL个学生的有关信息,依次放入对象数组的各元素stui中,可通过使用“stui.setData();”形式的语句来实现。(4)对全班TOTAL个学生,依次通过对象stui来求出其总成绩、平均成绩等,其中要使用形如“stui.sum()”以及“stui.average()”式样的对成员函数进行调用的语句,并同时求出全班学生总成绩最高的同学处于stu数组的下标位置idx_max,而后通过使用“stuidx_max.display();”来输出该学生有关的全部数据信息。#include#include#define MAX_LENGTH 31using namespace std;class CStudentpublic: CStudent(int id,char *name,float math,float english,float computer); float sum() const; float average()const; void display()const;private: int CSId; char CSNameMAX_LENGTH; float CSMath; float CSEnglish; float CSComputer; float CSSum; float CSAverage;public: CStudent *next; ;CStudent:CStudent(int id,char *name,float math,float english,float computer) this-CSId = id; strcpy(CSName,name); this-CSMath = math; this-CSEnglish = english; this-CSComputer = computer; this-next = NULL; this-CSSum = this-CSMath + this-CSEnglish + this-CSComputer; this-CSAverage = this-CSSum/3;float CStudent:sum() const return this-CSSum;float CStudent:average() const return this-CSAverage;void CStudent:display() const cout注册号: CSIdendl; cout姓名: CSNameendl; cout数学: CSMathendl; cout英语: CSEnglishendl; cout计算机: CSComputerendl; cout总分: sum()endl; cout平均分: average()endl; cout-endl; void setData(CStudent* &head,int &CSCount)CStudent *p = NULL;int id = 0;char nameMAX_LENGTH;float math;float english;float computer;while(true) cout输入学生的信息(注册号,姓名,数学,英语,计算机),如果注册号结束请输入等于- 1!id; if(id = -1) break; cinname; cinmath; cinenglish; cincomputer; if(CSCount = 0) head = new CStudent(id,name,math,english,computer); p = head; CSCount+; else p-next = new CStudent(id,name,math,english,computer); p = p-next; CSCount+; float getMaxSum(CStudent *head) CStudent *p = head; float MaxSum = -1; while(p != NULL) if(p-sum() MaxSum) MaxSum = p-sum(); p = p-next; return MaxSum;void displayMaxSumStudents(CStudent *head,float MaxSum) CStudent *p = head;while(p != NULL) if(p-sum() = MaxSum) p-display(); p = p-next; int main()CStudent *head = NULL;int CSCount = 0;setData(head,CSCount);cout班里总分最高的所有学生信息如下:endl;cout-endl;displayMaxSumStudents(head,getMaxSum(head);system(pause);return 0;12.编写程序Josephus问题是说,n个小孩围成一圈做游戏,游戏将决出一个胜利者。假定一个数m,从第s个小孩起,顺时针计数,每数到第m个小孩时,该小孩离开。接着又从下一个小孩开始数数,数到第m个小孩时,该小孩也离开,如此不断反复进行,最后剩下的一个小孩便是胜利者。#includeusing namespace std;struct Boy int code; Boy *next;class BoyRing Boy *pBegin,*pivot,*pCurrent;public: BoyRing(int n); void countBy(int m); int getNum() const; void disengage(); void printAll() const; BoyRing();BoyRing:BoyRing(int n) if(n2) throw exception(); pBegin=new Boyn; for(int i=1;i=n;i+) pBegini-1.next=&pBegini%n; pBegini-1.code=i; pivot=pCurrent=&pBeginn-1;void BoyRing:countBy(int m) for(int i=1;inext; int BoyRing:getNum()const return pCurrent-code; void BoyRing:disengage() pivot-next=pCurrent-next; pCurrent=pivot;void BoyRing:printAll() const int numinLine=0; Boy*p=pCurrent; do cout code; if(!(+numinLine%10)coutnext; while(p!=pCurrent); coutn;BoyRing:BoyRing() delete pBegin;class Jose int n,m,s,w;public: Jose(int boys,int interval,int begin=1,int winner=1); void getWinner() const;Jose:Jose(int boys,int interval,int begin,int winner):n(boys),m(interval),s(begin),w(winner) if(n2|m=n|s=n|w=n) cerrdata error.n; throw exception(); void Jose:getWinner() const coutn一共有:n个孩子.nBoys leaved in order:n; BoyRing x(n); x.countBy(s-1); for(int i=1,numinLine=0;in-w+1;i+) x.countBy(m); cout x.getNum()(+numinLine%10?:n); x.disengage(); coutnwinners:n;x.printAll();void main() coutnmsw; Jose(n,m).getWinner(); Jose(n,m,s).getWinner(); Jose(n,m,s,w).getWinner();3.编写程序假设某商店有如下几种商品:衬衣、帽子、立柜。每一种商品都有与其关联的说明信息。衬衣:单价、产地、库存量、布料。帽子:单价、产地、库存量、布料、样式(平顶或尖项)。立柜:单价、产地、库存量、木料、颜色。对这些商品的操作有:商品的入库(增加库存量),商品的出库(减少库存量),该类货品总价格的计算。要求自行设计数据结构,用类的继承与派生关系将上述的各种货品表示出来,并使用类的构造函数来初始化每一类对象的初始数据。而后将上述的商品管理计算机化,完成操作要求的功能。实现方法:(1)设立3个不同的类来描述与处理3种不同的商品。首先注意到上述3种商品数据之间的相互关联关系,可使用C+基类及其派生类的定义方法,先抽象(“提取”)出如下每种商品都具有的“公有”数据构成一个所谓的其基类base,而后再派生出所需要的那3个类。base(基)类:单价、产地、库存量由base出发(作为基类),派生出shirt(衬衣)类:增加“布料”数据。由base出发(作为基类),派生出wardrobe(立柜)类:增加“木料”与“颜色”数据。而后又由shirt出发(作为基类),派生出cap(帽子)类:增加“样式”数据。(2)构造函数的设置。通过传递来的实参数据,构造出每一对象所具有的各数据成员。如基类base需要传递place、count与price三项数据,而派生类shirt则需在base数据的基础上增加第四项即布料数据material等。(3)商品的入库(增加库存量)。void in_something(int add_cnt);将对象的库存量count增加一个数量add_cnt。(4)商品的出库(减少库存量)。void out_something(int del_cnt);将对象的库存量count减少一个数量del_cnt。(5)该类商品总价格的计算。double total_price();通过使用“price*count”计算并返回对象所代表商品的总价格。(6)对象数据的输出。在屏幕上显示出对象所拥有的当前数据。(7)下面给出上述有关类定义的程序“框架”。class base/base类,它将作为其他几个类的基类 double price; /单价 char place20; /产地 int count;/库存量public: base(double pr,char *pl, int cnt) /构造函数 void display()/对象输出 void in_something(int add_cnt)/商品入库 void out_something(int del_cnt) /商品出库 double total_price()/价格计算;class shirt:public base/派生类shirt(衬衣) char material20; /增加“布料”数据public: shirt(double pr,char *pl,int cnt,char *mat):base(pr,pl,cnt)/派生类构造函数 void display() /显示对象数据;class cap:public shirt/派生类cap(帽子),由shirt派生 char style20; /增加“样式”数据public: ;class wardrobe:public base /派生类wardrobe(立柜) char material20; /增加“木料”数据 char color20; /增加“颜色”数据public: ;#include #include class base /base 类,它将作为其他几个类的基类 private:double price; /单价 char place20; /产地 int count; /库存量 public: base (double pr, char* pl, int cnt) /构造函数 price=pr; strcpy(place,pl); count=cnt; void display() /显示 base 类对象的有关数据 cout单价:price; ”产地”place; “库存量:”countendl; void in_something(int add_cnt) /商品的进库(增加库存量) count+=add_cnt; void out_something(int del_cnt) /商品的出库(减少库存量) count-=del_cnt; double total_price()/货品总价格的计算 return price*count; ; class shirt:public base /派生类 shirt(衬衣) char material20; /增加“布料”数据 public: shirt(double pr, char* pl, int cnt, char* mat):base (pr,pl,cnt) strcpy(material, mat); /派生类构造函数, 负责其基类的初始化 void display () base:display(); /调用基类的 display,显示“共性”数据 cout 布料: materialendl; /显示“特性”数据 ; class cap:public shirt /派生类 cap(帽子) ,由 shirt 派生 char style20; /增加“样式”数据:p 代表平顶,j 表示尖顶 public: cap(double pr, char* pl, int cnt, char* mat, char *sty) :shirt (pr, pl, cnt, mat) /派生类构造函数, 负责其基类的初始化 strcpy(style, sty); void display () shirt:display();/调用基类 shirt 的 display cout 样式: styleendl; ; class wardrobe:public base/派生类 wardrobe(立柜) char material20; /增加“木料”数据 char color20; /增加“颜色”数据 public: wardrobe (double pr, char* pl, int cnt, char* mat, char* col) :base(pr, pl, cnt) /派生类构造函数 strcpy(material, mat); strcpy(color, col); void display ()/显示对象数据 base:display(); cout 颜色: colorendl; cout 木料: materialendl; ; void main()/主函数,对所定义类进行使用 shirt shi1(58.6, 北京, 25, 绵); wardrobe war1(322, 天津, 15, 木头, 黄色); cap TJcap1(18.8, 天津, 20, 绵, “平顶”); cap TJcap2(20.5, 天津, 10, 绵, “尖顶”); cap BJcap1(22.5, 北京, 36, 绵,”平顶”); cout 价格,产地,库存量,材质:endl; shi1.display(); cout价格,产地,库存量,材质,颜色:endl; war1.display(); cout价格,产地,库存量,材质,样式:endl; TJcap1.display(); cout TJcap1.total_price()endl; cout价格,产地,库存量,材质,样式:endl; TJcap2.display(); TJcap1.in_something(12); cout价格,产地,库存量,材质,样式:endl; TJcap1.display(); cout TJcap1.total_price()endl; TJcap2.out_something(5); cout TJcap2.total_price()endl; 4.编写程序定义一个二维方阵类matrix。通过重载二元运算符“+”、“-”、“*”和一元运算符“”,来实现矩阵加、矩阵减、矩阵乘以及矩阵转置。实现方法:(1)首先假定矩阵行、列数r和c为固定常数,且被处理的矩阵数据存放于matrix类的私有数据成员mem数组之中,并以类成员方式重载各运算符。可按照如下样式自定义该matrix类。const int r=3;const int c=3;class matrix int memrc; /矩阵r行c列的数据存放于mem数组中 public: matrix(int arc); /一参构造函数,将参数a带来的矩阵数据置于mem数组中 matrix(); /无参构造函数,将mem数组各元素置为0 matrix operator+(matrix &); /矩阵加matrix operator-(matrix &); /矩阵减matrix operator*(matrix &); /矩阵乘matrix operator(); /矩阵转置void display(); /输出矩阵;# include const int m=3;const int n=3;class Matrix public: Matrix(); friend Matrix operator +(Matrix &,Matrix &); friend Ma

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论