根据输入的年、月、日,计算该日期在当年中是第几天(提示:程序中定义一个结构体类型,如struct Date{int year; int month; int day},在主函数中输入一个日期,计算并输出结果。将计算任务交由一个函数完成,如编写一个函数int days(int year, int month, int day),主函数将年、月、日传递给该函数,最后在主函数中输出结果。)
此运行结果错误,求改正,
改正你现有的代码问题:
1、month 值大于 2 月的时候,从 3 月份开始,你要把 e 累加到你当前月份的前一个月,你代码里面并没有这样做,switch 条件语句只执行一次,你得提出来方法,进行循环调用一下,计算出 e 的真正值。
2、你代码里面后面有计算是不是闰年的分支判断,你累加也有问题,是闰年你要加 1,不是闰年不要加 1,你弄反了。
#include <stdio.h>
struct Date {
int year;
int month;
int day;
};
int days(int year, int month, int day) {
int daysInMonth[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
// 如果是闰年,将二月份的天数改为29天
if (isLeapYear(year)) {
daysInMonth[1] = 29;
}
// 计算当月之前月份的天数之和
int days = 0;
for (int i = 0; i < month - 1; i++) {
days += daysInMonth[i];
}
// 加上当月的天数
days += day;
return days;
}
// 判断是否为闰年的函数
int isLeapYear(int year) {
if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {
return 1;
}
return 0;
}
int main() {
struct Date date;
printf("输入年月日(格式:YYYY MM DD):");
scanf("%d %d %d", &date.year, &date.month, &date.day);
int result = days(date.year, date.month, date.day);
printf("这是%d年的第%d天。\n", date.year, result);
return 0;
}