C语言打印任意年份日历,每一行打印三个月份
时间: 2023-06-14 09:05:06 浏览: 145
以下是C语言代码实现,可以打印任意年份的日历,每行三个月份:
```c
#include <stdio.h>
// 判断是否为闰年
int isLeapYear(int year) {
return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
}
// 计算某年某月的天数
int getDaysOfMonth(int year, int month) {
int days[] = {31, 28 + isLeapYear(year), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
return days[month - 1];
}
// 打印某年某月的日历
void printCalendar(int year, int month) {
// 计算该月第一天是星期几
int firstDayOfWeek = 1; // 假设公元1年1月1日是星期1
for (int i = 1; i < year; i++) {
firstDayOfWeek = (firstDayOfWeek + 365 + isLeapYear(i)) % 7;
}
for (int i = 1; i < month; i++) {
firstDayOfWeek = (firstDayOfWeek + getDaysOfMonth(year, i)) % 7;
}
// 打印日历表头
printf("%d年%d月\n", year, month);
printf("日 一 二 三 四 五 六\n");
// 打印该月日历
int daysOfMonth = getDaysOfMonth(year, month);
for (int i = 0; i < firstDayOfWeek; i++) {
printf(" ");
}
for (int i = 1; i <= daysOfMonth; i++) {
printf("%2d ", i);
if ((firstDayOfWeek + i) % 7 == 0) {
printf("\n");
}
}
printf("\n");
}
int main() {
int year;
printf("请输入年份:");
scanf("%d", &year);
for (int i = 1; i <= 12; i++) {
printCalendar(year, i);
if (i % 3 == 0) {
printf("\n");
}
}
return 0;
}
```
代码中,`isLeapYear`函数用于判断某年是否为闰年,`getDaysOfMonth`函数用于计算某年某月的天数,`printCalendar`函数用于打印某年某月的日历。在`main`函数中,循环打印该年的所有月份,并每三个月份打印一个空行。
阅读全文