這篇文章將為大家詳細講解有關使用C語言怎么編寫一個萬年歷小程序,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
十載的西塞山網站建設經驗,針對設計、前端、開發(fā)、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。營銷型網站建設的優(yōu)勢是能夠根據(jù)用戶設備顯示端的尺寸不同,自動調整西塞山建站的顯示方式,使網站能夠適用不同顯示終端,在瀏覽器中調整網站的寬度,無論在任何一種瀏覽器上瀏覽網站,都能展現(xiàn)優(yōu)雅布局與設計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)從事“西塞山網站設計”,“西塞山網站推廣”以來,每個客戶項目都認真落實執(zhí)行。
設定日歷大?。?/p>
int date[12][6][7]; //12個月,每月最多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);
再計算該年1月1 日是起于周幾:
(由于公元1月1日設為星期六,故3月1日為星期三。為使算法達到最簡,故本算法以“星期”為計算單位。且選3月1日為基月。
每 4年(3個平年+1個閏年)共208周+5天 =208*7+5=1461
每百年共100*(208周+5天)-1天=5217周+5天 (整百年暫設為平年)
每400年共4*(5217周+5天)+1天(整400年閏)=20871周+0天
即400年一輪回?。?nbsp;
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; //將月份調至下個月 else return month+1; } long int getday(int year,int month,int day){ return 1461L*getyear(year,month)/4+153L*getmonth(month)/5+day; //計算距離元年3月1日天數(shù) //計算方法:每四年一周期1461天(相當于計算平均每年多少天) //每五個月一周期153天(相當于計算平均每月多少天) } 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的附加計算 }
判斷是否為閏年:
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結果為
完整代碼:
#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關于使用C語言怎么編寫一個萬年歷小程序就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
當前題目:使用C語言怎么編寫一個萬年歷小程序
文章轉載:http://weahome.cn/article/ghcdsh.html