要计算万年历第一天的星期几,可以使用蔡勒公式(Zeller's Congruence)。以下是一个使用C语言编写的示例代码,用于计算并输出给定年份的第一天是星期几:
```c
include
// 函数声明
int isLeapYear(int year);
int dayOfYear(int year, int month, int day);
int main() {
int year, month, day;
// 输入年份、月份和日期
printf("请输入年份: ");
scanf("%d", &year);
printf("请输入月份: ");
scanf("%d", &month);
printf("请输入日期: ");
scanf("%d", &day);
// 计算并输出第一天是星期几
int dayOfWeek = dayOfYear(year, month, day);
const char *weekdays[] = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
printf("%d年%d月%d日是星期%s
", year, month, day, weekdays[dayOfWeek]);
return 0;
}
// 判断是否为闰年
int isLeapYear(int year) {
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
// 计算给定日期是一年中的第几天
int dayOfYear(int year, int month, int day) {
int daysInMonth[] = { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 };
int dayOfWeek = 0;
// 计算年份之前的所有年份的天数
for (int y = 1900; y < year; y++) {
dayOfWeek += isLeapYear(y) ? 366 : 365;
}
// 计算月份的天数
for (int m = 1; m < month; m++) {
dayOfWeek += daysInMonth[m];
}
// 加上当前月份的天数
dayOfWeek += day;
return dayOfWeek;
}
```
代码说明:
isLeapYear函数:
判断给定的年份是否为闰年。
dayOfYear函数:
计算给定日期是一年中的第几天。
main函数:
从用户输入获取年份、月份和日期,调用`dayOfYear`函数计算第一天是星期几,并输出结果。
使用方法:
1. 编译并运行上述代码。
2. 根据提示输入年份、月份和日期。
3. 程序将输出输入日期对应的第一天是星期几。
这个程序可以计算任何给定日期在万年历中的第一天是星期几。