C语言制作简单日历之1:计算每个月天数

标签:
c编程日历ubuntu零基础学习c |
分类: Linux丨C丨Cpp丨编程 |
在达内报名学习C++已经有3天了,一直想写点什么来记录这次的培训过程。报名是业余班,但我们并不业余!
上次老师留的作业是:要求输入年、月,输出这个月有多少天。
以下是我写出的最终代码:
1 //简单的日历
2 //作者:dongxu
3 #include <stdio.h>
4 int main(){
5
int year,month,days;
6
printf("请输入:年-月\n");
7
scanf("%d-%d",&year,&month);
8
if((year%4==0&&year%100!=0)||year%400==0){ //判断为闰年
9
if(month==2)
10
days=29;
11
else if(month==4||month==6||month==9||month==11)
12
days=30;
13
else
14
days=31;
15
}else{
//其他为平年
16
17
if(month==2)
18
days=28;
19
else if(month==4||month==6||month==9||month==11)
20
days=30;
21
else
22
days=31;
23
}
24
printf("%d年%d月有%d天。\n",year,month,days);
25
return 0;
26 }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
执行效果如下:
这样的代码对于一些懂编程的人来说确实不值一提,但毕竟也是我努力的结果,而且这其实是第3个版本,其他两个虽然也能得到同样的答案,但还是被自己否定了。
写这段代码过程中,用到了基本输入输出两个函数prinrf()和scanf(),还用到了if...else
if...else语句。在作闰年判断的时候,我可是纠结了很久,只因为不知道怎样来计算闰年,最后还是网上找来的。关于公历的起源这里就不多介绍了,反正是和凯撒大帝有关的。闰年的判断依据
是:4年一闰,百年不闰,400年再闰。依据这个才写出了(year%4==0&&year%100!=0)||year%400==0这个条件。能判断出是否为闰年,下面就简单了,闰年中2月29天,1、6、9、11月31天,剩下其他月30天;平年2月只有28天,其他相同。有了这些,再注意一下语法结构,代码也中完成了。
下面再说下我写的其他两个版本被我否定的原因。第一次是我思路不正确,我想这个题是判断一个月有多少天,我直接就先判断是否为2月,如果不是2月再判断是小月4、6、9、11还是大月1、3、5、7、8、10、12;如果是2月就再判断为闰年还是平年。就这个题目而言,这样做完全没有问题,进行结果也都是对的。但是想到最终是要实现日历的功能,如果使用这样的思路就有些不妥,于是就采用了上面贴出来的思路。第二次到第三次的修改不多就是把冗长的代码缩减了一些,第二次写的时候我是在每个if和else的后面都加了一条printf()来输出,后来发现跟本不需要这样,只要在最后输出就行了。
在这里只是实现了每月天数的计算,以后肯定还要计算某一天是星期几,还有要将一个月或多个月的日历输出,那样的话这个日历才能算是基本上完成。