寻乐
寻乐
寻乐
Joined 2 years ago
MayJuneJulyAugSeptOctNovDecJanFebMarApr
寻乐
·

嗯嗯 satisfied

寻乐
·

多体会一下 stuck_out_tongue 学习一下数组的使用方法

#include <stdio.h>
#include <stdbool.h>
#include <assert.h>

bool isLeapYear(int year) {
    return year % 4 == 0 && year % 100 != 0 || year % 400 == 0;
}

// 计算天数的方法 1
int calcMonthsDay(int m) {
    assert(m > 0 && m < 13);

    int days = 0;

    // 利用 switch 不跳出的特性进行计算,不推荐使用,但是要明白原理
    switch (m) {
        case 12: days += 30;
        case 11: days += 31;
        case 10: days += 30;
        case 9: days += 31;
        case 8: days += 31;
        case 7: days += 30;
        case 6: days += 31;
        case 5: days += 30;
        case 4: days += 31;
        case 3: days += 28;
        case 2: days += 31;
        default: break;
    }

    return days;
}

// // 计算天数的方法 2
// int calcMonthsDay(int m) {
//     assert(m > 0 && m < 13);

//     int days[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30 };

//     int totalDays = 0;
//     for (int i = 0; i < m - 1; ++i) {
//         totalDays += days[i];
//     }

//     return totalDays;
// }

// 计算天数的方法 3
// int calcMonthsDay(int m) {
//     assert(m > 0 && m < 13);

//     int days[] = { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 };

//     return days[m - 1];
// }

int main() {
    int year, month, day;

    printf("请输入您要查询的年月日 >:");
    scanf("%d %d %d", &year, &month, &day);

    assert(month > 0 && month < 13);
    assert(day > 0 && day < 32);

    int totalDays = calcMonthsDay(month) + day;
    if (isLeapYear(year) && month > 2) {
        ++totalDays;
    }

    printf("%d 年 %d 月 %d 日是该年中的第 %d 天\n", year, month, day, totalDays);

    return 0;
}
寻乐
·

谢谢支持 smile