0
点赞
收藏
分享

微信扫一扫

c语言编写日期与星期的计算


 

c语言编写日期与星期的计算_主函数


日期与星期的计算:
已知1990年元旦是星期一,用函数实现:
( 1)求1990年元旦到2019年元旦中有几个元旦是星期一(包含1990年元旦星期一)。
( 2) 输出1990年到2019年元旦为星期一的年份。
(3)从键盘输入一个日期(1990年元旦之后的日期),计算并输出该日期是星期几

#include <stdio.h>

// 判断是否是闰年函数,如果是则返回 1,否则返回 0
int isLeap(int year) {
    return ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) ? 1 : 0;
}

// 统计1990年到2019年元旦为星期一的年份,并输出结果
void countNewYearMondays() {
    int num = 0; // 统计星期一的个数
    int year, days, y, weekday;
    printf("1990年到2019年元旦为星期一的年份:\n");
    for(year = 1990; year <= 2019; year++) {
        days = 0; // 当前年份距离1990年元旦的天数
        for(y = 1990; y < year; y++) {
            if(isLeap(y)) 
            {days += 366;}
            else
            {days += 365;}
        }
        weekday = (days + 1) % 7; // 当前年份的元旦是星期几
        if(weekday == 1) {
            printf("\t%d", year); // 输出符合条件的年份
            num++; // 统计个数
        }
    }
    printf("\n\n1990年到2019年元旦共有%d个元旦是星期一\n\n", num); // 输出总数
}

// 根据输入的日期,计算出这一天是星期几,并输出结果
void getWeekDay() {
    int year, month, day, days, y, m;
    printf("请输入一个日期(格式:XXXX XX XX,如:2023 05 11):");
    scanf("%d %d %d", &year, &month, &day);
    days = 0;
    // 计算输入年份距离1990年元旦的天数days
    for(y = 1990; y < year; y++) {
        if(isLeap(y))
        {days += 366;}
        else {days += 365;}
    }
    // 计算到输入月份最后一天的天数days
    for(m = 1; m < month; m++) {
        switch(m) {
        case 4:
        case 6:
        case 9:
        case 11:
        days += 30;
        break;
        case 2:
        days += (isLeap(year) ? 29 : 28);
        break;
        default:
        days += 31;
        }
    }
    days += day - 1; // 加上输入的天数
    int weekday = (days + 1) % 7; // 计算是星期几
    // 根据结果输出星期几
    switch(weekday) {
        case 0:
        printf("%d年%d月%d日是星期日\n", year, month, day);
        break;
        case 1:
        printf("%d年%d月%d日是星期一\n", year, month, day);
        break;
        case 2:
        printf("%d年%d月%d日是星期二\n", year, month, day);
        break;
        case 3:
        printf("%d年%d月%d日是星期三\n", year, month, day);
        break;
        case 4:
        printf("%d年%d月%d日是星期四\n", year, month, day);
        break;
        case 5:
        printf("%d年%d月%d日是星期五\n", year, month, day);
        break;
        default:
        printf("%d年%d月%d日是星期六\n", year, month, day);
    }
}

// 主函数
int main() {
    countNewYearMondays(); // 统计1990年到2019年元旦为星期一的年份
    getWeekDay(); // 输入日期,计算是星期几
    return 0; 
}

举报

相关推荐

0 条评论