目录
题目要求
输入 年份 和 月份
输出 这一年份 的 这个月 有多少天
多组输入,多组输出
年月份常识
1、3、5、7、8、10、12月 的月份天数是 31天
4、6、9、11月 的月份天数是 30天
平年2月 份天数是 28天
闰年2月 份天数是 29天
当 年份 能被4取模净 并且 能不被100取模净 或者 能被400取模净 时:为闰年,否则为平年
代码实现
方法一: swicth
代码演示:
#include<stdio.h>
int get_days_of_month(int year, int month)
{
switch (month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
return 31;
case 4:
case 6:
case 9:
case 11:
return 30;
case 2:
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
return 29;
else
return 28;
}
}
int main()
{
//创建
int year = 0;
int month = 0;
//多组输入及输出
while (scanf("%d %d", &year, &month) == 2)
{
int days = get_days_of_month(year, month);
printf("%d年的%d月有%d天\n", year, month, days);
}
return 0;
}
代码解析:
月份有相同的天数,所以可以使用 switch语句实现
只是 2月份 需要单独判断,判断 参数 year 的值即可
代码验证:
方法二:下标标记法
代码演示:
#include<stdio.h>
int get_days_of_month(int year, int month)
{
int days[] = { 0, 31,28,31,30,31,30,31,31,30,31, 30, 31 };
// 0 1 2 3 4 5 6 7 8 9 10 11 12
if (((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) && (month == 2))
days[month] = days[month] + 1;
return days[month];
}
int main()
{
//创建
int year = 0;
int month = 0;
//多组输入及输出
while (scanf("%d %d", &year, &month) == 2)
{
int days = get_days_of_month(year, month);
printf("%d年的%d月有%d天\n", year, month, days);
}
return 0;
}
代码解析:
月份 作为 下标,相对应的 下标月份位置 存储 相对应的 天数
只是 2月份 要 单独计算 即可
代码验证: