加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

C语言制作简单日历之2:计算星期

(2013-07-11 17:15:07)
标签:

万年历

星期

c语言

编程

分类: Linux丨C丨Cpp丨编程
今天要写的代码是为了根据输入日期求出这天的是星期几。http://www/uc/myshow/blog/misc/gif/E___6790EN00SIGG.gif
作为日历中一个重要的组成部分——星期肯定是必不可少的,今天我就想要写个代码来计算星期。在开始写这篇文章前我已经有了一个大概的思路,现在还不知道是不是最好的方法,我想要试试自己能不能实现这个功能,不管结果如何,我都会在之后到网上找找别人的方法,网络真是个好地方。
写的代码要能实现这样的功能:输入年、月、日,计算出这一天是星期几,并输出。
先说下原理,我们知道公历是从公元元年(即公元1年)开始的,公元1年1月1日是星期一,1月8日也是星期一,因此,只要计算出输入日期到公元1年1月1日的天数,再对7求余,余数就是星期,0表示星期日。
按下面的流程来实现:(真正写的时候完全不是这么回事!!)
(1)输入函数scanf()增加一个参数day(也就是日)
(2)计算总天数totleDays,我的方法是:[365*year+year%4*1 +这一年天数],其中year%4表示闰年个数,每个闰年要多一天;
(3)总天数totleDays对7求余就是星期week,输出week 。
就这样我就开始写代码了,但是发现要计算这一年天数的时候很麻烦。。。。写不下去了,洗洗睡了!
—————————————————————————————————————————————————
今天还一直想着昨晚的问题,要把计算这一年天数的部分使用调用函数,这样应该简单一点了。问题又来了,我只知道有调用函数这么个东西,要怎么做也是一头雾水,满脑子黑线啊!!网上找啊找啊!http://www/uc/myshow/blog/misc/gif/E___6706EN00SIGG.gif

花了半天时间总算弄出来了!哈哈~不过呢,下面代码完全不是按照上面的方法写出来滴!
代码如下:
======================================================================================
01 #include <stdio.h>
02 int main()
03 {
04    int year,month,day;
05    int days;
06    int sumDay=0;    
07    int i,week;
08    int j,sumDaysOfYear=0;
09 
10    printf("请输入:年-月-日\n");
11    scanf("%d-%d-%d",&year,&month,&day);
12 
13    for(i=1;i<month;i++)
14    {        
15        if(i==2)
16        {
17            if((year%4==0&&year%100!=0)||(year%400==0))
18                days=29;
19            else
20                days=28;
21        }
22        else if(i==4||i==6||i==9||i==11)
23            days=30;
24        else
25            days=31;
26        
27        sumDay+=days;
28    }
29 
30    for(j=1;j<year;j++)
31    {
32        if((j%4==0&&j%100!=0)||(j%400==0))
33            sumDaysOfYear+=366;
34        else
35            sumDaysOfYear+=365;
36    }
37 
38    week=(sumDaysOfYear+sumDay+day)%7;
39 
40    printf("%d年%d月%d日是星期%d\n",year,month,day,week);
41 
42    return 0;
43 }
======================================================================================
先看看效果:
对照电脑上的日历,结果是正确的。果然是功夫不负有心人啊,付出总是有回报滴! 
写完这段代码,发现难点还是在运算这一步。就像上面写的那样,其实是不正确的。
       难点体现在下面几个方面:
  • 一是,计算本年到输入月份的上个月共有多少天。这里用了一个for循环来实现,值得注意的是2月份的天数。其他没什么。
  • 二是,计算到上一年12月31共有多少天。开始是我想的太简单了,认为每4年就有一闰年,却忘了百年不闰这一条,所以算来算去算到放弃。正确的方法还是要一年一年的累加,平年按365天,闰年按366天,通过for循环来算。
  • 上面两个天数相加,再加上日期中的日(day)就是总天数,对7求余就是星期了。
      总算是写出来了,还是很高兴的!http://www/uc/myshow/blog/misc/gif/E___6725EN00SIGG.gif这里写的有点乱,自己都有点看不下去了。哎~不善言语啊!好在没什么人看,实际就是没人看,呵呵~只是自己写着玩,作个记录,仅此而已。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有