C 练习实例4
题目:输入某年某月某日,判断这一天是这一年的第几天?
程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。
实例
#include <stdio.h>
// 用一个数组存储每个月的天数
const int daysInMonth[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int main() {
int day, month, year, sum;
printf("\n请输入年、月、日,格式为:年,月,日(2015,12,10)\n");
if (scanf("%d,%d,%d", &year, &month, &day) != 3 || month < 1 || month > 12 || day < 1 || day > 31) {
printf("输入数据错误\n");
return 1;
}
// 计算输入月份之前的总天数
sum = 0;
for (int i = 0; i < month - 1; i++) {
sum += daysInMonth[i];
}
sum += day;
// 判断是否为闰年
int leap = (year % 400 == 0) || (year % 4 == 0 && year % 100 != 0);
// 如果是闰年且月份大于2, 总天数加一天
if (leap && month > 2) {
sum++;
}
printf("这是这一年的第 %d 天。\n", sum);
return 0;
}
以上实例输出结果为:
请输入年、月、日,格式为:年,月,日(2015,12,10) 2015,10,1 这是这一年的第 274 天。