提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
设计程序,实现年、月由用户输入,输出一个如下形式的闰年日历:
.
(提示:
可按公式 iWeek = ((c/4)-2*c+y+(y/4)+(26*(iMonth+1)/10)+iDay-1)%7
将年(iYear)/月(iMonth)/日(iDay)换算成星期(iWeek)。
公式中,
c=iYear/100, c>15;y=iYear%100;
当 iMonth为1时,iYear 改为 iYear-1,iMonth 改为 13;
当 iMonth为2时,iYear 改为 iYear-1,iMonth 改为 14;
当 iWeek<0时,iWeek 改为 iWeek+7;
iWeek 为 0 表示星期日)
2.实现代码
代码如下(示例):
#include<stdio.h>
int n,c,y,iWeek,iYear,iDay,iMonth,maxday,j;
int main(){
scanf("%d %d",&iYear,&iMonth);
printf("日 一 二 三 四 五 六\n");
switch(iMonth){
case 4:
maxday = 30;
break;
case 6:
maxday = 30;
break;
case 9:
maxday = 30;
break;
case 11:
maxday = 30;
break;
case 2:
if(iYear%4==0&&iYear%100!=0){
maxday = 29;
}
else{
maxday = 28;
}
break;
default:
maxday= 31;
break;
}
//计算当月yihao
c = iYear/100;
y = iYear%100;
iDay = 1;
iWeek = ((c/4)-2*c+y+(y/4)+(26*(iMonth+1)/10)+iDay-1)%7;
if(iWeek<0){
iWeek+=7;
}
int i;
for(i=0;i<iWeek;i++){
printf("%2s "," ");//iweek前面放空格
}
for(i=iWeek;i<=6;i++){
printf("%2d ",++j);
if(i==6){
i = -1;
printf("\n");
}
if(j>=maxday){
break;
}
}
return 0;
})
三、运行结果
2022 10
日 一 二 三 四 五 六
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
总结
熟悉掌握Switch--case用法、循环嵌套