C程序设计习题_第1页
C程序设计习题_第2页
C程序设计习题_第3页
C程序设计习题_第4页
C程序设计习题_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

1、C+程序设计 练习题学院:计算机学院专业班级: 物联网1002学号:姓名: 徐远志第八章1.下面是一个类的测试程序,试设计出能是用如下测试程序的类Int main()Test x;(30,20);();return 0;解:#in clude <iostream>using n amespace std;class Test义并实现一个矩形类Crectangle.该类包含了以下成员函数.Crecta ngle():累的构造函数,根据需要可以定义多个构造函数SetTop(),SetLeft():设置矩形的左上角坐标SetLe ngth(),SetWidth():设置矩形的长和宽Per

2、imeter():求矩形的周长Area():求矩形的面积GetWidth():返回矩形的宽度Getle ngth():返回矩形的长度IsSquare():判断矩形是否为正方形Move():将矩形从一个位置移动到另一个位置Size():改变矩形的大小Where():返回矩形的左上角的坐标PrintRectangle():输出矩形的四个顶点的坐标数据成员int top,left;int length,width;解:#include <iostream>using namespace std;class Crecta ngle次歌手大赛中,有JudgeNum个评委给选手打分,参加比赛的

3、选手有 PlayerNum名,现为比赛积分编写一个 CompetitionResult 类,类的定义如下:(定义略)(1)写出所有的成员函数和实现代码.(2) 编写mai n ()函数对该类进行测试.在函数体中,定义了一个competiti on Result 类的对象数组 rPlauerNum, 他的每个元素记录了每个选手的所有信息, 个评委的 打分通过键盘的输入,在屏幕上应有提示信息进行交互式操作,比赛结果按选手 得分从高到底排列输出.解:( 1) CompetitionResult:CompetitionResult()num=0; strcpy(name,"");f

4、or(int i=0;i<JudgeNum;i+)scorei=;average=0;CompetitionResult:CompetitionResult(short n,char*ps)num=n;strcpy(name,ps);for(int i=0;i<JudgeNum;i+)scorei=;average=0;float CompetitionResult:MaxScore() int max=score0;for(int i=0;i<JudgeNum;i+)if(max<scorei) max=scorei;return max;float Competit

5、ionResult:MinScore() int min=score0;for(int i=0;i<JudgeNum;i+) if(min>scorei) min=scorei; return min;void CompetitionResult:SetAvg() int i;float sum=;for(i=0;i<JudgeNum;i+)sum+=scorei;sum=sum-MaxScore()-MinScore(); average=sum/(JudgeNum-2);float CompetitionResult:GetAvg() return average;sho

6、rt CompetitionResult:GetNo(int i) return num;void CompetitionResult:SetNo(int i) num=i;char CompetitionResult:* GetName() return name ; float CompetitionResult:GetScore(int j) return scorej; void CompetitionResult:Setscore(int k,float av) scorek=av; void Sort(CompetitionResult *pr,int n)int i,j ,k;C

7、ompetitionResult temp; for(i=0;i<n-1;i+)k=i;for(j=i+1;j<n;j+) if(prj.average)>(prk.average) k=j;if(k!=j)temp=pri;pri=prk; prk=temp;(2)int main()CompetitionResult playerPlayerNum=CompetitionResult(1,"one"),CompetitionResult(2,"two"),CompetitionResult(3,"there"),

8、CompetitionResult(4,"four"),CompetitionResult(5,"five"),CompetitionResult(6,"six"),CompetitionResult(7,"seven"),CompetitionResult(8,"eight"),CompetitionResult(9,"nine"),CompetitionResult(10,"ten");float a;for(int i=0;i<PlayerNu

9、m;i+)cout<<" 请评委给第 "<<i+1<<" 个选手打分 :"<<endl;for(int j=0;j<JudgeNum;j+) cin>>a;playeri.Setscore(j,a);playeri.SetAvg();cout<<endl;Sort(player,PlayerNum);cout<<" 最后的得分情况为: "<<endl;for (int j=0;j<PlayerNum;j+)cout<<

10、;j+1<<" "cout<<setw(6)<<playerj.GetAvg();cout<<" "<<playerj.GetName()<<endl;return 0;程序运行的结果为:第九章1.在下面的程序中,派生类Derived的成员函数sets ()能否访问基类base 中得变量 a 和 b 为什么如果在基类 base 中将数据成员 a 和 b 定义为私有成 员,下面的程序能否通过编译为什么#include <iostream>using namespace st

11、d;class Base public:void set(int i,int j) a=i;b=j;void show() cout<<"a="<<a<<",b="<<b<<endl; protected:int a,b;class Derived:public Base public:void sets() s=a*b;void shows() cout<<"s="<<s<<endl;private:int s;int main() De

12、rived obj;(2,3);();();();return 0;解:可以访问a和b;由于a, b为保护成员,经公有继承,成为派生类中得保护成员,所以派生类Derived的成员函数sets ()能访问基类base中得 变量 a 和 b.如果定义为私有,那么不能通过编译.由于派生类中的成员函数不能访问 基类中得私有成员2.声明一个图形基类Shape,在它的根底上派生出矩形类 Rectangle和圆形 类 Circle ,它们都有计算面积的和周长、输出图形信息的成员函数,再在 Rectangle类的根底上派生方形类Square.编写程序和各类的定义和实现, 以及类的使用.解:#include &

13、lt;iostream>using namespace std;class Shape public:double getArea()double getPerimeter() ;class Rectangle:public Shape protected:double height;double width;public:Rectangle() Rectangle(double a,double b)height=a;width=b;double getArea() return height*width;double getPerimeter() return 2*(height+w

14、idth);class Circle:public Shapepublic:Circle(double x):r(x)double getPerimeter()return 2*r;double getArea()return r*r*;private:double r;class Square:public Rectanglepublic:Square(double x)height=x;width=x;int main()Rectangle a1,;Circle a2;Square a3;cout<<"Area="<<()<<endl

15、; cout<<"Perimeter="<<()<<endl; cout<<"Area="<<()<<endl;cout<<"Perimeter="<<()<<endl; cout<<"Area="<<()<<endl;cout<<"Perimeter="<<()<<endl;return 0;5. 某销售公司有销售经

16、理和销售员工,月工资的计算方法为:销售鼓励的底 薪为 4000 元,并将销售额的 2/1000 做提成,销售员工无底薪,只提取 5/1000 为工资.编写程序:(1) 定义一个积累 Employee,它包含三个数据成员number, name和 salary ,以及编号和姓名的构造函数.(2) 有Employee类派生Salesman类.Salesman类包含两个新数据成员 commrate和sales,还包括了用于输入销售额并计算销售员工工资 的成员函数pay ()和用于输出打印的print ().( 3) 由 Salesman 派生 Salemanager,Salesmmanage 类包含

17、新数据成员 monthlypay,以及用于输入销售额并计算销售经理工资的成员函数 pay ()和用于输出的print ().(4)编写main ()函数中测试所设计的类结构.解:(1) class Employeepublic:Employee(long num,char *n)number=num;strcpy(name,n);protected:long number;char name20;double salary;( 2)class Salesman:public Employeepublic:Salesman(long num,char *n,float c=:Employee(n

18、um,n) commrate=c;void pay()coutvv" ee "<<name<<"士 ie 3eue :"cin>>sales;salary=commrate*sales;void print()cout<<name«"a 10xe ao"<<salary<<endl;protected:float commrate;double sales;(3)class Salesmanager:public Salesmanpublic:c=,do

19、ubleSalesmanager(long num,char *n,floatm=4000):Salesman(num,n,c)monthlypay=m;void pay()cout«" ee "<<name<<"士 ie 3eotl; e£cin>>sales;salary=monthlypay+commrate*sales;void print()cout<<name«"a 10xe ao"<<salary<<endl;private:do

20、uble monthlypay;(4) int main()Salesman s1(1234," ae e");Salesmanager s2(1357,"");();();();();return 0;第十章1.定义一个辅助类Complex,重载运算符+、-、*、/使之能用于复数的加减乘 除运算.运算符重载函数为 Complex类的成员函数.编写程序,分别求出两 个复数之和、差、积、商.解:#include <iostream>using namespace std;class Complexpublic:Complex(double r=

21、,double i= real=r;imag=i;Complex operator + (Complex);friend Complex operator - (Complex,Complex);Complex operator * (Complex);friend Complex operator / (Complex,Complex); void display();private:double real,imag;Complex Complex:operator + (Complex c)return Complex(real+,imag+;Complex operator - (Com

22、plex c1,Complex c2) return Complex Complex:operator * (Complex c) return Complex(real*+,imag*+real*;Complex operator / (Complex c1,Complex c2)double r,i;r=*+*/*+*;return(r,i);void Complex:display()cout<<"("<<real<<","<<imag<<")"<<endl

23、;int main()Complex c1,c2,5),c3;cout<<"c1=" ();cout<<"c2=" ();c3=c1+c2;cout<<"c1+c2="();c3=c1-c2;cout<<"c1-c2="();c3=c1*c2;cout<<"c1*c2="();c3=c1/c2;cout<<"c1/c2="();return 0;2.定义一个日期类Date,包括年,月,日等私有数据成员.要

24、求为所定义的Date 类设计如下重载运算符函数:Date operator+(int days); 返回一日起加天数 days 后得到的日期Date operator- ( int days); 返回一日起减天数 days 后得到的日期Int operator- ( Date &b); 返回两日期相差的天数解:#include <iostream>using namespace std;int day_tab12=31,28,31,30,31,30,31,31,30,31,30,31;class Datepublic:Date() Date(int y,int m,int

25、d) year=y;mon=m;day=d;void setday(int d) day=d;void setmon(int m) mon=m;void setyear(int y) year=y;int getday() return day;int getmon() return mon;int getyear() return year;Date operator + (int days)static Date date;int number=dton(*this);number-=days;date=ntod(number);return date;Date operator - (i

26、nt days)static Date date;int number=dton(*this);number-=days;date=ntod(number);return date;int operator - (Date &b)int days=dton(*this)-dton(b)-1;return days;void disp()cout<<year<<"."<<mon<<"."<<day<<endl;private:int year,mon,day;int leap(

27、int);int dton(Date &);Date ntod(int);int Date:leap(int year)if(year%4=0&&year&100!=0|year%400=0)return 1;else return 0;int Date:dton(Date &d)int y,m,days=0;for(y=1;y<=;y+)if(leap(y)days+=366;elsedays+=365;day_tab1=leap29:28;for(m=0;m<m+)days+=day_tabm;days+=;return days;Dat

28、e Date:ntod(int n)int y=1,m=1,d,rest=n,days_year;while(1)days_year=leap(y)366:365;if(rest<days_year)break;elserest-=days_year;y+;y-;day_tab1=leap(y)29:28;while(1)if(rest>day_tabm-1)rest-=day_tabm-1;elsebreak;m+;d=rest;return Date(y,m,d);int main()Date now(2021,12,22),Nationday(1949,10,1);cout&

29、lt;<"now:"();cout<<"Nationday:"();cout«" a 2 lie y:"<<(nNWationday)«endl;Date d1= no w+365,d2二 no w-365;cout<<"now+365:"();cout<<"now-365:"();return 0;3. 编写一个程序尖酸正方体圆柱体的外表积和体积. 要求抽象出一个公共的基类Body,吧他当做抽象类,在该类中定义外表积和体

30、积的纯虚函数.抽象 类中定义一个数据成员 data ,他可以作为求的半径, 正方形的边长, 或者圆 柱体的地面半径.在三个类中都有计算白面积和体积的函数的具体实现.解:#include <iostream>using namespace std;class Bodyprotected:double data;public:Body(double data)Body:data=data;virtual double s()=0;virtual double v()=0;class Cube:public Bodypublic:Cube(double data):Body(data);

31、double s()return data*data*6;double v()return data*data*data;class Sphere:public Bodypublic:Sphere(double r):Body(r);double s()return data*data*4;double v()return 4*data*data*data/3;class Cylinder:public Bodydouble height;public:height):Cylinder(double r,double Body(r)Cylinder:height=height;double s

32、()return (2*data*data+2*data*height);double v()return data*data*height;int main()Body *p;Cube obj1(5);Sphere obj2(5);Cylinder obj3(5,5);p=&obj1;cout<<" 正方体的外表积: "<<p->s()<<endl;cout<<" 正方体的体积: "<<p->v()<<endl;p=&obj2;cout<<&

33、quot; 球的外表积: "<<p->s()<<endl;cout<<" 球的体积: "<<p->v()<<endl;p=&obj3;cout<<" 球的外表积: "<<p->s()<<endl;cout<<" 球的体积: "<<p->v()<<endl; return 0;第十一章1. Void Sort(int a,int size);Void Sort(do

34、uble a,int size);是设计函数模板.是一个函数模板的两个例子, 起功能是将数组 a 中得前 size 个元素按从小到大的顺序依次排列 解: #include <iostream> using namespace std;template<class T> void Sort(T set,int n)int i,j; T temp;for (i=1;i<n;i+) for(j=n-1;j>i;j-)if(setj-1>setj) temp=setj-1;setj-1=setj; setj=temp;int main()int a=4,5,8

35、,9,3;double b=3,5,2,;Sort(a,6);Sort(b,6);for(int i=0;i<6;i+) cout<<ai<<" "cout<<endl; for(i=0;i<6;i+) cout<<bi<<" "cout<<endl; return 0;2. 设有如下声明 class Test public :Void SetData1(int val) data1=val;Void SetData2(doule val) data2=val;int G

36、etData1() return data1;double GetData2() return data2;private:int data1;double data2;试将此类声明为类模板的声明,使得数据成员 data1 和 data2 可以使任何类型 #include <iostream>#include <string>using namespace std;template <class T1,class T2>class Testpublic:void SetData1(T1 val) data1=val;void SetData2(T2 val)

37、 data2=val;T1 GetData1() return data1;T2 GetData2() return data2;private:int data1;double data2;int main()Test<int,double> t1;(10);Jcout<<()<<" "<<()<<endl;Test<char ,string> t2;('a');("China");cout<<()<<" "<<

38、;()<<endl;return 0;3 栈是一种重要的数据结构,它是一种只允许在彪的一端进行插入或删除操作的线性表.表中允许进行插入、删除操 作的一端称为栈顶.表的令一端称为栈底.下面是一个整形栈类的定义:Const int MaxSize=100;Class IstackPublic:Istack();void Push(int &n);void pop();int GetTop();bool Empty();int size();boid ClearStack();Istack();Private:Int elemMaxSize;Int top;编写一个栈的类模板,以

39、便为任何类型的对象提供栈结构的数据操作. 解:#include <iostream>#include <string>using namespace std;const int MaxSize=100;template <class T>class Stackpublic:Stack();void Push(const T &a);void Pop();T GetTop();void ClearStack();bool Empty();int Size();Stack()private:T elemMaxSize;int Top;template &

40、lt;class T>Stack <T>:Stack()Top=-1;template <class T>void Stack<T>:Push(const T &a)if(Top=MaxSize-1)return;Top+; elemTop=a;template <class T>void Stack<T>:Pop()if(Top=-1) return;Top-;template <class T>void Stack<T>:ClearStack()Top=-1;template <clas

41、s T>T Stack<T>:GetTop()if(Top=-1)return 0; return elemTop;template <class T>bool Stack<T>:Empty()if(Top=-1)return true;elsereturn false;template <class T>int Stack<T>:Size()return Top+1;int mian()Stack<int> s1;Stack<string> s2;(123);(456); cout<<()&

42、lt;<endl;();cout<<()<<" "<<()<<endl;("beijing");("wuhan"); cout<<()<<" "<<()<<endl;return 0;第十三章1. 编写程序,重载运算符 <<和>>,使用户能直接输入和输出复数. 解:#include <>class Complexpublic:Complex(double r=0,double i

43、=0)real=r;imag=i;friend ostream &operator<<(ostream &,Complex &);friend istream &operator>>(istream &,Complex &); private:double real,imag;ostream &operator<<(ostream &output ,Complex &obj)output<<if>0)output<<"+"if!=0)ou

44、tput<<<<"i"return output;istream &operator>>(istream &input ,Complex &obj)cout<<"Input the real and img of the complex:"<<endl; input>>input>>return input;int main()Complex c1,c2,c3; cin>>c1>>c2>>c3;cout<&

45、lt;"c1="<<c1<<endl;cout<<"c2="<<c2<<endl;cout<<"c3="<<c3<<endl;return ;然后3. 编写一个程序, 统计文本文件中的字符, 并给文件所有行加上行号, 写到中去 解:#include <iostream>#include <fstream>using namespace std;int main()fstream file;("",ios:in);if(!file)cout<<" can't open."<<endl;abort();char ch;int i=0;while(!()(ch);i+;cout<<"Charater:"<<i<<endl;();return 0;6#include <iostream>#include <fstream>using namespace std;struct

温馨提示

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

评论

0/150

提交评论