c语言编写程序,实现输入一个日期(年、月、日),并计算出这一天是该年的第几天
时间: 2024-09-30 12:11:09 浏览: 112
在C语言中,我们可以使用蔡勒公式(Zeller's congruence)来计算给定日期是一年中的第几天。这是一种古老的算法,用于查找格里高利历中的儒略日。下面是一个基本的实现:
```c
#include <stdio.h>
#include <stdbool.h>
// 蔡勒公式计算日期
bool zellers_congruence(int year, int month, int day) {
if (month < 3) {
month += 12; // 调整月份至1-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;
if (h == 0)
return true; // 0表示星期日,1-6分别对应周一到周六
else
return false;
}
int main() {
int year, month, day;
printf("请输入日期(格式:YYYY-MM-DD):");
scanf("%d-%d-%d", &year, &month, &day);
// 检查输入是否有效(例如,2月份的天数)
if (month == 2 && (zellers_congruence(year, month, 29) || year % 4 != 0)) {
printf("错误:输入无效的日期。\n");
return 1;
}
int days_in_month[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // 根据闰年规则调整二月天数
bool is_leap_year = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)); // 判断是否为闰年
if (is_leap_year)
days_in_month[1] = 29;
int total_days = 0;
for (int i = 1; i < month; i++) {
total_days += days_in_month[i];
}
total_days += day;
if (zellers_congruence(year, month, day))
total_days++; // 若是星期日,需加一天
printf("这一天是 %d 年的第 %d 天.\n", year, total_days);
return 0;
}
```
这段程序首先检查输入的有效性,然后根据输入的月份和是否是闰年来确定每个月的天数,最后累加所有之前的天数加上当前日期,得出全年总天数。
阅读全文
相关推荐
![docx](https://img-home.csdnimg.cn/images/20241231044901.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)