今天的题目:编程实现统计某年某月的天数
例如: 输入: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天");elseprintf ("28天");break;default:printf ("不存在的");}return 0;
}