我想是用C语言完成一个万年历的程序
时间: 2024-06-12 17:05:15 浏览: 100
好的,下面是一个简单的万年历程序的C语言代码:
```c
#include <stdio.h>
int main() {
int year, month, day, days, i;
int monthDays[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
char *weekDays[7] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
// 输入年、月、日
printf("Input year, month and day (e.g. 2021 7 1): ");
scanf("%d %d %d", &year, &month, &day);
// 计算该年是否为闰年
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
monthDays[1] = 29; // 闰年2月为29天
}
// 计算该日期和公元元年1月1日之间相差的天数
days = day;
for (i = 0; i < month - 1; i++) {
days += monthDays[i];
}
for (i = 1; i < year; i++) {
if ((i % 4 == 0 && i % 100 != 0) || i % 400 == 0) {
days += 366;
} else {
days += 365;
}
}
// 计算该日期是星期几
int weekDay = days % 7;
// 输出结果
printf("\n\n\t%d年%d月%d日是%s\n", year, month, day, weekDays[weekDay]);
// 计算该月的日历表
printf("\n\tS\tM\tT\tW\tT\tF\tS\n");
int firstDay = (weekDay - (day % 7 - 1) + 7) % 7; // 该月第一天是星期几
for (i = 0; i < firstDay; i++) {
printf("\t"); // 输出空格
}
for (i = 1; i <= monthDays[month - 1]; i++) {
printf("%d\t", i); // 输出日期
if ((firstDay + i - 1) % 7 == 6) {
printf("\n"); // 每周换行
}
}
printf("\n");
return 0;
}
```
该程序的运行结果如下:
```
Input year, month and day (e.g. 2021 7 1): 2022 3 24
2022年3月24日是Thu
S M T W T F S
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
```
程序的逻辑如下:
1. 首先输入年、月、日;
2. 根据输入的年份判断该年是否为闰年,如果是,则将2月的天数改为29天;
3. 计算该日期和公元元年1月1日之间相差的天数;
4. 根据相差的天数计算该日期是星期几;
5. 输出计算结果,包括该日期是星期几和该月的日历表。
阅读全文