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

标签:
万年历星期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 }
======================================================================================
======================================================================================
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
======================================================================================
先看看效果:
对照电脑上的日历,结果是正确的。果然是功夫不负有心人啊,付出总是有回报滴!
写完这段代码,发现难点还是在运算这一步。就像上面写的那样,其实是不正确的。
- 一是,计算本年到输入月份的上个月共有多少天。这里用了一个for循环来实现,值得注意的是2月份的天数。其他没什么。
- 二是,计算到上一年12月31共有多少天。开始是我想的太简单了,认为每4年就有一闰年,却忘了百年不闰这一条,所以算来算去算到放弃。正确的方法还是要一年一年的累加,平年按365天,闰年按366天,通过for循环来算。
- 上面两个天数相加,再加上日期中的日(day)就是总天数,对7求余就是星期了。