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