#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int isleap(int year); //判断是否为闰年
int month_day(int year, int month); //返回某月的天数
int month_first_day_week(int year, int month); //返回某月的第一天是星期几
void print_calendar(int year, int month); //打印某年某月日历
int main() {
int year, month;
scanf("%d %d", &year, &month);
print_calendar(year, month);
return 0;
}
int isleap(int year) {
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
return 1;
else
return 0;
}
int month_day(int year, int month) {
switch (month)
{
case 2:
if (isleap(year)) {
return 29;
}
else {
return 28;
}
break;
case 4:
case 6:
case 9:
case 11:
return 30;
break;
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
return 31;
break;
default:
break;
}
}
int month_first_day_week(int year, int month) {
int week = 1;
for (int i = 1900; i < year; i++) {
++week; // 365 % 7 = 1
if (isleap(i)) {
++week;
}
}
for (int i = 1; i < month; i++) {
week += month_day(year, i);
}
week %= 7;
return week;
}
void print_calendar(int year, int month) {
int days, day_week;
int i = 1;
int day = 1;
printf("%4d-%02d\n", year, month);
printf("Mon Tue Wed Thu Fri Sat sun\n\n");
days = month_day(year, month);
day_week = month_first_day_week(year, month);
if (day_week == 0) {
day_week = 7;
}
while (i < day_week) {
printf(" ");
i++;
}
while (day <= days) {
printf("%-6d", day);
day++;
i = i % 7;
if (i == 0) {
printf("\n\n");
}
//i = i % 7;
i++;
}
if (i != 0) {
printf("\n");
}
}
C语言习题:打印XX年XX月日历的程序
最新推荐文章于 2022-03-14 20:36:55 发布