用C++定义一个结构体用于存储年、月、日数据,并定义函数用于求两个日期之间的天数。
展开全部
#include<stdio.h>
#include<conio.h>
typedef struct date
{
int year;
int month;
int day;
}Date;
int getDay(Date date1, Date date2)
{ // 1 2 3 4 5 6 7 8 9 10 11
int mon[11]={31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30};
int i;
long temp1=date1.day, temp2=date2.day;//day
for(i=date1.month-2; i>=0; i--)
{
temp1+=mon[i];
}
for(i=date2.month-2; i>=0; i--)
{
temp2+=mon[i];
}//month
temp1+=((date1.year-1)*365)+(date1.year/4);
temp2+=((date2.year-1)*365)+(date2.year/4);//year
return temp2-temp1;
}
void main()
{
Date date1, date2;
date1.year=2010;
date1.month=5;
date1.day=20;
date2.year=2011;
date2.month=5;
date2.day=25;
printf("这两个日期之间的天数为:%d", getDay(date1, date2));
getch();
}
这里 算法很巧妙,符合我的风格
不过有很多漏洞的,比如日期的格式,还有计算两个日子之间的天数可能有负数
建议使用面向对象的思想
#include<conio.h>
typedef struct date
{
int year;
int month;
int day;
}Date;
int getDay(Date date1, Date date2)
{ // 1 2 3 4 5 6 7 8 9 10 11
int mon[11]={31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30};
int i;
long temp1=date1.day, temp2=date2.day;//day
for(i=date1.month-2; i>=0; i--)
{
temp1+=mon[i];
}
for(i=date2.month-2; i>=0; i--)
{
temp2+=mon[i];
}//month
temp1+=((date1.year-1)*365)+(date1.year/4);
temp2+=((date2.year-1)*365)+(date2.year/4);//year
return temp2-temp1;
}
void main()
{
Date date1, date2;
date1.year=2010;
date1.month=5;
date1.day=20;
date2.year=2011;
date2.month=5;
date2.day=25;
printf("这两个日期之间的天数为:%d", getDay(date1, date2));
getch();
}
这里 算法很巧妙,符合我的风格
不过有很多漏洞的,比如日期的格式,还有计算两个日子之间的天数可能有负数
建议使用面向对象的思想
追问
请问什么叫做面向对象的思想啊?
追答
前面的看明白了吗?我是直接算 指定日期 到 0000年0月0日 的天数,然后两个天数相减,得到两个日期之间的天数。
1.月份直接加前面的月的最大天数,比如现在是5月,那么月数加的有1月(31天)、2月(28)、3月(31)和4月(30)
2.闰年直接是判断能否被4整除,自动取整数(有漏洞的)
面向对象就是将日期看做是一个对象,将定义日期、日期的规范的约束(比如一个月最多31天,有的月还只有28天)和对日期的操作(比如你求连个日期之间的天数的方法)都放在这个对象的行为中。
要使用的时候直接拿过来使用就是了。
就好比汽车这个对象,除了有轮子、样式、座位等属性之外,要有前进、后退、亮大灯 等的操作。都是和汽车绑在一起的,是属于汽车的,而不是和汽车没有关系,他们一起才作为汽车。
结构体的话只有数据,没有方法,只能使用其他方法来操作他。这个就是区别。
关键是理解这个思想!你试着理解看看。
参考资料: 自己马马虎虎写的,有问题再找我
光点科技
2023-08-15 广告
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件...
点击进入详情页
本回答由光点科技提供
展开全部
#include<iostream.h>
void main()
{
struct date
{
int year;
int month;
int day;
}date1,date2;
cout<<"年:";
cin>>date1.year;
cout<<"月:";
cin>>date1.month;
cout<<"日:";
cin>>date1.day;
cout<<"年:";
cin>>date2.year;
cout<<"月:";
cin>>date2.month;
cout<<"日:";
cin>>date2.day;
int a,b;
a=date1.year*365+date1.month*30+date1.day;
b=date2.year*365+date2.month*30+date2.day;
int c;
(c>=0)?c=c:c=-c;
cout<<"相差"<<c<<"天";
}
void main()
{
struct date
{
int year;
int month;
int day;
}date1,date2;
cout<<"年:";
cin>>date1.year;
cout<<"月:";
cin>>date1.month;
cout<<"日:";
cin>>date1.day;
cout<<"年:";
cin>>date2.year;
cout<<"月:";
cin>>date2.month;
cout<<"日:";
cin>>date2.day;
int a,b;
a=date1.year*365+date1.month*30+date1.day;
b=date2.year*365+date2.month*30+date2.day;
int c;
(c>=0)?c=c:c=-c;
cout<<"相差"<<c<<"天";
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
结构体为:
struct Time
{
int year;
int month;
int day;
};
函数为:
int DaysNum(Time tm1, Time tm2)
{
//把自定义的两个时间,转换成tm结构
tm Time1={0};
Time1.tm_year = tm1.year-1900;
Time1.tm_mon = tm1.month-1;
Time1.tm_mday = tm1.day;
tm Time2={0};
Time2.tm_year=tm2.year-1900;
Time2.tm_mon=tm2.month-1;
Time2.tm_mday=tm2.day;
//把tm结构的时间转换成time_t(也就是long型的数据,以秒为单位)的形式
time_t lTime1=mktime(&Time1);
time_t lTime2=mktime(&Time2);
//求出两个日期之间相差的秒数
time_t lTime;
if(lTime1<=lTime2)
{
lTime=lTime2-lTime1;
}
else
{
lTime=lTime1-lTime2;
}
//两个日期之间相差的秒数除以1天的秒数(60*60*24),得到的就是天数了
int iDayNum=lTime/(60*60*24);
return iDayNum;
}
我已经测过了,没问题,有问题的话,就给我留言,希望对你有帮助
struct Time
{
int year;
int month;
int day;
};
函数为:
int DaysNum(Time tm1, Time tm2)
{
//把自定义的两个时间,转换成tm结构
tm Time1={0};
Time1.tm_year = tm1.year-1900;
Time1.tm_mon = tm1.month-1;
Time1.tm_mday = tm1.day;
tm Time2={0};
Time2.tm_year=tm2.year-1900;
Time2.tm_mon=tm2.month-1;
Time2.tm_mday=tm2.day;
//把tm结构的时间转换成time_t(也就是long型的数据,以秒为单位)的形式
time_t lTime1=mktime(&Time1);
time_t lTime2=mktime(&Time2);
//求出两个日期之间相差的秒数
time_t lTime;
if(lTime1<=lTime2)
{
lTime=lTime2-lTime1;
}
else
{
lTime=lTime1-lTime2;
}
//两个日期之间相差的秒数除以1天的秒数(60*60*24),得到的就是天数了
int iDayNum=lTime/(60*60*24);
return iDayNum;
}
我已经测过了,没问题,有问题的话,就给我留言,希望对你有帮助
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询