C语言实现万年历 要求 (1)输入年月日,计算相应日期是星期几。 (2)输入年月,输出相应月份的日历。 (3)输入年份,输出该年所有日历。 (4)具有退出功能。
时间: 2024-03-26 12:40:25 浏览: 225
好的,下面是实现上述要求的 C 语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
// 判断是否为闰年
int isLeapYear(int year) {
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
// 获取某年某月的天数
int getDaysOfMonth(int year, int month) {
int days[] = {31, 28 + isLeapYear(year), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
return days[month - 1];
}
// 获取某年某月1号是星期几
int getWeekday(int year, int month) {
struct tm t = {0};
t.tm_year = year - 1900;
t.tm_mon = month - 1;
t.tm_mday = 1;
mktime(&t);
return t.tm_wday;
}
// 打印日历表头
void printCalendarHeader() {
printf("日\t一\t二\t三\t四\t五\t六\n");
}
// 打印某月的日历
void printCalendarOfMonth(int year, int month) {
printf("%d年%d月\n", year, month);
printCalendarHeader();
int days = getDaysOfMonth(year, month);
int weekday = getWeekday(year, month);
// 打印第一行(1号前面的空格)
for (int i = 0; i < weekday; i++) {
printf("\t");
}
for (int i = 1; i <= 7 - weekday; i++) {
printf("%d\t", i);
}
printf("\n");
// 打印中间若干行
int count = 7 - weekday + 1;
while (count <= days) {
for (int i = count; i <= count + 6 && i <= days; i++) {
printf("%d\t", i);
}
printf("\n");
count += 7;
}
}
// 打印某年的所有日历
void printCalendarOfYear(int year) {
printf("%d年\n", year);
for (int i = 1; i <= 12; i++) {
printCalendarOfMonth(year, i);
printf("\n");
}
}
// 获取日期是星期几
int getWeekdayOfDate(int year, int month, int day) {
struct tm t = {0};
t.tm_year = year - 1900;
t.tm_mon = month - 1;
t.tm_mday = day;
mktime(&t);
return t.tm_wday;
}
int main() {
int choice;
do {
printf("\n请选择功能:\n");
printf("1. 输入年月日,计算相应日期是星期几。\n");
printf("2. 输入年月,输出相应月份的日历。\n");
printf("3. 输入年份,输出该年所有日历。\n");
printf("4. 退出。\n");
scanf("%d", &choice);
switch (choice) {
case 1: {
int year, month, day;
printf("请输入年份:");
scanf("%d", &year);
printf("请输入月份:");
scanf("%d", &month);
printf("请输入日期:");
scanf("%d", &day);
int weekday = getWeekdayOfDate(year, month, day);
printf("%d年%d月%d日是星期%d。\n", year, month, day, weekday);
break;
}
case 2: {
int year, month;
printf("请输入年份:");
scanf("%d", &year);
printf("请输入月份:");
scanf("%d", &month);
printCalendarOfMonth(year, month);
break;
}
case 3: {
int year;
printf("请输入年份:");
scanf("%d", &year);
printCalendarOfYear(year);
break;
}
case 4: {
printf("退出程序。\n");
break;
}
default: {
printf("无效的选择,请重新输入。\n");
break;
}
}
} while (choice != 4);
return 0;
}
```
这段代码实现了一个带菜单的万年历程序,可以根据用户选择执行不同的功能。可以输入年月日,计算相应日期是星期几;输入年月,输出相应月份的日历;输入年份,输出该年所有日历;具有退出功能。
阅读全文