解题思路:
1. 判断闰年:根据闰年规则(能被 4 整除但不能被 100 整除,或能被 400 整除)编写函数,确定年份是否为闰年,以调整 2 月天数。
2. 设定每月天数:创建数组存储非闰年每月天数,若为闰年,将 2 月天数改为 29。
3. 累加天数:遍历前 month - 1 个月,累加对应天数,再加上当日的 day 值,得到当年第几天。
注意事项:
1. 闰年判断准确性:严格遵循闰年规则,如 2000 年是闰年(能被 400 整除), 1900 年不是(能被 100 整除但不能被 400 整除)。
2. 每月天数记忆:1、3、5、7、8、10、12 月为 31 天,4、6、9、11 月为 30 天,非闰年 2 月 28 天,闰年 2 月 29 天。
3. 循环边界与累加:确保循环从 1 到 month - 1 累加天数,避免索引越界或遗漏月份。
4. 输入与变量处理:正确读取年、月、日,初始化总天数为 0,保证计算逻辑连贯。
参考代码:
#include <stdio.h>
// 定义结构体存储年月日
struct date {
int year, month, day;
};
// 判断是否为闰年
int is_leap(int year) {
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
int main() {
struct date d;
scanf("%d%d%d", &d.year, &d.month, &d.day);
int total = 0;
// 非闰年每月天数
int months_days[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if (is_leap(d.year)) {
months_days[2] = 29; // 闰年2月改为29天
}
for (int i = 1; i < d.month; i++) {
total += months_days[i]; // 累加前month-1个月的天数
}
total += d.day; // 加上当日天数
printf("%d\n", total);
return 0;
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复