C++上机考试题,上机练习,东南大学C++上机实验_第1页
C++上机考试题,上机练习,东南大学C++上机实验_第2页
C++上机考试题,上机练习,东南大学C++上机实验_第3页
C++上机考试题,上机练习,东南大学C++上机实验_第4页
C++上机考试题,上机练习,东南大学C++上机实验_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

/*定义一个复数类,通过重载运算符:=、+=、=、+、*、/、= =、!=,直接实现两个复数之间的各种运算。编写一个完整的程序(包括测试各运算符的程序部分)。*/#include stdio.h/标准输入输出头文件#include iostream.hclass Complexfloat Real,Image;public:Complex(float r=0,float i=0)Real=r;Image=i;float GetR()return Real;float GetI()return Image;/后面主函数要直接调用私有成员数据 void show()coutReal=RealtImage=Imageendl;Complex operator +(Complex &);/把形参定义为引用,调用时更方便void operator +=(Complex &);/自加运算,返回值为voidComplex operator -(Complex &);void operator -=(Complex &);Complex operator *(Complex &);Complex operator /(Complex &);void operator =(Complex &);int operator !=(Complex &);int operator =(Complex &);/返回真假;Complex Complex:operator +(Complex &c)/此时的函数名变为Complex:operatorComplex t;/在函数体内可以定义新的类,并把这个临时的类返回,同样用打点来访问t.Real=Real+c.Real;t.Image=Image+c.Image;return t;void Complex:operator +=(Complex &c)Real=Real+c.Real;Image=Image+c.Image;Complex Complex:operator -(Complex &c)Complex t;t.Real=Real-c.Real;t.Image=Image-c.Image;return t;void Complex:operator -=(Complex &c)Real=Real-c.Real;Image=Image-c.Image;Complex Complex:operator *(Complex &c)Complex t;t.Real=Real*c.Real-Image*c.Image;t.Image=Real*c.Image+Image*c.Real;return t;Complex Complex:operator /(Complex &c)Complex t;t.Real=Real*c.Real+Image*c.Image;t.Image=-Real*c.Image-Image*c.Real;float val=c.Real*c.Real+c.Image*c.Image;t.Real=t.Real/val;t.Image=t.Image/val;return t;void Complex:operator =(Complex &c)Real=c.Real;Image=c.Image;int Complex:operator !=(Complex &c)int res;/函数体内定义临时变量res=(c.Real!=Real)&(c.Image!=Image);return res;int Complex:operator =(Complex &c)int res;res=(c.Real=Real)&(c.Image=Image);return res;void main()Complex a(3,4),b(6,8),c,d;c=a;/赋值=c.show();d=a+b;/+d.show();c=b-a;/-c.show();c=b;c+=a;/+=c.show();d=b;d-=a;/-=d.show();/c=a;d=a;coutendl输出c和d: n;if(c=d) c.show();d.show();coutc=d;c=b;d=a;coutendl输出c和d: n;if(c!=d) c.show();d.show();coutc!=d;/coutendl;couta*b: ;c=a*b;c.show();coutna/b: ;d=b/a;d.show();/在函数体内可以定义新的类,并把这个临时的类返回,同样用打点来访问/*四、下标运算符 通常用于取数组中某个元素,可以实现数组下标越界的检测等。本题要求通过下标运算符的重载,实现读取数组中某个元素的作用。它具有如下公有成员函数:1.void Word (char *s ); 动态生成字符数组空间,用形参s来对其进行初始化。2. char & operaror (int n )给下标值为n的数组元素赋值。下标运算符 的重载关键是将下标值做为一个操作数。它的实现非常简单, 就是用字符指针的首地址str加下标值n,然后将相加后的地址返回。3.void disp( ); 实现将字符指针str指向的字符串输出到屏幕上。4.用 Word()析构函数来释放动态申请的堆空间。*/# include# includeclass Word private :char *str;int len;public : Word(char *s) /void Word (char *s )把原题的void去掉,做构造函数 len=strlen(s)+1; str=new charlen; strcpy(str,s); char & operator (int n)/重载,用operator,返回值为引用类型/n是的操作数,即下标if(n=0&nlen-1)return strn;else coutn越界;return strlen-1;void disp() coutstr0) wn-1=wn-1-32;n-;w.disp( );coutw7;/ 14-3.cpp/*建立一个双向链表,节点数据包括姓名、地址和工资,按工资从小到大的顺序排序。参见教材P281 例12.7和教材P192页*/#include #include class Objectpublic:Object();/可以定义空的构造函数virtual int IsEqual(Object &)=0;/纯虚函数virtual int IsBigger(Object *)=0;/形参为&,实参直接为变量名/形参为*,实参为指针或地址virtual void Show()=0;virtual Object();class IntObj: public Objectint data;/工资char *name;char *address;public:IntObj(char *s=NULL,char *a=NULL,int x=0)data=x;if(s)name=new charstrlen(s)+1;/strlen的参数是指针strcpy(name,s);else name=NULL;if(a)address=new charstrlen(a)+1;strcpy(address,a);else address=NULL;IntObj()if(name) delete name;/析构前预判,很重要if(address) delete address;void SetData(char *s,char *a,int x)/修改数据data=x;if(s)delete name;/name本来指向另一个字符串,它开辟的空间长度 /需要人为改变,赋新的值之前要删除原有空间,重新开辟name=new charstrlen(s)+1;strcpy(name,s);else name=NULL;if(a)delete address;address=new charstrlen(a)+1;strcpy(address,a);else address=NULL;int IsEqual(Object &obj)IntObj &temp=(IntObj &)obj;/为它起个别名if(strcmp(name,)!=0) return 0;/用strcmp函数比较字符串是否相同if(strcmp(address,temp.address)!=0) return 0;if(data!=temp.data) return 0;return 1;int IsBigger(Object *obj)IntObj *temp=(IntObj *)obj;if(datadata) return 0;else return 1;void Show()cout姓名: namet地址: addresst工资=datatNext=node-Prev=0;elseTail-Next=node;node-Prev=Tail;Tail=node;node-Next=0;Node *List:DeleteNode(Node *node)if(node=Head)if(node=Tail)Head=Tail=0;elseHead=node-Next;Head-Prev=0;elsenode-Prev-Next=node-Next;if(node!=Tail) node-Next-Prev=node-Prev;else Tail=node-Prev;node-Prev=node-Next=0;return(node);Node *List:LookUp(Object &obj)Node *pn=Head;while(pn)if(pn-Info-IsEqual(obj) return pn;pn=pn-Next;return 0;void List:ShowList()Node *p=Head;while(p)p-Info-Show();p=p-Next;void List:DeleteList()Node *p,*q;p=Head;while(p)delete p-Info;q=p;p=p-Next;delete q;void List:InsertNode(Node *p)Node *pn=Head,*p1;if(Head=0)/空表Head=Tail=p;Head-Next=Tail-Prev=0;return ;if(Head-Info-IsBigger(p-Info)/小于头节点p-Next=Head;Head-Prev=p;Head=p;return ;pn=p1=Head;while(pn-Next&pn-Info-IsBigger(p-Info)=0)/寻找插入位置p1=pn;pn=pn-Next;if(pn-Info-IsBigger(p-Info)=0)/最末尾Tail-Next=p;p-Prev=Tail;Tail=p;p-Next=0;/注意else/一般情况/插入p1和pn之间p-Prev=p1;p1-Next=p;pn-Prev=p;p-Next=pn;void main()IntObj *p;Node *pn,*pt,node;List list;char *name=jack,tom,john,mary,Sun;char *address=sh,bj,nj,sz,gz;for(int i=1;iFillInfo(p); list.InsertNode(pn); list.ShowList(); coutn; IntObj da; da.SetData(tom,bj,104); pn=list.LookUp(da); if(pn) pt=list.DeleteNode(pn); list.ShowList(); coutn; if(pn) list.InsertNode(pt); list.ShowList(); cout0) res=sum/num;else cout没有学生对象!;return res;void Stud:print()cout学号: id 姓名: name C+成绩: cppendl;void printgrade(Stud &stu)/cout学号stu.id 姓名C+成绩等级: ;cout=90) cout优=80) cout良=70) cout中=70) cout中=60) cout及格endl; else cout不及格endl;void main()int i,n;char name100;int id,cpp;coutn; Stud *pstu=new Studn;for(i=0;in;i+)coutidnamecpp;pstui.setdata(name,id,cpp);for(i=0;in;i+) pstui.print();printgrade(pstui);coutStud:num个学生平均分: Stud:avg()endl;/*1.实现描述超市的的类 Suppermacket 类,记录系统中现有商品(用指针实现),定义增加商品的函数 Append ,删除商品的函数 Delete ,查询商品的函数 Query,并显示查询结果; 2.定义商品类 Goods ,具有商品名称Name,商品价格Price,商品数量number等属性,操作 Sale (销售商品,余额不足时给予提示)、Add(商品上架操作) 和ShowMe(显示商品信息)。3.编写main函数,测试以上所要求的各种功能,完成商品的增加、删除和查询商品,以及商品销售和商品上架的操作。 4.可以利用对象成员来实现。*/#include#includeclass Suppermacket;class Goodsfloat Price;int number;char Name10;public:Goods()Add();void Sale();void Add();void ShowMe();friend Suppermacket;friend void Sale(Suppermacket &);class SuppermacketGoods * PGoods10;public:Suppermacket()for(int i=0;i10;i+) PGoodsi=0;void Append();void Delete();void Query();friend void Sale(Suppermacket &);void Sale(Suppermacket &Goods);void main()Suppermacket Goods;Goods.Append();Goods.Append();Goods.Append();Goods.Delete();Goods.Query();Sale(Goods);void Goods:Sale()int n;ShowMe();coutn;if(numbern) number-=n;else cout货物数量不足!;void Goods:Add()coutNamePricenumber;void Goods:ShowMe()cout 品名:Name 数量:number单价:Priceendl;void Suppermacket:Append()int n=0;while( PGoodsn!=0 & n10) n+;if(n10) PGoodsn=new Goods;void Suppermacket:Delete()char name10;coutname;for(int i=0;iName,name)=0) break;if(i10) cout删除name商品n;delete PGoodsi;PGoodsi=0;else cout没有此类商品!n;void Suppermacket:Query()char name10;coutname;for(int i=0;iName,name)=0) break;if(i=10) coutShowMe(); void Sale(Suppermacket &Goods)char name10;int i=0;coutname;while(iName,name)=0) break;i+;if(i=10) coutSale();/*【程序功能】找出给定范围内的和亲数。对于两个正整数,如果其中的一个整数是另一个整数的全部真因子之和,反之亦然,则称这两个数为和亲数。例如,220有真因子1, 2, 4, 5, 10, 11, 20, 22, 44, 55, 110,其和为284,而284有真因子1, 2, 4, 71, 142,其和为220,因此220和284就是一对和亲数。【编程要求】1.试建立一个类NNM 私有数据成员int n1 , n2 ;/查找数据的范围int a102; /存储m n(mn)之间的所有和亲数对,并存储到a数组中int num; /统计和亲数对的个数 公有成员函数1)缺省构造函数:初始化数据成员n1,n2为0。2)带参构造函数NNM(int m,int n,int a2):用参数初始化数据成员n1,n2。3)void find( )函数用于查找n1 n2之间的所有和亲数对并存储到数组中4)打印函数 void print( ),将结果输出到屏幕*/#includeclass NNMint n1,n2;int a102;int num;public:NNM()n1=0;n2=0;num=0;NNM(int a, int b)n1=a,n2=b,num=0;void find();void print();void main()NNM a(2,500);a.find();a.print();void NNM:find()int sum1=0,sum2=0;int i,n;for(i=n1;i=n2;i+)for(sum1=0,n=1;ni/2+1;n+)if(i%n=0)sum1+=n;for(sum2=0,n=1;nsum1/2+1;n+)if(sum1%n=0)sum2+=n;if(sum2!=i | sum1=i) continue;anum0=i,anum+1=sum1;void NNM:print()for(int i=0;inum;i+)coutai0,ai1endl;/*二. 【要求】试建立一个类 Student 用于描述学生信息,具体要求如下: 私有数据成员int id: 学生学号。char yuwen: 语文成绩(五级分制:A、B、C、D和E,其它无效)。float shuxue: 数学成绩(百分制)。 公有成员函数1)缺省构造函数:初始化数据成员为0或NULL值。2)带参构造函数:用参数初始化数据成员(需判断参数是否有效)。3)void Print( ): 输出本对象的学号、语文成绩(优,良,中,及格,不及格)和数学成绩。4)修改函数void Change( ):从键盘输入新的学号、语文成绩和数学成绩,修改相应数据成员的值。接受输入前屏幕上显示提示输入哪些信息。5)比较函数void Comp(Student &a, Student &b): 比较本学生、a学生和b学生的数学成绩,找出数学成绩最高和最低的学生,输出他们的信息。 主程序:定义三个以上的对象,并且每个成员函数至少被调用一次。*/#includeclass Studentint id; /学生学号。 char yuwen; /语文成绩(五级分制:A、B、C、D和E,其它无效)。 float shuxue; / 数学成绩(百分制)。public:Student()id=0, yuwen=NULL;shuxue=0;Student(int,char,float);void Print( );void Change( );void Comp(Student &a, Student &b);void main()Student A(78,E,86),B(84,D,82),C;C.Change();A.Comp(B,C);Student:Student(int a,char b, float c)id=a, yuwen=b;shuxue=c;void Student:Print( ) cout 学号: id,语文成绩: yuwen,数学成绩: shuxueendl;void Student:Change( )coutidyuwenshuxue;void Student:Comp(Student &a, Student &b)Student max,min;max= shuxuea.shuxue?(shuxueb.shuxue? *this:b):(a.shuxueb.shuxue?a:b);min= shuxuea.shuxue?(shuxueb.shuxue? *this:b):(a.shuxueb.shuxue?a:b);cout数学成绩最高和最低的学生分别是:n;max.Print();min.Print();/*1.实现描述超市的的类Suppermacket类,记录系统中现有商品(用指针实现),定义增加商品的函数Append,删除商品的函数Delete,查询商品的函数Query,显示查询结果; 2.定义商品类Goods,具有商品名称Name,商品价格 Price ,商品数量 number 等属性,操作Sale(销售商品,余额不足时给予提示)、Add(商品上架操作)和ShowMe(显示商品信息)。3.编写main函数,测试以上所要求的各种功能,完成商品的增加、删除和查询商品,以及商品销售和商品上架的操作。 4.可以利用对象成员来实现。*/#include#includeclass Suppermacket;class Goodschar name10;int Price;int number;public:Goods()strcpy(name,);Price=0;number=0;void Sale(int n);void Add();void ShowME()cout商品:name,价格:Price,有number件。nn;friend Suppermacket;class SuppermacketGoods *PGoods;int num;public:Suppermacket(int n=10)PGoods=new Goodsn;num=n;void Append();void Delete();void Query();Suppermacket()delete PGoods;void main()Suppermacket A(3);A.Append();A.Append();A.Delete();A.Query();void Suppermacket:Append()for(int i=0;inum;i+)if(PGoodsi.number=0)PGoodsi.Add();PGoodsi.ShowME();return;cout没有空货架上货了!n;void Suppermacket:Delete()char name10;int n;coutnamen;for(int i=0;inum;i+)if(strcmp(PG,name)=0)PGoodsi.Sale(n);return;cout查无此商品!n;void Suppermacket:Query()char name10;coutname;for(int i=0;inum;i+)if(strcmp(PG,name)=0)PGoodsi.ShowME();return;cout查无此商品!n;void Goods:Sale(int n)if(nnumber)number-=n;ShowME();elsecout商品数量不够,无法销售!n;void Goods:Add()coutnamePricenumber;/*1.建立一个类NUM,求指定范围内的所有素数(质数)。具体要求如下:1)私有数据成员。int data25;依次存放指定范围内的所有素数。int spanl , span2 ;存放要求计算的素数的范围。int num ;存放span1与span2之间的素数个数。2) 公有成员函数。构造函数NUM (int a ,int b);初始化所要求的素数的范围span1、span2及num (值为0)。void process( ): 求出指定范围内的所有素数,把它们依次存放在数组data中,并将求出的素数的个数赋给num 。void print( ):输出求出的所有素数。3)在主程序中对该类进行测试。使用测试数据span1=100 , span2=200 。即求100200之间的所有素数。*/#include#includeclass NUMint data25; /依次存放指定范围内的所有素数。int span1,span2; /存放要求计算的素数的范围。int num; /存放span1与span2之间的素数个数。public:NUM (int a ,int b);void process( );void print( );void main()NUM a(100,200);cess();a.print();NUM:NUM (int a ,int b)span1=a;span2=b;num=0; void NUM:process( )int i,n,f=0;for(i=span1;i=span2;i+)for(n=2,f=0;n=sqrt(i);n+)if(i%n=0)f=1;break;if(f=1)continue;datanum+=i;void NUM:print( )for(int i=0;inum;)coutdatait;if(+i%6=0)coutendl;coutendl;/*已知由一个数组派生出另一个数组的派生规则如下:假定原始数组为a10,新数组为b10,则bi的值为数组a中大于ai的元素的个数。例如,对于说明int a =1,2,3,4,5;int b5;,其中a1=2,数组a中有3个元素比a1大,则b1=3。试建立一个实现此功能的类ARRAY。具体要求如下:1)私有数据成员。 int a10,b10;a存放原始数组,b存放派生数组。2)公有成员函数。 构造函数ARRAY(int data10);初始化成员数组a 。 void process( );由数组a根据上述派生类规则,用循环语句计算数组b的各元素。 void print( );屏幕显示数组a和b。*/#includeclass ARRAYint a10,b10;public:ARRAY(int data10);/初始化成员数组a 。 void process( );/由数组a根据上述派生类规则,用循环语句计算数组b的各元素。 void print( );/屏幕显示数组a和b。;void main()int a=7,4,9,23,56,44,18,33,21,17;ARRAY array(a);cess();array.print();ARRAY:ARRAY(int data10)for(int i=0;i10;i+)ai=datai;bi=0;void ARRAY:process( )for(int i=0;i10;i+)for(int k=0;kai) bi+;void ARRAY:print( )couta10= ;for(int i=0;i10;i+)coutai ;coutendl;coutb10= ;for(i=0;i10;i+)coutbi ;coutendl;/*【要求】按以下描述和要求建立一个类Boxes,执行主函数对其测试。私有成员:int *box ; /指向保管箱数组,下标为箱号,元素值为

温馨提示

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

评论

0/150

提交评论