急求!C语言计算天数

Python09

急求!C语言计算天数,第1张

#include<stdio.h>

int main()

{

int yyyy,mm,dd,a,b

scanf("%d/%d/%d",&yyyy,&mm,&dd)

a=31*(mm>1)+28*(mm>2)+31*(mm>3)+30*(mm>4)+31*(mm>5)+30*(mm>6)+31*(mm>7)+31*(mm>8)+30*(mm>9)+31*(mm>10)+30*(mm>11)+dd

b=((yyyy%4==0)*(yyyy%100!=0)+(yyyy%400==0))*(mm>2)

printf("%d\n",a+b)

return 0

}

//代码错误是:printf写成了pritnf

//代码考虑的不周全,如果输入的是同一年,那代码怎么计算,还有不同年计算也有大问题

//你的代码思路看的我头大,干脆没看,在你的代码基础上直接给改了,供参考

//这个代码中注释的应该很清楚,有疑问可以追问

#include <stdio.h>

int leap(int year)

{

if (year% 4 == 0 || year% 400 == 0 && year% 100 != 0)

return 1

else

return 0

}

int a[12] = { 31,29,31,30,31,30,31,31,30,31,30,31 }/*闰年月份天数*/

int b[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 }

void main()

{

int t, s, i, t1 = 0, n = 0, n2 = 365, n1 = 366/*s为总天数,n为年中间天数*/

int y1, m1, d1

int y2, m2, d2

printf("请输入第一个年月日:\n")

scanf("%d%d%d", &y1, &m1, &d1)

printf("请输入第二个年月日:\n")

scanf("%d%d%d", &y2, &m2, &d2)

if (m1 > 12 || d1 > 31 || m2 > 12 || d2 > 31)

{

printf("输入有误,请重输!")

return //加个错误退出

}

//先输入的是较后的年月日,就交换过来

if(y1*10000+m1*100+d1>y2*10000+m2*100+d2)

{

t=y1 y1=y2 y2=t

t=m1 m1=m2 m2=t

t=d1 d1=d2 d2=t

}

//这里计算中间年份的天数,比如2000.2.2-2003.2.3,这里计算2001和2002的天数,后面再计算2000.2.2到2001.1.1的天数和2003.1.1到2003.2.3的天数

for (i = y1 + 1 i < y2 i++)

{

if (leap(i) == 1)

n = n + n1

else

n = n + n2

}

if (y1 < y2)//如果不同年

{

//计算y1年m1月之后月份的天数,比如2000.2.2,就计算2000年3月到12月的天数

for (i = m1 + 1i <= 12 i++)

{

if (leap(y1) == 1)

t1 = t1 + a[i-1]

else

t1 = t1 + b[i-1]

}

//计算y1年m1月d1日当月剩余的天数

if (leap(y1) == 1)

t1=t1+a[m1-1]-d1

else

t1=t1+b[m1-1]-d1

//计算y2年1月1日到y2年m2月d2日的天数

for (i = 1i < m2 i++)

{

if (leap(y2) == 1)

t1 = t1 + a[i-1]

else

t1 = t1 + b[i-1]

}

t1=t1+d2

}

else //同一年

{

if(m1==m2) //同一年又同一月

{

t1=d2-d1

}

else

{

//同一年不同月,先计算中间月份的天数

for (i = m1 + 1i < m2 i++)

{

if (leap(y1) == 1)

t1 = t1 + a[i-1]

else

t1 = t1 + b[i-1]

}

//计算m1月d1日当月剩余天数加上m2月d2日的天数

if (leap(y1) == 1)

t1=t1+a[m1-1]-d1+d2

else

t1=t1+b[m1-1]-d1+d2

}

}

s = n + t1

printf("%d年%d月%d日与%d年%d月%d日共有%d天\n", y1, m1, d1, y2, m2, d2, s)

}