C語言萬年歷課程設(shè)計(jì)_第1頁
C語言萬年歷課程設(shè)計(jì)_第2頁
C語言萬年歷課程設(shè)計(jì)_第3頁
C語言萬年歷課程設(shè)計(jì)_第4頁
C語言萬年歷課程設(shè)計(jì)_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、C語言萬年歷課程設(shè)計(jì)黃河科技學(xué)院C語言課程設(shè)計(jì)題:萬年歷名: 號(hào):年級(jí)專業(yè): 班 級(jí): 指導(dǎo)老師: 院 系:提交日期:2010年4月摘要通過C語言編程實(shí)現(xiàn)了一個(gè)萬年歷,能實(shí)現(xiàn)基本的萬年歷功能。通過本章的講解 使讀者能夠明白萬年歷的實(shí)現(xiàn)原理和方法。萬年歷的實(shí)現(xiàn)核心是要判斷閏年和根據(jù)給 定的日期計(jì)算其對應(yīng)的星期,并按照合適的方式輸出日歷.這都是本章向讀者講述的重 點(diǎn)。另外,還向讀者講述了怎樣突出顯示某個(gè)日期的方法,這會(huì)在實(shí)際應(yīng)用中經(jīng)常遇 到。除了講述萬年歷的實(shí)現(xiàn)方法外,本章還回顧了前面章節(jié)的知識(shí),如光標(biāo)定位、設(shè)置 寄存器、產(chǎn)生中斷、輸出一個(gè)字符等,以及講述系統(tǒng)日期、屏幕輸出的方法等。關(guān)鍵字:C語言

2、,函數(shù),歷法計(jì)算,萬年歷,中斷1需求分析1.1設(shè)計(jì)題目錯(cuò)誤!未定義書簽。錯(cuò)誤!未定義書簽。1錯(cuò)誤!未定義書簽。1錯(cuò)誤!未定義書簽。51.2設(shè)計(jì)要求2概要分析設(shè)計(jì)目的3詳細(xì)設(shè)計(jì)設(shè)計(jì)思想及過程流程圖 TOC o 1-5 h z 4系統(tǒng)連編與運(yùn)行 5萬年歷源程序5運(yùn)行過程7心得體會(huì).10參考文獻(xiàn).1需求分析設(shè)計(jì)題目萬年歷的設(shè)計(jì)設(shè)計(jì)要求1、能夠顯示星期;2、能夠顯示年月日;3、能夠修改;4、當(dāng)系統(tǒng)時(shí)間變動(dòng)時(shí),能自動(dòng)跳到相應(yīng)的時(shí)間。2概要分析設(shè)計(jì)目的.通過本項(xiàng)課程設(shè)計(jì),可以培養(yǎng)獨(dú)立思考、綜合運(yùn)用所學(xué)有關(guān)相應(yīng)知識(shí)的能力,能更好的鞏固 C語言程序設(shè)計(jì)課程學(xué)習(xí)的內(nèi)容,掌握 工程軟件設(shè)計(jì) 基基本方法,強(qiáng)化上機(jī)動(dòng)

3、手編程能力,闖過理論與實(shí)踐相結(jié)合的難關(guān)!更加了 解了 c語言的好處和其可用性!同時(shí)增加了同學(xué)之間的團(tuán)隊(duì)合作精神!更加也 體會(huì)到以后在工作中團(tuán)隊(duì)合作的重要性和必要性!.通過C語言課程設(shè)計(jì),使學(xué)生了解高級(jí)程序設(shè)計(jì)語言的結(jié)構(gòu),掌握基本 的程序設(shè)計(jì)過程和技巧,掌握基本的分析問題和利用計(jì)算機(jī)求解問題的能力, 具備初步的高級(jí)語言程序設(shè)計(jì)能力。為后續(xù)各門計(jì)算機(jī)課程的學(xué)習(xí)和畢業(yè)設(shè)計(jì) 打下堅(jiān)實(shí)基礎(chǔ)。3詳細(xì)設(shè)計(jì)設(shè)計(jì)思想及過程【一】由于萬年歷具有以下特點(diǎn):.年365天(52周+1天),閏年366天(52周+2天)。平年2月28天, 閏年2月29天。由于公元1月1日設(shè)為星期六,故3月1日為星期三。一一注意這個(gè)“三”為

4、使算法達(dá)到最簡,故本算法以“星期”為計(jì)算單位。且選3月1日為基月。. 400年整一閏,或每4年且不為百年的一閏。(原因:地球繞太陽一周的時(shí)間是365天5小時(shí)46秒,為了使一年的天數(shù)為整數(shù),將一年的天數(shù)定為365天,余下的時(shí)間積累起來,四年就是 23小時(shí)15分4秒,將近一天,把這一天加在某年的二月而成29天,該年稱為閏年,其它年稱為平年。但四年加一天又多用了 44分56秒,這個(gè)數(shù)積滿400年為三天。因此400年中只能有97個(gè)閏年,所以凡能被400整除,或不能被100整除但能被4整除的年份為閏年。)所以百年4=0閏或(年4=0并且年0)閏。3年(3個(gè)平年+1個(gè)閏年)共208周+5天一一注意這個(gè)“5

5、天”每百年共100* (208周+5天)-1天=5217周+5天 注意這個(gè)“5天”(整百年暫 設(shè)為平年)每400年共4* (5217周+5天)+1天(整400年閏)=20871周+0 注意這個(gè)。夭”和1天”(4個(gè)整百年只有一個(gè)閏年)即400年一輪回?。ㄔ瓉砣f年歷 400年前是一家)【二】根據(jù)萬年歷以上特點(diǎn)進(jìn)行編寫:首先對萬年歷年、月、日進(jìn)行編寫,編寫程序先定義每月的天數(shù)為28天,如月份為1、3、5、7、8、10、12就定義天數(shù)為31天反之如果月份為4、6、9、11就輸出天數(shù)為30天,由上可見2月份為28天但是如果為閏年就有29天就要定義另一個(gè)函數(shù) #define Year(x) (x%4=0&

6、x%100!=0|x%400=0) ? 1:0 當(dāng)為閏年時(shí)可得1加上該程序便可得到每月的天數(shù)。具體程序見(五、萬年歷程序)再對其中的星期進(jìn)行編寫:由于公元 1月1日設(shè)為星期六,故3月1日為星期三,可以用萬年3月1日星期算法(特別是那個(gè)三)由于其公式為:某年3月1日星期幾=(3天+百年4*5天+年/4*5天+年4+月星期表十日-1天)7某年3月1日星期幾=(百年4*5天+年/4*5天+年4+月星期表+日+2天)7或某年3月1日星期幾=(百年4*5大+年+年/4+月星期表+日+2天)74百年3月1日星期算法(百年4=0)其公式為:某年3月1日星期幾=(年+年/4+月星期表+日+2天)%例000年3

7、月1日星期幾=(0+0/4+0+1+2)%7=3%7=星期三1600年3月1日星期幾=(0+0/4+0+1+2)%7=3%7=星期三2000年3月1日星期幾=(0+0/4+0+1+2)%7=3%7=星期三2001年3月1日星期幾=(1+1/4+0+1+2)%7=4%7=星期四2004年 3 月 1 日星期幾=(4+4/4+0+1+2)%7=8%7=星期一2008年 3 月 1 日星期幾=(8+8/4+0+1+2)%7=13%7=星期六2042年 3 月 1 日星期幾=(42+42/4+0+1+2)%7=55%7=星期六平4百年3月1日星期算法(百年%40)公式為:某年3月1日星期幾=(百年4*

8、5大+年+年/4+月星期表+日+2天)7例:1700 年 3 月 1 日星期幾=(17%4*5+0+0/4+0+1+2) %7=8%7=星期一(注意:1700年是平年)1800年 3 月 1 日星期幾=(18%4*5+0+0/4+0+1+2) %7=13%7=星期六(注意:1800年是平年)1900年 3 月 1 日星期幾=(19%4*5+0+0/4+0+1+2) %7=18%7=星期四(注意:1900年是平年)1901 年 3月 1 日星期幾=(19%4*5+1+1/3+0+1+2) %7=19%7=星期五1918年3月1日星期幾=(19%4*5+18+18/4+0+1+2) %7=(15+

9、22+3)%7=40%7=星期五1958年3月1日星期幾=(19%4*5+58/4*5+58%4+3 ) %7=(15+70+2+3)%7=90%7=星期六1988年3月1日星期幾=(19%4*5+88/4*5+88%4+3 ) %7=(15+110+0+3)%7=128%7=星期二1999年3月1日星期幾=(19%4*5+99/4*5+99%4+3 ) %7=(15+120+3+3)%7=141%7=星期一2100年 3 月 1 日星期幾=(21%4*5+0/4*5+0%4+3) %7=(5+0+0+3)%7=8%7=星期一(注意:2100年是平年)2101 年 3月 1 日星期幾二(21%

10、4*5+1/4*5+1%4+3) %7=(5+0+1+3)%7=9%7=星期二2102年 3 月 1 日星期幾二(21%4*5+2/4*5+2%4+3) %7=(5+0+2+3)%7=10%7=星期三2103年 3 月 1 日星期幾二(21%4*5+3/4*5+3%4+3) %7=(5+0+3+3)%7=11%7=星期四2104年 3 月 1 日星期幾二(21%4*5+4/4*5+4%4+3) %7=(5+1+0+3)%7=9%7=星期二(注意:2104年是閏年)9999年3月1日星期幾二(99%4*5+99/4*5+99%4+3 ) %7=(120+15+3+3)%7=141%7=星期一注:

11、按400年一輪回! ( 400年前是一家)的說法1600年,2000年是一樣的;1700年,2100年是一樣的;1800年,2200年是一樣的;1900年,2300年是一樣的。其中萬年某日星期算法其公式為:某日星期幾=(百年4*5大+年+年/4+月星期表+日+2天)7同星期偏差表閏年1月2月3月4月5月6月7月8月9月10月11月12月天數(shù) 31 29 31 30 31 30 31 31 30 31 30 31星期 3 6 0 3 5 1 3 6 2 4 0 2平年1月2月3月4月5月6月7月8月9月10月11月12月天數(shù) 31 28 31 30 31 30 31 31 30 31 30 31

12、星期 4 0 0 3 5 1 3 6 2 4 0 2為對以上的萬年歷星期的算法是正確的對其進(jìn)行了以下的計(jì)算:L對于二十世紀(jì)任意日期可以用公式某日星期幾=(百年4*5大+年+年/4+平年月星期表+日+2天)7=(19%4*5大+年+年/4+平年月星期表十日+2 大)7=(15天+年+年/4+平年月星期表+日+2天)7以下就是根據(jù)上面對其進(jìn)行 的計(jì)算:1900 年元旦 1 日=(0/4*5+0%4+1+3)%7=(0+0+4)%7=41月表=4 (平年)4+4=1即1900年元旦是星期一1949 年國慶 1 日=(49/4*5+49%4+1+3)%7=(60+1+4)%7=210月表=4 (平年)

13、4+2=6即1949年國慶是星期六1999 年 12 月 31 日 31 日=(99/4*5+99%4+31+3)%7=(120+3+34)%7=312月表=2 (平年)故2+3=5即1999年12月31日是星期五2.對于二十一世紀(jì)新前年蟲算法(20%4*5=0)可以用公式:某日星期幾=(百 年4*5大+年+年/4+閏年月星期表+日+2天)7 =(20%4*5大+年+年/4+閏年月 星期表+日+2天)7以下就是根據(jù)上面對其進(jìn)行的計(jì)算:2000 年元旦 1 日=(0+0/4+1+2)%7=(0+0+1+2)%7=31月表=3 (閏年)故3+3-6即2027年元旦是星期六2018 年春節(jié) 16 日

14、=(18+18/4+16+2)%7=(18+4+16+2)%7=52月表=0 (平年)故0+5=5即2018年春節(jié)是星期五2099 年 12 月 31 日 31 日=(99/4*5+99%4+31+2)%7=(120+3+33)%7=212月表=2 (平年)故2+2=4即2099年12月31日是星期四對于上面的分析以及公式的推論和計(jì)算證明可以對萬年歷中的星期進(jìn)行了編寫具體編寫程序見(五、萬年歷程序)中。3.2流程圖萬年歷系鍵值獲取模塊4系系統(tǒng)接與運(yùn)行萬年歷源程序#include int leap (int year)if(year%4=0&year%100!=0|year%400=0) /判斷

15、是否是閏年return 1;else return 0;int days_month (int month,int year) / 判斷大月和小月if(month=1|month=3|month=5|month=7|month=8|month=10|month=12) 找出大月return 31;if(month=4|month=6|month=9|month=11) / 找出小月return 30;if(month=2&leap(year)=1) return 29; / 判斷二月是 29 天還是 29 天else return 28;int firstday(int month,int y

16、ear)int w;w=(1+2*month+3*(month+1)/5+year+year/4+year/400-year/100)%7+1; / 判斷 每個(gè)月開始的第一天是星期幾return w;main()int i,j=1,k=1,a,b,month,year;printf(n input month and year:n);scanf(%d%d,&month,&year); / 輸入月和年b=days_month(month,year);a=firstday (month,year);printf( Sun Mon Tue Wed Thu Fri Sat n); /輸出對應(yīng)當(dāng)月的日歷

17、if(a=7)for(i=1;i=b;i+)printf(%4d,i);if(i%7=0)printf(n);if(a!=7)while (j=4*a)printf();j+;for(i=1;i=b;i+) printf(%4d,i); if(i=7*k-a) printf(n);k+;printf(n);運(yùn)行過程1.雙擊 wintco1.當(dāng)對上面的程序進(jìn)行了調(diào)試后運(yùn)行會(huì)出現(xiàn)下面所示:input month and year:i即Ut kvcwiilh aid year:2輸入想輸出的月和年:3.顯示輸入的結(jié)果,顯示當(dāng)月日歷:4.直接關(guān)閉DOS結(jié)束輸出心得體會(huì)1.在這次課程設(shè)計(jì)中也知道了自己的

18、動(dòng)手能力不強(qiáng)有待進(jìn)一部的提高!在設(shè) 計(jì)過程中不能夠把書本上的知識(shí)與實(shí)踐相結(jié)合,這也就增加了設(shè)計(jì)不好該程序 的想法!在設(shè)計(jì)過程中的一次次設(shè)計(jì)錯(cuò)誤增加了我放棄的想法!不過經(jīng)過大家 的努力終于完成了課程設(shè)計(jì)!完成該程序后想起自己以前的每一次對自己失去 信心,就覺得并不是在知識(shí)掌握上打敗了,而是自己對自己缺乏信心!只要自 己對自己不失去信心相信就可以完成那些以前認(rèn)為完成不了的事情!也讓我懂 得了要想成功首先就必須有很強(qiáng)的自信心!懂得了自己以后要在做任何事情時(shí) 都要自信!當(dāng)自己都不相信自己能夠成功時(shí)還可能會(huì)獲得成功嗎?2.在C語言程序設(shè)計(jì)的過程中也知道了自己在以前的學(xué)習(xí)中有很大的不足 導(dǎo)致在設(shè)計(jì)過程中出現(xiàn)了很多的問題,有些地方看不懂也不知道怎么去設(shè)計(jì), 但是在設(shè)計(jì)過程中也學(xué)習(xí)了很多,掌握了自己以前沒有學(xué)好的知識(shí),雖然一時(shí) 可以掌握完以前沒有學(xué)好的知識(shí),不過也給自己敲響了警鐘,在學(xué)習(xí)中不可以 伏于表面,要想學(xué)好每一門課程都要踏踏實(shí)實(shí),做什么都不是給別人看的!都 是要更好的掌握該門

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論