C语言实现万年历 要求 (1)输入年月日,计算相应日期是星期几。 (2)输入年月,输出相应月份的日历。 (3)输入年份,输出该年所有日历。 (4)具有退出功能。
时间: 2024-03-26 11:40:00 浏览: 113
以下是一个 C 语言程序,可以实现上述要求:
```
#include <stdio.h>
#include <stdlib.h>
// 函数声明
int isLeapYear(int year);
int getWeekday(int year, int month, int day);
void printCalendar(int year, int month);
void printYearCalendar(int year);
void clearScreen();
int main()
{
int choice, year, month, day;
while (1) {
clearScreen();
printf("1. 计算日期是星期几\n");
printf("2. 输出月份的日历\n");
printf("3. 输出该年所有日历\n");
printf("4. 退出\n");
printf("请选择操作:");
scanf("%d", &choice);
switch (choice) {
case 1:
printf("请输入日期(yyyy-mm-dd):");
scanf("%d-%d-%d", &year, &month, &day);
printf("%d-%d-%d 是 %d\n", year, month, day, getWeekday(year, month, day));
break;
case 2:
printf("请输入月份(yyyy-mm):");
scanf("%d-%d", &year, &month);
printCalendar(year, month);
break;
case 3:
printf("请输入年份(yyyy):");
scanf("%d", &year);
printYearCalendar(year);
break;
case 4:
exit(0);
default:
printf("输入错误,请重新输入!\n");
break;
}
printf("按任意键继续...\n");
getchar();
getchar();
}
return 0;
}
// 判断是否为闰年
int isLeapYear(int year)
{
return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
}
// 计算某一天是星期几(0 - 星期日,1 - 星期一,...,6 - 星期六)
int getWeekday(int year, int month, int day)
{
int days[12] = {31, 28 + isLeapYear(year), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int i, weekday = 1;
for (i = 1900; i < year; i++) {
weekday = (weekday + 365 + isLeapYear(i)) % 7;
}
for (i = 0; i < month - 1; i++) {
weekday = (weekday + days[i]) % 7;
}
weekday = (weekday + day - 1) % 7;
return weekday;
}
// 输出某个月的日历
void printCalendar(int year, int month)
{
int days[12] = {31, 28 + isLeapYear(year), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
char *months[12] = {"一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"};
int i, j, weekday;
weekday = getWeekday(year, month, 1);
printf("%d年%s\n", year, months[month - 1]);
printf("日 一 二 三 四 五 六\n");
for (i = 0; i < weekday; i++) {
printf(" ");
}
for (i = 1; i <= days[month - 1]; i++) {
printf("%2d ", i);
if ((i + weekday) % 7 == 0) {
printf("\n");
}
}
printf("\n");
}
// 输出某一年的所有日历
void printYearCalendar(int year)
{
int i;
for (i = 1; i <= 12; i++) {
printCalendar(year, i);
}
}
// 清屏函数
void clearScreen()
{
system("clear");
}
```
在这个程序中,我们定义了几个函数来实现不同的功能。`isLeapYear` 函数用于判断某一年是否为闰年;`getWeekday` 函数用于计算某一天是星期几;`printCalendar` 函数用于输出某个月的日历;`printYearCalendar` 函数用于输出某一年的所有日历;`clearScreen` 函数用于清屏。在 `main` 函数中,我们使用一个循环来不断接受用户的输入,并根据用户的选择调用相应的函数来完成相应的操作。
阅读全文