c语言实现:输入一个日期,判断是星期几,不用<time.h>库
时间: 2024-10-08 13:00:58 浏览: 58
在C语言中,要实现一个不依赖于`<time.h>`库的日期星期计算功能,我们可以使用一些基础的数学运算和数组来存储每个星期对应的天数。这里是一个简单的示例:
```c
#include <stdio.h>
// 定义一个包含7个整数的数组,表示从星期一到星期日
int days[] = {0, 3, 2, -1, -2, 1, 4};
// 输入函数,获取用户输入的年月日
void input_date(int *day, int *month, int *year) {
printf("请输入日期(格式:YYYY-MM-DD): ");
scanf("%d-%d-%d", year, month, day);
}
// 计算星期几
int calculate_weekday(int day, int month, int year) {
// 考虑闰年和平年的不同天数
if (is_leap_year(year)) {
if (month >= 3) {
day += (month + 9) / 12;
}
} else {
if (month > 2) {
day += (month + 9) / 12;
}
}
day += year * 365; // 年份天数加上平年每一天
if (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0) { // 非世纪年为闰年,或世纪年是闰年
day++;
}
return day % 7 + 1; // 返回0~6之间表示星期一到星期日的数字
}
// 判断是否为闰年
int is_leap_year(int year) {
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
int main() {
int day, month, year;
input_date(&day, &month, &year);
int weekday = calculate_weekday(day, month, year);
switch (weekday) {
case 1: printf("今天是星期一\n"); break;
case 2: printf("今天是星期二\n"); break;
case 3: printf("今天是星期三\n"); break;
case 4: printf("今天是星期四\n"); break;
case 5: printf("今天是星期五\n"); break;
case 6: printf("今天是星期六\n"); break;
case 7: printf("今天是星期日\n"); break;
default: printf("输入错误或未处理的情况\n");
}
return 0;
}
```
在这个程序中,我们首先通过`input_date`函数获取用户的输入,然后使用`calculate_weekday`函数根据给定的日期计算出星期几。这个函数考虑了闰年的额外一天,并将结果转换成星期一至星期日的表示。
注意,虽然这个方法相对简单,但它仅适用于基本的日期判断,并且假设用户输入的是有效日期。实际应用中,可能需要更复杂的错误检查和验证。另外,此代码没有处理月份小于1或大于12的情况。
阅读全文