C语言程序设计 万年历
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
存档资料成绩:
华东交通大学理工学院
课程设计报告书
所属课程名称车C语言程序设计课程设计
题目万年历查询
分院电信分院
专业班级2013级电气工程及其自动化1班
学号20130210470105
学生姓名周利凯
指导教师肖盛文
2014年6月15日
摘要
通过C语言编程实现了一个万年历,能实现基本的万年历功能。通过本章的讲解,使读者能够明白万年历的实现原理和方法。万年历的实现核心是要判断闰年和根据给定的日期计算其对应的星期,并按照合适的方式输出日历.这都是本章向读者讲述的重点。
另外,在当今社会万年历在生活起着越来越重要的角色,它悄无声息的走进我们的生活,还向读者讲述了怎样突出显示某个日期的方法,这会在实际应用中经常遇到。除了讲述万年历的实现方法外,本章还回顾了前面章节的知识,如光标定位﹑设置寄存器﹑产生中断﹑输出一个字符等,以及讲述系统日期﹑屏幕输出的方法等。
关键字:
C语言,函数,历法计算,万年历,中断。
目录
1.设计万年历目的--------------------------- P4
2.万年历程序设计思路图解及其讲解-----------P5
3.万年历程序清单与编码----------------------P7
4.万年历的调试与分析------------------------P12
5.万年历的使用环境与说明--------------------P14
6. 设计心得-----------------------------------P15
7.万年历参考文献------------------------------P16
8.致谢-----------------------------------------P17
1.设计万年历的目的
万年历慢慢的走进我们的生活,在我们生活中起着很重要的部分。虽然万年历几乎在每个电子产品中都能看到,我们时时刻刻都在用着它,但是又有多少人知道万年历真正的工作原理呢?
所以一是了解万年历真正的原理,二是完成学校给予我们这里机会来与她亲密的接触万年历这个神奇的东西。同时通过显示年日历程序的设计,可以培养和利用C++语言进行程序设计的能力,加强函数的运用及对软件工程方法的初步认识,提高软件系统分析能力和程序文档建立、归纳总结的能力,培养利用系统提供的标准函数及典型算法进行设计。
出于兴趣爱好,我们选择做万年历这个任务,一是可以锻炼我们独立完成任务的本领,提高自己的认知能力。二是可以提高自己逻辑思维的严密性,因为C语言本就是一门对逻辑考察很强的一门学科,多一个逗号都不能使函数成立,平台就无法便以这个程序。
2..万年历程序设计思路图解
1.万年历总程序大体图解
在本次的程序中,我们由浅及深,我们将年份赋值给y,判断y 的值是否符合要求,y的值要大于1,否则结束程序。等y的值大于1时,我们将打印出输入年份的日历。
2.万年历分步程序图解
此为程序的的分步骤,因为有这些分步骤的模切配合,总程序才
能得以顺利的进行。在这里我们运用了判断年份是否为闰年的重要公式:(a%400==0||a%100!=0&&a%4==0),与闰年平年和闰年一年第一天元旦的计算!
3. 万年历程序清单
1.源程序:
#include
int fdyear(int a)
{
if (a%400==0||a%100!=0&&a%4==0) //判断是不是闰年
return (a-1+a/4-a/100+a/400)%7; //闰年元旦计算
else
return (a+a/4-a/100+a/400)%7; //平年元旦计算
}
int main()
{
int n,i,y,fdmonth[12];
printf("****************欢迎使用周利凯设计万年历****************\n");
printf(" 本程序来至电气1班周利凯,请愉快使用!\n"); printf("请输入年份:");
scanf("%d", &y);
if (y<1)
printf("输入的是错误年份。\n");
else
{
n=(y%400==0||y%100!=0&&y%4==0);
char
*month[12]={"Jan","Feb","Mar","Apr","May","Jun","Jul"," Aug","Sep","Oct","Nov","Dec"};
char week[]= "日一二三四五六 ";
int
daysmonth[12]={31,28+n,31,30,31,30,31,31,30,31,30,31}; //输入年份每个月的总天数
printf(" %d年的日历
\n\n", y);
for(i=0;i<12;i++) //计算个月每个月的第一天
{
static int day=0;
fdmonth[i]=(day+fdyear(y))%7;
day=day+daysmonth[i];
}
for(i=0;i<12;i+=3) //每三个月并排打印
{
printf(" %s %s %s\n", month[i],month[i+1],month[i+2]);
char s[] = " ";
printf("%-3s %s %-3s %s %-3s %s ",s,week,s,week,s,week);
for(int j=0;j<6;j++) //每个月最多占行
{
for(int d=i;d
行
{
printf(" ");
for(int n=0;n<7;n++) //每一行有日
{
int k=1-fdmonth[d]+n+7*j;
if(k<1||k>daysmonth[d])
printf(" ");
else
printf("%-3d", k); //计算日期输入
}