高级语言程序设计(实验六)

目录

第一题

1.1题目描述

1.2源代码

1.3样例输出

第二题

2.1题目描述

2.2源代码

2.3样例输出

 第三题

3.1题目描述

3.2源代码

3.3样例输出


第一题

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,它具有数据成员 ymd,用来表示当前日期的年、月、日。
而后设计该类欲实现(完成)的功能,进而设计出相应的类成员函数。


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,分别是dt1dt2的年月日。请先输出dt1dt2,然后判断dt1dt2是否相等,再对dt1,dt2分别增加一天。最后输出dt1dt2
注意:在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样例输出

 


那一年,花开得不是最好,可是还好,我遇到你;那一年,花开得好极了,好像专是为了你;那一年,花开得很迟,还好,有你。                                          ——汪曾祺《人间草木》

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、已知一个链表中存储了若干名学生的信息,每名学生的信息包括:学号、英语成绩、数学成绩、计算机成绩。 现编写一个函数search(),要求对输入的无序学号进行排序,然后采用折半查找方法查找输入学生学号,并输出该学生各科成绩。 2、设计一个学生类(CStudent),它具有私有数据成员是:学号、姓名、数学、外语和计算机课程的成绩。要求能实现求三门课总成绩和平均成绩,并能设置和显示学生信息 (类声明和成员函数定义分离)。设计一个友元函数,按照成绩从高到低的顺序输出姓名、学号和成绩信息。 3、实现雇员管理,类Employee需存储雇员的姓名。这种信息对于所有雇员(包括Employee的派生类的雇员)是很普遍的。现在假设从雇员类Employee派生出了小时工类HourlyWorker、计件工类PieceWorker、老板类Boss和销售员类CommissionWorker。小时工每周工作40小时,超过40小时部分的报酬是平时的1.5倍;计件工是按生产的工作件数计算报酬的,每件的报酬是固定的,假设他只生成一种类型的工件,因而类PieceWorker的private数据成员是生产的工件数量和每件的报酬;老板每周有固定的薪水;销售员每周有小部分固定的基本工资加上其每周销售额的固定百分比。设计和规划该类体系,并分别产生每个基类及派生类对象,并显示该员工的工资。 4、约瑟夫生死者游戏 每30个旅客同乘一条船,因为严重超载,加上风高浪大,危险万分;因此船长告诉乘客,只有将全船一半的旅客投入海中,其余人才能幸免遇难。无奈,大家只得同意这种办法,并议定30个人围成一圈,由第一个人数起,依次报数,数到第9人,便把他投入大海中,然后再从他的下一个人数起,数到第9人,再将他扔进大海中,如此循环地进行,直到剩下15个乘客为止。问哪些位置是将是被扔下大海的位置。 5、求二叉树上结点的路径 要求在采用链式存储结构存储的二叉树上,以bt指向根结点,p指向任一给定的结点,编程实现求出从根节点到给定结点之间的路径。 6、图的操作 (1)写出将一个无向图的邻接矩阵转换成邻接表的算法 (2)设计一个算法,判断无向图G是否连通。若连通则返回1; 返回0。 7、内部排序算法的性能分析 要求:(1)对冒泡排序、直接排序、简单选择排序、快速排序、希尔排序、堆排序算法进行比较; (2)待排序表的表长不小于100,表中数据随机产生,至少用5组不同数据作比较,比较指标有:关键字参加比较次数和关键字的移动次数(关键字交换记为3次移动); (3)输出各种算法的排序结果和比较结果。 8.2、通讯录管理系统 编程实现通讯录管理系统,要求该系统能够完成通讯信息的建立、查询、插入、删除等基本功能。程序运行后至少给出下面7个菜单项的选择并分别实现其功能: 0、 通讯录的建立 1、通讯录信息输出 2、 通讯者结点信息的删除 3、通讯者结点信息的查询 4、 通讯者结点信息的插入 5、通讯录信息更改 6、 退出通讯录管理系统 设计的任务要求,通讯录中每个学生的基本信息应包括姓名、地址、电话等基本信息,采用链表存储结构。(复习c语言结构体和链表知识)

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值