『壹』 用c語言表達:求兩個日期之間有多少天輸入1900 1 1到3000 12 31時誤差很大,而其它測試數據都通過
可以這樣做:編寫一個求從1.1.1到y.m.d的總天數的函數(比如 int days(int,int,int)),然後調用這個函數即可。前看下面程序:
#include <stdio.h>
int days(int y,int m,int d); /* 求1.1.1~y.m.d的天數 */
inline int isleap(int y); /* 判斷y年是否閏年 */
void main(){
int y=2011,m=12,d=28;
int ds=days(y+1,1,1)-days(y,m,d);
printf("%d\n",ds);
}
/* 參數:y,m,d=年,月,日 */
int days(int y,int m,int d){
int ds[12]={0,31,59,90,120,151,181,212,243,273,304,334}; /* ds[i]=平年i+1月1日前的天數,i=0,1,... */
int t; /* 總天數 */
t=365*(y-1)+(y-1)/4-(y-1)/100+(y-1)/400; /* 到y-1年底的總天數 */
t+=ds[m-1]; /* 到y-1年m-1月底的總天數 */
t+=((m<=2) ? 0 : isleap(y) ? 1 : 0); /* m>2時,閏年加1天 */
t+=d; /* 到y-1年m-1月d日的總天數 */
return t; /* 總天數 */
}
/* 判斷y年是否閏年,是則返回非0,否則返回0 */
int isleap(int y){
return (y%4==0 && y%100!=0 || y%400==0);
}
『貳』 用c語言編寫一程序,用戶輸入月份,計算該月有多少天
同意樓上幾位的回答,沒有年份是算不出來的.再一個要這個月有多少天?用腦子算呀!如果說有把年份一塊輸入的話,算這個日期之前的一年裡的總天數,我這倒是有個不錯的程序...
main()
{
int
day,month,year,sum,leap;
printf("\nplease
intput
year,month,day\n");
scanf("%d,%d,%d",&year,&month,&day);
switch(month)
{
case
1:sum=0;break;
case
2:sum=31;break;
case
3:sum=59;break;
case
4:sum=90;break;
case
5:sum=120;break;
case
6:sum=151;break;
case
7:sum=181;break;
case
8:sum=212;break;
case
9:sum=243;break;
case
10:sum=273;break;
case
11:sum=304;break;
case
12:sum=334;break;
default:printf("data
error");break;
}
sum=sum+day;
if(year%400==0||(year%4==0&&year%100!=0))
leap=1;
else
leap=0;
if(leap==1&&month>2)
sum++;
printf("it
is
the
%dth
day
of
the
year.",sum);
}
『叄』 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自行查閱處理,你的演算法邏輯好麻煩,看的不是很懂
『肆』 給定年月日 怎樣用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天。 有了這些,寫程序不難。
未考慮公元前的年月日計算。
『伍』 急求!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;
}
『陸』 C語言關於輸出天數
思路應可以這樣:
1。先求出當前的年月日,並求出是平年還是閏年。
2.輸入一年月日後,判別該年是平年還是閏年。
3.如果輸入的年月日在當前的范圍內,則就可以求天數了。(知道閏平的年分就可知月的天數,公歷的閏年平年不是農歷的閏平年)
4。如果輸入的不在當前的年月是的天數內,相減就知有多少年。再分別求相這些年閏年的和與平年的和再加上相減的當前時間,就可得出所要的結果。
當前的年月日時分秒
#include <time.h>
get_time()
{
struct tm *Tm;
time_t t;
time(&t);
Tm = localtime(&t);
printf("%d-%d-%d %d:%d:%d\n",Tm->tm_year+1900,Tm->tm_mon,Tm->tm_mday,Tm->tm_hour,Tm->tm_min,Tm- >tm_sec);
return 0;
}
main()
{ }
『柒』 c語言求一年的天數
#include<stdio.h>
void main()
{
int sum_day(int,int,int);
int a,b,c;
printf("輸入年月日:");
scanf("%d%d%d",&a,&b,&c);
c=sum_day(a,b,c);
printf("天數是:%d\n",c);
}
int sum_day(int a,int b,int c)
{
int i,h[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
if(a%4==0&&a%100!=0||a%400==0) h[2]=29;
for(i=1;i<b;i++) c=h[i]+c;
return(c);
}
『捌』 用c語言編寫計算兩個日期之間的天數
#include <time.h>
#include <stdio.h>
void main()
{
tm t1={0},t2={0};
t1.tm_year = 1999-1900;
t1.tm_mon = 2-1;
t1.tm_mday = 3;
t2.tm_year = 2015-1900;
t2.tm_mon = 5-1;
t2.tm_mday = 4;
time_t a1 = mktime(&t1);
time_t a2 = mktime(&t2);
printf("相差%d天", (a2-a1)/86400);
}
ps:看不懂了再追問
『玖』 C語言怎樣計算天數
【程序1】:
main()
{
int day,month,year,sum,leap;
printf("\nplease input year,month,day\n");
scanf("%d,%d,%d",&year,&month,&day);
switch(month)/*先計算某月以前月份的總天數*/
{
case 1:sum=0;break;
case 2:sum=31;break;
case 3:sum=59;break;
case 4:sum=90;break;
case 5:sum=120;break;
case 6:sum=151;break;
case 7:sum=181;break;
case 8:sum=212;break;
case 9:sum=243;break;
case 10:sum=273;break;
case 11:sum=304;break;
case 12:sum=334;break;
default:printf("data error");break;
}
sum=sum+day; /*再加上某天的天數*/
if(year%400==0||(year%4==0&&year%100!=0))/*判斷是不是閏年*/
leap=1;
else
leap=0;
if(leap==1&&month>2)/*如果是閏年且月份大於2,總天數應該加一天*/
sum++;
printf("It is the %dth day.",sum);}