C++第4次上机作业

一、两点之间的距离(类)

(1)问题及代码:

/*    
* 文件名称:求两点间距离类    
* 作    者:李锐  
* 完成日期:2016 年 4 月 11日    
* 版 本 号:v1.0    
* 对任务及求解方法的描述部分:   
* 输入描述:无    
* 问题描述:要求用友元函数,一般函数和成员函数输出两点之间的距离; 
* 程序输出:略    
* 问题分析:略   
* 算法设计:略    
*/  
#include<iostream>  
#include<math.h>  
using namespace std;  
class CPoint      
{    
private:      
    double x;  // 横坐标      
    double y;  // 纵坐标      
 public:     
    CPoint(double xx=0,double yy=0):x(xx),y(yy){}
	friend double juli2(CPoint t1,CPoint t2);
    double juli(CPoint);
	double getx()
	{
		return x;
	}
	double gety()
	{
		return y;
	}
};   
double CPoint::juli(CPoint p)  
{  
    double a=sqrt((x-p.x)*(x-p.x)+(y-p.y)*(y-p.y));  
    return a;  
}
double juli2(CPoint t1,CPoint t2)
{
	double b;
	b=sqrt((t1.x-t2.x)*(t1.x-t2.x)+(t1.y-t2.y)*(t1.y-t2.y));
	return b;
}
void main()  
{     
    double dis(CPoint p1,CPoint p2);
    CPoint t1(1.1),t2(3,4);
	cout<<"求点t1(1,1)与点t2(3,4)之间的距离: "<<endl;
    cout<<"调用成员函数,t1与t2之间的距离是:"<<t1.juli(t2)<<endl;  
    cout<<"调用一般函数,t1与t2之间的距离是:"<<dis(t1,t2)<<endl;
	cout<<"调用友元函数,t1与t2之间的距离是:"<<juli2(t1,t2)<<endl;
} 
 double dis(CPoint p1,CPoint p2)  
    {  
        double b;  
        b=sqrt((p1.getx()-p2.getx())*(p1.getx()-p2.getx())+(p1.gety()-p2.gety())*(p1.gety()-p2.gety()));  
        return b;  
    }  

(2)运行结果:


二、时间的友元类:

(1)问题及代码:

/*    
* 文件名称:时间的友元类    
* 作    者:李锐  
* 完成日期:2016 年 4 月 11日    
* 版 本 号:v1.0    
* 对任务及求解方法的描述部分:   
* 输入描述:无    
* 问题描述:要求用友元类; 
* 程序输出:略    
* 问题分析:略   
* 算法设计:略    
*/  
#include<iostream>  
#include<math.h>  
using namespace std;  
class Date  
{  
public:  
    Date(int m=1,int d=1,int y=2000):month(m),day(d),year(y) {} 
    friend class Time; //Time为Date的友元类  
private:  
    int month;  
    int day;  
    int year;  
};    
class Time  
{  
public:  
    Time(int h=0,int m=0,int s=0):hour(h),minute(m),sec(s) {} 
    void add_a_second(Date &);  //增加1秒,1秒后可能会到了下一天,乃到下一月、下一年  
    void display(Date &);  //显示时间,格式:月/日/年 时:分:秒  
private:  
    int hour;  
    int minute;  
    int sec;  
};  
void Time::add_a_second(Date &t)
{
	int a[7]={1,3,5,7,8,10,12};
	int b[4]={4,6,9,11};
	int i;
	sec=sec+1;
	if(sec>60)
	{minute+=1;sec=0;}
	if(minute>=60)
	{	hour+=1;minute=0;}
	if(hour>=24)
	{	t.day+=1;hour=0;}
	for(i=0;i<7;i++)
	{
		if(t.day>31&&t.month==a[i])
		{t.month+=1;t.day=1;}
	}
	for(i=0;i<4;i++)
	{
		if(t.day>30&&t.month==b[i])
			{t.month+=1;t.day=1;}
	}
	if(t.month==2&&t.year%4==0)
	{
		if(t.day>29)
			{t.month+=1;t.day=1;}
	}
	if(t.month==2&&t.year%4!=0)
	{
		if(t.day>28)
			{t.month+=1;t.day=1;}
	}
	if(t.month>12)
	{	t.year+=1;t.month=1;}
}
void Time::display(Date &p)
{
	cout<<p.month<<"/"<<p.day<<"/"<<p.year<<"  "<<hour<<":"<<minute<<":"<<sec<<endl;
}
  
int main( )  
{  
    Time t1(23,59,55);  
    Date d1(12,31,2013);   //测试时,再试试Date d1(2,28,2013)会如何  
    for(int i=0; i<=65; i++)  
    {  
        t1.add_a_second(d1);  
        t1.display(d1);  
    }  
    return 0;  
}  
//下面定义两个类中的成员函数,要求不得再增加成员函数  
//注意体会在Time的成员函数中可以调用Date类的私有数据成员  
(2.1)用d1(12,31,2013)的运行结果:

(2.2)用d1(2,28,2013)的运行结果:




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值