c语言编写程序, 读入任一年份,模拟挂历输出该年年历, 要求每两月并排显示。每个日期占4位,左右月份间空8位,标题位于相应中间位置,年历标题和每月后空一行。
时间: 2023-05-28 17:06:17 浏览: 134
以下是一个可能的实现:
```c
#include <stdio.h>
// 判断是否为闰年
int is_leap_year(int year) {
return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
}
// 获取某个月份的天数
int get_days_in_month(int year, int month) {
switch (month) {
case 2:
return is_leap_year(year) ? 29 : 28;
case 4:
case 6:
case 9:
case 11:
return 30;
default:
return 31;
}
}
// 输出某个月份的日历
void print_month(int year, int month) {
// 计算该月份的天数和第一天是星期几
int days = get_days_in_month(year, month);
int first_day = ((year - 1) * 365 + (year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400
+ ((369 * (month - 1) - 1) % 12)) % 7;
// 输出月份标题
switch (month) {
case 1:
printf(" January %d\n", year);
break;
case 2:
printf(" February %d\n", year);
break;
case 3:
printf("\n March %d\n", year);
break;
case 4:
printf("\n April %d\n", year);
break;
case 5:
printf("\n May %d\n", year);
break;
case 6:
printf("\n June %d\n", year);
break;
case 7:
printf("\n July %d\n", year);
break;
case 8:
printf("\n August %d\n", year);
break;
case 9:
printf("\n September %d\n", year);
break;
case 10:
printf("\n October %d\n", year);
break;
case 11:
printf("\n November %d\n", year);
break;
case 12:
printf("\n December %d\n", year);
break;
}
// 输出星期标题
printf(" Su Mo Tu We Th Fr Sa");
// 输出每一天的数字
for (int i = 0; i < days + first_day; i++) {
if (i % 7 == 0) {
printf("\n");
}
if (i < first_day) {
printf(" ");
} else {
printf(" %2d", i - first_day + 1);
}
}
// 输出月份之间的空格
printf("\n ");
}
int main() {
int year;
printf("Enter a year: ");
scanf("%d", &year);
// 输出一月到六月
print_month(year, 1);
printf(" ");
print_month(year, 2);
// 输出七月到十二月
printf("\n\n");
print_month(year, 3);
printf(" ");
print_month(year, 4);
printf("\n\n");
print_month(year, 5);
printf(" ");
print_month(year, 6);
printf("\n\n");
print_month(year, 7);
printf(" ");
print_month(year, 8);
printf("\n\n");
print_month(year, 9);
printf(" ");
print_month(year, 10);
printf("\n\n");
print_month(year, 11);
printf(" ");
print_month(year, 12);
return 0;
}
```
在这个程序中,`is_leap_year`函数用于判断某一年份是否为闰年,`get_days_in_month`函数用于获取某一个月份的天数。`print_month`函数用于输出某一个月份的日历,其中按照题目要求输出月份标题和星期标题,并根据计算得到的该月份的天数和第一天是星期几来输出每一天的数字。
在`main`函数中,先读入用户输入的年份,然后按照题目要求输出一月到六月和七月到十二月的日历。为了让每两个月并排显示,我们在输出前一个月份之后输出8个空格,使得后一个月份能够对齐。最后返回0表示成功执行完程序。
阅读全文