用c语言完成台历设计,当输入年时,能显示那一年的台历;当输入年月时,显示那一个月的台历;当输入年月日时,输出这是一年的第几天,第几周星期几,和是否是节假日等...
时间: 2024-04-30 09:25:09 浏览: 197
这是一个比较复杂的问题,需要考虑到日期计算、节假日判断等多个方面。以下是一个简单的实现,仅供参考:
```c
#include <stdio.h>
// 判断是否为闰年
int is_leap_year(int year) {
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
// 计算某年某月的天数
int days_in_month(int year, int month) {
int days[] = {31, 28 + is_leap_year(year), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
return days[month - 1];
}
// 计算某年某月某日是一年的第几天
int day_of_year(int year, int month, int day) {
int days = 0;
for (int i = 1; i < month; i++) {
days += days_in_month(year, i);
}
return days + day;
}
// 判断某年某月某日是否为节假日
int is_holiday(int year, int month, int day) {
// TODO: 根据国家法定节假日规定进行判断
return 0;
}
// 打印某年某月的台历
void print_calendar(int year, int month) {
// 打印月份和年份
printf(" %d年%d月\n", year, month);
// 打印星期几
printf(" 日 一 二 三 四 五 六\n");
// 计算本月第一天是星期几
int first_day_of_month = day_of_year(year, month, 1) % 7;
for (int i = 0; i < first_day_of_month; i++) {
printf(" ");
}
// 打印日期
for (int i = 1; i <= days_in_month(year, month); i++) {
printf("%3d ", i);
if ((first_day_of_month + i - 1) % 7 == 6) {
printf("\n");
}
}
printf("\n");
}
// 打印某年某月某日的详细信息
void print_date_info(int year, int month, int day) {
printf("%d年%d月%d日是一年的第%d天,第%d周星期%d\n", year, month, day, day_of_year(year, month, day), (day_of_year(year, month, day) - 1) / 7 + 1, (day_of_year(year, month, day) - 1) % 7 + 1);
if (is_holiday(year, month, day)) {
printf("今天是节假日\n");
} else {
printf("今天不是节假日\n");
}
}
int main() {
int year, month, day;
printf("请输入年份:");
scanf("%d", &year);
printf("请输入月份:");
scanf("%d", &month);
if (month == 0) {
// 只输入年份,打印整年的台历
for (int i = 1; i <= 12; i++) {
print_calendar(year, i);
}
} else {
printf("请输入日期(如不输入则默认为1号):");
scanf("%d", &day);
if (day == 0) {
day = 1;
}
if (month < 0 || month > 12 || day < 1 || day > days_in_month(year, month)) {
printf("输入的日期无效\n");
} else if (day == 1) {
// 只输入年份和月份,打印该月的台历
print_calendar(year, month);
} else {
// 输入了完整日期,打印详细信息
print_date_info(year, month, day);
}
}
return 0;
}
```
这个程序可以根据用户的输入打印出对应的台历或详细日期信息。需要注意的是,节假日的判断需要根据国家的法定节假日规定进行实现,这里只是留了一个 TODO。
阅读全文