资源描述:
《设计程序以打印任意一年的日历.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、1.设计程序以打印任意一年的日历,要求每个季度的三个月并排打印,每个月的一个星期在一行打印,格式如下:年号123456789101112C语言源程序代码:#includestructmdat{intmdays;intmhead;intmlast;};/*声明并定义结构体mdat(mouthdata)数组a[],用它的成员mdays来统计一个月的天数;用它的成员mhead来统计一个月,月头的天数;用它的成员mlast来统计一个月,月尾的天数;用它的成员mline来统计一个月,一个月在日历上有几行;*/intmain(void){voiddata(structmdata[1
2、2],longyear);/*声明返回值为空的数据处理函数函数data,此函数用来计算,得到并赋值给结构体mdat数组a[12]中,对应元素的相应成员*/voidprint(structmdsta[]);/*声明返回值为空的的输出函数print,其作用是根据a[12]结构体mdat数组所提供的信息,对一年的年历进行输出*/longyear,jihao=0;structmdata[12];a[0].mdays=31;a[2].mdays=31;a[4].mdays=31;a[6].mdays=31;a[7].mdays=31;a[9].mdays=31;a[11].mdays=31;a[1
3、].mdays=30;a[3].mdays=30;a[5].mdays=30;a[10].mdays=30;a[8].mdays=30;/*对一年中天数固定的月份,天数进行赋值*/printf("请输入你要查看年历的年份,并以回车键结束输入:");scanf("%d",&year);/*输入年份语句*/printf("");if(year<0){jihao=0-year;year=7+(year%7);}/*对于year<0时的year进行转换,jihao用来记录年数,并记录是否执行了这个操作*/if(year==0)printf("公元元年的年历是不存在的",year)
4、;else{if(jihao==0)printf("公元%d年年历表",year);elseprintf("公元前%d年年历表",jihao);data(a,year);/*执行数据处理函数*/print(a);/*执行输出函数*/scanf("%d",&year);/*停留界面*/}return0;}voiddata(structmdata[12],longyear){inttdays,i;/*定义整型tdays,用来表示从公元元年到第(year-1)年,一共有多少天*/if(year%100==0)if(year%4==0)a[1].mdays=29;else
5、a[1].mdays=28;elseif(year%4==0)a[1].mdays=29;elsea[1].mdays=28;/*对第year年二月的天数进行判断并赋值*/if(year>32768)year=year%7;if(year==0)tdays=0;elsetdays=(year-1)*365+(year-1)/4;a[0].mhead=7-(tdays%7);a[0].mlast=(a[0].mdays-a[0].mhead)%7;if(a[0].mlast==0)a[0].mlast=7;/*计算并赋值结构体数组元素a[0]的各个成员*/for(i=1;i<12;i++)
6、{a[i].mhead=7-a[i-1].mlast;a[i].mlast=(a[i].mdays-a[i].mhead)%7;if(a[i].mlast==0){a[i].mlast=7;}if(a[i].mhead==0){a[i].mhead=7;}}/*for(i=0;i<12;i++){printf("a[%2d].mhead=%2d,a[%2d].mdays=%2d,a[%2d].mlast=%2d",i,a[i].mhead,i,a[i].mdays,i,a[i].mlast);printf("");}*//*调试过程中为查看收集到的数据是否正确将他们输出*//*利用循
7、环语句计算并赋结构体数组各元素成员的值*/}voidprint(structmdata[12]){intnum[12]={1,1,1,1,1,1,1,1,1,1,1,1},i,j,k=-2,l,m,n=0;for(m=0;m<10;m=m+3){k=k+3;for(l=0;l<36;l=l+7){for(j=m;j<3+m;j++){if(k>n){n=k;for(i=k;i