收藏 分销(赏)

第二阶段-面向对象-矿大.doc

上传人:仙人****88 文档编号:7906954 上传时间:2025-01-26 格式:DOC 页数:11 大小:79.50KB 下载积分:10 金币
下载 相关 举报
第二阶段-面向对象-矿大.doc_第1页
第1页 / 共11页
第二阶段-面向对象-矿大.doc_第2页
第2页 / 共11页


点击查看更多>>
资源描述
第二阶段  面向对象程序设计 1.题目: 自定义一个示意性的复数类型complex,其中含有若干个成员函数,使用该类可以完成复数的加减乘除法以及对复数的输出。请完成类定义,并编制主函数,说明complex类对象,对定义的各成员函数进行调用。 源代码: #include <iostream> using namespace std; class complex{ //定义一个complex类,里面包含所需要的基本数据和基本函数 private: double real; double imag; public: complex(); complex(double r,double i); complex jiaCom(complex c2); complex jianCom(complex c2); complex chengCom(complex c2); complex chuCom(complex c2); complex moCom(complex c2); void out(); void outCom(); }; complex::complex() {real=0;imag=0;} //类外定义析构函数 complex::complex(double r,double i):real(r),imag(i){} void complex::out() //定义复数的输出函数 {cout<<"原复数为:("<<real<<"+"<<imag<<"i)"<<endl;} complex complex::jiaCom(complex c2) //定义复数的加法函数 { real=real+c2.real;imag=imag+c2.imag; cout<<"两复数进行加法运算后的负数为:"; return complex(real,imag); } complex complex::jianCom(complex c2) //定义复数的减法函数 { real=real-c2.real;imag=imag-c2.imag; cout<<"两复数进行减法运算后的负数为:"; return complex(real,imag); } complex complex::chengCom(complex c2) //定义复数的乘法函数 { double x,y; x=real;y=imag; real=x*c2.real-y*c2.imag; imag=c2.real*y+x*c2.imag; cout<<"两复数进行乘法运算后的负数为:"; return complex(real,imag); } complex complex::chuCom(complex c2) //定义复数的除法函数 { double x,y; x=real;y=imag; real=(x*c2.real+y*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag); imag=(c2.real*y-x*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag); cout<<"两复数进行除法运算后的负数为:"; return complex(real,imag); } void complex::outCom() //运算函数输出 {cout<<"("<<real<<"+"<<imag<<"i)"<<endl<<endl<<endl;} int main() { while(1) { complex c1(2,4),c2(6,10); int a; c1.out(); c2.out(); cout<<"请输入复数的运算方式:"<<endl; cout<<"(其中用数字1代表进行加运算,数字2代表进行减运算,"<< "数字3代表进行乘运算,数字4代表进行除运算)"<<endl; cin>>a; if(a!=1&&a!=2&&a!=3&&a!=4) {cout<<"不符合要求。"<<endl;break;} //调用复数的加减乘除函数 if(a==1) c1.jiaCom(c2); if(a==2) c1.jianCom(c2); if(a==3) c1.chengCom(c2); if(a==4) c1.chuCom(c2); c1.outCom(); } return 0; } 2. 自定义一个简单的日期类DateType,它具有数据成员y、m、d,用来表示当前日期的年、月、日。而后设计该类欲实现(完成)的功能,进而设计出相应的类成员函数。 源代码: #include<iostream> using namespace std; class DateType{ private: int y,m,d; public: DateType(int yo=1,int m0=1,int d0=1); //定义一个天类,包含一些基本的函数 void incrementDay(); bool equal(DateType dt2); void printDate(); void set_DateType(); }; DateType::DateType(int y0,int m0,int d0):y(y0),m(m0),d(d0){} void DateType::set_DateType() {cin>>y>>m>>d;} void DateType::incrementDay() //对输入的日期加一天 { if(d==28&&m==2) { if((y%4==0&&y%100!=0)||y%400==0) d++; else {d=0;m=3;} } if(d==29&&m==2) { if((y%4==0&&y%100!=0)||y%400==0) {d=1;m=3;} } if(d==30) { if(m==1||m==3||m==5||m==7||m==8||m==10||m==12) d++; else {d=1;m++;} } if(d==31) { if(m==12) {d=1;m=1;y++;} else {d=1;m++;} } else d++; } bool DateType::equal(DateType dt2) //判断该日期是否和系统预设的日期相同,并返回一定值 { if(y==dt2.y&&m==dt2.m&&d==dt2.d) return true; else return false; } void DateType::printDate() { cout<<"此时该天的日期是:"<<y<<"年"<<m<<"月"<<d<<"日"<<endl; } int main() { DateType dt1(2011,1,1),dt2,dt3; cout<<"系统预设:"; dt1.printDate(); cout<<"输入两个不同的日期:"<<endl; //输入不同的日期,并对其输出 dt2.set_DateType(); dt3.set_DateType(); cout<<"系统输入为:";dt2.printDate(); cout<<"系统输入为:";dt3.printDate(); dt2.incrementDay(); //调用加一天的函数 dt3.incrementDay(); cout<<"输入日期加后:"<<endl; dt2.printDate(); dt3.printDate(); if(dt2.equal(dt1)) cout<<"系统输入与系统预设日期相同。"<<endl; //比较是否相同并输出比较结果 else cout<<"系统输入与系统预设日期不相同。"<<endl; if(dt3.equal(dt1)) cout<<"系统输入与系统预设日期相同。"<<endl; else cout<<"系统输入与系统预设日期不相同。"<<endl; return 0; } 源代码: #include<iostream> #include<iomanip> using namespace std; class baseCla { public: virtual double fib(int n)=0; }; class fib1Cla:public baseCla { public: virtual double fib(int n); }; class fib2Cla:public baseCla { public: virtual double fib(int n); }; class fib3Cla:public baseCla { public: virtual double fib(int n); }; double fib1Cla::fib(int n) { long double a=1,b=1; for(int i=1;i<=n/2;i++) {a=a+b;b=a+b;} return b; } double fib2Cla::fib(int n) { long double a[2000]={1,1}; double b; if(n>2000) cout<<"error!"<<endl; for(int i=2;i<=n;i++) {a[i]=a[i-1]+a[i-2];b=a[i];} return b; } double fib3Cla::fib(int n) { long double a; if(n==1||n==0) a=1; else a=fib(n-1)+fib(n-2); return a; } void fun(baseCla *p,int n) { long double d=p->fib(n-1); cout.flags(ios::scientific); cout.precision(15); cout<<"fib("<<n<<")="<<d<<endl; } void main() { fib1Cla obj1; fib2Cla obj2; fib3Cla obj3; cout<<"--------------fib1Cla--------------"<<endl; fun(&obj1,1476); cout<<"--------------fib2Cla--------------"<<endl; fun(&obj2,888); cout<<"--------------fib3Cla--------------"<<endl; fun(&obj3,35); } 3(2).自定义如下形式的一个称为point的类,其对象表示平面上的一个点(x,y),并通过类成员方式对该类重载二目运算符“+”和“^”,用来求出两个对象的和以及两个对象(平面点)的距离。各运算符的使用含义(运算结果)如下所示:          (1.2, -3.5) + (-1.5, 6) = (-0.3, 2.5);          (1.2, -3.5) ^ (-1.5, 6) = 9.87623。 并编制主函数,说明类对象,而后通过类对象实现所定义的相关运算(以验证其正确性)。 源代码: #include<iostream> #include<cmath> using namespace std; class point { private: double x,y; public: point (double x0=0, double y0=0){x=x0; y=y0;} point operator + (point &pt2); double operator ^ (point &pt2); void display(); }; point point::operator + (point &pt2) { point c; c.x=x+pt2.x; c.y=y+pt2.y; return c; }; double point::operator ^ (point &pt2) { double c; c=sqrt((x-pt2.x)*(x-pt2.x)+(y-pt2.y)*(y-pt2.y)); return c; }; void point::display() { cout<<"("<<x<<","<<y<<")"; }; int main() { point pt,pt1(1.2,-3.5),pt2(-1.5,6); double c; pt=pt1+pt2; c=pt1^pt2; pt1.display(); cout<<"+"; pt2.display(); cout<<"="; pt.display(); cout<<endl; pt1.display(); cout<<"^"; pt2.display(); cout<<"="<<c<<endl; return 0; } 6.编写一个具有如下样式的类模板tmplt,用于实现所谓的反序输出问题,其中使用了类型参数T(使所处理的元素类型可变化)以及普通参数n(元素个数也可变化): 源代码: #include<iostream> using namespace std; template <class T,int n> class tmplt { T arr[n]; public: void dateIn(); void reverseOut(); }; template <class T,int n> void tmplt<T,n>::dateIn() { for(int i=0;i<n;i++) cin>>arr[i]; } template <class T,int n> void tmplt<T,n>::reverseOut() { cout<<"该位数的反序数为:"; for(int i=n-1;i>=0;i--) cout<<arr[i]<<" "; cout<<endl; } int main() { tmplt<int,8> t1; cout<<"请输入个整型数:"<<endl; t1.dateIn(); t1.reverseOut(); tmplt<float,8> t2; cout<<"请输入个浮点型数:"<<endl; t2.dateIn(); t2.reverseOut(); tmplt<char,8> t3; cout<<"请输入个字符:"<<endl; t3.dateIn(); t3.reverseOut(); return 0; } 5.设计一个类CStudent,类中包含一个学生的基本数据如下: 编号,姓名,性别,年龄,数学成绩,计算机成绩,外语成绩。 并假设编号为整数,且从1号往后连续编码;姓名为字符串,性别为字符。如: 1 LiPing m 18 89 98 94 请采用binary文件形式,并使用随机读写处理方式,对自定义CStudent类的对象数据进行存储与读写处理(即是 说,总按具有连续编码的编号num为"序"来对文件中的各对象数据进行随机读写处理)。并设计该类的成员函数, 而且对输出运算符"<<"进行重载,使该运算符能够完成将一个学生的信息输出到屏幕上。要求成员函数完成以下功能: (1) 从键盘输入一个学生的有关信息,并将它们存入到数据文件中(按编号来确定写出位置)。 (2) 按编号对学生信息信息进行检索并将检索结果显示在屏幕上。 (3) 计算某编号学生的总成绩。 源代码: #include<fstream> #include<iostream> #include<iomanip> using namespace std; class CStudent { int Num; char Name[10]; char Sex[10]; int Age; int Math,Com,Eng,Total; public: void getdata() //输入类元素 { cout<<"编号: "; cin>>Num; cout<<endl<<"姓名: "; cin>>Name; cout<<endl<<"性别: "; cin>>Sex; cout<<endl<<"年龄: "; cin>>Age; cout<<endl<<"数学成绩: "; cin>>Math; cout<<endl<<"计算机成绩:"; cin>>Com; cout<<endl<<"外语成绩: "; cin>>Eng; cout<<endl; } void outdate() //输出类元素 { Total=Math+Com+Eng; cout<<setw(5)<<Num<<setw(5)<<Name<<setw(5)<<Sex<<setw(5)<<Age<<setw(8) <<Math<<setw(10)<<Com<<setw(8)<<Eng<<setw(8)<<Total<<endl; } }; void get() //把类数据输入到磁盘中 { ofstream outfile("stud.dat"); CStudent s; int n; cout<<"输入数据:"<<endl; cout<<"学生人数:"; cin>>n; for(int i=0;i<n;i++) { cout<<"第"<<i+1<<"个学生:"<<endl; s.getdata(); outfile.write((char*)&s,sizeof(s)); }; outfile.close(); } void put() //把类数据从磁盘中输出 { ifstream infile("stud.dat"); CStudent s; cout<<"输出数据:"<<endl; cout<<" 编号姓名性别年龄数学成绩计算机成绩外语成绩总分"<<endl; infile.read((char *)&s,sizeof(s)); while(infile) { s.outdate(); infile.read((char*)&s,sizeof(s)); }; infile.close(); } int main() { int a; do //选择应执行程序 { cout<<"选择:1:输入数据2:输出数据其他退出:"; cin>>a; switch(a) { case 1:get();break; //输入数据 case 2:put();break; //输出数据 default:cout<<"error"<<endl;break; } }while(a==1||a==2); return 0; } 第 11 页 共 11 页
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 小学其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服