使用C语言完成该程序:输入日期a年b月c日,编程计算(输出)该日期是星期几。 说明: 1)已知1900年1月1日是星期一; 2)输入的日要在1900年1月1日到2100年12月31日范围内; 3)当用户输入的年份不在给定的范围内,或者输入的月份、日期不和常理时,给出相应的提示信息,并重新输入; 4)当输入的年号等于0时,程序结束;否则继续输入下一组年月日。
时间: 2024-04-01 18:31:15 浏览: 86
c语言编写的万年历——童鞋专用
下面是使用C语言实现该程序的代码:
```c
#include <stdio.h>
// 计算某年某月某日是星期几
int dayOfWeek(int year, int month, int day)
{
int t[] = {0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4};
if (month < 3) {
year -= 1;
}
return (year + year/4 - year/100 + year/400 + t[month-1] + day) % 7;
}
int main()
{
int year, month, day, dow;
while (1) {
printf("请输入年月日(如2022 12 31):");
scanf("%d %d %d", &year, &month, &day);
if (year == 0) {
printf("程序结束。\n");
break;
}
if (year < 1900 || year > 2100) {
printf("年份不在范围内(1900-2100),请重新输入。\n");
continue;
}
if (month < 1 || month > 12) {
printf("月份不正确,请重新输入。\n");
continue;
}
if (day < 1 || day > 31) {
printf("日期不正确,请重新输入。\n");
continue;
}
// 判断每个月的天数是否正确
if (month == 2) {
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) { // 闰年
if (day > 29) {
printf("日期不正确,请重新输入。\n");
continue;
}
} else { // 非闰年
if (day > 28) {
printf("日期不正确,请重新输入。\n");
continue;
}
}
} else if (month == 4 || month == 6 || month == 9 || month == 11) {
if (day > 30) {
printf("日期不正确,请重新输入。\n");
continue;
}
}
dow = dayOfWeek(year, month, day);
switch (dow) {
case 0:
printf("%d年%d月%d日是星期日。\n", year, month, day);
break;
case 1:
printf("%d年%d月%d日是星期一。\n", year, month, day);
break;
case 2:
printf("%d年%d月%d日是星期二。\n", year, month, day);
break;
case 3:
printf("%d年%d月%d日是星期三。\n", year, month, day);
break;
case 4:
printf("%d年%d月%d日是星期四。\n", year, month, day);
break;
case 5:
printf("%d年%d月%d日是星期五。\n", year, month, day);
break;
case 6:
printf("%d年%d月%d日是星期六。\n", year, month, day);
break;
}
}
return 0;
}
```
程序中,dayOfWeek函数用于计算某年某月某日是星期几,具体实现方法是使用基姆拉尔森计算公式。程序中对输入的年月日进行了合法性检查,如果不合法则提示错误并重新输入。
阅读全文