C语言输入日期输出星期
以下是一个完整的C语言程序,可以输入日期(年、月、日)并输出对应的星期几,这个程序使用了基姆拉尔森计算公式(Kim Larsen calculation formula)来计算星期。
#include <stdio.h>
// 函数声明
int dayOfWeek(int year, int month, int day);
int main() {
int year, month, day;
// 输入日期
printf("请输入日期(年 月 日,用空格分隔): ");
scanf("%d %d %d", &year, &month, &day);
// 验证输入的日期是否有效
if (month < 1 || month > 12 || day < 1 || day > 31) {
printf("输入的日期无效!\n");
return 1;
}
// 计算并输出星期
int week = dayOfWeek(year, month, day);
const char *weekdays[] = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
printf("%d年%d月%d日是%s\n", year, month, day, weekdays[week]);
return 0;
}
// 计算星期几的函数
int dayOfWeek(int year, int month, int day) {
// 基姆拉尔森计算公式
if (month < 3) {
month += 12;
year--;
}
int c = year / 100;
int y = year % 100;
int m = month;
int d = day;
int week = (d + 2*m + 3*(m+1)/5 + y + y/4 - y/100 + y/400) % 7;
// 调整结果,使0代表星期日,1代表星期一,...,6代表星期六
return (week + 6) % 7;
}
程序说明
-
输入处理:
- 程序提示用户输入年、月、日,用空格分隔
- 进行简单的日期有效性检查
-
星期计算:
- 使用基姆拉尔森公式计算星期几
- 公式考虑了闰年等因素
- 结果调整使0代表星期日,1代表星期一,...,6代表星期六
-
输出:
使用中文星期名称数组输出结果
示例运行
请输入日期(年 月 日,用空格分隔): 2025 10 15
2025年10月15日是星期日
请输入日期(年 月 日,用空格分隔): 2025 10 16
2025年10月16日是星期一
注意事项
- 该程序没有处理所有可能的无效日期(如2月30日)
- 对于公历(格里高利历)之前的日期可能不准确
- 如果需要处理更复杂的日期验证,可以添加更多的检查逻辑
如果需要更精确的日期处理,可以考虑使用专门的日期库如time.h中的函数。
