输入某年某月某日,判断这一天是这一年的第几天?
#include <stdio.h> int dayOfYear(int year, int month, int day); int main(void) { int year, month, day; printf("本程序用于判断你输入的日期是本年度的第几天,\n请输入你要查询的年月日,格式为2025 6 3:"); scanf("%d %d %d", &year, &month, &day); dayOfYear(year, month, day); return 0; } int dayOfYear(int year, int month, int day) { int sum = 0; int days[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) { days[1] = 29; } if (month < 1 || month > 12 || day < 1 || day > days[month - 1]) { printf("输入不合法,月分不能大于12,平年2月不能大于28日,闰年2月不能大于29日。\n"); } else { for (int i = 0; i < month - 1; i++) { sum += days[i]; } printf("%d年%d月%d日是这一年的第%d天。\n", year, month, day, sum + day); } return 0; }
该示例中,将一年每月的天数固定存储在一个数组中,然后判断输入的年份是否为闰年,如果是闰年则修改数组中2月为29天,否则直接计算天数。
判断是否闰年的方法:能被4整除,且不能被100整除,或者能被400整除的年份均为闰年。
该程序针对输入错误还有改进空间,如,可以判断输入的是月份错误还是日期错误,分别给予错误提示。