1、
【问题描述】自定义一个复数类型Complex,其中含有若干成员函数,使用该类可以完成复数的加法以及对复数的输出。请完成类定义,并编制主函数,说明Complex类对象,对定义的各成员函数进行调用。 class Complex { double real; //复数实部 double imag; //复数虚部 public: Complex (); //无参构造函数,将复数对象的实部和虚部均置为0 Complex (double r, double i); //有参构造函数,设置对象的实部和虚部 Complex AddCom(Complex c2); //调用者对象与对象c2相加,返回Complex类对象 void OutCom () ; //输出调用者对象的有关数据(各分量) }; 具体 要求如下: 1、实现有参构造函数 Complex (double r, double i); 2、实现 Complex AddCom(Complex c2); 调用者对象与对象c2相加,返回Complex类对象 3、实现void OutCom () ;实现输出调用者对象的有关数据分量(一定要输出虚部的符号i),如果该数为纯虚数时,不需要输出实部,当虚部为0时,不需要输出实部。 4.编制主函数main,作用有参函数说明类对象cx,cy,使用 Complex 调用AddCom实现复数加法,并将相加的结果调用 OutCom方法以复数的形式输出。 【输入形式】输入包括a,b,c,d四个整数,第一个复数为a+bi,第二个复数为c+di 【输出形式】 【样例输入】1 2 3 4 【样例输出】4+6i 【样例说明】 【评分标准】提交源文件“6-1.cpp”。
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; class Complex { private: double real,imag; public: Complex() { real=imag=0; } Complex(double r,double i) { real=r;imag=i; } Complex AddCom(Complex c2) { Complex tmp; tmp.real=real+c2.real; tmp.imag=imag+c2.imag; return tmp; } void OutCom() { if(real==0&&imag) { cout<<imag<<"i"; } if(real&&imag) { cout<<real<<"+"<<imag<<"i"; } if(imag==0) { cout<<real; } } }; int main() { double a,b,c,d; cin>>a>>b>>c>>d; Complex c1(a,b),c2(c,d),c3; // c1(a,b); // c2(c,d); c3=c1.AddCom(c2); c3.OutCom(); return 0; }
2、
前程序片段编程题:实验六 类和对象---实验六(第七章)--日期类(实践2) 1. 【问题描述】 自定义一个简单日期类 DateType,它具有数据成员 y、m、d,用来表示当前日期的年、月、日。 而后设计该类欲实现(完成)的功能,进而设计出相应的类成员函数。 class DateType { //自定义的日期类 DateType int y,m,d; //数据成员,表示当前日期的年、月、日 public: DateType(int y0=1, int m0=1, int d0=1); //构造函数,设定年、月、日;并设置参数默认值 void IncrementDay(); //增加 1 天 bool Equal(DateType dt2); //判断二日期是否相等 void PrintDate(); //屏幕输出日期对象的有关数据(年、月、日) }; 1、完成有参构造函数 2、完成 void IncrementDay()函数,计算天数加1后的日期。 3、完成Equal(DateType dt2)函数,判断两个日期是否相等。 4、完成打印输出函数PrintDate(),在屏幕上输出日期对象的有关数据(年、月、日) 5、编写并完成主函数,实现输入包含六个整数,说明DateType类对象dt1,dt2,分别是dt1和dt2的年月日。请先输出dt1,dt2,然后判断dt1,dt2是否相等,再对dt1,dt2分别增加一天。最后输出dt1,dt2。 注意:在IncrementDay成员函数中,当对日期增加1天后,要注意所谓的“进位”问题:首先算出本“日”所在的月份具有的天数N(注意闰年与平年的2月份天数不一样),若加1之后的“日”数值超过所在的月份具有的天数N时,“进位”到月,而月份若超过12时还要“进位”到年等。 【输入形式】 两个日期的月、日、年 【输出形式】 【样例输入】1 1 1 1999 12 31 【样例输出】 1:1:1 1999:12:31 False 1:1:2 2000:1:1
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; class DateType { private: int y,m,d; public: DateType(int y0=1,int m0=1,int d0=1) { y=y0; m=m0; d=d0; } void IncrementDay() { int a[13]; a[1]=a[3]=a[5]=a[7]=a[8]=a[10]=a[12]=31; a[2]=28;a[4]=a[6]=a[9]=a[11]=0; if(y%100&&y%4==0||y%400==0) a[2]=29; d++; if(d>a[m]) { m++; d=1; } if(m>12) { y++; m=1; d=1; } } bool Equal(DateType dt2) { if(y==dt2.y&&m==dt2.m&&d==dt2.d) return true; return false; } void PrintDate() { cout<<y<<":"<<m<<":"<<d<<endl; } }; int main() { int y1,r1,n1,y2,r2,n2; cin>>n1>>y1>>r1; cin>>n2>>y2>>r2; DateType d1(n1,y1,r1),d2(n2,y2,r2); d1.PrintDate(); d2.PrintDate(); if(d1.Equal(d2)) cout<<"True "; else cout<<"False "; d1.IncrementDay();d1.PrintDate(); d2.IncrementDay();d2.PrintDate(); return 0; }
3、题目描述
【问题描述】 设计一个学生类(CStudent),其私有数据成员:注册号、姓名、数学、外语、计算机课程的成绩。公有成员函数是:求三门课总成绩的函数 Sum;求三门课平均成绩的函数 Average;显示学生数据信息的函数 Display;设置学生数据信息的函数 SetData。 1.可按如下样式设计 CStudent类的各数据成员以及成员函数 class CStudent { //学生类 CStudent unsigned long reg_num; //数据成员:注册号 char name[30]; //数据成员:姓名 float math, eng, comp; //数据成员:数学、英语、计算机成绩 public: //公有成员函数 float Sum(); //求三门课总成绩的函数 Sum float Average(); //求三门课平均成绩的函数 Average Display(); //显示学生数据信息的函数 Display SetData (unsigned long r, char* n, float m, float e, float c) ; //设置学生数据信息的函数 SetData }; 在主函数,通过使用“CStudent stu[150];”的语句,来说明一个CStudent类对象的数组stu,而后通过各对象stu[i]来处理并求取每一学生的总成绩、平均成绩等。 (1)输入本次欲处理的学生人数 TOTAL(小于等于 150 的正整数); (2)输入全班 TOTAL 个学生的有关信息,依次放入对象数组的各元素 stu[i]中(通过使用“stu[i].SetData(...);”形式的语句来实现); (3)对全班TOTAL个学生,依次通过对象stu[i]来求出其总成绩、平均成绩等(其中要使用形如“stu[i].Sum()”以及“stu[i].Average()”式样的对成员函数进行调用的语句),并同时求出全班学生总成绩最高者处于 stu 数组的下标位置idx_max,而后通过使用“stu[idx_max].Display();”来输出该学生有关的全部数据信息。 3.程序执行后的输入输出界面样式可设计为: TOTAL=3 CStudent 1 : 100001 ma 78 86 90(注意空格) CStudent 2 : 100002 li 85 91 88 CStudent 3 : 100003 hu 82 89 88 CStudent1.Sum=254,CStudent1.average=84.6667 CStudent2.Sum=264,CStudent2.average=88 CStudent3.Sum=259,CStudent3.average=86.3333 class_Sum_max=264 The infomation of the CStudent with class_Sum_max : 100002 li 85 91 88 【输入形式】 TOTAL=3 CStudent 1 : 100001 ma 78 86 90(注意空格) CStudent 2 : 100002 li 85 91 88 CStudent 3 : 100003 hu 82 89 88 【输出形式】 CStudent1.Sum=254,CStudent1.average=84.6667 CStudent2.Sum=264,CStudent2.average=88 CStudent3.Sum=259,CStudent3.average=86.3333 class_Sum_max=264 The infomation of the CStudent with class_Sum_max : 100002 li 85 91 88 【样例输入】 3 100001 ma 78 86 90 100002 li 85 91 88 100003 hu 82 89 88 【样例输出】 TOTAL=3 CStudent 1 : 100001 ma 78 86 90(注意空格) CStudent 2 : 100002 li 85 91 88 CStudent 3 : 100003 hu 82 89 88 CStudent1.Sum=254,CStudent1.average=84.6667 CStudent2.Sum=264,CStudent2.average=88 CStudent3.Sum=259,CStudent3.average=86.3333 class_Sum_max=264 The infomation of the CStudent with class_Sum_max : 100002 li 85 91 88
#include<iostream> #include<string.h> using namespace std; class Cstudent { unsigned reg_num; char name[30]; float math,eng,comp; public: float Sum(); float Average(); void Display(); void setData(unsigned long r, char* n, float m, float e, float c); }; void Cstudent::Display() { cout<<reg_num<<" "<<name<<" "<<math<<" "<<eng<<" "<<comp<<endl; } float Cstudent::Sum() { return math+eng+comp; } float Cstudent::Average() { return (math+eng+comp)/3; } void Cstudent::setData(unsigned long r,char* n,float m,float e,float c) { reg_num=r;strcpy(name,n);math=m;eng=e;comp=c; } int main() { int n;//学生的数量 unsigned long num; char name[30]; float math,eng,comp; float max=0; int max_stu=0;//总成绩最高的学生的下标位置 cin>>n; Cstudent *cp=new Cstudent[n]; //下面代码用于输入每个学生的学号,姓名,数学成绩,英语成绩,计算机成绩,寻找总成绩最高的学生的下标位置 for(int i=0;i<n;i++)//** { cin>>num>>name>>math>>eng>>comp; cp[i].setData(num,name,math,eng,comp); } for(int i=0;i<n;i++) { if(cp[i].Sum()>max) { max=cp[i].Sum(); max_stu=i; } } cout<<"TOTAL="<<n<<endl; for(int i=0;i<n;i++) { cout<<"CStudent "<<i+1<<" : "; cp[i].Display(); } for(int i=0;i<n;i++) { cout<<"CStudent"<<i+1<<".Sum="<<cp[i].Sum(); cout<<",CStudent"<<i+1<<".average="<<cp[i].Average()<<endl; } cout<<"class_Sum_max="<<max<<endl; cout<<"The infomation of the CStudent with class_Sum_max : "; //输出总成绩最高的学生信息 cp[max_stu].Display(); //释放cp delete cp; return 0; }
总结:
/*错误1: Complex c1,c2,c3; c1(a,b); c2(c,d); 改正: Complex c1(a,b),c2(c,d); 一开始就要初始化 错误2: 注意函数返回值类型 错误3: void Cstudent::setData(unsigned long r,char* n,float m,float e,float c) { reg_num=r;strcpy(name,n);math=m;eng=e;comp=c; } 一开始不知道怎么把n赋值给name 错误4: 下标从0开始 ....