1. 题目
输入某年某月某日,判断这一天是这一年的第几天?
2. 分析
步骤1
:得先判断年份是否是闰年,是的话,当月份大于3时,需多加一天;
步骤2
:还需根据输入月份,判断输入天数是否合理,如当是4月份时,输入31天就是不对的;
步骤3
:以3月15日为例,把前两个月的天数加起来,然后再加上15天即本年的第几天。
如:2024年12月12日
:则是当年的347
天,即
31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, +12
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请输入年、月、日,格式为:年,月,日(2024,12,23)\n");if (scanf("%d,%d,%d", &year, &month, &day) != 3 || month < 1 || month > 12 || day < 1 || day > 31) {printf("输入数据错误\n");return 1;}// 当该月份正常天数小于输入天数时,提示if (daysInMonth[month-1] < day){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;
}
4. 实例代码2之使用switch穿透
#include <stdlib.h>
#include <stdio.h>int main(void)
{ // 定义用于存储月份的数组const int daysInMonth[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };int year,month,day,nLeapYear=0;printf("\n请输入年、月、日,格式为:年,月,日(2024,12,23)\n");scanf("%d,%d,%d",&year,&month,&day);// 判断输入是否合法if (month < 1 || month > 12 || day < 1 || day > 31) {printf("输入数据错误\n");return 1;}// 当该月份正常天数小于输入天数时,提示if (daysInMonth[month-1] < day){printf("输入数据错误\n");return 1;}int nTotal=0;if((year%4==0 && year%100!=0) || year%400==0)nLeapYear=1;switch(month-1){case 11:nTotal=nTotal+daysInMonth[10];case 10:nTotal=nTotal+daysInMonth[9];case 9:nTotal=nTotal+daysInMonth[8];case 8:nTotal=nTotal+daysInMonth[7];case 7:nTotal=nTotal+daysInMonth[6];case 6:nTotal=nTotal+daysInMonth[5];case 5:nTotal=nTotal+daysInMonth[4];case 4:nTotal=nTotal+daysInMonth[3];case 3:nTotal=nTotal+daysInMonth[2];case 2:nTotal=nTotal+(+daysInMonth[1];+nLeapYear);case 1:nTotal=nTotal+daysInMonth[0];}nTotal=nTotal+day;printf("year:%d\nmonth:%d\nday:%d\nnTotal:%d\n",year,month,day,nTotal);
}