用C语言编写一款简易的万年历。 要求有欢迎界面、菜单、文件操作,模仿现实生活中的挂历,输入年份和月份,显示该月的月历。或输入年份显示一整年的月历。
时间: 2024-02-23 14:57:57 浏览: 127
好的,我可以告诉你如何编写一个简易的万年历。首先,你需要了解万年历的基本概念和相关算法,以便于将其转化为计算机程序。
在C语言中,可以使用以下算法来计算某年某月的日历:
1. 根据公历计算该年第一天是星期几;
2. 根据月份确定该月有多少天;
3. 根据该月第一天是星期几,确定日历表格的起始位置;
4. 打印日历表格。
以下是一个简单的实现:
```
#include <stdio.h>
// 判断是否为闰年
int is_leap_year(int year) {
return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
}
// 计算某年某月的天数
int get_days_of_month(int year, int month) {
int days_of_month[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if (month == 2 && is_leap_year(year)) {
return 29;
}
return days_of_month[month - 1];
}
// 计算某年第一天是星期几
int get_weekday_of_year(int year) {
int weekday = 1; // 1900年1月1日是星期一
for (int i = 1900; i < year; i++) {
weekday = (weekday + 365 + is_leap_year(i)) % 7;
}
return weekday;
}
// 打印月历
void print_month_calendar(int year, int month) {
int days_of_month = get_days_of_month(year, month);
int weekday_of_first_day = (get_weekday_of_year(year) + 1) % 7; // 该年第一天是星期几
printf("日 一 二 三 四 五 六\n"); // 打印星期标题
for (int i = 0; i < weekday_of_first_day; i++) {
printf(" "); // 打印月初空格
}
for (int i = 1; i <= days_of_month; i++) {
printf("%2d ", i); // 打印日期
if ((weekday_of_first_day + i) % 7 == 0) {
printf("\n"); // 换行
}
}
printf("\n");
}
// 打印年历
void print_year_calendar(int year) {
for (int i = 1; i <= 12; i++) {
printf("%d年%d月\n", year, i);
print_month_calendar(year, i);
}
}
int main() {
int year, month;
printf("欢迎使用万年历!\n");
while (1) {
printf("请选择功能:\n");
printf("1.查询某年某月的月历\n");
printf("2.查询某年的年历\n");
printf("3.退出\n");
int choice;
scanf("%d", &choice);
if (choice == 1) {
printf("请输入年份和月份(用空格隔开):\n");
scanf("%d%d", &year, &month);
print_month_calendar(year, month);
} else if (choice == 2) {
printf("请输入年份:\n");
scanf("%d", &year);
print_year_calendar(year);
} else if (choice == 3) {
printf("谢谢使用!\n");
return 0;
} else {
printf("输入有误!\n");
}
}
return 0;
}
```
这个程序可以实现简单的万年历功能,包括查询某年某月的月历和查询某年的年历。用户可以在菜单中选择需要的功能,程序会根据用户输入的年份和月份或年份打印出相应的日历表格。
阅读全文