溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

C語言怎么實(shí)現(xiàn)萬年歷程序

發(fā)布時(shí)間:2021-08-27 18:17:39 來源:億速云 閱讀:143 作者:chen 欄目:編程語言

本篇內(nèi)容主要講解“C語言怎么實(shí)現(xiàn)萬年歷程序”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“C語言怎么實(shí)現(xiàn)萬年歷程序”吧!

代碼如下:

#include <stdio.h> #include <stdlib.h> #include <time.h> #include<conio.h> typedef struct today {  int day;  int month;  int year; } today;  int day_cankao[2][13]={  {0,31,28,31,30,31,30,31,31,30,31,30,31},  {0,31,29,31,30,31,30,31,31,30,31,30,31} }; char *week[]= {  "Sun","Mon","Tue","Wen","Thu","Fir","Sat" }; struct tm *todayuse;//struct tm定義c語言中time的結(jié)構(gòu)體 today today_current; int getweekday(today today_usenow) {  // w = y + [y/4] + [ c/4 ] – 2c+ [13 * (m+1) / 5] + d – 1  //其中,c是年份的前兩位,y是年份的后兩位,m是月份,d是日期,這里需要注意的是,如果是1月和2月,c和y需要按照上一年來取值。  int w=0;   int year=today_usenow.year;  int month=today_usenow.month;  if(today_usenow.month==1 || today_usenow.month==2)  {  month+=12;  year--;  }  int y=year%100;  int c=year/100;  int m=month;   w=y + y/4 + c/4 - 2*c+ 26* (m+1) / 10 + today_usenow.day -1;  while(w<0)  {  w+=7;  }  return (w%7);  } int is_leap(int year) {   if( (year%4==0 && year%100!=0) || (year%400==0))  {  return 1;  }  else  return 0; } int getmonthdays(int year,int month) {  return day_cankao[is_leap(year)][month]; }   void print_calendar(today today_usenow) {  printf("---------------------------\n");  printf("Sun Mon Tue Wen Thu Fir Sat\n");  int firstday=0;  today today_usehere=today_usenow;  today_usehere.day=1;  int day=getweekday(today_usehere);//日期前  //int daysuseafter  int days=getmonthdays(today_usenow.year,today_usenow.month);//月總數(shù)  // 0 1 2 3 4 5 6 // 6  int daysbefore=0;  if((today_usenow.month-1)==0)  {  //現(xiàn)在為1月,去年的十二月份  daysbefore=getmonthdays(today_usenow.year-1,12);  // printf("%d is",daysbefore);  }  else  {    daysbefore=getmonthdays(today_usenow.year,today_usenow.month-1);  }  int daysbefoeit=daysbefore-day+1;  printf("");  int count=1;   if(day==0)   {   daysbefoeit-=7;   for(int i=0;i<day+7;i++)   {       printf("%d ", daysbefoeit);    daysbefoeit++;      }   printf("\n");   count=7;   }   else   {   for(int i=0;i<day;i++)   {    printf("%d ", daysbefoeit);    daysbefoeit++;   }   count=day;   }   int m=1;   for(int i=0;i<=6-day;i++)   {   if(m<10)   {    printf(" %d ",m);   }   else   {      printf("%d ",m);   }    m++;   }   printf("\n");   if(day==0)   {   count=14;   }   else   {   count=7;   }   int hang=0;   while(m<=days)   {   if(m<10)   {    printf(" %d ",m);   }   else   {      printf("%d ",m);   }   hang++;   if(hang==7)   {    printf("\n");    hang=0;   }    m++;   }  if(day==0)  {   count=days+7;  }  else  {   count=day+days;  }  int newmonth=1;  for(int j=hang;j<7;j++)  {   if(newmonth<10)  {   printf(" %d ",newmonth);  }  else  {     printf("%d ",newmonth);  }    newmonth++;  }  printf("\n");  count=count+7-hang;  for(int j=0;j< 42-count;j++)  {  if(newmonth<10)  {   printf(" %d ",newmonth);  }  else  {     printf("%d ",newmonth);  }  newmonth++;  }   } //int getmonth  int main() {  time_t timep;  struct tm *p;  time(&timep);  p =localtime(&timep); //此函數(shù)獲得的tm結(jié)構(gòu)體的時(shí)間,是已經(jīng)進(jìn)行過時(shí)區(qū)轉(zhuǎn)化為本地時(shí)間  //p = gmtime(&timep); //把日期和時(shí)間轉(zhuǎn)換為格林威治(GMT)時(shí)間的函數(shù)   /*printf("Year: %d\n", 1900+p->tm_year);  printf("Month: %d\n", 1+p->tm_mon);  printf("Day: %d\n", p->tm_mday);  printf("Hour: %d\n", p->tm_hour);  printf("Minute: %d\n", p->tm_min);  printf("Second: %d\n", p->tm_sec);  printf("Weekday: %d\n", p->tm_wday);  printf("Days: %d\n", p->tm_yday);  printf("Isdst: %d\n", p->tm_isdst);  */   //printf("%d",day_cankao[0][12]);  today_current.year=1900+p->tm_year;  today_current.month=1+p->tm_mon;  today_current.day= p->tm_mday;  today use=today_current;  int c1,c2;  printf(" %d 年 %d 月 %d 日\n",today_current.year,today_current.month,today_current.day);  print_calendar(today_current);  while(1)  {  c1 = getch();  if(c1==27)  {  printf("您已經(jīng)退出系統(tǒng)");  break;  }  if(c1==110)  {  printf(" %d 年 %d 月 %d 日\n",today_current.year,today_current.month,today_current.day);  //printf("%d \n",getweekday(today_current));   print_calendar(today_current);  use=today_current;  continue;  }  c2 = getch();  //printf( "%d %d",c1,c2);   if(c1==224 && c2==72)  {  use.month+=1;  if(use.month==13)  {   use.month=1;   use.year+=1;  }  printf(" %d 年 %d 月 %d 日\n",use.year,use.month,use.day);  //printf("%d \n",getweekday(today_current));   print_calendar(use);   }  if(c1==224 && c2==80)  {  use.month-=1;  if(use.month==0)  {   use.month=12;   use.year-=1;  }  printf(" %d 年 %d 月 %d 日\n",use.year,use.month,use.day);  //printf("%d \n",getweekday(today_current));   print_calendar(use);  }  if(c1==224 && c2==75)  {  use.year-=1;  printf(" %d 年 %d 月 %d 日\n",use.year,use.month,use.day);  //printf("%d \n",getweekday(today_current));   print_calendar(use);  }  if(c1==224 && c2==77)  {  use.year+=1;  printf(" %d 年 %d 月 %d 日\n",use.year,use.month,use.day);  //printf("%d \n",getweekday(today_current));   print_calendar(use);  }  printf("\n");  printf("按上下按鈕,進(jìn)行月份變換\n");  printf("按左右按鈕,進(jìn)行年份變換\n");  printf("按ESC按鍵,退出系統(tǒng)\n");  printf("按N按鈕,查看當(dāng)前日期\n");  }  //上 224 72  //下 224 80  //左 224 75  //右 224 77  //esc 27  // n 110     return 0; }

到此,相信大家對(duì)“C語言怎么實(shí)現(xiàn)萬年歷程序”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI