c++第三次实验-2

本文介绍了一个用于计算两点间欧几里得距离的函数和一个包含距离计算方法的C++类Cpoint。此外,还展示了一个时间类Time和日期类Date的设计,包括增加一秒的功能和显示更新后的时间日期。

程序及代码

#include<iostream>
#include<cmath>
double distance3(double a,double b,double c,double d)
{
    double ds;
    ds=sqrt((a-c)*(a-c)+(b-d)*(b-d));
    return ds;
}
using namespace std;
class Cpoint
{
public:
    Cpoint(double xx=0,double yy=0);
    double distance1(Cpoint x1);
    friend double distance2(Cpoint &,Cpoint &);
private:
    double x;
    double y;
};
Cpoint::Cpoint(double xx,double yy)
{
    x=xx;
    y=yy;
}
double Cpoint::distance1(Cpoint x1)
{
    double d;
    d=sqrt((x-x1.x)*(x-x1.x)+(y-x1.y)*(y-x1.y));
    cout<<d<<endl;
}
double distance2(Cpoint &t1,Cpoint &t2)
{
    double d;
    d=sqrt((t1.x-t2.x)*(t1.x-t2.x)+(t1.y-t2.y)*(t1.y-t2.y));
    cout<<d<<endl;
}
int main()
{
    Cpoint c1(2,2);
    Cpoint c2(1,1);
    c1.distance1(c2);
    distance2(c1,c2);
    cout<<distance3(1,1,2,2)<<endl;
}

运行结果


程序及代码

#include<iostream>
using namespace std;
class Date; //对Date类的提前引用声明
class Time
{
public:
    Time(int h,int m,int s);
    void add_a_second(Date &);  //增加1秒,1秒后可能会到了下一天,乃到下一月、下一年
    void display(Date &);  //显示时间,格式:月/日/年 时:分:秒
private:
    int hour;
    int minute;
    int sec;
};

class Date
{
public:
    Date(int m,int d,int y);
    friend class Time; //Time为Date的友元类
private:
    int month;
    int day;
    int year;
};

Time::Time(int h,int m,int s)
{
    hour=h;
    minute=m;
    sec=s;
}
Date::Date(int m,int d,int y)
{
    month=m;
    day=d;
    year=y;
}
void Time::add_a_second(Date &d1)
{
    int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    sec++;
    if(sec>=60)//显示时间,格式:月/日/年 时:分:秒
    {
        minute++;
        sec-=60;
        if(minute>=60)
        {
            hour++;
            minute-=60;
            if(hour>=24)
            {
                d1.day++;
                hour-=24;
                if(d1.month!=2)
                {
                    int i;
                    i=d1.month;
                    if(d1.day>a[i])
                    {
                        d1.month++;
                        d1.day-=a[i];
                        if(d1.month>12)
                        {
                            d1.year++;
                            d1.month-=12;
                        }
                    }
                }
                if(d1.month==2)
                {
                    if(d1.year%4==0&&d1.year%100!=0||d1.year%400==0)
                    {
                        if(d1.day>29)
                        {
                            d1.month++;
                            d1.day-=29;
                            if(d1.month>12)
                            {
                                d1.year++;
                                d1.month-=12;
                            }
                        }

                    }
                    else
                    {
                        if(d1.day>28)
                        {
                            d1.month++;
                            d1.day-=28;
                            if(d1.month>12)
                            {
                                d1.year++;
                                d1.month-=12;
                            }
                        }
                    }
                }
            }
        }
    }
}
void Time::display(Date &d1)
{
    cout<<d1.month<<"/"<<d1.day<<"/"<<d1.year<<" "<<hour<<":"<<minute<<":"<<sec<<endl;
}
int main( )
{
    Time t1(23,59,32);
    Date d1(12,31,2013);   //测试时,再试试Date d1(2,28,2013)会如何
    for(int i=0; i<=100; i++)
    {
        t1.add_a_second(d1);
        t1.display(d1);
    }
    return 0;
}


运行结果


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值