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

举报
资源描述
^. 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+imag i”输出当前对象的实部和虚部,例如:对象的实部和虚部分别是4.2和6.5,则调用print函数输出格式为:4.2+6.5 i; (4)编写主程序,计算出复数对象c1和c2相加结果,并将其结果输出。 #include using namespace std; class Complex { public: Complex(double r=0.0,double i=0.0); friend Complex operator+ (Complex& a,Complex& b); void printf(); private: double real; double imag; }; Complex::Complex(double r,double i) { real=r; imag=i; } Complex operator+ (Complex& a,Complex& b) { Complex temp; temp.real=a.real+b.real; temp.imag=a.imag+b.imag; return temp; } void Complex::printf() { cout<0) cout<<"+"; if(imag!=0) cout< using namespace std; class Time { public: Time(int h=0,int m=0,int s=0);//构造函数 Time operator+(Time &);//运算符重载函数,实现两个时间的相加 void disptime();//显示时间函数 private: int hours; int minutes; int seconds; }; Time::Time(int h,int m,int s) { hours=h; minutes=m; seconds=s; } Time Time::operator+(Time& t) { int h,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; } void Time::disptime() { cout<>h ; cin>>m ; cin>>s ; while(m<0||m>59||s<0||s>59) { cout<<"******时间输入错误!请重新输 !******\n"; cout<<"输入时间 : "; cin>>h ; cin>>m ; cin>>s ; } } int main() { int h1,m1,s1,h2,m2,s2; Input(h1,m1,s1); Input(h2,m2,s2); Time A(h1,m1,s1),B(h2,m2,s2); A=A+B ; A.disptime(); return 0; } 3、用友元运算符函数或成员运算符函数,重载运算符“+”、“-”、“*”,实现对实验二中实现的矩阵类的对象的加、减、乘法。 #include #define hang 2 #define lie 2 class Matrix { private: int Row; int Column; int MATRIX[hang][lie]; public: Matrix(int r,int c) { Row=r; Column=c; } Matrix() {} void TypeMatrix(); void Print() const; Matrix& operator = (const Matrix& rhs); Matrix operator + (const Matrix& rhs); Matrix operator - (const Matrix& rhs); }; void Matrix::TypeMatrix() { std::cout<<"请输入矩阵:"<>MATRIX[i][j]; } } } void Matrix::Print() const { std::cout<<"矩阵的结果为:"<MATRIX[g][h]=rhs.MATRIX[g][h]; } } } return *this; } Matrix Matrix::operator + (const Matrix& rhs) { int i,j; for(i=0;iMATRIX[i][j]+rhs.MATRIX[i][j]; } } return *this ; } Matrix Matrix::operator - (const Matrix& rhs) { int i,j; for(i=0;iMATRIX[i][j]-rhs.MATRIX[i][j]; } } return *this ; } int main() { Matrix a,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类的框架,用于完成集合基本运算所需的各项功能。 class Set { public: Set(); void input(int d);//向集合中添加一个元素 int length();//返回集合中的元素个数 int getd(int i);//返回集合中位置i的元素 void display();//显示集合的所有元素 Set operator+(Set s1);//成员运算符重载函数,实现集合的并运算 Set operator-(Set s1);//成员运算符重载函数,实现集合的差运算 Set operator*(Set s1);//成员运算符重载函数,实现集合的交运算 Set operator=(Set s1);//成员运算符重载函数,实现集合的赋值运算 protected: int len;//统计结合中元素的个数; int s[MAX];//存放集合中的元素 }; #include using namespace std; const int MAX = 50; class set { public: set(); void input(int d); int length(); int getd(int i); void disp(); set operator+(set s1); set operator-(set s1); set operator*(set s1); set operator=(set s1); protected: int len; int s[MAX]; }; set::set() { len = 0; //s ={0}; cout << "***建立一个集合***\n"; } void set::input(int d) { len = d; cout << "输入集合元素" << d <<" 个:"; for(int i = 0; i < d; i++ ) cin >> s[i] ; } int set::length() { int n=0; while(s[n] != \0) { n++; } return n; } int set::getd(int i) { return 0; } void set::disp() { for (int i = 0; i < len; i++) cout << s[i] << " "; //cout << endl; } set set::operator+(set s1) //------------------------并运算---------------- { //strcat(s,s1.s); for (int i = 0; i < len; i++) { for(int j = 0; j < s1.len; j++) //在s1.s[]中选出不相同的 { if(s[i] == s1.s[j]) //选出相同的元素删掉得到s1.s与s不同的元素 { for (;j < s1.len; j++) s1.s[j] = s1.s[j+1]; --s1.len; } } } for (int j = 0;j < s1.len; j++ ) // 将s1.s[]中不相同的加在s[]后面 { s[len] = s1.s[j]; len++; } s[len+s1.len] = \0; return *this; } set set::operator-(set s1) //------------------------差运算------------------ { int t; for (int i = 0; i < s1.len; i++) { for(int j = 0; j < len; j++) { if(s1.s[i] == s[j] ) //选出s与s1.s中相同的元素并且删除掉 { t = j; for (;t < len; t++) s[t] = s[t+1]; --len; } } } return *this; } set set::operator*(set s1) // -------------------交运算---------------------- { int m[MAX]; int l = 0; for (int i = 0; i < s1.len; i++) { for(int j = 0; j < len; j++) // 选出相同的元素 { if(s1.s[i] == s[j]) { m[l] = s[j]; l++; } } } for (i = 0; i < l; i++) s[i] = m[i]; s[l] = \0; len = l; return *this; } set set::operator=(set s1) { for (int i = 0; i < s1.length(); i++) s[i] = s1.s[i]; len = s1.len; return *this; } int main() { int n; set C; set A; cout << "建立含有几个元素的集合:"; cin >> n; A.input(n); set B; cout << "建立含有几个元素的集合:"; cin >> n; B.input(n); cout << endl; cout << "两集合的差集(A - B)为:"; C = A - B; C.disp(); cout << endl; /* cout << "两集合的交集(A * B)为:"; C = A * B; C.disp(); cout << endl; */ /* cout << "两集合的并集(A + B)为:"; C = A + B; C.disp(); cout << endl; */ return 0; } ……………………说明分别分开运行…………………… 6、写一个程序,定义抽象类Container: class Container { protected: double radius; public: Container(double r);//抽象类Container的构造函数 virtual double surface_area()=0;//纯虚函数surface_area virtual double volume()=0;//纯虚函数volume }; 【要求】 建立3个继承Container的派生类:Sphere(球体)、Cylinder(圆柱体)、Cube(正方体),让每一个派生类都包含虚函数surface_area()和volume(),分别用来球体、圆柱体和正方体的表面积和体积。要求写出主程序,应用C++的多态性,分别计算边长为6.0的正方体、半径为5.0的球体,以及半径为5.0和高为6.0的圆柱体的表面积和体积。 #include #include using namespace std; class container { protected: double radius; public: container(double radius1); virtual double surface_area()=0; virtual double volume()=0; }; container::container(double radius1) { radius=radius1; } //派生类cube、sphere与cylinder class cube : public container { public: cube(double radius1):container( radius1 ){} virtual double surface_area(); virtual double volume(); }; double cube :: surface_area() { return 6*radius*radius; } double cube :: volume() { return radius*radius*radius; } class sphere : public container { public: sphere(double radius1):container( radius1 ) {} virtual double surface_area(); virtual double volume(); }; double sphere :: surface_area() { return 4*3.14*radius*radius; } double sphere :: volume() { return 4.0/3.0*3.14*radius*radius*radius; } class cylinder : public container { protected: double high; public: cylinder(double high1,double radius1):container(radius1) {high=high1; } virtual double surface_area(); virtual double volume(); }; double cylinder :: surface_area() { return 2*3.14*radius*radius+2*3.14*high*radius; } double cylinder :: volume() { return 3.14*radius*radius*high; } int main() { container *p; cube cc(6.0); sphere ss(5.0); cylinder cy(6.0,5.0); p=&cc; cout<<"正方体的表面积:"<surface_area()<volume()<surface_area()<volume()<surface_area()<volume()<
展开阅读全文
相关搜索
温馨提示:
taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。

当前位置:首页 > 教育专区 > 教案示例


本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁