按要求输入一个日期,计算是这年的第几天和星期几,然后在main()调用子函数中输出结果。
给出已知信息:
1.闰年的判断公式:年份能被4整除不能被100整除,或是能被400整除;
2.某年y的元旦是星期几的判断公式:(y+(y-1)/4-(y-1)/100+(y-1)/400)%7 (0表示星期天)
3.isleap(): 返回一个年份是否是闰年;
4.week(): 计算该日期是这年的第几天, 并计算是星期几, 返回这两个计算结果;
#include<stdio.h>
const char* weekday[] = { "Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday" };
const char* months[] = { "January", "February", "March", "April", "May", "June", "July", "August",
"September", "October", "November", "December" };
int dayspermonth[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int isleap(int y)
{
if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0)
return 1;
else
return 0;
}//isleap
void week(int y,int m,int d,int *pd,int *pw)
{
int i;
*pd = 0,*pw = 0;
for (i = 1; i < m; i++)
{
*pd += dayspermonth[i];
}//for
*pd += d;
int t = (y + (y - 1) / 4 - (y - 1) / 100 + (y - 1) / 400) % 7;//为计算1-1为周几
int l = *pd % 7;//为计算,假设 1-1为周一,则输入日期为一周的第几天,0为第7天
*pw = (l + t - 1) % 7;//计算当1-1为t时,输入日期为周几,要减去1-1日的当天所以减一
}//week
int main()
{
int year, month, day;
scanf("%d-%d-%d", &year, &month, &day);
int t = isleap(year);//调用函数判断是否闰年
if (t) {
dayspermonth[2] += 1; // 是闰年, 二月份+1
}//if
int d, w;
week(year, month, day, &d, &w);
printf("%d\n", d);
printf("%s", weekday[w]);
return 0;
}