目录
第一题
1.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方法以复数的形式输出
1.2源代码
#include<iostream>
using namespace std;
class Complex
{
private:
double real; //复数实部
double image; //复数虚部
public:
Complex () //无参构造函数,将复数对象的实部和虚部均置为0
{
real=0;
image=0;
}
Complex (double r, double i) //有参构造函数,设置对象的实部和虚部
{
real=r;
image=i;
}
Complex AddCom(Complex c2); //调用者对象与对象c2相加,返回Complex类对象
void OutCom () ; //输出调用者对象的有关数据(各分量)
};
Complex Complex::AddCom(Complex c2)
{
Complex c;
c.real=real+c2.real;
c.image=image+c2.image;
return c;
}
void Complex::OutCom()
{
if(real==0)
{
cout<<image<<"i";
}
else if(image==0)
{
cout<<real;
}
else
cout<<real<<"+"<<image<<"i";
}
int main()
{
double a,b,c,d;
Complex cz;
cin>>a>>b>>c>>d;
Complex cx(a,b),cy(c,d);
cz=cx.AddCom(cy);
cz.OutCom();
return 0;
}
1.3样例输出
第二题
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时还要“进位”到年等。
2.2源代码
#include<iostream>
using namespace std;
class DateType
{
//自定义的日期类 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(); //增加 1 天
bool Equal(DateType dt2); //判断二日期是否相等
void PrintDate(); //屏幕输出日期对象的有关数据(年、月、日)
};
void DateType::IncrementDay()
{
int i;
int s[12]={31,28,31,30,31,30,31,31,30,31,30,31};
if((y%4==0&&y%100!=0)||(y%400==0))
{
s[1]=29;
}
for(i=0;i<12;i++)
{
if(i==m)
{
break;
}
}
if(d==s[i-1])
{
d=1;
if(m>=12)
{
m=1;
y++;
}
else m++;
}
else d++;
}
bool DateType::Equal(DateType dt2)
{
if(y==dt2.y&&m==dt2.m&&d==dt2.d)
{
cout<<"True"<<endl;
}
else cout<<"False"<<endl;
}
void DateType::PrintDate()
{
cout<<y<<":"<<m<<":"<<d<<endl;
}
int main()
{
int a,b,c,d,e,f;
cin>>a>>b>>c>>d>>e>>f;
DateType dt1(a,b,c),dt2(d,e,f);
dt1.PrintDate();
dt2.PrintDate();
dt1.Equal(dt2);
dt1.IncrementDay();
dt2.IncrementDay();
dt1.PrintDate();
dt2.PrintDate();
return 0;
}
2.3样例输出
第三题
3.1题目描述
设计一个学生类(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
3.2源代码
#include<iostream>
#include<string.h>
using namespace std;
class CStudent
{ //学生类 CStudent
private:
unsigned long reg_num; //数据成员:注册号
char name[30]; //数据成员:姓名
float math, eng, comp; //数据成员:数学、英语、计算机成绩
public: //公有成员函数
float Sum(); //求三门课总成绩的函数 Sum
float Average(); //求三门课平均成绩的函数 Average
void Display(); //显示学生数据信息的函数 Display
void SetData (unsigned long r, char* n, float m, float e, float c) ;
//设置学生数据信息的函数 SetData
};
float CStudent::Sum()
{
float sum;
sum=math+eng+comp;
return sum;
}
float CStudent::Average()
{
float ave;
ave=(math+eng+comp)/3;
return ave;
}
void CStudent::Display()
{
cout<<reg_num<<" "<<name<<" "<<math<<" "<<eng<<" "<<comp<<endl;
}
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()
{
unsigned long r;
char n[30];
float m;
float e,c;
int total;
float max=0;
int a;
cin>>total;
CStudent stu[150];
for(int i=0;i<total;i++)
{
cin>>r>>n>>m>>e>>c;
stu[i].SetData(r,n,m,e,c);
}
cout<<"TOTAL="<<total<<endl;
for(int i=0;i<total;i++)
{
cout<<"CStudent "<<i+1<<" : ";
stu[i].Display() ;
}
for(int i=0;i<total;i++)
{
cout<<"CStudent"<<i+1<<".Sum="<<stu[i].Sum()<<",CStudent"<<i+1<<".average="<<stu[i].Average()<<endl;
}
for(int i=0;i<total;i++)
{
if(stu[i].Sum()>max)
{
max=stu[i].Sum();
a=i;
}
else continue;
}
cout<<"class_Sum_max="<<max<<endl;
cout<<"The infomation of the CStudent with class_Sum_max : ";
stu[a].Display();
return 0;
}
3.3样例输出
那一年,花开得不是最好,可是还好,我遇到你;那一年,花开得好极了,好像专是为了你;那一年,花开得很迟,还好,有你。 ——汪曾祺《人间草木》