一、实验要求
编写NextDate程序:该程序有三个输入变量month、day、year(month、day和year均为整数值,并且满足:1≤month≤12,1≤day≤31, 1900≤year≤2100),分别作为输入日期的月份、日、年份,通过程序可以输出该输入日期在日历上下一天的日期。
如果输入日期不是当月最后一天,则把day变量的值加1;
如果输入日期是1~11月份中某月的最后一天,则把day变量的值复位为1,month变量的值加1;
如果输入日期是12月的最后一天,则day变量和month变量的值都复位为1,year变量的值加1。
关于最后一天的判断:
如果是有31天的月份(1,3,5,7,8,10,12),day变量值为31;
如果是有30天的月份(4,6,9,11),day变量值为30;
如果是有29天的月份(闰年的2月),day变量值为29;
如果是有28天的月份(非闰年的2月),day变量值为28。
分析以上问题,设计等价类表和用例表。
二、实验结果
1.等价类表
这里附上两种形式写的代码:
#include<stdio.h>
int main()
{
int year;
int month,maxmonth=12;
int day,maxday;
printf("请输入年份:(1000-3000)");
scanf("%d",&year);
if(year<1000||year>3000)
{
printf(" input error\n");
printf("请重新输入年份:(1000-3000)");
scanf("%d",&year);
}
printf("请输入月份:(1-12)");
scanf("%d",&month);
if(month<1||month>12)
{
printf(" input error\n");
printf("请重新输入月份:(1000-3000)");
scanf("%d",&month);
}
if(month==4||month==6||month==9||month==11)
maxday=30;
else if(month==2)
{
if(year%400==0)
maxday=29;
else
{
if(year%4==0&year%100!=0)
maxday=29;
else
maxday=28;
}
}
else
maxday=31;
printf("请输入日:(1-31)");
scanf("%d",&day);
if(day<1||day>maxday)
{
printf(" input error\n");
printf("请重新输入日:(1-31)");
scanf("%d",&day);
}
else if(month==maxmonth&&day==maxday)
{
year=year+1;
day=1;
month=1;
}
else if(month!=maxmonth&&day==maxday)
{
day=1;
month=month+1;
}
else
day=day+1;
printf("下一天是%d年%d月%d日",year,month,day);
return 0;
}
#include<stdio.h>
#include<stdio.h>
int maxday;
int year;
int month,maxmonth=12;
int day;
void panduan()
{
if(year%400==0)
maxday=29;
else
{
if(year%4==0&&year%100!=0)
maxday=29;
else
maxday=28;
}
}
int main()
{
printf("请输入年份:(1000-3000)");
scanf("%d",&year);
if(year<1000||year>3000)
{
printf(" input error\n");
printf("请重新输入年份:(1000-3000)");
scanf("%d",&year);
}
printf("请输入月份:(1-12)");
scanf("%d",&month);
if(month<1||month>12)
{
printf(" input error\n");
printf("请重新输入月份:(1000-3000)");
scanf("%d",&month);
}
if(month==4||month==6||month==9||month==11)
maxday=30;
else if(month==2)
{
panduan();
}
else
maxday=31;
printf("请输入日:(1-31)");
scanf("%d",&day);
if(day<1||day>maxday)
{
printf(" input error\n");
printf("请重新输入日:(1-31)");
scanf("%d",&day);
}
else if(month==maxmonth&&day==maxday)
{
year=year+1;
day=1;
month=1;
}
else if(month!=maxmonth&&day==maxday)
{
day=1;
month=month+1;
}
else
day=day+1;
printf("下一天是%d年%d月%d日",year,month,day);
return 0;
}