C语言写的小程序:计算任意两个日期之间的天数、计算已经活的天数~

标签:
c语言编程计算天数活过的天数 |
分类: Linux丨C丨Cpp丨编程 |
这次主要学习了调用函数,代码中有N多个函数。
这断代码的作用是计算任意两个日期之间的天数,要求输入两个日期,且两个日期有先后,也就是在前面的日期要先输入。这里是可以改进的,只要将两个日期比较一下,需要就将它们交换。
先看看代码:
01 #include
<stdio.h>
02 //计算任意两个日期之间的天数
03
04 //判断输入有效
05 int valiDate(int y,int m,int d){
06
if(y>3000||y<1900){
07
printf("error
year!\n");
08
return 1;
09
}
10
if(m>12||m<1){
11
printf("error
month!\n");
12
return 1;
13
}
14
if(d>daysOfMonth(y,m)||d<1){
15
printf("error
day!\n");
16
return 1;
17
}
18
return 0;
19 }
20
21 //一个整月的天数
22 int daysOfMonth(int y,int m){
23
if(m==2){
24
if(y%4==0&&y%100!=0||y%400==0){
25
return 29;
26
}else{
27
return 28;
28
}
29
}else if(m==4||m==6||m==9||m==11){
30
return 30;
31
}else{
32
return 31;
33
}
34 }
35
36 //输入年份已经过的天数
37 int daysBefore(int y,int m,int d){
38
int i,result=0;
39
for(i=1;i<=12;i++){
40
if(i==m){
41
result += d;
42
return result;
43
}else{
44
result += daysOfMonth(y,i);
45
}
46
}
47 }
48
49 //计算每年天数
50 int daysOfYear(int y){
51
if(y%4==0&&y%400!=0||y%400==0){
52
return 366;
53
}else return 365;
54 }
55 //主函数
56 int main(){
57
int y1,m1,d1,y2,m2,d2;
58
printf("please
input first date:yyyy-mm-dd\n");
59
scanf("%d-%d-%d",&y1,&m1,&d1);
60
while(valiDate(y1,m1,d1)){
61
printf("please
input first date:yyyy-mm-dd\n");
62
scanf("%d-%d-%d",&y1,&m1,&d1);
63
}
64
printf("please
input secend date:yyyy-mm-dd\n");
65
scanf("%d-%d-%d",&y2,&m2,&d2);
66
while(valiDate(y2,m2,d2)){
67
printf("please
input secend date:yyyy-mm-dd\n");
68
scanf("%d-%d-%d",&y2,&m2,&d2);
69
}
70
int i,result=0;
71
for(i=y1;i<y2;i++){
72
result += daysOfYear(i);
73
}
74
result = result - daysBefore(y1,m1,d1) + daysBefore(y2,m2,d2);
75
printf("there
are %d days\n",result);
76
return 0;
77 }
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
70
71
72
73
74
75
76
77