打印出万年历 输入要求 四位数年份和该年元旦星期几 算法说明 一年十二个月 计算第一月的天数 输出第一月的年历 天数的最大值有大小月 闰年之分输出年历 月份表头 星期表头 该月第一天位置 输入日历c语言代码
时间: 2023-10-30 15:21:59 浏览: 95
好的,以下是一个简单的打印万年历的C语言实现:
```
#include <stdio.h>
int main() {
int year, first_day, month_days[13]; // 月份从1到12,month_days[0]不使用
// 输入年份和元旦星期几
printf("请输入年份和该年元旦的星期几(星期日为0,星期一为1,以此类推):\n");
scanf("%d %d", &year, &first_day);
// 计算每个月的天数
for (int i = 1; i <= 12; i++) {
if (i == 2) {
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
month_days[i] = 29; // 闰年2月有29天
} else {
month_days[i] = 28; // 非闰年2月有28天
}
} else if (i == 4 || i == 6 || i == 9 || i == 11) {
month_days[i] = 30; // 小月有30天
} else {
month_days[i] = 31; // 大月有31天
}
}
// 输出第一月的年历
printf("%d年1月\n", year);
printf("一 二 三 四 五 六 日\n"); // 星期表头
printf("---------------------\n"); // 分隔线
// 输出第一天之前的空格
for (int i = 0; i < first_day; i++) {
printf(" ");
}
// 输出第一天到最后一天的日期
for (int i = 1; i <= month_days[1]; i++) {
printf("%2d ", i);
if ((first_day + i) % 7 == 0) {
printf("\n"); // 每输出7个数字换行
}
}
printf("\n"); // 每个月输出完毕换行
// 输出剩余月份的年历
for (int i = 2; i <= 12; i++) {
printf("%d年%d月\n", year, i);
printf("一 二 三 四 五 六 日\n"); // 星期表头
printf("---------------------\n"); // 分隔线
// 计算该月第一天是星期几
first_day = (first_day + month_days[i-1]) % 7;
// 输出第一天之前的空格
for (int j = 0; j < first_day; j++) {
printf(" ");
}
// 输出第一天到最后一天的日期
for (int j = 1; j <= month_days[i]; j++) {
printf("%2d ", j);
if ((first_day + j) % 7 == 0) {
printf("\n"); // 每输出7个数字换行
}
}
printf("\n"); // 每个月输出完毕换行
}
return 0;
}
```
注意,上述代码中,我们使用了一个数组`month_days`来保存每个月的天数,其中`month_days[0]`不使用。我们首先计算出每个月的天数,然后按照题目要求输出每个月的日历。在输出每个月的日历时,我们需要先计算该月第一天是星期几,然后输出第一天之前的空格,最后输出该月的日期。