3.4 案例学习——计算一年中某月份的总天数
【例3-8】 从键盘上输入年和月份,打印出相应年中某月份的总天数。
1.问题分析
这个问题要求从键盘上输入年份和月份,根据年份和月份计算出当月的总天数。年份和月份要考虑输入是否合法,并且二月份要考虑是否是闰年,如果是闰年则是29天,否则是28天。
2.算法设计
显示一个请求用户输入年份和月份的提示
接收用户的输入
假如年份和月份不合法
输出提示信息
否则
假如月份是1,3,5,7,8,10,12,则是31天;
假如月份是4,6,9,11,则是30天;
假如是2月份,则需要判断是否是闰年,如果是闰年则是29天,否则是28天;
3.程序实现
/*
程序名:prg3-8.c
功能:从键盘上输入年份和月份,打印出相应年中某月份的总天数
*/
#include<stdio.h>
int main()
{
int year,month,day;
printf("Enter year and month ");
scanf("%d %d", &year, &month);
if(year < 1 || month > 12 || month < 1) //判断非法年份或月份
{
printf("input a wrong year or month ");
}
else
{
switch(month)
{
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
day = 31; //31天的月份
break;
case 4: case 6: case 9: case 11:
day = 30; //30天的月份
break;
case 2:
if((year % 4 == 0 && year % 100 != 0) || year % 400 ==0 )//判断是不是闰年
day = 29;
else
day = 28;
}
printf("%d year %d month has %d days",year,month,day);
}
return 0;
}
程序prg3-8.c根据不同的月份来决定天数,2月份要判断是否为闰年,如果是闰年,则2月份有29天,否则是28天。
4.测试结果
测试应包含各种情况的数值输入,下面是4种情况的测试结果:
Enter year and month 2004,2
2004 year 2 month has 29 days
或
Enter year and month 2011,2
2011 year 2 month has 28 days
或
Enter year and month 2011,3
2011 year 3 month has 31 days
或
Enter year and month 2011,4
2011 year 4 month has 30 days