[c++] 实验六 类


实验6-1(A)

【题目描述】
自定义一个复数类型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
#include<iostream>
#include<cmath>
#include<string>
using namespace std;

class Complex { 
       double real; //复数实部 
       double imag; //复数虚部 
	public: 
       Complex (); //无参构造函数,将复数对象的实部和虚部均置为0 
       Complex (double r, double i):real(r),imag(i){}; //有参构造函数,设置对象的实部和虚部 
       Complex AddCom(Complex c2); //调用者对象与对象c2相加,返回Complex类对象 
       void OutCom () ; //输出调用者对象的有关数据(各分量) 
}; 
Complex Complex::AddCom(Complex c2)
{
	Complex c3(real+c2.real,imag+c2.imag);
	return c3;
}
void Complex::OutCom()
{
	if (imag==0&&real!=0) cout<<real<<endl;
	else if (real==0&&imag!=0) cout<<imag<<'i'<<endl;
	else if (real==0&&imag==0) cout<<0<<endl;
	else cout<<real<<'+'<<imag<<'i'<<endl;
}

int main()
{
	double a,b,c,d;
	cin>>a>>b>>c>>d;
	Complex c1(a,b),c2(c,d);
	c1=c1.AddCom(c2);
	c1.OutCom();
}

实验6-2(B)

【题目描述】
自定义一个简单日期类 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<cmath>
#include<string>
using namespace std;
int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};

int checkRun(int y)
{
	if (y%400==0||(y%100!=0&&y%4==0)) return 1;
	return 0;
}

class DateType { 
 //自定义的日期类 DateType
    	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()
{
	d++;month[2]+=checkRun(y);
	if (d>month[m]){
		d=1;m++;
		if (m>12) {m=1;y++;}
	}
	month[2]-=checkRun(y);
}
bool DateType::Equal(DateType dt2)
{
	if (y==dt2.y&&m==dt2.m&&d==dt2.d) return true;
	return false;
}
void DateType::PrintDate()
{
	cout<<y<<':'<<m<<':'<<d<<endl;
}

int main()
{
	int y1,y2,m1,m2,d1,d2;
	cin>>y1>>m1>>d1>>y2>>m2>>d2;
	DateType dt1(y1,m1,d1),dt2(y2,m2,d2);
	dt1.PrintDate();
	dt2.PrintDate();	
	dt1.IncrementDay();
	dt2.IncrementDay();
	cout<<(dt1.Equal(dt2)?"True":"False")<<endl;
	dt1.PrintDate();
	dt2.PrintDate();	
}

实验6-3(C)

【题目描述】
设计一个学生类(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
 };
  1. 在主函数,通过使用“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();”来输出该学生有关的全部数据信息。
  1. 程序执行后的输入输出界面样式可设计为:
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<cmath>
#include<cstring> 
using namespace std;
class CStudent { //学生类 CStudent
        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
 };
 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;
}
float CStudent::Sum()
{
	return math+eng+comp;
} 
float CStudent::Average()
{
	return (math+eng+comp)/3.0;
}
void CStudent::Display()
{
	cout<<reg_num<<" "<<name<<" "<<math<<" "<<eng<<" "<<comp<<endl;
}


int main()
{
	char c,name_[30];
	unsigned long reg_num_;
    float math_,eng_,comp_,sum_max,sum_n;
	string s; 
	int n,x,res,res_num;
	CStudent stu[160];
	cin>>n;
	cout<<"TOTAL="<<n<<endl;
	for (int i=1;i<=n;i++)
	{
		cin>>res_num>>name_>>math_>>eng_>>comp_;
		stu[i].SetData(res_num,name_,math_,eng_,comp_);
		cout<<"CStudent "<<i<<" : ";
		stu[i].Display();
	}
	for (int i=1;i<=n;i++)
	{
		sum_n=stu[i].Sum();
		if (sum_n>sum_max) {
			sum_max=sum_n;
			res=i;
		}
		cout<<"CStudent"<<i<<".Sum="<<sum_n<<",CStudent"<<i<<".average="<<stu[i].Average()<<endl;
	}
	cout<<"class_Sum_max="<<sum_max<<endl<<"The infomation of the CStudent with class_Sum_max : ";
	stu[res].Display(); 
}
  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值