c語言後序日期,計算後續日期c語言

本文目錄一覽:

C語言 日期(年月日 ) 排序

#include “stdio.h”

#include “string.h”

//日期結構體

struct date

{

int y;//年

char m[4];//月

int d;//日

};

//比較年份

int cmpY(int a, int b)

{

//年份在90-10之間,代表1990年到2010年

if (a 100 a 10)

a +=1900;

else

a += 2000;

if (b 100 b 10)

b +=1900;

else

b += 2000;

if (a b)

return 1;

else if (a == b)

return 0;

else

return -1;

}

//比較月份

int cmpM(char *a, char *b)

{

//定義字符串數組,表示12個月份的英文

char m[12][4] = {“Jan”, “Feb”, “Mar”, “Apr”, “May”, “Jun”, “Jul”, “Aug”, “Sep”, “Oct”, “Nov”, “Dec”};

int i, j;

for (i = 0; i 12; i++)

if (strcmp(a,m[i]) == 0)

break;

for (j = 0; j 12; j++)

if (strcmp(a,m[j]) == 0)

break;

if (i j)

return 1;

else if (i == j)

return 0;

else

return -1;

}

//綜合年,月,日比較

int cmpYMD(struct date a, struct date b)

{

if (cmpY(a.y,b.y) == -1)

return -1;

else if (cmpY(a.y,b.y) == 1)

return 1;

else

{

if (cmpM(a.m,b.m) == -1)

return -1;

else if (cmpM(a.m,b.m) == 1)

return 1;

else

{

if (a.d b.d)

return 1;

else if(a.d == b.d)

return 0;

else

return -1;

}

}

}

void main()

{

//定義結構體數組

struct date dt[3]={

{ 0, “Jan”, 11},

{99, “Feb”, 22},

{ 8, “Mar”, 2}};

struct date dtTemp;

int i, j;

//排序

for (i = 0; i 3-1; i++)

for (j = i+1; j 3; j++)

if (cmpYMD(dt[i],dt[j]) == 1)

{

dtTemp = dt[i];

dt[i] = dt[j];

dt[j] = dtTemp;

}

//輸出排序過後的日期

for (i = 0; i 3; i++)

{

printf(“%d %s %d\n”,dt[i].y,dt[i].m,dt[i].d);

}

}

c語言輸入一個日期,計算這個日期前一天和後一天的日期。怎麼解答?

#include stdio.h

#include conio.h

/* 日期存儲結構 */

typedef struct date {

int year; /* 年 */

int month; /* 月 */

int day; /* 日 */

} date;

int dpm[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31}; /* 平年每月天數 */

/* 判斷閏年 1:是; 0:否 */

/* 閏年特點:年份是4的倍數但不是100的倍數、年份是400的倍數 */

int isLeap (int year) {

    return (year%4==0  year%100!=0) || (year%400==0);

}

/* 日期校驗 */

/* 日期錯誤返回1,正確返回0 */

int dateIsErr (date d) {

if (d.year1582  d.month10  d.day15) /* 僅支持1582年10月15日之後的日期計算 */

return 1;

if (d.month 1 || d.month 12) /* 月校驗 */

return 1;

if (d.day1 || d.day31) /* 日初步校驗 */ 

return 1;

if (d.month!=2  d.daydpm[d.month]) /* 非2月日校驗 */ 

return 1;

if (d.month==2  isLeap (d.year)  d.day29) /* 2月閏年日校驗 */

return 1;

if (d.month==2  isLeap (d.year)==0  d.day28) /* 2月平年日校驗 */

return 1;

return 0;

}

/* 計算與日期start相差delta天的日期 */

date dateDelta (date start, int delta) {

date end = 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++;

}

}

return end;

}

int main (void) {

date start = {2008,5,6}, end;

int delta;

if (dateIsErr (start)) {

printf (“日期錯誤!\n”);

}

else {

printf (“\t%4d年%2d月%2d日\n”, start.year, start.month, start.day);

delta = 1;

end = dateDelta (start, delta);

printf (“向後\t1天\n”);

printf (“是\t%4d年%2d月%2d日\n”, end.year, end.month, end.day);

delta = -1;

end = dateDelta (start, delta);

printf (“向前\t1天\n”);

printf (“是\t%4d年%2d月%2d日\n”, end.year, end.month, end.day);

}

getch (); /*屏幕暫留*/

    return 0;

}

輸入日期部分,題主自己寫吧。以上是核心代碼。

C語言 排序 時間?

#include “stdio.h”

#include “string.h”

//日期結構體

struct date

{

char y[3];//年

char m[4];//月

int d;//日

};

//新增加,將字符串表示的年份轉成整形表示

int intY(char *a)

{

int k = 0;

k += a[0] – ‘0’;//十位上的數值

k = k*10 + (a[1] – ‘0’);//十位上的數值乘以10再加上個位上的數值

return k;

}

//比較年份(修改後,參數類型變了)

int cmpY(char *y1, char *y2)

{

//新增加兩條語句

int a = intY(y1);

int b = intY(y2);

//年份在90-10之間,代表1990年到2010年

if (a 10)

a += 1900;

else

a += 2000;

if (b 10)

b += 1900;

else

b += 2000;

if (a b)

return 1;

else if (a == b)

return 0;

else

return -1;

}

//比較月份

int cmpM(char *a, char *b)

{

//定義字符串數組,表示12個月份的英文

char m[12][4] = {“Jan”, “Feb”, “Mar”, “Apr”, “May”, “Jun”, “Jul”, “Aug”, “Sep”, “Oct”, “Nov”, “Dec”};

int i, j;

for (i = 0; i b.d)

return 1;

else if(a.d == b.d)

return 0;

else

return -1;

}

}

}

void main()

{

//定義結構體數組

struct date dt[3]={

{“00”, “Jan”, 11},

{“99”, “Feb”, 22},

{“08”, “Mar”, 2}};

struct date dtTemp;

int i, j;

//排序

for (i = 0; i 3-1; i++)

for (j = i+1; j 3; j++)

if (cmpYMD(dt[i],dt[j]) == 1)

{

dtTemp = dt[i];

dt[i] = dt[j];

dt[j] = dtTemp;

}

//輸出排序過後的日期

for (i = 0; i 3; i++)

{

//修改輸出格式

printf(“%s %s %d\n”,dt[i].y,dt[i].m,dt[i].d);

}

}

c語言問題 計算後續日期

修改後如下:

#include stdio.h

#include stdlib.h

int main(int argc, char *argv[])

{

 int y,m,d,N,a;

 scanf(“%d %d %d”,y,m,d);

 scanf(“%d”,N);

 if(m==1||m==3||m==5||m==7||m==8||m==10||m==12)

 {

  a=31-d;

 }else if(m==4||m==6||m==9||m==11)

 {

  a=30-d;

 }else if(m==2)

 {

  if((y%4==0y%100!=0)||y%400==0)

  {

   a=29-d;

  }else

  {

   a=28-d;

  }

 }

 if(N=a)

 {

  printf(“%d %d %d”,y,m,d+N);

 }else

 {

  N=N-a;

  m++;

 }

 for(;N0;)

 {

  if(m==1||m==3||m==5||m==7||m==8||m==10||m==12)

  {

   N=N-31;

   m++;

  }else if(m==4||m==6||m==9||m==11) 

  {

   N=N-30;

   m++;

  }else if(m==2)

  {

   if((y%4==0y%100!=0)||y%400==0)

   {

    N=N-29;m++;

   }else

   {

    N-=28;

    m++;

   }

  }else if(m==13) 

  {

   y++;

   N-=31;

   m=2;

  }

 }

 m–;

 if(m==1)

 {

  printf(“%d.%d.%d\n”,y,m=12,N+31);

 }else if(m==3||m==5||m==7||m==8||m==10||m==12)

 {

  printf(“%d.%d.%d\n”,y,m,N+31);

 }else if(m==4||m==6||m==9||m==11)

 {

  printf(“%d.%d.%d\n”,y,m,N+30);

 }else if(m==2)

 {

  if((y%4==0y%100!=0)||y%400==0) 

  {

   printf(“%d.%d.%d\n”,y,m,N+29); 

  }else

  {

   printf(“%d.%d.%d\n”,y,m,N+28);

  }

 }

 system(“PAUSE”); 

 return 0;

}

但你這個程序輸入2014 1 1   -1就會出現2014 1 0,需要改進。

C語言 計算後續日期

#include stdio.h

#include stdlib.h

int main(int argc, char *argv[])

{

 int y,m,d,N,a;

 scanf(“%d %d %d”,y,m,d);

 scanf(“%d”,N);

 if(m==1||m==3||m==5||m==7||m==8||m==10||m==12)

 {

  a=31-d;

 }else if(m==4||m==6||m==9||m==11)

 {

  a=30-d;

 }else if(m==2)

 {

  if((y%4==0y%100!=0)||y%400==0)

  {

   a=29-d;

  }else

  {

   a=28-d;

  }

 }

 if(N=a)

 {

  printf(“%d %d %d”,y,m,d+N);

 }else

 {

  N=N-a;

  m++;

 }

 for(;N0;)

 {

  if(m==1||m==3||m==5||m==7||m==8||m==10||m==12)

  {

   N=N-31;

   m++;

  }else if(m==4||m==6||m==9||m==11) 

  {

   N=N-30;

   m++;

  }else if(m==2)

  {

   if((y%4==0y%100!=0)||y%400==0)

   {

    N=N-29;m++;

   }else

   {

    N-=28;

    m++;

   }

  }else if(m==13) 

  {

   y++;

   N-=31;

   m=2;

  }

 }

 m–;

 if(m==1)

 {

  printf(“%d.%d.%d\n”,y,m=12,N+31);

 }else if(m==3||m==5||m==7||m==8||m==10||m==12)

 {

  printf(“%d.%d.%d\n”,y,m,N+31);

 }else if(m==4||m==6||m==9||m==11)

 {

  printf(“%d.%d.%d\n”,y,m,N+30);

 }else if(m==2)

 {

  if((y%4==0y%100!=0)||y%400==0) 

  {

   printf(“%d.%d.%d\n”,y,m,N+29); 

  }else

  {

   printf(“%d.%d.%d\n”,y,m,N+28);

  }

 }

 system(“PAUSE”); 

 return 0;

}

C語言判斷兩個日期的前後問題

if(dt1.year!=dt2.year)

{

if(dt1.yeardt2.year) return 1;                    //判斷年相等否

if(dt1.yeardt2.year) return -1;

}

比如這裡,如果兩個year相等,就沒有返值(當然,這是編譯器的判斷邏輯),編譯器不會根據你上下文去統計邏輯的,因此會認為你if有返值,沒有else語句中的返值。你將兩個邏輯中的連續if改成if  else應該就沒問題了。

其實,如果年月日的規則是嚴格的,那麼語句不用這麼麻煩,直接判斷

year*365+month*30+day 的大小即可判定兩個日期的關係了。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/259265.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-15 16:28
下一篇 2024-12-15 16:28

相關推薦

  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • AES加密解密算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES算法,並對實現過程進…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演着非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29
  • Python按位運算符和C語言

    本文將從多個方面詳細闡述Python按位運算符和C語言的相關內容,並給出相應的代碼示例。 一、概述 Python是一種動態的、面向對象的編程語言,其按位運算符是用於按位操作的運算符…

    編程 2025-04-29
  • Python獲取當前日期的多種方法

    本文介紹如何使用Python獲取當前日期,並提供了多種方法,包括使用datetime模塊、time模塊以及第三方庫dateutil等。讓我們一步一步來看。 一、使用datetime…

    編程 2025-04-29
  • Python語言由荷蘭人為中心的全能編程開發工程師

    Python語言是一種高級語言,很多編程開發工程師都喜歡使用Python語言進行開發。Python語言的創始人是荷蘭人Guido van Rossum,他在1989年聖誕節期間開始…

    編程 2025-04-28
  • Python語言設計基礎第2版PDF

    Python語言設計基礎第2版PDF是一本介紹Python編程語言的經典教材。本篇文章將從多個方面對該教材進行詳細的闡述和介紹。 一、基礎知識 本教材中介紹了Python編程語言的…

    編程 2025-04-28
  • Python按照日期畫折線圖

    本文將為您詳細介紹如何使用Python按照日期(時間)來畫折線圖。 一、準備工作 首先,我們需要安裝Matplotlib包,該包提供了各種繪圖函數,包括折線圖、柱形圖、散點圖等等。…

    編程 2025-04-28

發表回復

登錄後才能評論