河北工业大学-C++实验报告实验四

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1、编写一个程序,要求:(1)生明一个类Complex(复数类),定义类Complex的两个对象c1和c2,对象c1通过构造函数直接指定复数的实部和虚部(类私有数据成员为double类型:real和imag)为2.5及3.7,对象c2通过构造函数直接指定复数的实部和虚部为4.2及6.5;(2)定义友元运算符重载函数,它以c1、c2对象为参数,调用该函数时能返回两个复数对象相加操作;(3)定义成员函数print,调用该函数时,以格式“real+imagi”输出当前对象的实部和虚部,例如:对象的实部和虚部分别是4.2和6.5,则调用print函数输出格式为:4.2+6.5i;(4)编写主程序,计算出复数对象c1和c2相加结果,并将其结果输出。#includeiostreamusingnamespacestd;classComplex{public:Complex(doubler=0.0,doublei=0.0);friendComplexoperator+(Complex&a,Complex&b);voidprintf();private:doublereal;doubleimag;};Complex::Complex(doubler,doublei){real=r;imag=i;}Complexoperator+(Complex&a,Complex&b){Complextemp;temp.real=a.real+b.real;temp.imag=a.imag+b.imag;returntemp;}voidComplex::printf(){coutreal;if(imag0)cout+;if(imag!=0)coutimag'i'endl;}voidmain(){Complexc1(2.5,3.7),c2(4.2,6.5),c3;c3=c1+c2;c3.printf();}2、编写一个程序,其中设计一个时间类Time,用来保存时、分、秒等私有数据成员,通过重载操作符“+”实现两个时间的相加。要求将小时范围限制在大于等于0,分钟范围限制在0~59分,秒钟范围限制在0~59秒。提示:时间类Time的参考框架如下:classTime{public:Time(inth=0,intm=0,ints=0);//构造函数Timeoperator+(Time&);//运算符重载函数,实现两个时间的相加voiddisptime();//显示时间函数private:inthours,minutes,seconds;};#includeiostreamusingnamespacestd;classTime{public:Time(inth=0,intm=0,ints=0);//构造函数Timeoperator+(Time&);//运算符重载函数,实现两个时间的相加voiddisptime();//显示时间函数private:inthours;intminutes;intseconds;};Time::Time(inth,intm,ints){hours=h;minutes=m;seconds=s;}TimeTime::operator+(Time&t){inth,m,s;s=(t.seconds+seconds)%60;m=(minutes+t.minutes+(t.seconds+seconds)/60)%60;h=hours+t.hours+(minutes+t.minutes+(t.seconds+seconds)/60)/60;hours=h;minutes=m;seconds=s;return*this;}voidTime::disptime(){couthours:minutes:seconds.endl;}voidInput(int&h,int&m,int&s){cout输入时间:;cinh;cinm;cins;while(m0||m59||s0||s59){cout******时间输入错误!请重新输!******\n;cout输入时间:;cinh;cinm;cins;}}intmain(){inth1,m1,s1,h2,m2,s2;Input(h1,m1,s1);Input(h2,m2,s2);TimeA(h1,m1,s1),B(h2,m2,s2);A=A+B;A.disptime();return0;}3、用友元运算符函数或成员运算符函数,重载运算符“+”、“-”、“*”,实现对实验二中实现的矩阵类的对象的加、减、乘法。#includeiostream#definehang2#definelie2classMatrix{private:intRow;intColumn;intMATRIX[hang][lie];public:Matrix(intr,intc){Row=r;Column=c;}Matrix(){}voidTypeMatrix();voidPrint()const;Matrix&operator=(constMatrix&rhs);Matrixoperator+(constMatrix&rhs);Matrixoperator-(constMatrix&rhs);};voidMatrix::TypeMatrix(){std::cout请输入矩阵:std::endl;for(inti=0;ihang;i++){for(intj=0;jlie;j++){std::cinMATRIX[i][j];}}}voidMatrix::Print()const{std::cout矩阵的结果为:std::endl;for(intq=0;qhang;q++){for(ints=0;slie;s++){std::coutMATRIX[q][s]\t;if(s==lie-1){std::coutstd::endl;}}}}Matrix&Matrix::operator=(constMatrix&rhs){if(this!=&rhs){for(intg=0;ghang;g++){for(inth=0;hlie;h++){this-MATRIX[g][h]=rhs.MATRIX[g][h];}}}return*this;}MatrixMatrix::operator+(constMatrix&rhs){inti,j;for(i=0;ihang;i++){for(j=0;jlie;j++){MATRIX[i][j]=this-MATRIX[i][j]+rhs.MATRIX[i][j];}}return*this;}MatrixMatrix::operator-(constMatrix&rhs){inti,j;for(i=0;ihang;i++){for(j=0;jlie;j++){MATRIX[i][j]=this-MATRIX[i][j]-rhs.MATRIX[i][j];}}return*this;}intmain(){Matrixa,b,c,d;a.TypeMatrix();b.TypeMatrix();c=a+b;c.Print();d=a-b;d.Print();}4、编写一个程序,用于进行集合的和、并和交运算。例如输入整数集合{9,5,4,3,6,7}和{2,4,6,9},计算出他们进行集合的并、差和交运算后的结果。【提示】(1)可以用一下表达式实现整数集合的基本运算:s1+s2两个整数集合的并运算s1-s2两个整数集合的差运算s1*s2两个整数集合的交运算(2)参考以下Set类的框架,用于完成集合基本运算所需的各项功能。classSet{public:Set();voidinput(intd);//向集合中添加一个元素intlength();//返回集合中的元素个数intgetd(inti);//返回集合中位置i的元素voiddisplay();//显示集合的所有元素Setoperator+(Sets1);//成员运算符重载函数,实现集合的并运算Setoperator-(Sets1);//成员运算符重载函数,实现集合的差运算Setoperator*(Sets1);//成员运算符重载函数,实现集合的交运算Setoperator=(Sets1);//成员运算符重载函数,实现集合的赋值运算protected:intlen;//统计结合中元素的个数;ints[MAX];//存放集合中的元素};#includeiostreamusingnamespacestd;constintMAX=50;classset{public:set();voidinput(intd);intlength();intgetd(inti);voiddisp();setoperator+(sets1);setoperator-(sets1);setoperator*(sets1);setoperator=(sets1);protected:intlen;ints[MAX];};set::set(){len=0;//s={0};cout***建立一个集合***\n;}voidset::input(intd){len=d;cout输入集合元素d个:;for(inti=0;id;i++)cins[i];}intset::length(){intn=0;while(s[n]!='\0'){n++;}returnn;}intset::getd(inti){return0;}voidset::disp(){for(inti=0;ilen;i++)couts[i];//coutendl;}setset::operator+(sets1)//------------------------并运算----------------{//strcat(s,s1.s);for(inti=0;ilen;i++){for(intj=0;js1.len;j++)//在s1.s[]中选出不相同的{if(s[i]==s1.s[j])//选出相同的元素删掉得到s1.s与s不同的元素{for(;js1.len;j++)s1.s[j]=s1.s[j+1];--s1.len;}}}for(intj=0;js1.len;j++)//将s1.s[]中不相同的加在s[]后面{s[len]=s1.s[j];len++;}s[len+s1.len]='\0';return*this;}setset::operator-(sets1)//------------------------差运算------------------{intt;for(inti=0;is1.len;i++){for(intj=0;jlen;j++){if(s1.s[i]==s[j])//选出s与s1.s中相同的元素并且删除掉{t=j;for(;tlen;t++)s[t]=s[t+1];--len;}}}return*this;}setset::operator*(sets1)//-------------------交运算----------------------{intm[MAX];intl=0;for(inti=0;is1.len;i++){for(intj=0;jlen;j++)//选出相同的元素{if(s1.s[i]==s[j]){m[l]=s[j];l++;}}}for(i=0;il;i++)s[i]=m[i];s[l]='\0';len=l;return*this;}setset::operator=(sets1){for(inti=0;is1.length();i++)s[i]=s1.s[i];len=s1.len;return*this;}intmain(){intn;setC;setA;co

1 / 15
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功