溫馨提示×

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

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

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

發(fā)布時(shí)間:2021-08-11 18:56:15 來源:億速云 閱讀:179 作者:chen 欄目:編程語言

這篇文章主要介紹“C語言怎么實(shí)現(xiàn)萬年歷小程序”,在日常操作中,相信很多人在C語言怎么實(shí)現(xiàn)萬年歷小程序問題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”C語言怎么實(shí)現(xiàn)萬年歷小程序”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!

萬年歷

像這樣一個(gè)簡(jiǎn)單的全年日歷,仔細(xì)觀察不難發(fā)現(xiàn)由每個(gè)月的日歷組成,每個(gè)月有最多6行,占6周,每周7天;

程序如下:

設(shè)定日歷大?。?/p>

int date[12][6][7];  //12個(gè)月,每月最多6行,每行7天int calendar[ ][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 year;char title[]="SUN MON TUE WED THU FRI SAT";  //周幾int sw,leap,i,j,k,wd,day;          //變量// sw 周幾,leap 0平年 1閏年,i,j,k輔助變量,wd 第幾周,day 日

提示用戶輸入想要查詢的年份:(回車換行)

printf("Please input the year whose calendar you want to know: ");scanf("%d%*c",&year);

再計(jì)算該年1月1 日是起于周幾:

(由于公元1月1日設(shè)為星期六,故3月1日為星期三。為使算法達(dá)到最簡(jiǎn),故本算法以“星期”為計(jì)算單位。且選3月1日為基月。

每 4年(3個(gè)平年+1個(gè)閏年)共208周+5天 =208*7+5=1461每百年共100*(208周+5天)-1天=5217周+5天 (整百年暫設(shè)為平年)每400年共4*(5217周+5天)+1天(整400年閏)=20871周+0天即400年一輪回!)

long int getyear(int year,int month){ if(month<3) return year-1;  //以元年3月為基石 else return year;}long int getmonth(int month){ if(month<3) return month+13; //將月份調(diào)至下個(gè)月 else return month+1;}long int getday(int year,int month,int day){ return 1461L*getyear(year,month)/4+153L*getmonth(month)/5+day;  //計(jì)算距離元年3月1日天數(shù)  //計(jì)算方法:每四年一周期1461天(相當(dāng)于計(jì)算平均每年多少天)   //每五個(gè)月一周期153天(相當(dāng)于計(jì)算平均每月多少天)  }int getweekday(int year,int month,int day){ return(int)((getday(year,month,day)%7-2+7)%7);        //得該日期的星期數(shù)  //得到的天數(shù)除以7天取余,減去3月1日周三,其他均為保證正數(shù)1-7的附加計(jì)算}

判斷是否為閏年:

leap= year%4==0 && year%100||year%400==0 ;

將日歷置為空:

for(i=0;i<12;i++) for(j=0;j<6;j++) for(k=0;k<7;k++)  date[i][j][k]=0;

填充該年日期:

sw=getweekday(year,1,1);for(i=0;i<12;i++) for(wd=0,day=1; day <= calendar[leap][i]; day++){  date[i][wd][sw]=day; sw = ++sw%7; if(sw==0)       wd++; }

格式化輸出:

printf("\n|==================The Calendar of Year %d =====================|\n|",year); for(i=0;i<6;i++){ for(wd=0,k=0;k<7;k++)  wd+=date[i][5][k]+date[i+6][5][k]; wd=wd?6:5; printf("%2d %s %2d %s |\n|",i+1,title,i+7,title); for(j=0;j<wd;j++){ printf("  "); for(k=0;k<7;k++)  if(date[i][j][k])  printf("%4d",date[i][j][k]);  else printf("  "); printf("   "); for(k=0;k<7;k++)  if(date[i+6][j][k])  printf("%4d",date[i+6][j][k]);  else printf("  "); printf(" |\n|"); } scanf("%*c"); }  puts("=================================================================|"); puts("\n Press any key to quit...");

完整代碼:

#include "stdio.h"long int getyear(int year,int month){ if(month<3) return year-1; else return year;} long int getmonth(int month){ if(month<3) return month+13; else return month+1;} long int getday(int year,int month,int day){ return 1461L*f(year,month)/4+153L*g(month)/5+day;} int getweekday(int year,int month,int day){ return(int)((n(year,month,day)%7-2+7)%7);} int date[12][6][7];int calender[ ][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}};main(){int sw,leap,i,j,k,wd,day; int year; char title[]="SUN MON TUE WED THU FRI SAT";printf("Please input the year whose calendar you want to know: ");scanf("%d%*c",&year);sw=w(year,1,1);leap=year%4==0&&year%100||year%400==0;for(i=0;i<12;i++) for(j=0;j<6;j++) for(k=0;k<7;k++)  date[i][j][k]=0;for(i=0;i<12;i++) for(wd=0,day=1;day<=day_tbl[leap][i];day++){ date[i][wd][sw]=day; sw=++sw%7; if(sw==0) wd++; } printf("\n|==================The Calendar of Year %d =====================|\n|",year);for(i=0;i<6;i++){ for(wd=0,k=0;k<7;k++) wd+=date[i][5][k]+date[i+6][5][k]; wd=wd?6:5; printf("%2d %s %2d %s |\n|",i+1,title,i+7,title); for(j=0;j<wd;j++) { printf("  "); for(k=0;k<7;k++)  if(date[i][j][k])  printf("%4d",date[i][j][k]);  else printf("  "); printf("   "); for(k=0;k<7;k++)  if(date[i+6][j][k])  printf("%4d",date[i+6][j][k]);  else printf("  "); printf(" |\n|"); } scanf("%*c"); }puts("=================================================================|");puts("\n Press any key to quit...");}

到此,關(guān)于“C語言怎么實(shí)現(xiàn)萬年歷小程序”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

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

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

AI