1、 1、程序设计与分析1、功能分析与任务分配(一)功能分析:1、要输入任一年显示出该年的所有月份日期,应该先设计具体的输出格式,如下: the calendar of the year2012.January Sun Mon Tue Wed Thu Fri Sat 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=2、判断是不是闰年 (year%4!=0|year%100=0&year%400!=0)满足条件就是平年,把一年中的所有月份分为四类(28,29,30,31)。3、求出
2、一年中的第一天是周几 (year +(year-1)/4-(year-1)/100+(year-1)/400)%7。4、有指针数组存放十二个月的英文和星期的英文缩写。5、用FOR循环输出各月份的日历(二)任务分配:1、Student1:程序综合整理2、Student2:判断闰年程序编写3、Student3:月份循环程序编写4、Student4:主函数程序编写5、Student5:天数循环程序编写2、流程图 1) 整个函数流程图:2) 判断任一年是否为闰年,及该年每月天数(N-S流程图):输入年份是month=1|month=3|month=5|month=7|month=8|month=10|
3、month=12否当月是31天是 month=2year%4=0 是当月是30天year%100=0当月是28天29天 year%400=0 否当月是29天当月是28天3、数据结构1)整型:int judge(int year,int month)int year,i,j,a,n,m,k;2)字符型:char * p;3)字符型数组:week=Sun,MonTueWedThuFriSat;month=JanuaryFebruaryMarchAprilMayJuneJulyAugustSeptemberOctoberNovemberDecember4)指针数组:char * week=char*
4、month=2、详细设计想要编写一个万年历程序,按其要求输出相应的功能。1)首先,需要对任一输入年份进行判断,判断其是平年还是闰年:if(month=1|month=3|month=5|month=7|month=8|month=10|month=12) return(1); else if(month=2) if(year%4!=0) return(2); else return(3); else return(4);即当上式返回值为2的时候,为平年;否则,为闰年。然后,判断这一年的月份,将其分为4种类型,即:天数为31天的月份、天数为28天的月份、天数为29天的月份,和天数为30天的月份:
5、对应的函数返回值,分别为:n=1,n=2,n=3,n=4。将以上几部分,综合整理为一个判断函数,其程序为:int judge(int year,int month) /定义judge函数if(month=1|month=3|month=5|month=7|month=8|month=10|month=12) /天数为31天的月份=0) /判断闰年2)接下来,定义主函数。在这一部分,有一个地方非常关键,那就是对任一年第一天是星期几的判断:a=(year+(year-1)/4-(year-1)/100+(year-1)/400)%7;即,计算后a值为0、1、2、3、4、5、6,分别对应周日、周一、
6、周二、周三、周四、周五、周六。3)然后就是对任一年,月份、星期,和天数的循环:for(i=0;i12;i+) /月份循环 n=judge(year,i+1); /判断情况,为下程序做准备 p=month+i; /指向指针变量的指针,月份输出 printf(%sn,*p);n); for(j=0;j7;j+) /星期循环 p=week+j; printf(%6s for(k=0;ka;k+) for(m=1;m32;m+) /每月天数循环%6d,m); if(a+m)%7=0) printf( /满星期换行 a=(a+m)%7; /a为下个月所对应的星期=4)最后,输入任一年份,依次执行程序,输
7、出结果。以2012年为例:3、参考文献1 刘明,夏清国.C程序设计(三导丛书)M西安:西北工业大学出版社,2003,1-380.2 谭浩强.C程序设计(第四版)M.中国高等院校计算机基础教育课程体系规划教材,2010,066130(1):1-330.4、附录#include if(month=1|month=3|month=5|month=7|month=8|month=10|month=12) /天数为31天的月份=0) /判断闰年,真为平年int main() int year,i,j,a,n,m,k; /定义变量 char * p; /指向指针的指针变量 char * week= cha
8、r*month= printf(please inter the year: /输入所求年份 scanf(%d,&year);the calendar of the year%d.,year); a=(year+(year-1)/4-(year-1)/100+(year-1)/400)%7; /判断每年的第一天是周几 当a值为0的时候,对应周日 for(i=0; / 调用函数,n值为1234,代表每月为多少天 /数组名为首地址,加i 循环 /输出月份名 /数组名为首地址,加j 循环 /.六列,字符串输出k+) / a代表每年第一天,后为每月前空格天数 /输出六个空格 /输出格式占六列,右端对齐
9、 if(n=1&m=31) break; /从此处至以下执行整月停止 else if(n=2&m=28) break; else if(n=3&m=29) break; else if(n=4&m=30) break; / a为每月末行天数5、总结通过本次课程设计我们第一次通过自己的实践对书本上的知识进行了与生活相关的运用。在这个程序中,主要应用了这学期所学习的循环,条件语句,数组以及调用函数。这些知识的应用使我们对课本内容的认识得到了加深。在编写程序的过程中,也出现了很多错误。比如程序语句错误导致检测时连续报错;函数语句编写错误导致输出结果与实际不符等。出现这些情况后,通过对一些新知识的学习和对网上相关资料的阅览,我们发现了自己的程序的问题所在并进行了改正。最后得到了正确的结果。在程序的编写完成后,我们本想对程序进行拓展,想增加月历、确定日期的输出及增加农历生肖功能,但是由于程序过于复杂,最终没能调试成功。总而言之,这次C语言实验课程设计,使我们大大增加了对C程序设计所学课程的理解与运用。最后,希望我们在计算机这条路上:走的更远,飞得更高。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1