今天的题目:编程实现统计某年某月的天数
例如: 输入:2017.7
输出:31天
先附上我自己想的方法,由于几个功能放一起太繁琐,于是我想把他们分为三个函数,分别来实现这个功能:
#include <stdio.h>
void runnian(int* year, int* leap); //函数声明
void print(int month); //函数声明
int main()
{
int year, month, leap;
scanf ("%d.%d", &year, &month);
//输入年月
runnian(&year, &leap);
//判断是否是闰年
if (2 != month) //判断是否是 2 月,不是则正常输出
print(month); //分 30 天和 31 天输出
else //如果是 2 月
{
if(1 == leap) //闰年 29 天
printf ("29天");
else //非闰年 28 天
printf ("28天");
}
return 0;
}
void runnian(int* year, int* leap) //判断是否是闰年
{
if (0 == *year % 4) //判断能否被4整除
{
if (0 == *year % 100) //判断能否被100整除
{
if (0 == *year % 400) //判断能否被400整除
*leap = 1; // leap = 1 为闰年
else
*leap = 0; // leap = 0 不是闰年
}
else
*leap = 1;
}
else
*leap = 0;
}
void print(int month) //根据月份输出天数
{
switch(month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
printf ("31天");
break;
case 4:
case 6:
case 9:
case 11:
printf ("30天");
break;
default:
printf ("不存在的");
}
}
但是后来看到一个简单的方法,可以用‘与或’来代替‘ if ’语句(即判断闰年的函数),这样多行的代码就可以缩略为一行代码,整个函数就更清爽,附上代码:
#include <stdio.h>
int main()
{
int year;
int month;
printf ("请输入");
scanf ("%d.%d", &year, &month); //利用scanf输入吃掉输入时的 '.'
switch(month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
printf ("31天");
break;
case 4:
case 6:
case 9:
case 11:
printf ("30天");
break;
case 2:
if (0 == year%4 && 0 != year%100
|| 0 == year%400)
printf ("29天");
else
printf ("28天");
break;
default:
printf ("不存在的");
}
return 0;
}