涉及到判断闰年,x年x月x日是一年中的第几天,用公式计算输入的日期是礼拜几
代码如下:
#include <stdio.h>
int Isleap(int a,int b,int c) //判断是否为闰年函数
{
if ((a % 4 == 0 && a % 100 != 0) || (a % 400 == 0))
{
printf("%d年%d月%d日是闰年\n",a,b,c);
return 1;
}
else
{
printf("%d年%d月%d日不是闰年\n",a,b,c);
return 0;
}
}
int total_day(int a,int b,int c,int ret) //计算输入的日期一年中的第几天
{
int arr[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
int sum = 0, i = 0;
if (ret == 1)
{
arr[1] = 29;
}
while (i < b - 1)
{
sum += arr[i];
i++;
}
sum += c;
return sum;
}
int display_week(int a,int b,int c) //计算输入的日期是礼拜几
{
int W;
if(b == 1)
{
b = 13;
a -= 1;
}
if(b == 2)
{
b = 14;
a -= 1;
}
W = (c + 2 * b + 3 * (b + 1) / 5 + a + a / 4 - a / 100 + a / 400 + 1) % 7;
return W;
}
void display_month(int a,int b,int ret)
{
int i = 0,day = 0,j = 0; //j存放该月的第一天是礼拜几,day存放该月有多少天
printf("%d年%d月\n",a,b);
j = display_week(a,b,1);
int arr[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
if (ret == 1)
arr[1] = 29;
day = arr[b-1];
printf("Sun\tMon\tTue\tWed\tThu\tFri\tSat\n");
printf("----------------------------------------------------\n");
if(j != 0)
{
for(i = 0;i < j;i++)
{
printf("\t");
}
}
for(i = 1;i <= day; i++)
{
printf("%d\t",i);
if((i + day) % 7 == 0)
{
printf("\n");
}
}
}
int main(int argc, const char *argv[])//主函数
{
int a = 0,b = 0,c = 0;
int day = 0;
int ret = 0;
int w = 0;
printf("please enter 3 numbers\n");
scanf("%d %d %d",&a,&b,&c);
ret = Isleap(a,b,c);
day = total_day(a,b,c,ret);
printf("%d年%d月%d日是这一年的%d天\n",a,b,c,day);
w = display_week(a,b,c);
printf("%d年%d月%d日是星期%d\n",a,b,c,w);
display_month(a,b,ret);
putchar('\n');
return 0;
}