Bootstrap

C语言实例_5之根据输入年月日,计算属于该年的第几天

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);
}
;