C语言课程设计报告-万年历_第1页
C语言课程设计报告-万年历_第2页
C语言课程设计报告-万年历_第3页
C语言课程设计报告-万年历_第4页
C语言课程设计报告-万年历_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

.课程设计题目:万年历 实验题目:万年历程序的编写实验目的:综合运用所学的C语言知识解决一个比较实际的简单问题,侧重对数组、函数、指针、结构体和文件等相关内容的综合应用,使同学们能进一步熟悉掌握C语言的基本语法,进一步提升自己的编程能力并逐步培养编程思维,进而不断提高同学们解决问题的能力,并为以后的语言学习打下良好的基础。实验要求:万年历设计主要功能包括:1、查询某年某月每一天对应星期几。 2、可以查询某年某月的上个月或是下个月的日历情况。 3、查询某年某月某日是这一年的第几天,并查询改天 是星期几。4、 判断该年是闰年还是平年,判断这一年的生肖。实现思路(要求有文字描述,并画出流程图):开始输入y,m,d计算是该年的第几天=s;判断平闰(Y%4=0且y%100!=0)或Y%400=0y,m,d是今年的s天Y是平年按与几点相隔天数除7推星期几及排出该月的日历及推算下月的日历输出该年是平年还是闰年,生肖;改日是该年的第几天,星期几及该月日历及上下月日历结束定义S=0;c=0是Y是闰年计算是该年的第几天=s;y,m,d是今年的s天该天使星期几及该月和上下月的情况实现过程(要求有文字说明实现的过程,并对相应的代码添加注释):见程序(程序见后)后的解析。运行时只要你输入年月日, 你要的星系都会显示出来;如果想继续输入日期的话,只需按y就可以,祥结束按n就可以结束。实验总结(分析程序的得与失):得: 通过这次程序设计,更使我了解了编程序的严谨性,每个问题,每个不走都得有依据,不得盲目乱造,同时也让我获得了一点编写简单程序的能力,使自己平时在理论课中很多部明白的东西明白了好多,学会了好多语句的用法,比如会用y or n来决定程序是否要继续;怎么控制输出格式等等。总之在这次程序设计中我学到了很多。失:在编程序过程中有些函数的用法不怎么会用,偶尔会落下写简单的东西。如 , ;等;同时在编写输出上下个情况及判断程序是否要继续的程序上花费了好多时间;函数的声明、调用既然不清楚,感到很惭愧。实验的过失就是成功的阶梯,在过失中我也学到很多。心得体会:我体会到了编程序的严谨性,也觉得如果我们要是熟悉课本所讲的内容,不怕麻烦,坚持不懈,我们一定可以将它实现的。要有耐心,有时候很多的错误就是一个地方引起的,只要认真检查,一定能突破的,所以在以后的编程序是要细心,有耐心,人不断调试程序,直至最后成功。#includestruct /定义包含年月日数组结构体int year; int month; int day;date;int main() /主函数void print(int,int); /函数的声明int dobb(int); /函数的声明int date1(int,int,int); /函数的声明int rili(); /函数的声明rili(); /函数的调用return 0;int rili() /定义函数int days; /定义整型变量int a,b; /定义整型变量char z; / 定义字符变量printf(+nn); / 输出头的格式printf( 万 年 历nn);printf(+n);printf(功能有:n); printf(t);printf(1.查询某年某月某天对应星期几;nt2.查询某年某月上下个月情况;nt3.显示该日子是该年的第几天,并查询改天星期几;nt4.判断该年是平年还是闰年以及生肖等。n);printf(&+&n);printf(请输入年月日:);scanf(%d,%d,%d,&date.year,&date.month,&date.day); / 输入年月日 switch(date.month) /计算第几天的case 1: days=date.day; break; case 2: days=date.day+31; break; case 3: days=date.day+59; break; case 4: days=date.day+90; break; case 5: days=date.day+120; break; case 6: days=date.day+151; break; case 7: days=date.day+181; break; case 8: days=date.day+212; break; case 9: days=date.day+243; break; case 10: days=date.day+273; break; case 11: days=date.day+304; break; case 12: days=date.day+334; break;if(date.year%4=0&date.year%100!=0)|date.year%400=0)&date.month=3) days+;printf(%d月%d日是%d的第%d天 。n,date.month,date.day,date.year,days);if(date.year%4=0&date.year%100!=0)|date.year%400=0) / 判断平闰年的语句printf(%d 是闰年。n,date.year); /输出平闰年的elseprintf(%d 是平年。n,date.year);if(date.year=2013) /判断2013年后生肖的语句a=(date.year-2013)%12;switch(a)case 0: printf(%d 是蛇年。n,date.year); break; case 1: printf(%d 是马年。n,date.year); break; case 2: printf(%d 是羊年。n,date.year); break; case 3: printf(%d 是猴年。n,date.year); break; case 4: printf(%d 是鸡年。n,date.year); break; case 5: printf(%d 是狗年。n,date.year); break; case 6: printf(%d 是猪年。n,date.year); break; case 7: printf(%d 是鼠年。n,date.year); break; case 8: printf(%d 是牛年。n,date.year); break; case 9: printf(%d 是虎年。n,date.year); break; case 10: printf(%d 是兔年。n,date.year); break; case 11: printf(%d 是龙年。n,date.year); break;else b=(2013-date.year)%12; switch(b) / 判断2013年前生肖的语句case 0: printf(%d 是蛇年。n,date.year); break; case 1: printf(%d 是龙年。n,date.year); break; case 2: printf(%d 是兔年。n,date.year); break; case 3: printf(%d 是虎年。n,date.year); break; case 4: printf(%d 是牛年。n,date.year); break; case 5: printf(%d 是鼠年。n,date.year); break; case 6: printf(%d 是猪年。n,date.year); break; case 7: printf(%d 是狗年。n,date.year); break; case 8: printf(%d 是鸡年。n,date.year); break; case 9: printf(%d 是猴年。n,date.year); break; case 10: printf(%d 是羊年。n,date.year); break; case 11: printf(%d 是马年。n,date.year); break;dobb( date.year); /调用函数date1( date.year, date.month,date.day); /调用函数print(date.year,date.month); /调用函数printf(continueY/N.); /是否还要继续输入日期getchar();z=getchar();if(z=y|z=Y) /判断是rili(); / 调用函数if(z=n|z=N) / 判断不是结束getchar();return 0;void print(int year,int month) /print函数的定义 int i,j,n,leap,days,k,count; leap=dobb(year); /函数调用及赋值 days=date1(year,month-1,1); /printf(%d年n,year); for(i=month-1;i=month+1;i+) /输出上下月的情况 if(i12) printf(%3d月份n,i-12); / 下年的1月 if(i0&i13) printf(%3d月份n,i); /本年的月份 printf(n); printf(t); printf(%-8s%-8s%-8s%-8s%-8s%-8s%-8sn,日,一,二,三,四,五,六); 输出格式 if(days=7) /控制输出的个数 days=0; else n=days; printf(t); for(j=1;j=8*days;j+) /控制输出的日期对齐 printf( ); switch(i) case 0: case 1: case 3: case 5: case 7: case 8: case 10: case 12:count=31;break; case 4: case 6: case 9: case 11:count=30;break; case 2:if(leap)count=29; /2月不同情况的判断 else count=28; break; for(k=1;k=count;k+) / 逐渐输出每月的日期 printf(%-8d,k); n+; if(n=7) printf(n);printf(t);n=0; printf(nn); days=n; int dobb(int year) /判断年份的类型函数的定义 if(date.year%4=0&date.year%100!=0|(date.year%400=0) return(1); /闰年输出1 else return(0); /平年输出0int date1(int year,int month,int day) /date1函数的定义int leap,cn=0,sum;leap=dobb(year); / 调用函数switch(month-1)case 11: cn+=30;case 10: cn+=31;case

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论