C语言计算某月的天数(附带源码)

这是一个C语言编程实例:给定年份和月份,求该月共有多少天。

问题分析

输入:年份(整数)和月份(整数)。

输出:该月份的天数(整数)。

一年有 12 个月,其中一、三、五、七、八、十、十二月各有 31 天,四、六、九、十一月各有 30 天。二月比较特殊,闰年的二月有 29 天,平年的二月有 28 天,要确定二月的天数,就要先判断当年是否为闰年。

某年是否为闰年可以依据“四年一闰,百年不闰,四百年闰”来进行判断。也就是说在能被 4 整除的年份当中,除了那些能被 100 整除但不能被 400 整除的年份外,其余的都是闰年(见图 1)。判断一个数能否被另一个数整除可以用 C 语言的求模运算符(%)来实现。

判断某年是否为闰年
图 1:判断某年是否为闰年

用 xxxx 表示年份,则凡是不能被 4 整除(xxxx%4!=0)的年份都是平年;而在能被 4 整除的年份中,那些能被 100 整除但不能被 400 整除((xxxx%100==0)&&(xxxx%400!=0))的年份也是平年。
(xxxx%4 != 0) || ((xxxx%100 == 0) && (xxxx%400 != 0))

凡是能被 400 整除(xxxx%400==0)的年份都是闰年;能被 4 整除但不能被 100 整除((xxxx%4==0)&&(xxxx%100!=0))的年份也是闰年。
(xxxx%400 == 0) || ((xxxx%4 == 0) && (xxxx%100 != 0))

算法描述

1) 定义两个整型变量 year 和 month 用于存储年份和月份;
2) 用 scanf( ) 从键盘输入年份和月份;
3) 根据月份的数值,分情况处理:
月份为 4、6、9、11 中的一个,则输出 30;
月份为 1、3、5、7、8、10、12 中的一个,则输出 31;
月份为 2,则判断该年是否为闰年:是闰年,则输出 29;是平年,则输出 28;
4) 结束。


代码清单 2:给定年份和月份,求该月共有多少天
#include <stdio.h>
#include <stdlib.h>

int main( )
{
    int year,month;
    printf("请输入年份和月份(两个整数,空格分隔):\n");
    scanf("%d %d",&year,&month);
    switch (month)
    {
        case 4:case 6:case 9:
        case 11:printf("%d年%d月有30天。\n",year,month); break;
        case 1: case 3: case 5: case 7: case 8: case 10:
        case 12:printf("%d年%d月有31天。\n",year,month); break;
        case 2:if((year%400==0)||((year%4==0)&&(year%100!=0)))
                   printf("%d年%d月有29天。\n",year,month);
               else
                   printf("%d年%d月有28天。\n",year,month);
               break;
        default:printf("输入有误!\n");
    }
    system("pause");
    return 0;
}

运行结果为:

请输入年份和月份(两个整数,空格分隔):
2020 5
2020年5月有31天。