2.已知2022年11月28日为星期一,编写程序,计算任意以yyyymmdd形式给定的某个日期为星期几。(例如02910312表示291年3月12日。注意仔细考虑闰年。要求当输入日期有误时,程序能够报错。)的C语言源代码
时间: 2025-01-21 09:33:42 浏览: 54
好的,下面是一个用C语言编写的程序,它可以根据给定的日期计算出该日期是星期几。程序会检查输入日期的有效性,并处理闰年的情况。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 判断是否为闰年
int isLeapYear(int year) {
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
return 1;
else
return 0;
}
// 获取每个月的天数
int getMonthDays(int year, int month) {
int monthDays[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if (month == 2 && isLeapYear(year))
return 29;
else
return monthDays[month - 1];
}
// 验证日期的有效性
int isValidDate(int year, int month, int day) {
if (year < 1 || month < 1 || month > 12 || day < 1)
return 0;
if (day > getMonthDays(year, month))
return 0;
return 1;
}
// 计算星期几
int getWeekday(int year, int month, int day) {
if (month < 3) {
month += 12;
year -= 1;
}
int K = year % 100;
int J = year / 100;
int h = (day + (13 * (month + 1)) / 5 + K + (K / 4) + (J / 4) + 5 * J) % 7;
return h;
}
int main() {
char dateStr[9];
int year, month, day;
printf("请输入日期(格式:yyyymmdd):");
scanf("%s", dateStr);
if (strlen(dateStr) != 8) {
printf("日期格式错误!\n");
return 1;
}
year = atoi(dateStr);
month = atoi(dateStr + 4);
day = atoi(dateStr + 6);
if (!isValidDate(year, month, day)) {
printf("日期无效!\n");
return 1;
}
int weekday = getWeekday(year, month, day);
char *weekdays[] = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
printf("该日期是:%s\n", weekdays[weekday]);
return 0;
}
```
这个程序首先定义了三个函数:
1. `isLeapYear`:判断是否为闰年。
2. `getMonthDays`:获取每个月的天数。
3. `isValidDate`:验证日期的有效性。
4. `getWeekday`:根据Zeller公式计算星期几。
在`main`函数中,程序读取用户输入的日期字符串,验证其格式和有效性,然后调用`getWeekday`函数计算星期几,并输出结果。
阅读全文
相关推荐


















