输入某年某月某日,要求计算出这一天是该年的第几天。 输入格式 3个整数,表示年、月、日,空格隔开。输入日期保证合法。 输出格式 该天是当年的第几天。用c语言写
时间: 2024-10-13 08:10:09 浏览: 65
在C语言中,计算给定日期是当年的第几天可以使用蔡勒公式(Zeller's congruence)。这是一个用于快速计算公历日期对应儒略日的算法。以下是使用这个公式的一个示例函数:
```c
#include <stdio.h>
int is_leap_year(int year) {
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
int day_of_month(int month, int day, int year) {
int t = day;
if (month <= 2) {
// 如果月份小于等于2,视作上一年的十二月
month += 12;
year--;
}
// 蔡勒公式
int q = day;
int m = month;
int k = year % 100;
int j = year / 100;
int h = (q + ((13 * (m + 1)) / 5) + k + (k / 4) + (j / 4) - 2*j) % 7;
// 根据蔡勒公式计算得出的结果,加上偏移量(闰年的二月有29天,平年有28天)
int result = (t + (h + 6) / 5 + (is_leap_year(year) ? 26 : 25)) % 365;
return result + 1; // 返回的就是当年的第几天(加1是因为第一天是1)
}
int main() {
int year, month, day;
scanf("%d %d %d", &year, &month, &day);
printf("该天是当年的第 %d 天。\n", day_of_month(month, day, year));
return 0;
}
```
在这个程序中,我们首先检查是否是闰年,然后应用蔡勒公式计算出儒略日,最后返回对应的年内天数。请注意,此代码假设用户输入的是公历范围内的有效日期。如果需要处理更复杂的边界条件或其他特殊情况,可能还需要进一步优化。
阅读全文