第三部分先实现第四步,示例代码如下,
#define_CRT_SECURE_NO_WARNINGS1
#includestdio.h
#defineSTART_YEAR
intmain(){
printf("----------------------欢迎使用简易日历系统-------------------------\n");
intyear,month,monthDays;
//1、输入年份和月份,判断输入年份是否是闰年
do{
printf("请输入年份:");
scanf("%d",year);
rewind(stdin);
}while(yearSTART_YEAR);
do{
printf("请输入月份:");
scanf("%d",month);
rewind(stdin);
}while(month1
month12);
intisLeapYear=0;
if(year%4==0year%!=0
year%==0){
//闰年
isLeapYear=1;
}
printf("isLeapYear=%d\n",isLeapYear);
//计算输入月份的天数
switch(month){
case1:
case3:
case5:
case7:
case8:
case10:
case12:
monthDays=31;
break;
case4:
case6:
case9:
case11:
monthDays=30;
break;
case2:
if(isLeapYear==1){
monthDays=29;
}else{
monthDays=28;
}
break;
}
printf("monthDays=%d\n",monthDays);
/*
3、计算该月的第一天是星期几
提示:
(1)循环计算从年开始到输入年份的年份总天数;
(2)需要判断每一年是闰年还是平年,闰年有天,平年有天;
(3)计算输入的月份距离当年1月的天数,并和输入年份之前的天数进行累加;
(4)计算输入月份的第一天是星期几,以年1月1日星期一为基准进行推算:
星期X=(1+总天数)%7;周一到周6,可以使用数字1-6表示,数字0表示周日。
*/
intyearDays=0;
for(inti=0;iyear;i++){
if(i%4==0i%!=0
i%==0){
//闰年
yearDays+=;
}else{
//平年
yearDays+=;
}
}
printf("yearDays=%d\n",yearDays);
intmonthTotalDays=0;
for(inti=0;imonth;i++){
if(month==1
month==3
month==5
month==7
month==8
month==10
month==12){
monthTotalDays+=31;
}elseif(month==4
month==6
month==9
month==11){
monthTotalDays+=30;
}elseif(month==2){
if(isLeapYear==1){
monthTotalDays+=29;
}else{
monthTotalDays+=28;
}
}
}
printf("monthTotalDays=%d\n",monthTotalDays);
intweek=(yearDays+monthTotalDays+1)%7;
printf("week=%d\n",week);
/*
4、按格式输出日历
(1)按格式依次输出:
星期日星期一星期二星期三星期四星期五星期六
(2)用循环输出空格,根据输入月份的1日是星期几来决定空格的数量;
(3)用循环输出当月的所有天数;
*/
printf("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六\n");
for(inti=0;iweek;i++){
printf("\t");
}
for(inti=1;imonthDays;i++){
printf("%d\t",i);
//把空格和输出的日期看作一个整体,每输出7个数的时候换行
if((week+i)%7==0){
printf("\n");
}
}
return0;
}
测试结果如下,同样测试年11月,
日历中年11月第一天同样是星期三
真实测试时最好多测试几次,大月,小月,平年和闰年的二月,都需要进行测试。