C语言输入年份和月份,显示该月的月历。或输入年份显示一整年的月历
时间: 2024-02-22 08:59:05 浏览: 99
月历牌——输入年份月份可得到当月月历
4星 · 用户满意度95%
下面是一个C语言程序,可以根据用户输入的年份和月份或者年份显示对应的月历。
```c
#include <stdio.h>
// 判断是否为闰年
int is_leap_year(int year)
{
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
return 1;
} else {
return 0;
}
}
// 计算某年某月的天数
int get_days_in_month(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;
}
// 计算某年某月的第一天是星期几
int get_first_day_of_month(int year, int month)
{
int century, year_of_century, magic_num, first_day;
if (month == 1 || month == 2) {
month += 12;
year--;
}
century = year / 100;
year_of_century = year % 100;
magic_num = (13 * (month + 1)) / 5 + year_of_century / 4 + century / 4 + 5 * year_of_century - century * 2;
first_day = (magic_num + 1) % 7;
return first_day;
}
// 打印某年某月的月历
void print_month(int year, int month)
{
int days = get_days_in_month(year, month);
int first_day = get_first_day_of_month(year, month);
printf("\n %d年%d月\n", year, month);
printf(" 日 一 二 三 四 五 六\n");
for (int i = 0; i < first_day; i++) {
printf(" ");
}
for (int i = 1; i <= days; i++) {
printf("%3d", i);
if ((first_day + i - 1) % 7 == 6) {
printf("\n");
}
}
if ((first_day + days - 1) % 7 != 6) {
printf("\n");
}
}
// 打印某年的月历
void print_year(int year)
{
printf("\n---------------------------\n");
printf(" %d年\n", year);
printf("---------------------------\n\n");
for (int i = 1; i <= 12; i++) {
print_month(year, i);
}
}
int main()
{
int year, month;
printf("请输入年份:");
scanf("%d", &year);
printf("请输入月份(输入0代表打印一整年的月历):");
scanf("%d", &month);
if (month == 0) {
print_year(year);
} else {
print_month(year, month);
}
return 0;
}
```
该程序中,我们定义了三个函数:
- `is_leap_year()`:判断某年是否为闰年。
- `get_days_in_month()`:计算某年某月的天数。
- `get_first_day_of_month()`:计算某年某月的第一天是星期几。
然后,我们使用`scanf()`函数获取用户输入的年份和月份或者年份。如果用户输入的月份为0,则打印该年的所有月历;否则,打印对应月份的月历。在打印月历时,我们使用上述三个函数来计算月份的天数和第一天是星期几,并按照日历的排版规则输出月历。
需要注意的是,这个程序实现的是简单的月历,没有考虑到节假日等特殊情况。如果想要实现更复杂的日历功能,需要使用更为复杂的算法和数据结构。
阅读全文