6-2 求总天数 分数 10 作者 李祥 单位 湖北经济学院 请编写函数,根据所给日期求从公元纪年开始到该日期的总天数。 函数原型 int TotalDay(int year, int month, int day);
时间: 2024-11-20 22:37:17 浏览: 11
这个题目要求编写一个名为 `TotalDay` 的函数,它接受三个整数参数:年份 (`year`)、月份 (`month`) 和日期 (`day`),用于计算从公元1年到指定日期(包括该日期)总共的天数。这是一个涉及到历法计算的问题,需要考虑到闰年的规则。
在格里高利历中(即公历),闰年的判断条件通常如下:
- 如果年份能被4整除,那么它是闰年;
- 但是,如果年份能够被100整除,它不是闰年;
- 然而,如果年份同时能被400整除,它又是闰年。
下面是根据这个规则编写的一个简单的 `TotalDay` 函数示例(假设函数采用的是每月天数固定的普通算法,不考虑二月29日的情况):
```c
#include <stdio.h>
int isLeapYear(int year) {
if (year % 4 == 0) {
if (year % 100 == 0) {
return year % 400 == 0;
} else {
return true;
}
}
return false;
}
int daysInMonth(int month, bool isLeapYear) {
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;
default: // 2月
return isLeapYear ? 29 : 28; // 考虑闰年和平年
}
}
int TotalDay(int year, int month, int day) {
int totalDays = 0;
for (int y = 1; y <= year; ++y) {
totalDays += isLeapYear(y) ? 366 : 365; // 计算前一年的天数
}
for (int m = 1; m < month; ++m) {
totalDays += daysInMonth(m, isLeapYear(year));
}
totalDays += day; // 加上当前月份的天数
return totalDays;
}
// 示例
int main() {
int year, month, day;
printf("请输入年月日(例如:2023 2 28): ");
scanf("%d %d %d", &year, &month, &day);
int total = TotalDay(year, month, day);
printf("从公元1年到%04d-%02d-%02d的总天数是:%d\n", year, month, day, total);
return 0;
}
```
阅读全文