資源描述:
《c語言綜合練習(xí) 打印日歷教程 附完整源程序》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、綜合練習(xí)打印日歷練習(xí)的功能是:由用戶輸入一個(gè)年后,然后就可以分月輸出當(dāng)年的年歷。例如輸入2010,則輸出2010年的年歷。如圖,圖中顯示的年歷的一部分:學(xué)習(xí)目標(biāo):繼續(xù)熟悉數(shù)組的使用;繼續(xù)熟悉函數(shù)的使用了解程序算法設(shè)計(jì)及N-S流程圖;綜合使用函數(shù)和數(shù)組完成設(shè)計(jì)任務(wù)一分析程序算法圖2算法分析圖先來分析要解決的問題,如圖2程序算法分析如下:1.整個(gè)程序大致可以分為兩個(gè)主要部分:輸入年份;打印該年的日歷,如圖2①所示。2.打印日歷時(shí),為了清楚的知道打印的是哪一年的日歷,先打印年份,接著從1月~12月,分別打印個(gè)月份的名稱(英文縮寫),然后打印星期
2、的名稱(英文縮寫),最后在打印當(dāng)月的日歷,如圖2②所示。3.要打印某月的日歷,首先必須生成當(dāng)月日歷,然后在打印,如圖2③所示。4.生成每個(gè)月的日歷,需要知道當(dāng)月有多少天,當(dāng)月每一天是星期幾,然后生成當(dāng)月日歷并保存,如圖2④所示。5.要知道每月有多少天是比較容易的,除了2月份外,其它月份的天數(shù)都是確定的,關(guān)鍵就是確定2月份有幾天,如圖2⑤所示。6.如果當(dāng)年是閏年,則2月份有29天,否則為28天。如圖2⑥所示。7.要想確定當(dāng)月每一天是星期幾,需要知道當(dāng)年第一天是星期幾,然后類推,每7天一個(gè)周期,如圖2⑦所示。1.經(jīng)過以上的4~7步,可以生成日
3、歷,然后設(shè)計(jì)存儲(chǔ)格式,保存日歷。2.設(shè)計(jì)好輸出格式,打印已生成的日歷即可,如圖2⑧所示。將圖2加以綜合和細(xì)化,最終可以得到整個(gè)程序的N-S流程圖,如圖3所示。圖3算法分析N-S流程圖二、按功能劃分函數(shù)經(jīng)過上面的分析,發(fā)現(xiàn)在這個(gè)程序設(shè)計(jì)中有幾個(gè)關(guān)鍵部分:①確定每月有多少天,關(guān)鍵是確定當(dāng)年是否為閏年。②確定每天是星期幾,關(guān)鍵是確定當(dāng)年1月1日是星期幾。③設(shè)計(jì)數(shù)據(jù)的存儲(chǔ)格式和打印格式。對(duì)于較復(fù)雜的程序,可以把功能分解,每個(gè)小功能用一個(gè)函數(shù)實(shí)現(xiàn),使程序的總體結(jié)構(gòu)更加清晰。在這個(gè)程序中,應(yīng)考慮使用以下4個(gè)函數(shù)。函數(shù)1:intleapyear(int
4、year),判斷year年是否是閏年。函數(shù)2:voidprint2(intmonth,intt),按月打印日歷。函數(shù)3:voidcalendar(intyear),按月生成日歷。函數(shù)4:main()函數(shù)。任務(wù)二確定每個(gè)月的天數(shù)除了閏年外,每個(gè)月有多少天是確定的,所以首相確定非閏年每個(gè)月有多少天,然后判斷當(dāng)年是否是閏年,就可以確定當(dāng)年的2月份有幾天。一、確定非閏年每年有多少天可以使用一維整型數(shù)組monthday[]來存放每個(gè)月的天數(shù),代碼如下:intmonthday[13]={0,31,28,31,30,31,30,31,31,30,31,
5、30,31};數(shù)組長度定義為13,是因?yàn)檫@樣定義賦值后“monthday[1]=31”,表示1月份的天數(shù)是31天,比較符合我們的日常習(xí)慣,元素monthday[0]沒有使用。一、確定當(dāng)年2月有多少天如果是閏年,則2月份29天,閏年的規(guī)定:凡是年份能夠被4整除、且不能被100整除的是閏年;凡是年份能被400整除的也是閏年;除此以外的年份都不是閏年。程序段如下:if((year%4==0)&&(year%100!=0)
6、
7、(year%400==0))monthday[2]=29;為了提高程序的可讀性,實(shí)現(xiàn)程序的模塊化設(shè)計(jì),對(duì)閏年的判斷設(shè)計(jì)成函
8、數(shù)leapyear();閏年判斷函數(shù)intleapyear(intyear){if((year%4==0)&&(year%100!=0)
9、
10、(year%400==0))return1;elsereturn0;}任務(wù)三確定當(dāng)年的每天是星期幾確定每天是星期幾,關(guān)鍵是確定當(dāng)年的1月1日是星期幾。在公元日歷的編排中,公元元年幾0001年1月1日是星期一,對(duì)于輸入的年號(hào)year,year年的1月1日是星期幾可以用下列公式計(jì)算:todayweek=[year+(year-1)/4-(year-1)/100+(year-1)/400]%7注:此算法可以
11、見另一附件“計(jì)算每年的第一天星期幾”文檔。當(dāng)年第一天是星期幾判斷出來了,就可以一次推算以后的日子是星期幾。任務(wù)四設(shè)計(jì)數(shù)據(jù)存儲(chǔ)格式,生成各月日歷必須為所有需要存儲(chǔ)的數(shù)據(jù)設(shè)計(jì)存儲(chǔ)結(jié)構(gòu),有了存儲(chǔ)結(jié)構(gòu)就可以存儲(chǔ)生成的每個(gè)月的日歷。一、設(shè)計(jì)數(shù)據(jù)的存儲(chǔ)格式①使用一維整型數(shù)組monthday存放每個(gè)月的天數(shù)。intmonthday[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};②使用二維字符數(shù)據(jù)monthname存放每個(gè)月的英文名稱。charmonthname[13][6]={“”,”JAN”,”FEB”,”M
12、AR”,”APR”,”MAY”,”JUNE”,”JULY”,“AUG”,”SEP”,”O(jiān)CT”,”NOV”,”DEC”};①使用二維數(shù)字符數(shù)組weekday存放一周每一天的星期的英文名稱。ch