【咀嚼C语言】给出年、月、日,计算该日是该年的第几天

【要求】

给出年、月、日,计算该日是该年的第几天。

这个是花了一个来小时写的,一气呵成,检查只有一个参数引用错了,所以当时还是比较高兴的。直接上代码。

  1 #include<stdio.h>
2 int main()
3 {
4 int yyyy,mm,dd,a,b,ctu; //a标记闰年,b标记正误以及保持月份的天数
5 int leapyear(int y);
6 int judgement(int m,int d,int lp);
7 int compute(int m);
8 do
9 { //整体循环开始
10 printf("plez input a date, like 1993-06-06:\n");
11 scanf("%d-%d-%d",&yyyy,&mm,&dd);
12 a=leapyear(yyyy); //判断是否闰年
13 b=judgement(mm,dd,a); //判断日期是否正确
14 if(b==1)
15 {
16 printf("an error date!\a\n");
17 printf("Enter 1 to back,or anykey Quit\n"); //整体循环结束
18 scanf("%d",&ctu);
19 }
20 else
21 {
22 b=compute(mm,a);
23 printf("it's the %d day of the year %d.\n",b+dd,yyyy);
24 printf("Enter 1 to back,or anykey Quit\n"); //整体循环结束
25 scanf("%d",&ctu);
26 }
27 }while(ctu==1);
28 return 0;
29 }
30
31 int leapyear(int y) //判断是否闰年并用a标记,1是闰年,2为非
32 {
33 int leap;
34 if(y%4==0)
35 {
36 if(y0==0)
37 {
38 if(y@0==0)
39 leap=1;
40 else
41 leap=2;
42 }
43 else
44 leap=1;
45 }
46 else
47 leap=2;
48 return leap;
49 }
50
51 int judgement(int m,int d,int lp) //判断日期是否正确,1为错误
52 {
53 int row; //row=right or worng
54 switch(lp)
55 {
56 case 1: //闰年
57 {
58 switch(m)
59 {
60 case 2:if(d>29)row=1;break;
61 case 1:
62 case 3:
63 case 5:
64 case 7:
65 case 8:
66 case 10:
67 case 12:if(d>31)row=1;break;
68 case 4:
69 case 6:
70 case 9:
71 case 11:if(d>30)row=1;break;
72 }
73 }break;
74 case 2: //非闰年
75 {
76 switch(m)
77 {
78 case 2:if(d>28)row=1;break;
79 case 1:
80 case 3:
81 case 5:
82 case 7:
83 case 8:
84 case 10:
85 case 12:if(d>31)row=1;break;
86 case 4:
87 case 6:
88 case 9:
89 case 11:if(d>30)row=1;break;
90 }
91 }break;
92 }
93 return row;
94 }
95
96 int compute(int m,int lp) //计算整月的日期
97 {
98 int dm; //day of month
99 switch(lp)
100 {
101 case 1: //闰年
102 {
103 switch(m)
104 {
105 case 1:dm=0;break;
106 case 2:dm=31;break;
107 case 3:dm=60;break;
108 case 4:dm=91;break;
109 case 5:dm=121;break;
110 case 6:dm=152;break;
111 case 7:dm=182;break;
112 case 8:dm=213;break;
113 case 9:dm=244;break;
114 case 10:dm=274;break;
115 case 11:dm=305;break;
116 case 12:dm=335;break;
117 }
118 }break;
119 case 2: //非闰年
120 {
121 switch(m)
122 {
123 case 1:dm=0;break;
124 case 2:dm=31;break;
125 case 3:dm=59;break;
126 case 4:dm=90;break;
127 case 5:dm=120;break;
128 case 6:dm=151;break;
129 case 7:dm=181;break;
130 case 8:dm=212;break;
131 case 9:dm=243;break;
132 case 10:dm=273;break;
133 case 11:dm=304;break;
134 case 12:dm=334;break;
135 }
136 }break;
137 }
138 return dm;
139 }

运行截图

 

新浪微博,欢迎关注,欢迎各种交流

转载于:https://www.cnblogs.com/fengzy/archive/2011/11/12/2246823.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值