概述
输入年份和月份,输出该月的天数。不难发现,只有在闰年的二月份才会特殊情况,因此我们需要单独处理这一特殊情况。下面我们利用【数组】来解决。
代码
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//输出月份的天数
int is_leap_year(int y)
{
if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0)
return 1;//是闰年返回1
else
return 0;//不是闰年返回0
}
int get_days_of_year(int y, int m)
{
int day[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };//加0是为了使m与下标相等
int days = day[m];//直接通过m来访问数组元素
if (is_leap_year(y) && m == 2)//对闰年二月份特殊处理
days++;
return days;
}
int main()
{
int year = 0;
int month = 0;
printf("请输入年月:");
scanf("%d%d", &year, &month);
int days = get_days_of_year(year, month);
printf("days:%d", days);
return 0;
}
巧妙之处
虽然这段代码很简单,但是内部的逻辑却环环相扣。
首先,数组day[ ] ,在里面巧妙地放了个0,使得可以直接通过月份m访问到对应的元素
其次,函数 is_leap_year的返回值设置的很好,1表示真,0表示假,因此可以直接在if语句中利用该函数的返回值来判断真假