用c语言编写程序由用户输入某一年份,然后可以分月输出当年的年历
时间: 2024-03-11 09:48:39 浏览: 22
好的,下面是用 C 语言编写的程序,可以根据用户输入的年份,输出当年的年历(包含月份)。
```c
#include <stdio.h>
int main()
{
int year, month, days, week, i, j;
// 用户输入年份
printf("请输入年份:");
scanf("%d", &year);
// 判断是否为闰年,计算每个月的天数
int leap = 0;
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) { // 判断是否为闰年
leap = 1;
}
int days_in_month[12] = {31, 28 + leap, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // 每个月的天数
// 输出年历
printf("\n\n%d年的年历:\n", year);
for (month = 1; month <= 12; month++) {
printf("\n%2d月\n", month);
printf("日 一 二 三 四 五 六\n");
// 计算当月第一天是星期几
week = 0;
for (i = 1900; i < year; i++) {
week += 365;
if ((i % 4 == 0 && i % 100 != 0) || i % 400 == 0) {
week++;
}
}
for (i = 1; i < month; i++) {
week += days_in_month[i-1];
}
week = (week + 1) % 7; // 1900年1月1日是星期一
// 输出当月的日历
for (i = 0; i < week; i++) {
printf(" ");
}
days = days_in_month[month-1];
for (j = 1; j <= days; j++) {
printf("%2d ", j);
week++;
if (week == 7) {
printf("\n");
week = 0;
}
}
printf("\n");
}
return 0;
}
```
运行结果:
```
请输入年份:2022
2022年的年历:
1月
日 一 二 三 四 五 六
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
2月
日 一 二 三 四 五 六
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28
3月
日 一 二 三 四 五 六
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
4月
日 一 二 三 四 五 六
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
5月
日 一 二 三 四 五 六
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
6月
日 一 二 三 四 五 六
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
7月
日 一 二 三 四 五 六
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
8月
日 一 二 三 四 五 六
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
9月
日 一 二 三 四 五 六
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30
10月
日 一 二 三 四 五 六
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
11月
日 一 二 三 四 五 六
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
12月
日 一 二 三 四 五 六
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
```