计算天数c语言
直接算两个日期距离公元元年1月1日的天数:
若干个完整的年,若干个完整的月,若干天,加起来之后两个天数相减就行了.
日期的合法性,闰年之类的就不罗嗦了.
2. 如何用C语言计算日期间离天数
#include <stdio.h>
int main(void)
{
int y1, m1, d1;
int y2, m2, d2;
int i, sum = 0;
int month[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30 ,31, 30 ,31};
/*input two dates*/
scanf("%d%d%d", &y1, &m1, &d1);
scanf("%d%d%d", &y2, &m2, &d2);
/*sum up the year between y1 and y2*/
for (i = y1 + 1; i < y2; ++i)
if (i % 400 == 0 || i % 100 != 0 && i % 4 == 0) sum += 366;
else sum += 365;
/*sum up the remaining days in y1*/
for (i = m1; i < 12; ++i)
sum += month[i];
sum += month[m1 - 1] - d1;
if (m1 <= 2 && (y1 % 400 == 0 || y1 % 100 != 0 && y1 % 4 == 0)) ++sum;
/*sum up the past days in y2*/
for (i = 0; i < m2; ++i)
sum += month[i];
sum += d2;
if (m2 > 2 && (y1 % 400 == 0 || y1 % 100 != 0 && y1 % 4 == 0)) ++sum;
printf("The total days is %d\n", sum);
return 0;
}
3. C语言求两个日期相差的天数
计算两个年月日之间的天数,思路是分别算出日期的总天数然后相减。
要考虑闰年的情况,判断闰年的口诀:4年一闰,100年不闰,400年再闰。
((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
网上找了一个(偷懒= =!),修改下如下:
#include <stdio.h>
int sum(int y,int m,int d)
{
unsigned char x[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int i,s=0;
for(i=1;i<y;i++)
if(i%4==0 && i%100!=0 || i%400==0)
s+=366;//闰年
else
s+=365;//平年
if(y%4==0 && y%100!=0 || y%400==0)
x[2]=29;
for(i=1;i<m;i++)
s+=x[i];//整月的天数
s+=d;//日的天数
return s;//返回总天数,相对公元1年
}
void main()
{
unsigned char y1,m1,d1,y2,m2,d2;
int s1,s2;
printf("输入第一个年 月 日:");
scanf("%d %d %d",&y1,&m1,&d1);
printf("输入第二个年 月 日:");
scanf("%d %d %d",&y2,&m2,&d2);
s1=sum(y1,m1,d1);
s2=sum(y2,m2,d2);
if (s1 > s2)
printf("相差天数:%ld\n",s1-s2);
else
printf("相差天数:%ld\n",s2-s1);
}
以上代码VC6编译测试通过。
虽然这个思路显得有些笨,但是其它算法,代码太长太复杂,要考虑多种情况,不如直接算两个日期距离公元元年1月1日的天数,然后相减
4. C语言下计算总天数的小程序 老是得不到正确结果 各位帮我啦TOT
你的switch语句很有问题,而且你很多语句的括号只有一半,比如scanf语句和default那句。可以这么说,你的语法还不对,算法也有问题。我写了一个,你自己看看。
#include<stdio.h>
void
main()
{
int
day,month,year,sum,i;
int
y[12]={31,28,31,30,31,30,31,31,30,31,30,31};
printf("please
input
year,month,day\n");
scanf("%d%d%d",&year,&month,&day);
for(i=0,sum=0;i<month-1;i++)sum+=y[i];
sum+=day;
if(year%400==0||year%4==0&&year%100!=0&&month>2)sum+=1;
printf("The
days
are%d.\n",sum);
}
5. 输入年,月,计算该月的天数 C语言程序
#include"stdio.h"
#include"stdlib.h"
intmain()
{inty,m,days;//存放年、月、天数的变量
printf("请输入年、月(逗号隔开):
");//输入提示
scanf("%d,%d",&y,&m);//输入边长(输入时用逗号隔开)
printf("%d%d
",y,m);
switch(m)
{case1:case3:case5:case7:case8:case10:case12:days=31;break;
case4:case6:case9:case11:days=30;break;
case2:{if(y%4==0&&y%100!=0||y%400==0)days=29;//闰年
elsedays=28;
break;
}
default:days=0;//输入月份不对
}
printf("%d年%d月有%d天
",y,m,days);
system("pause");
}
6. 急求!C语言计算天数
#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;
}
7. c语言关于计算天数
m[12]=(31,28,31,30,31,30,31,31,30,31,30,31);
这句的写法是错的
一、初始化应该在数组定义时
二、括号应该用{}
修改如下:
int m[12]={31,28,31,30,31,30,31,31,30,31,30,31};
具体到其它问题,请LZ自行查阅处理,你的算法逻辑好麻烦,看的不是很懂
8. 给定年月日 怎样用C语言编程计算2个日期之间的时间天数
1970 年以后的时间,可以用 time.h 里的函数计算。时间精度为秒。按题目要求,输出时间单位用天。程序如下:
#include <stdio.h>
#include <time.h>
time_t YMD_hhmmss_2_s70(int Y, int M, int D, int hh, int mm, int ss){
struct tm *target_tm;
time_t tt;
time (&tt);
target_tm=localtime(&tt);
target_tm->tm_year = Y - 1900;
target_tm->tm_mon= M - 1;
target_tm->tm_mday = D;
target_tm->tm_hour = hh; // hour
target_tm->tm_min = mm;
target_tm->tm_sec = ss;
tt = mktime(target_tm); // from tm to time_t (s)
return tt;
}
int main()
{
int y1,m1,d1,y2,m2,d2;
time_t t1,t2;
int dt;
printf("input y1 m1 d1: ");
scanf("%d %d %d",&y1,&m1,&d1);
printf("\ninput y2 m2 d2: ");
scanf("%d %d %d",&y2,&m2,&d2);
t1 = YMD_hhmmss_2_s70(y1,m1,d1,0,0,0);
t2 = YMD_hhmmss_2_s70(y2,m2,d2,0,0,0);
dt = (t2-t1)/(24*3600);
printf("\ndt=%d\n",dt);
return 0;
}
这里未包含日期的合法性判断。
1970 年以前 要另写程序。某年的日子是当年的第几天可用下面函数得出:
int YMD_2_JD(int Y, int M, int D){
const short MonthDay[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int JD,i;
JD=D;
for (i=0;i<M;i++) JD+=MonthDay[i];
if (((Y%4==0)&&(Y%100!=0)||(Y%400==0)) && (M>2)) JD++;
return JD;
}
整年的天数,涉及闰年的判断:
某年是否闰年,用 (Y%4==0)&&(Y%100!=0)||(Y%400==0) 判断。闰年366天,平年365天。 有了这些,写程序不难。
未考虑公元前的年月日计算。
9. 用C语言switch语句计算某年某月,求该月的天数。
#include <stdio.h>
void main()
{
int a=0,b=0;//保存年月
printf("请输入年");
scanf("%d",&a);
printf("请输入月");
scanf("%d",&b);
switch(b)
{
case 1:printf("该月天数为31");
break;
case 2:
if ((a%4==0&&a%100!=0)||(a%400==0))
{
printf("该月天数为29");
}
else
{
printf("该月天数为28");
}
break;
case 3:printf("该月天数为31");
break;
case 4: printf("该月天数为30");
break;
case 5: printf("该月天数为31");
break;
case 6: printf("该月天数为30");
break;
case 7: printf("该月天数为31");
break;
case 8: printf("该月天数为31");
break;
case 9:printf("该月天数为30");
break;
case 10:printf("该月天数为31");
break;
case 11: printf("该月天数为30");
break;
case 12: printf("该月天数为31");
break;
}
}