C++自学作业答案.doc_第1页
C++自学作业答案.doc_第2页
C++自学作业答案.doc_第3页
C++自学作业答案.doc_第4页
C++自学作业答案.doc_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

第二章作业1. 设教务分析百分制学生成绩时认为90分以上为优,8089分为良,7079分为中,6069分为及格,60分以下为不及格。输入某学生百分制成绩,将其转换为上述等级评分后输出。要求用if语句和switch语句两种方法编程。并注意输入数据的正确性和合法性验证。(1)#include iostreamusing namespace std;int main(int argc, char* argv)int score;coutEnter a score:score;if(score100|score0)cout输入错误=90)cout优=80)cout良=70)cout中=60)cout及格endl;else if(score60)cout不及格endl;return 0;(2)#includeusing namespace std;int main()int i,score;coutscore;if(score100|score0)cout成绩输入错误;return 0;i=score/10;switch(i)case 10:case 9:cout成绩为优;break;case 8:cout成绩为良;break;case 7:cout成绩为中;break;case 6:cout成绩为及格;break;default:cout成绩为不及格;return 0;2. 上题只要求转换某同学成绩,现要求针对30人的某班转换所有同学的成绩并输出。要求用while语言、do-while语句和for语句三种方法编程。(1)while#include iostreamusing namespace std;int main(int argc, char* argv)int score;int num=1;while(num=30)num+;cout输入学生的百分制成绩:score;if(score100|score0)cout输入错误=90)cout优=80)cout良=70)cout中=60)cout及格endl;else if(score60)cout不及格endl;return 0;(2)#include iostreamusing namespace std;int main(int argc, char* argv)int score;int num=1;donum+;cout输入学生的百分制成绩:score;if(score100|score0)cout输入错误=90)cout优=80)cout良=70)cout中=60)cout及格endl;else if(score60)cout不及格endl;while(num=30);return 0;(3)#include iostreamusing namespace std;int main(int argc, char* argv)int score;for(int num=1;num=30;num+)cout输入学生的百分制成绩:score;if(score100|score0)cout输入错误=90)cout优=80)cout良=70)cout中=60)cout及格endl;else if(score60)cout不及格endl;return 0;3. 编一程序显示如下图案,注意行数可由用户确定,行数最多25行。* * * * * * * * * * * * *#include iostreamusing namespace std;int main(int argc, char* argv)int num;cout请输入行数num;for (int i=1;i=num;i+)for (int k=1;k=num-i;k+)cout ; for (int x=1;x=(2*i-1);x+)cout *; coutendl;return 0;第三章作业1. 根据给定的两个坐标点(x1,y1)和(x2,y2),计算两点之间的距离。程序流程图如下所示。要求按流程图编写一个自定义的函数完成“计算两点之间的距离”功能。函数参数为两点坐标,函数返回值为两点之间距离。double distance(double x1,double y1,double x2,double y2)return sqrt(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);2. 请编写程序完成:键盘输入两点坐标,调用上题编写函数获取两点之间的距离值,再用适当格式屏幕输出两点坐标和这两点之间距离。#include #include using namespace std;double distance(double x1,double y1,double x2,double y2)return sqrt(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);int main()double x1,x2,y1,y2;coutx1y1;coutx2y2;cout第一个点是(x1,y1)n; cout第一个点是(x2,y2)n;cout这两点间的距离为distance(x1,y1,x2,y2)n;3. 请编写函数,函数的初始条件,即入口数据为一个整型数组,函数的出口数据,即运算结果为数组中元素的最大值。要求入口数据和出口数据均使用函数的参数,函数的返回值为void类型。#include stdafx.h#include iostreamusing namespace std;void find_max(int group,int num,int &max)int i;for(i=0;imax)max=groupi;void main()int group10=1,89,56,57,34,57,23,21,90,43;int max;find_max(group,10,max);cout 最大值为maxendl;4. 请编写一个函数,函数的参数为一个整型数组指针,函数的运算结果为数组中元素的最大值和最小值。#include using namespace std;int Max1(int *p)int i,max,*t;t=p;for(i=1;imax) max=*(t+1); t+;return max;int Min1(int *p)int i,min,*t;t=p;for(i=1;i10;i+)if(*(t+1)min)min=*(t+1);t+;return min;main() int Array10,*p;int max,i,min;p=Array;for(i=0;iArrayi;max=Max1(p);min=Min1(p);coutmax=maxendl;coutmin=minendl;return 0;5. 把以下程序中的print()函数改写为等价的递归函数。#include void print( int w ) int i,j; for( i = 1 ; i = w ; i + )for( j = 1 ; j = i ; j + )cout i ; cout endl ;void main() print( 5 ) ; 解:#include iostreamusing namespace std;void print( int w )int i;if(w=1)cout w endl;elseprint(w-1);for(i=1;i=w;i+)cout w ;coutendl;void main() print( 5 ) ; 6. 编写一个程序,包含三个重载的display函数和一个主函数。要求第一个函数输出double值,前面用字符串“a double:”引导,第二个函数输出一个int值,前面用字符串“a int:”引导,第三个函数输出一个char字符值,前面用字符串“a char:”引导,在主函数中分别用double、int和char型变量作为实参调用display函数。#includeusing namespace std;void display(double x,double y)couta double: x+yendl;void display(int a,int b)couta int: a+bendl;void display(char c,char d)couta char:c dendl;int main()double x=1.1,y=2.2;int a=3,b=4;char c=A,d=B;display(x,y);display(a,b);display(c,d);return 0;第四章作业 1. 编写程序完成如下各个步骤:(1) 定义一个goods类,有三个私有的数据成员货物编号、货物名称和价格。(2) 分别编写这三个私有数据的公有存取器函数(get数据成员和set数据成员函数)使之成为可从接口读写的数据,并且货物名称缺省值为goods,价格缺省值为0。(3) 编写goods类的公有成员函数comp,可完成对于给定的两个货物,返回这两个货物的差价。(4) 编写一个全局函数comp,同样完成(3)中的功能。(5) 编写main函数,完成:生成一个NUM(符号常量)个元素的goods类型的数组,键盘输入NUM个货物的数据,调用类成员函数comp完成输出任意给定的两个货物的差价,再调用全局函数comp完成输出任意给定的两个货物的差价功能。#include #include #include using namespace std;#define NUM 3class Goodspublic:Goods();void setName(string n);void setPrice(float p);void setId(int i);string getName();float getPrice();int getId();float comp(Goods other);private:int id;string name;float price;Goods:Goods() void Goods:setName(string n=Goods)name = n;void Goods:setPrice(float p=0)price = p;void Goods:setId(int i)id=i;string Goods:getName()return name;float Goods:getPrice()return price;int Goods:getId()return id;float Goods:comp(Goods other)return fabs(this-price-other.getPrice();float comp(Goods Goods1,Goods Goods2)return fabs(Goods1.getPrice()-Goods2.getPrice();void main()string name; float price,difference1,difference2;int i,j=0,k=0;Goods gNUM;for(i=0;iNUM;i+) cout请输入第i+1个货物的名称及价格:nameprice;gi.setId(i+1);gi.setName(name);gi.setPrice (price);coutendl;for(i=0;iNUM;i+)cout编号:gi.getId() 名称:gi.getName() 价格:gi.getPrice()endl;cout请输入想要计算出差价的2个货物的编号:jk;while(jNUM|kNUM|j=0|k=0) cout货物编号必须为小于NUM的正数请重新输入jk; difference1=p(gk-1);/调用成员函数的得出差价coutn调用成员函数的得出差价为:difference1endl;difference2=comp(gj-1,gk-1);/调用全局函数的得出差价cout调用全局函数的得出差价为:difference1endl;2. 编写程序完成如下各个步骤:(1) 定义一个A类,有一个私有的数据成员int data,并编写data的存取器函数;(2) 编写构造函数,使能完成生成A类对象时给data赋值,并显示该对象将生成。(3) 编写析构函数,显示析构函数正在被调用。(4) 编写拷贝构造函数,并显示该拷贝构造函数被调用。(5) 编写main函数,完成:首先生成一个A类对象,在生成时利用构造函数赋初值;在利用data的存取器函数修改data的值。生成第二个A类对象,利用拷贝构造函数使之获得与第一个对象当前data一样的data值。#includeusing namespace std;class Aprivate: int data; public: A(int data1) data=data1; cout构造函数被调用,该对象将生成,data值为datadata=obj.getData(); cout拷贝构造函数被调用,该对象将生成,data值为obj.getData()endl;void setData(int data2)data=data2;coutdata值修改为dataendl; ;int getData( )return data; A() cout析构函数被调用,该对象将被删除endl; ;void main()A a(9);a.setData(100);A b(a);3. 保留上题代码,继续编写和修改上题中程序,完成如下各个步骤:(1) 在定义一个B类,有一个私有的数据成员int data,并编写data的存取器函数;(2) 编写构造函数,使能完成生成B类对象时给data赋值,并显示该对象将生成。(3) 编写析构函数,显示析构函数正在被调用。(4) 编写拷贝构造函数,并显示B类该拷贝构造函数被调用。(5) 给A类增加一个公有的数据成员:B b;并对A类做必要地修改。(6) 重新编写main函数,完成:只是生成一个A类对象。运行程序观察运行情况,体会构造函数和析构函数的调用顺序。#include stdafx.h#includeusing namespace std;class Bprivate:int data;public:B()coutB的构造函数被调用:空参数endl;B(int d)data=d;coutB的构造函数被调用:int型参数endl;B()coutB的析构函数被调用endl;B(B& b)coutB的拷贝构造函数被调用endl;data=b.getData();void setData(int data1)data=data1;int getData()return data;class Aprivate: int data; public: B b;A(int d,B& b1) data=d;b.setData(b1.getData();coutA的构造函数被调用endl;void setData(int data2)data=data2;coutdata值修改为dataendl; ;void setB(B b1)b=b1;int getData()return data;B getB()return b; A() coutA的析构函数被调用,该对象将被删除endl;A(const A &obj) data=obj.data; b=obj.b;coutA的拷贝构造函数被调用endl;void main() B b1(5);B b2(b1);A a1(6,b2);A a2(a1);第五章作业1. 定义一个Student类,在该类定义中包括:两个数据成员name(学生姓名)和score(分数);两个静态数据成员total(总分)和count(学生人数);成员函数scoretotalcount(float s) 用于设置每个学生的分数;静态成员函数sum()用于返回总分;静态成员函数average()用于求分数平均值。在main函数中,输入某班同学的成绩(班级学生人数随个数录入情况自动增加),并调用上述函数求全班学生的总分和平均分。#include #include using namespace std;class studentprivate:char name50;int score;static int total;static int count;public:student(int score0) score=score0; total+=score0; count+; void inputname();static void sum();static void getaverage();void student:inputname()cout请输入学生姓名:name;void student:sum()cout目前为止,总分为totalendl;void student:getaverage()float average;average=total/count;cout目前为止,平均分为total/countendl;int student:total=0;int student:count=0;int main() int scorein=0;while(scorein!=-1)cout请输入学生分数(输入-1结束):scorein;student s1(scorein);s1.inputname();s1.sum();s1.getaverage();2. 定义一个表示点的结构类型Point和一个由直线方程y = ax + b确定的直线类Line。结构类型Point有x和y两个成员,分别表示点的横坐标和纵坐标。Line类有两个数据成员a和b,分别表示直线方程中的系数a和b。Line类有一个成员函数print用于显示直线方程;友员函数setPoint(Line &l1,Line &l2)用于求两条直线的交点。在main函数中,建立两个直线对象,分别调用print函数显示两条直线的方程,并调用函数setPoint求这两条直线的交点。#include using namespace std;struct point float x; float y; ;class line public:line( float u, float v ) a = u; b = v; void print()cout y= a x+ b endl; friend point setpoint(line &l1,line &l2);private: float a, b;point setpoint( line &l1, line &l2 ) point p;p.x = ( l2.b - l1.b ) / ( l1.a - l2.a );p.y = ( l1.a * l2.b - l2.a * l1.b ) / ( l1.a - l2.a );return p;void main() point setp;line l1( 2, 3 ), l2( 4, 5 );cout 直线l1: ;l1.print();cout 直线l2: ;l2.print();setp = setpoint( l1, l2 );cout 直线l1和直线l2的交点:( setp.x , setp.y ) endl;第六章作业1. 编写程序完成如下步骤: 定义一个类Candidate代表候选人,该类应封装了数据成员有候选人编号(int num,从1开始递增)、得选票数(int count)和函数成员show显示获选人的编号和得票数、函数成员sum为给定获选人累加选票,即每次调用该函数,对应的得票数加1。 编写一个函数Intput,函数的参数为Candidate类对象数组。函数的功能是: 假设侯选人数的10,利用前两步中已编代码,编写main函数,在其中调用Input函数完成写入候选人信息,再显示所有获选人的编号和得票数。#include#includeusing namespace std;class Candidate;class Candidateprivate: int num; int count;public:Candidate();void setNum(int num1);void setCount(int count1);int getNum();int getCount();void show(Candidate c);void sum();void input(Candidate c);Candidate:Candidate()num=1;count=0;void Candidate:setCount(int count1)count=count1;void Candidate:setNum(int num1)num=num1;int Candidate:getCount()return count;int Candidate:getNum()return num;void Candidate:show(Candidate c)/n为投票人数int i;for(i=0;i10;i+)coutnumber:ci.getNum() votes:ci.getCount()endl;void Candidate:sum ()count+;void Candidate:input (Candidate c)inti;int num;/候选人编号for(i=0;i10;i+)ci.setNum(i+1);coutplease input the number(110) you vote , end with 0num;while(num0&num=10)cnum-1.sum();coutplease input the number you votenum;void main() Candidate c10;c0.input(c);c0.show(c);2. 使用Candidate类对象指针数组重新编写1题程序。#include#includeusing namespace std;class Candidate;class Candidateprivate: int num; int count;public:Candidate();void setNum(int num1);void setCount(int count1);int getNum();int getCount();void show(Candidate *c);void sum();void input(Candidate *c);Candidate:Candidate()num=1;count=0;void Candidate:setCount(int count1)count=count1;void Candidate:setNum(int num1)num=num1;int Candidate:getCount()return count;int Candidate:getNum()return num;void Candidate:show(Candidate *c)/n为投票人数int i;for(i=0;i10;i+)coutnumber:getNum() votes:getCount()endl;void Candidate:sum ()count+;void Candidate:input (Candidate *c)inti;int num;/候选人编号for(i=0;isetNum(i+1);coutplease input the number(110) you vote , end with 0num;while(num0&numsum();coutplease input the number you votenum;void main()Candidate *c10;for(int i=0;iinput(c);c0-show(c);for( i=0;i10;i+) delete ci;ci=NULL;3. 假设获选人的人数由用户键盘输入,利用动态生成对象数组的方式重新编写1题。#include#includeusing namespace std;class Candidate;class Candidateprivate: int num; int count;public:Candidate();/构造函数void setNum(int num1);void setCount(int count1);int getNum();int getCount();void show(Candidate *c,int n);void sum();void input(Candidate *c,int n);Candidate:Candidate()num=1;count=0;void Candidate:setCount(int count1)count=count1;void Candidate:setNum(int num1)num=num1;int Candidate:getCount()return count;int Candidate:getNum()return num;void Candidate:show(Candidate *c,int n)int i;for(i=0;in;i+)coutnumber:ci.getNum() votes:ci.getCount()endl;void Candidate:sum ()count+;void Candidate:input (Candidate *c,int n)inti;int num;for(i=0;in;i+)ci.setNum(i+1);coutplease input the number(110) you vote , end with 0num;while(num0&num=n)cnum-1.sum();coutplease input the number you votenum;void main()int n;coutplease intput total number of candidates: n;Candidate *c=new Candidaten;c0.input(c,n);c0.show(c,n);delete c;第七章作业1. 编写程序完成如下功能: 定义矩形Rectangle类,可求矩形面积,编写并封装该类。 定义Rectangle的派生类Stereo,可利用面积再求立体的体积,编写并封装该类。 编写main函数,使用这两个类的对象,用户输入数据,求长方形的面积和长方体的体积。 画出简单类图。#include using namespace std;class rectangleprivate:int a;int b;public:void init(int a0,int b0)a=a0;b=b0;int s()return a*b;class stereo: public rectangleprivate:int h;public:void inith(int h0)h=h0;void v()cout立方体体积为h*s()n;int main()int a,b,h;rectangle re;stereo st;cout请输入长方形的长与宽:ab;re.init(a,b);cout长方形的面积为re.s()n;couth;st.init(a,b);st.inith(h);st.v();2. 编写程序完成如下功能: 定义矩形Rectangle类,可求矩形面积,编写并封装该类。 定义Stereo 类,它至少包含有数据成员:Rectangle类的对象和表示立方体高的数据成员height;可求立体的体积,编写并封装该类。 编写main函数完成由用户输入数据,据输入数据求长方形的面积和长方体的体积。 画出简单类图,并用面向对象思想分析本题设计与1题设计的不同。#include using namespace std;class rectangleprivate:int a;int b;public:rectangle(int a0=0,int b0=0)a=a0;b=b0;int area()return a*b;class stereo: public rectangleprivate:int height;rectangle rec;public:stereo(int a0,int b0,int h0):rec(a0,b0),height(h0)int v()return height*rec.area();int main()int a,b,h;cout请输入长方形的长与宽:ab;rectangle re(a,b);cout长方形的面积为re.area()n;couth;stereo st(a,b,h);cout长方体的体积为st.v()n;3. 编写程序完成如下功能: 定义Plane类,它包含面积数据成员和求面积的成员函数,编写并封装该类。 定义Plane类的两个派生类Rectangle类和Circle类,可求相应矩形或园的面积,编写并封装这两个类。 定义Rectangle和Circle的派生类Stereo 类,可据父类的面积求立体的体积,编写并封装该类。 编写main函数完成由用户输入数据,据输入数据求平面的面积和立体的体积。#include using namespace std;class planeprivate:float a,b,r;public:plane(float a0=0,float b0=0,float r0=0)a=a0;b=b0;r=r0;float area;float circles()area=3.14*r*r;return area;float rectangles()area=a*b;return area;class rectangle: virtual public planepublic:rectangle(float a0=0,float b0=0,float r0=0):plane(a0,b0,r0)float arearec()return rectangles();class circle: virtual public planepublic:circle(float a0=0,float b0=0,float r0=0):plane(a0,b0,r0)float areacir()return circles();class stereo: public rectangle, public circlepublic:stereo(float a0=0,float b0=0,float r0=0):plane(a0,b0,r0),rectangle(a0,b0,r0),circle(a0,b0,r0)void v(float height)cout圆柱的体积为:height*areacir()n长方体的体积为:height*arearec()n;int main()float a,b,r,h;cout请输入长方形的长与宽:ab;cout请输入圆形的半径:r;rectangle re

温馨提示

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

评论

0/150

提交评论