用c语言计算年份的第几天
时间: 2024-10-22 11:29:28 浏览: 8
在C语言中,计算一个给定年份的第几天需要考虑闰年的规则。以下是一个简单的函数示例,它使用了蔡勒公式(Zeller's congruence)来计算普通年份和平闰年的日期:
```c
#include <stdio.h>
int is_leap_year(int year) {
if (year % 4 != 0)
return 0;
else if (year % 100 != 0)
return 1;
else if (year % 400 != 0)
return 0;
else
return 1;
}
int day_of_week(int y, int m, int d) {
static const int t[] = {0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4};
int q = y % 100, w = y / 100;
int x = m - 1; // January = 0
int y = q + ((w + x + t[m]) % 7);
return (y + y / 4 - y / 100 + y / 400) % 7;
}
int days_in_month(int month, int year) {
switch(month) {
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
return 31;
case 4: case 6: case 9: case 11:
return 30;
case 2:
if(is_leap_year(year))
return 29;
else
return 28;
default:
return -1; // Invalid month
}
}
int main() {
int year, month, day;
printf("请输入年份、月份和日份:");
scanf("%d %d %d", &year, &month, &day);
if(month <= 0 || month > 12 || day <= 0)
printf("无效的月份或日份。\n");
else {
int total_days = day;
for(int i = 1; i < month; i++) {
total_days += days_in_month(i, year);
}
total_days += day_of_week(year, month, day);
printf("年份 %d 的第%d天是星期%d\n", year, total_days, (total_days + 6) % 7);
}
return 0;
}
```
这个程序首先判断输入的年份是否是闰年,然后计算给定年份中每个月的天数,并加上该月第一天到输入日期之间的天数。最后,通过蔡勒公式的调整得到星期几。
阅读全文