用C语言编写一个年历

用C语言编写一个年历
用C语言编写一个年历

黑龙江八一农垦大学理学院

《C程序设计》课程设计报告

2011-2012学年第二学期

设计题目:用C语言设计一个年历系统

指导教师:魏老师

完成时间:2012年6月13日至2012年6月20日

第一组报告成员

成绩评定:分任课教师签字: 2012年6月20日

目录

1、程序设计与分析 ................................................................................ - 2 -

1、功能分析与任务分配 (2)

2、流程图 (2)

3、数据结构 (4)

2、详细设计............................................................................................. - 5 -

3、参考文献............................................................................................. - 7 -

4、附录..................................................................................................... - 8 -

5、总结..................................................................................................... - 9 -

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、求出一年中的第一天是周几(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流程图):

3、数据结构

1)整型:

int judge(int year,int month)

int year,i,j,a,n,m,k;

2)字符型:

char ** p;

3)字符型数组:

week[]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};

month[]={"January","February","March","April","May","June","July","August","Sep tember","October","November","December"};

4)指针数组:

char * week[]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};

char*month[]={"January","February","March","April","May","June","July","August" ,"September","October","November","December"};

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||year%100==0&&year%400!=0)

return(2);

else return(3);

}

else return(4);

即当上式返回值为2的时候,为平年;否则,为闰年。

然后,判断这一年的月份,将其分为4种类型,即:天数为31天的月份、天数为28天的月份、天数为29天的月份,和天数为30天的月份:

对应的函数返回值,分别为: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天的月份

return(1);

else if(month==2)

{

if(year%4!=0||year%100==0&&year%400!=0) //判断闰年

return(2);

else return(3);

}

else return(4);

}

2)接下来,定义主函数。在这一部分,有一个地方非常关键,那就是对任一年第一天是星期几的判断:

a=(year+(year-1)/4-(year-1)/100+(year-1)/400)%7;

即,计算后a值为0、1、2、3、4、5、6,分别对应周日、周一、周二、周三、

周四、周五、周六。

3)然后就是对任一年,月份、星期,和天数的循环:

for(i=0;i<12;i++) //月份循环

{

n=judge(year,i+1); //判断情况,为下程序做准备

p=month+i; //指向指针变量的指针,月份输出

printf("%s\n",*p);

printf("\n");

for(j=0;j<7;j++) //星期循环

{

p=week+j;

printf("%6s",*p);

}

printf("\n");

for(k=0;k

printf(" ");

for(m=1;m<32;m++) //每月天数循环

{

printf("%6d",m);

if((a+m)%7==0)

printf("\n"); //满星期换行

}

a=(a+m)%7; //a为下个月所对应的星期

printf("\n");

printf("============================================");

printf("\n");

}

4)最后,输入任一年份,依次执行程序,输出结果。以2012年为例:

3、参考文献

[1] 刘明,夏清国.C程序设计(三导丛书)[M].西安:西北工业大学出版社,2003,1-380.

[2] 谭浩强.C程序设计(第四版)[M].中国高等院校计算机基础教育课程体系规划教材,2010,066130(1):1-330.

4、附录

#include

int judge(int year,int month) //定义judge函数

{

if(month==1||month==3||month==5||month==7||month==8||month==10||month== 12) //天数为31天的月份

return(1);

else if(month==2)

{

if(year%4!=0||year%100==0&&year%400!=0) //判断闰年,真为平年return(2);

else return(3);

}

else return(4);

}

int main()

{

int year,i,j,a,n,m,k; //定义变量

char ** p; //指向指针的指针变量

char * week[]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};

char*month[]={"January","February","March","April","May","June","July","Aug ust","September","October","November","December"};

printf("please inter the year:"); //输入所求年份

scanf("%d",&year);

printf("\n");

printf("the calendar of the year%d.",year);

printf("\n");

a=(year+(year-1)/4-(year-1)/100+(year-1)/400)%7; //判断每年的第一天是周几当a值为0的时候,对应周日

for(i=0;i<12;i++) //月份循环

{

n=judge(year,i+1); // 调用函数,n值为1234,代表每月为多少天

p=month+i; //数组名为首地址,加i 循环

printf("%s\n",*p); //输出月份名

printf("\n");

for(j=0;j<7;j++) //星期循环

{

p=week+j; //数组名为首地址,加j 循环

printf("%6s",*p); //.六列,字符串输出

}

printf("\n");

for(k=0;k

for(m=1;m<32;m++) //每月天数循环

{

printf("%6d",m); //输出格式占六列,右端对齐

if((a+m)%7==0)

printf("\n"); //满星期换行

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=(a+m)%7; // a为每月末行天数

printf("\n");

printf("============================================");

printf("\n");

}

}

5、总结

通过本次课程设计我们第一次通过自己的实践对书本上的知识进行了与生活相关的运用。在这个程序中,主要应用了这学期所学习的循环,条件语句,数组以及调用函数。这些知识的应用使我们对课本内容的认识得到了加深。

在编写程序的过程中,也出现了很多错误。比如程序语句错误导致检测时连续报错;函数语句编写错误导致输出结果与实际不符等。出现这些情况后,通过对一些新知识的学习和对网上相关资料的阅览,我们发现了自己的程序的问题所在并进行了改正。最后得到了正确的结果。

在程序的编写完成后,我们本想对程序进行拓展,想增加月历、确定日期的输出及增加农历生肖功能,但是由于程序过于复杂,最终没能调试成功。

总而言之,这次C语言实验课程设计,使我们大大增加了对《C程序设计》所学课程的理解与运用。最后,希望我们在计算机这条路上:走的更远,飞得更高。

相关主题
相关文档
最新文档