这个日历只支持公元1年之后,直接用循环求每年1月1日是星期几。。测试了几组数据看了一下没错,老规矩有错误欢迎指出
#include <stdio.h>
int common_mon[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int leap_mon[12] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
void printBlank(int n)
{
if(n==7) n=0; /*星期天在第一列,不需要输出空格*/
for(int i=0; i<n; i++)
printf(" "); /*输出每个月开始时的空格*/
}
void printCalendar(int weekday, int *p)
{
for(int i=0; i<12; i++){
printf("=================%d月=====================\n", i+1);
printf("Sun Mon Tue Wed Thu Fri Sat\n");
printBlank(weekday);
for(int j=1; j<=p[i]; j++){
printf("%-6d", j);
if(weekday==6) printf("\n"); /*星期六后跳行*/
weekday++;
if(weekday==8) weekday=1; /*控制weekday从8跳回1*/
}
printf("\n\n");
}
}
int main()
{
int y;
while(scanf("%d", &y)!=EOF){
int temp = 1; //temp记录每年开始是星期几
for(int i=1; i<=y; i++){
if(temp > 7) temp -= 7;
if((i%4==0&&i%100!=0)||i%400==0){
if(i==y) printCalendar(temp, leap_mon);
temp += 2;
}
else{
if(i==y) printCalendar(temp, common_mon);
temp++;
}
}
}
return 0;
}