c語言日期計算
❶ c語言中輸入一個日期計算他是今年的第幾天
輸入年月日三個值,先累加該年之前各個月的每月天數,最後累加日期天數即可獲取結果。
一、演算法設計:
1、輸入年月日三個值;
2、為保證程序健壯性,可以對三個值的合法性進行判斷,只對合法數據進行操作;
3、累加之前各月天數;
4、累加當前日值;
5、輸出結果。
二、注意點:
可以使用數組存儲各個月份的天數,用循環累加。需要注意的是閏年的判斷。對於閏年,2月要多加一天。
三、參考代碼:
#include<stdio.h>
intmain()
{
intmdays[12]={31,28,31,30,31,30,31,31,30,31,30,31};//十二個月的天數。
inty,m,d,r=0,i;
scanf("%d%d%d",&y,&m,&d);
if(y%400==0||(y%4==0&&y%100!=0))//閏年。
mdays[1]=29;//設置閏年二月值。
if(y<0||m<=0||m>12||d<=0||d>mdays[m-1])//輸入非法。
{
printf("輸入年月日不合法 ");//提示並退出。
return-1;
}
for(i=0;i<m-1;i++)//累加之前各個月。
r+=mdays[i];
r+=d;//累加日期值。
printf("%d ",r);//輸出結果。
return0;
}
❷ c語言年月日計算
首先,你的閏年判斷就有問題。教你個口訣:「四年一潤,一百年不潤,四百年再潤」。
其實就可以用if(yr%4==0||yr%100!=0&&yr%400==0){那麼是閏年}
你的檢驗判斷也可以利用mont數組的,首先判斷是不是在閏年,然後判斷輸入days是不是大於的mont[mn](如果是閏年要判斷二月+1)。
❸ c語言輸入一個日期,計算這個日期前一天和後一天的日期。怎麼解答
#include<stdio.h>
#include<conio.h>
/*日期存儲結構*/
typedefstructdate{
intyear; /*年*/
intmonth; /*月*/
intday; /*日*/
}date;
intdpm[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};/*平年每月天數*/
/*判斷閏年1:是;0:否*/
/*閏年特點:年份是4的倍數但不是100的倍數、年份是400的倍數*/
intisLeap(intyear){
return(year%4==0&&year%100!=0)||(year%400==0);
}
/*日期校驗*/
/*日期錯誤返回1,正確返回0*/
intdateIsErr(dated){
if(d.year<1582&&d.month<10&&d.day<15)/*僅支持1582年10月15日之後的日期計算*/
return1;
if(d.month<1||d.month>12)/*月校驗*/
return1;
if(d.day<1||d.day>31)/*日初步校驗*/
return1;
if(d.month!=2&&d.day>dpm[d.month])/*非2月日校驗*/
return1;
if(d.month==2&&isLeap(d.year)&&d.day>29)/*2月閏年日校驗*/
return1;
if(d.month==2&&isLeap(d.year)==0&&d.day>28)/*2月平年日校驗*/
return1;
return0;
}
/*計算與日期start相差delta天的日期*/
datedateDelta(datestart,intdelta){
dateend=start;
if(delta>=0){/*日期start向後計算*/
end.day=start.day+delta;/*start日加intervalDays天*/
while(end.day>dpm[end.month]){/*不斷減去整月天數,向月、年進位,直至其不超過當前月份天數*/
end.day-=dpm[end.month];
if(isLeap(end.year)&&end.month==2)/*閏年2月天數-1*/
end.day--;
end.month++;/*月進位+1*/
if(end.month==13){/*滿1年*/
end.year++;/*年進位+1*/
end.month=1;/*月歸位至1月*/
}
}
}
else{/*日期start向前計算*/
end.day=start.day+delta;/*start日加intervalDays天*/
while(end.day<1){/*不斷加整月天數,向月、年借位,直至其不小於1*/
end.month--;/*月借位-1*/
if(end.month==0){/*向年借位*/
end.year--;/*年借位-1*/
end.month=12;/*月歸位至12月*/
}
end.day+=dpm[end.month];
if(isLeap(end.year)&&end.month==2)/*閏年2月天數+1*/
end.day++;
}
}
returnend;
}
intmain(void){
datestart={2008,5,6},end;
intdelta;
if(dateIsErr(start)){
printf("日期錯誤! ");
}
else{
printf(" %4d年%2d月%2d日 ",start.year,start.month,start.day);
delta=1;
end=dateDelta(start,delta);
printf("向後 1天 ");
printf("是 %4d年%2d月%2d日 ",end.year,end.month,end.day);
delta=-1;
end=dateDelta(start,delta);
printf("向前 1天 ");
printf("是 %4d年%2d月%2d日 ",end.year,end.month,end.day);
}
getch();/*屏幕暫留*/
return0;
}
輸入日期部分,題主自己寫吧。以上是核心代碼。
❹ 求助,c語言,輸入日期及天數計算新日期,求代碼
#include<stdio.h>
int main()
{ struct date
{ int year,month,day;
} dt;
int i,days,mon[13]= {0,31,28,31,30,31,30,31,31,30,31,30,31};
scanf("%d%*c%d%*c%d,%d",&dt.year,&dt.month,&dt.day,&days);
dt.day+=days;
while(dt.day>mon[dt.month])
{ if(dt.month==2)
mon[2]=28+(dt.year%4==0&&dt.year%100||dt.year%400==0);
dt.day-=mon[dt.month];
if(++dt.month>12)
{ dt.month=1;
dt.year++;
}
}
printf("result:%d-%d-%d ",dt.year,dt.month,dt.day);
return 0;
}
❺ C語言對指定日期計算出N天後是什麼日期
/*C語言對指定日期計算出N天後是什麼日期*/
#include<stdio.h>
main()
{
int year,month,day;
int leapyear=0;//閏年時使用
int daytime=0;
int sum;
static int month_date[12]={31,28,31,30,31,30,31,31,30,31,30,31};
printf("請輸入日期:(例如:2010 5 27)");
scanf("%d%d%d",&year,&month,&day);
if(year<=0||month>12||month<1)//判斷輸入是否正確
{
printf("Error!\n");
getch();
exit(0);
}
if(year%400==0||(year%4==0&&year%100!=0))//判斷是否為閏年
leapyear=1;//是就加1
if(month==2)//判斷日是否輸入正確,2月是特殊的因為分閏年和平年
{ if((month_date[month-1]+leapyear)<day||day<=0)
{
printf("Error!\n");
getch();
exit(0);
}
}
if(month!=2)//當輸入不是2月時,判斷輸入
{
if(month_date[month-1]<day||day<=0)
{
printf("Error!\n");
getch();
exit(0);
}
}
printf("\n請輸入天數:");
scanf("%d",&daytime);//輸入第N天後
if(daytime<0)
{
printf("Error!\n");
getch();
exit(0);
}
sum=daytime+day;//當前日期與N天相加
do
{
if(month==2)//判斷當月是不是二月份
month_date[month-1]+=leapyear;
if(sum>month_date[month-1])
{
sum-=month_date[month-1];
month++;//超過當月天數,加一個月
if(month==13)//當月份超過12月時,重新返到1月
{
year++;//加一年
if(year%400==0||(year%4==0&&year%100!=0))//判斷加一年後是不是閏年
leapyear=1;
else
leapyear=0;//不是閏年則為0
month=1;//因為12月的下一個月是1月
}
}
}while(sum>month_date[month-1]);//當加起來的天數少於當月的天數就停止循環
day=sum;
printf("\n第%d天後是%d %d %d",daytime,year,month,day);//輸出
getch();
}
❻ C語言 算日期
不明白你的問題,我測試是正確的。
如
2012 2 1
30
結果輸出
2012 3 2
是正確的啊!!!沒有閏年或二月的問題
❼ C語言 計算日期的問題
程序運行不了,因為你的程序中
if(leep(year)&&month>=3)
這一句中leep()函數是沒定義的,我猜你應該是筆誤,改成leap()馬上OK!
貌似 你的程序邏輯方面還得改一下,程序運行後結果不大對!
實際運行一遍後發現,你的程序邏輯沒錯誤,變數定義也沒問題,問題在:
1.int sum_day(int month,int day);
int leap(int year);
這兩個函數的聲明應該在main()的前面,而不是在main()裡面;
2. 之所以出現負數,是因為你輸入數據格式和你預先定義的不同,input date(year,month,day)
這個年月日之間有逗號,所以輸入格式應該是:2012,12,5
照這樣改,保准對!!
❽ 求一個C語言的日期計算代碼
菜鳥發個,演算法可能不是很好吧,請參考下
#include"stdio.h"
#include"math.h"
struct date
{
int year;
int month;
int day;
};
int date[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31},{31,29,31,30,31,30,31,31,30,31,30,31}};
int judge(int year) //判斷是否為閏年//
{
int flag=0;
if((year%4==0&&year%100!=0)||year%400==0) flag=1;
else flag=0;
return flag;
}
int work(struct date user[2]) //計算兩個日期相差天數//
{
int judge(int year);
int days,cnt,i,flag,year,a,b,k; //cnt年數 count閏年天數//
days=0;cnt=0;a=1;b=0;
k=user[1].year-user[0].year;
if(k<0) {a=0,b=1;}
cnt=(int)fabs(k);
for(i=0;i<cnt;i++)
{
year=user[0].year+i;
flag=judge(year);
days=days+365+flag;
}
for(i=0;i<user[a].month-1;i++)
{
year=user[a].year;
flag=judge(year);
days=days+date[flag][i];
}
for(i=0;i<user[b].month-1;i++)
{
year=user[b].year;
flag=judge(year);
days=days-date[flag][i];
}
days=days-user[b].day+user[a].day;
return days;
}
void main()
{
int work(struct date user[2]);
struct date user[2];
int i,days,d;
printf("Please input 2 dates(such as 2008.10.2).\n");
for(i=0;i<2;i++)
{
scanf("%d.%d.%d",&user[i].year,&user[i].month,&user[i].day);
}
d=work(user);
days=fabs(d);
printf("There are %d days.\n",days);
getchar();
}
❾ C語言程序設計 計算日期
#include<stdio.h>
bool isday(int day,int mouth,int year)
{
int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};
if((year%400==0)||(year%4==0&&year%100!=0)) a[1]++;
if(day>a[mouth-1]||day<1)
return true;
else
return false;
}
void main()
{
int i,year,mouth,day;
int sum,sign;
int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};
do
{
sum=0;sign=0;
puts("請輸入年、月、日:");
scanf("%d%d%d",&year,&mouth,&day);
if(((year%400==0)||(year%4==0&&year%100!=0))&&mouth>2)
{
sum=day+1;//閏年,記得加1
}
else sum=day;
for(i=0;i<mouth-1;i++)
sum+=a[i];
if(year<1||mouth<1||mouth>12||isday(day,mouth,year))
{
puts("輸入錯誤,請重新輸入:");
sign=1;
}
}while(sign);
printf("為第%d天\n",sum);
}