用C语言编写一个年历Word下载.docx
- 文档编号:20229688
- 上传时间:2023-01-21
- 格式:DOCX
- 页数:10
- 大小:113.13KB
用C语言编写一个年历Word下载.docx
《用C语言编写一个年历Word下载.docx》由会员分享,可在线阅读,更多相关《用C语言编写一个年历Word下载.docx(10页珍藏版)》请在冰豆网上搜索。
1、程序设计与分析
1、功能分析与任务分配
(一)功能分析:
1、要输入任一年显示出该年的所有月份日期,应该先设计具体的输出格式,如下:
thecalendaroftheyear2012.
January
SunMonTueWedThuFriSat
1234567
891011121314
15161718192021
22232425262728
293031
=============================================
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流程图):
输入年份
是
month==1||month==3||month==5||month==7||
month==8||month==10||month==12
否
当月是31天
是month==2
year%4==0
是
当月是30天
year%100==0
当月是
28天
29天
year%400==0
否
当月是29天
当月是28天
3、数据结构
1)整型:
intjudge(intyear,intmonth)
intyear,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"
September"
October"
November"
December"
4)指针数组:
char*week[]={"
char*month[]={"
2、详细设计
想要编写一个万年历程序,按其要求输出相应的功能。
1)首先,需要对任一输入年份进行判断,判断其是平年还是闰年:
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
return
(1);
elseif(month==2)
{
if(year%4!
=0)
return
(2);
elsereturn(3);
}
elsereturn(4);
即当上式返回值为2的时候,为平年;
否则,为闰年。
然后,判断这一年的月份,将其分为4种类型,即:
天数为31天的月份、天数为28天的月份、天数为29天的月份,和天数为30天的月份:
对应的函数返回值,分别为:
n=1,n=2,n=3,n=4。
将以上几部分,综合整理为一个判断函数,其程序为:
intjudge(intyear,intmonth)//定义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,分别对应周日、周一、周二、周三、周四、周五、周六。
3)然后就是对任一年,月份、星期,和天数的循环:
for(i=0;
i<
12;
i++)//月份循环
n=judge(year,i+1);
//判断情况,为下程序做准备
p=month+i;
//指向指针变量的指针,月份输出
printf("
%s\n"
*p);
\n"
);
for(j=0;
j<
7;
j++)//星期循环
{
p=week+j;
printf("
%6s"
}
for(k=0;
k<
a;
k++)
"
for(m=1;
m<
32;
m++)//每月天数循环
%6d"
m);
if((a+m)%7==0)
printf("
//满星期换行
a=(a+m)%7;
//a为下个月所对应的星期
============================================"
4)最后,输入任一年份,依次执行程序,输出结果。
以2012年为例:
3、参考文献
[1]刘明,夏清国.C程序设计(三导丛书)[M].西安:
西北工业大学出版社,2003,1-380.
[2]谭浩强.C程序设计(第四版)[M].中国高等院校计算机基础教育课程体系规划教材,2010,066130
(1):
1-330.
4、附录
#include<
stdio.h>
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)//天数为31天的月份
=0)//判断闰年,真为平年
intmain()
intyear,i,j,a,n,m,k;
//定义变量
char**p;
//指向指针的指针变量
char*week[]={"
char*month[]={"
printf("
pleaseintertheyear:
"
//输入所求年份
scanf("
%d"
&
year);
thecalendaroftheyear%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代表每年第一天,后为每月前空格天数
//输出六个空格
//输出格式占六列,右端对齐
if(n==1&
m==31)break;
//从此处至以下执行整月停止
elseif(n==2&
m==28)break;
elseif(n==3&
m==29)break;
elseif(n==4&
m==30)break;
//a为每月末行天数
5、总结
通过本次课程设计我们第一次通过自己的实践对书本上的知识进行了与生活相关的运用。
在这个程序中,主要应用了这学期所学习的循环,条件语句,数组以及调用函数。
这些知识的应用使我们对课本内容的认识得到了加深。
在编写程序的过程中,也出现了很多错误。
比如程序语句错误导致检测时连续报错;
函数语句编写错误导致输出结果与实际不符等。
出现这些情况后,通过对一些新知识的学习和对网上相关资料的阅览,我们发现了自己的程序的问题所在并进行了改正。
最后得到了正确的结果。
在程序的编写完成后,我们本想对程序进行拓展,想增加月历、确定日期的输出及增加农历生肖功能,但是由于程序过于复杂,最终没能调试成功。
总而言之,这次C语言实验课程设计,使我们大大增加了对《C程序设计》所学课程的理解与运用。
最后,希望我们在计算机这条路上:
走的更远,飞得更高。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 编写 一个 年历
![提示](https://static.bdocx.com/images/bang_tan.gif)