问题描述:
定义一个表示时间(包括年、月、日、时、分、秒)的结构体,然后完成下面的功能。
提示:将各个功能分别设计成函数实现,在 main 函数中调用,进行测试。可以设计一个函数,
即刻进行测试,以降低复杂度。
要实现的功能是:
(1)输入一个时间(注意各部分数据的取值范围)将输入的时间保存在一个结构体变量中;
(2)输出该日在本年中是第几天(注意闰年问题);
(3)输出这是这一天中的第几秒;
提示:将各个功能分别设计成函数实现,在 main 函数中调用,进行测试。可以设计一个函数,
即刻进行测试,以降低复杂度。
要实现的功能是:
(1)输入一个时间(注意各部分数据的取值范围)将输入的时间保存在一个结构体变量中;
(2)输出该日在本年中是第几天(注意闰年问题);
(3)输出这是这一天中的第几秒;
(4)输出这是这一年中的第几秒;(不要认为这个数荒唐,在计算中需要取随机数时需要一个
不会重复的“种子数”,这个秒数是常用的。)
(5)求你输入的时间 d 天后是哪年哪月哪日,将结果保存在一个结构体变量中输出;(你的万
天日期靠这个功能了)——插讲一个故事。当年老贺由小孩儿过百日,想到自己的万日在哪天。编
程计算,结果刚过了十几天,那个懊恼啊。第二个万日得再等 26 年多(现在离第二个万日靠近了),
第三个万日,谁敢说一定能过上?20 岁左右的你,要算清楚了。在第(1)问中输入你的生日及时
辰,d值取为 10000,可以算出你的万日,大概在 26 岁多。
(6)求你输入的时间 s 秒后是何日何时,将结果保存在一个结构体变量中输出;
(7)用结构体变量给定两个时间,求相差多少天?相差多少秒?
不会重复的“种子数”,这个秒数是常用的。)
(5)求你输入的时间 d 天后是哪年哪月哪日,将结果保存在一个结构体变量中输出;(你的万
天日期靠这个功能了)——插讲一个故事。当年老贺由小孩儿过百日,想到自己的万日在哪天。编
程计算,结果刚过了十几天,那个懊恼啊。第二个万日得再等 26 年多(现在离第二个万日靠近了),
第三个万日,谁敢说一定能过上?20 岁左右的你,要算清楚了。在第(1)问中输入你的生日及时
辰,d值取为 10000,可以算出你的万日,大概在 26 岁多。
(6)求你输入的时间 s 秒后是何日何时,将结果保存在一个结构体变量中输出;
(7)用结构体变量给定两个时间,求相差多少天?相差多少秒?
代码:
#include <iostream>
using namespace std;
struct Date
{
int year;
int month;
int day;
int hour;
int minute;
int second;
};
Date me1,me;
int myday(int a,int b,int c)
{
int sum=0;
int s[12]={0,31,28,31,30,31,30,31,31,30,31,30};
if((a%4==0&&a%100!=0)||(a%400==0))
s[2]++;
while (b>0)
sum+=s[--b];
sum+=c;
return sum;
}
int daysOfMonth(int a,int b)
{
int s[12]={0,31,28,31,30,31,30,31,31,30,31,30};
if((b%4==0&&b%100!=0)||(b%400==0))
s[2]++;
return s[a];
}
int dsecond(int a,int b,int c)
{
return a=a*3600+b*60+c;
}
int ysecond(int a,int b,int c,int d,int e,int f)
{
return a=(myday(a,b,c)-1)*3600*24+dsecond(d,e,f);
}
void mydate(int a,int b,int c,int d)
{
me1.month=1;
me1.day=0;
me1.year=0;
int i;
d=d+myday(a,b,c);
i=d/1461;
me1.year=a+4*i+(d-i*1461)/365;
d=d-i*1461;
d=d-(d/365)*365;
while(d>daysOfMonth(me1.month,me1.year))
{
d-=daysOfMonth(me1.month,me1.year);
++me1.month;
}
me1.day+=d;
}
void mysecond(int second)
{
int i;
me1.hour=me.hour;
me1.minute=me.minute;
me1.second=me.second;
i=second/(3600*24);
mydate(me.year,me.month,me.day,i);
second-=i*3600*24;
i=second/3600;
me1.hour+=i;
if(me1.hour>24)
me1.day++,me1.hour-=24;
second=second-i*3600;
i=second/60;
me1.minute+=i;
second=second-i*60;
if(me1.minute>60)
me1.hour++,me1.minute-=60;
me1.second+=second;
if(me1.second>60)
me1.minute++,me1.second-=60;
}
int main()
{
int day,second,day1,day2,sum=0,i;
cout<<"input your year month day hour minute second"<<'\n';
cin>>me.year>>me.month>>me.day>>me.hour>>me.minute>>me.second;
cout<<"这是本年的第"<<myday(me.year,me.month,me.day)<<"天"<<'\n';
cout<<"这是当天的第"<<dsecond(me.hour,me.minute,me.second)<<"秒"<<'\n';
cout<<"这是当年的第"<<ysecond(me.year,me.month,me.day,me.hour,me.minute,me.second)<<"秒"<<'\n';
cout<<"请输入一个天数";
cin>>day;
mydate(me.year,me.month,me.day,day);
cout<<day<<"天过后是"<<me1.year<<"年"<<me1.month<<"月"<<me1.day<<"日"<<'\n';
cout<<"请输入一个秒数";
cin>>second;
mysecond(second);
cout<<second<<"秒数后是"<<me1.year<<"年"<<me1.month<<"月"<<me1.day<<"日"<<me1.hour<<"时"<<me1.minute<<"分"<<me1.second<<"秒"<<'\n';
cout<<"输入2个不同的日期:"<<'\n';
cin>>me.year>>me.month>>me.day>>me.hour>>me.minute>>me.second;
cin>>me1.year>>me1.month>>me1.day>>me1.hour>>me1.minute>>me1.second;
day1=myday(me.year,me.month,me.day);
day2=myday(me1.year,me1.month,me1.day);
sum=day2-day1;
sum=sum>0?sum:-sum;
i=me.year-me1.year;
i=i>0?i:-i;
sum+=i*365;
if (i>=4)
sum+=i/4;
else for(i=me.year+1; i<me1.year; i++)
{
if((i%4==0&&i%100!=0)||(i%400==0))
sum++;
}
cout<<"这两个时间相差"<<sum<<"天."<<endl;
cout<<"这两个时间相差"<<sum*3600*24<<"秒."<<endl;
return 0;
}
运行结果:
学习心得:
4个小时的人生就这样度过了!!!