C语言;输入任意年月日,得出周几?
发布网友
发布时间:2022-05-17 08:39
我来回答
共3个回答
热心网友
时间:2023-10-15 13:58
#include"stdio.h"
struct Date
{
int year;
int month;
int day;
};
int f(int x)
{
if(x%4==0&&x%100!=0||x%400==0) return 366;
else return 365;
}
int isleap(int x)
{
if(x%4==0&&x%100!=0||x%400==0) return 1;
else return 0;
}
int s(int a,int b,int c,int d,int year)
{
int array[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31},{31,29,31,30,31,30,31,31,30,31,30,31}};
int cha=0,i;
if(a<c||a==c&&b<d)
{
for(i=a;i<c;i++)
cha+=array[isleap(year)][i-1];
cha+=d-b;
return cha;
}
else
{
for(i=c;i<a;i++)
cha+=array[isleap(year)][i-1];
cha+=b-d;
return -cha;
}
}
int tianshu(struct Date a,struct Date b)//计算两个日期相差的天数
{
int i,tian=0;
if(a.year<b.year)
{
for(i=a.year;i<b.year;i++)
tian+=f(i);
tian+=s(a.month,a.day,b.month,b.day,b.year);
}
else
{
for(i=a.year;i<b.year;i++)
tian-=f(i);
tian+=s(a.month,a.day,b.month,b.day,b.year);
}
return tian;
}
void jieguo(int a)
{
if(a==0) printf("这一天是星期天\n");
if(a==1) printf("这一天是星期一\n");
if(a==2) printf("这一天是星期二\n");
if(a==3) printf("这一天是星期三\n");
if(a==4) printf("这一天是星期四\n");
if(a==5) printf("这一天是星期五\n");
if(a==6) printf("这一天是星期六\n");
if(a==7) printf("这一天是星期天\n");
}
int main()
{
int tian;
struct Date now={2009,4,12};//选择一天作为基准
struct Date chaxun;
printf("请输入你想查询的日期\n");
scanf("%d%d%d",&chaxun.year,&chaxun.month,&chaxun.day);
tian=tianshu(now,chaxun);
if(tian>=0)
{
jieguo(tian%7);
}
else
{
jieguo(7-((-tian)%7));
}
return 0;
}
热心网友
时间:2023-10-15 13:59
笨啊,直接用操作系统的 datetime 来构造一个时间对象不就行了么。
否则这些计算规则那么复杂,很容易出错的。
(我想除了VC,别的任何编译器都有时间类吧)
VC 有ATL 的 COleDateTime,MFC 的CTime;
构造很简单的看MSDN吧。
然后通过成员就能取星期值了
热心网友
时间:2023-10-15 13:59
主要是闰年的判断