用c语言帮我写一个打印某年的万年历的程序
时间: 2023-10-07 17:04:05 浏览: 108
好的,下面是一个简单的打印某年的万年历的 C 语言程序:
```
#include <stdio.h>
// 判断某一年是否为闰年
int is_leap_year(int year)
{
return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
}
// 计算某一年某一月的天数
int get_days(int year, int month)
{
int days;
if (month == 2) {
if (is_leap_year(year)) {
days = 29;
} else {
days = 28;
}
} else if (month == 4 || month == 6 || month == 9 || month == 11) {
days = 30;
} else {
days = 31;
}
return days;
}
// 打印某一年某一月的日历
void print_calendar(int year, int month, int start_day)
{
int days, i, j, k;
days = get_days(year, month);
printf("====================%d年%d月====================\n", year, month);
printf(" 日 一 二 三 四 五 六\n");
k = 1;
for (i = 1; i <= 6; i++) {
for (j = 0; j < 7; j++) {
if (i == 1 && j < start_day) {
printf(" ");
} else if (k <= days) {
printf("%3d", k);
k++;
} else {
break;
}
}
if (k > days) {
break;
}
printf("\n");
}
printf("\n");
}
int main()
{
int year, i, start_day;
printf("请输入年份:");
scanf("%d", &year);
start_day = (1 + 5 * ((year - 1) % 4) + 4 * ((year - 1) % 100) + 6 * ((year - 1) % 400)) % 7;
for (i = 1; i <= 12; i++) {
print_calendar(year, i, start_day);
start_day = (start_day + get_days(year, i)) % 7;
}
return 0;
}
```
该程序会先通过 `is_leap_year` 函数判断某一年是否为闰年,然后通过 `get_days` 函数计算某一年某一月的天数。在 `print_calendar` 函数中,我们首先打印年份和月份,然后根据起始日(即该月的第一天是周几)和天数打印日历。在 `main` 函数中,我们先让用户输入年份,然后通过蔡勒公式计算该年的 1 月 1 日是星期几(可以参考百度百科的蔡勒公式相关内容),然后循环调用 `print_calendar` 函数打印该年的每个月的日历。其中,起始日是根据蔡勒公式计算得出的,每个月的起始日都是上个月的起始日加上上个月的天数再对 7 取余得到的。
阅读全文