计算某天是某年里的第几天
计算某天是某年里的第几天的方法
输入处理
需要用户输入年、月、日三个整型变量,分别表示待计算的日期。例如:
int year, month, day;
scanf("%d%d%d", &year, &month, &day);
闰年判断
闰年的判断规则如下:
- 能被4整除但不能被100整除的年份是闰年。
- 能被400整除的年份也是闰年。
int isLeapYear(int year) {return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
每月天数存储
使用数组存储平年和闰年每个月的天数,注意2月的天数会根据闰年调整:
int daysInMonth[2][13] = {{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, // 平年{0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} // 闰年
};
计算总天数
从1月累加到输入月份的前一个月,最后加上输入的日数:
int dayOfYear(int year, int month, int day) {int total = 0;int leap = isLeapYear(year);for (int i = 1; i < month; i++) {total += daysInMonth[leap][i];}total += day;return total;
}
完整代码示例
#include <stdio.h>int isLeapYear(int year) {return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}int dayOfYear(int year, int month, int day) {int daysInMonth[2][13] = {{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},{0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}};int total = 0;int leap = isLeapYear(year);for (int i = 1; i < month; i++) {total += daysInMonth[leap][i];}total += day;return total;
}int main() {int year, month, day;printf("Enter year month day: ");scanf("%d%d%d", &year, &month, &day);printf("Day of year: %d\n", dayOfYear(year, month, day));return 0;
}
注意事项
- 输入日期的有效性需额外验证(如月份为1-12,日数不超过当月最大值)。
- 数组下标从1开始以匹配月份编号,避免混淆。