C語言萬年歷課程設計報告_第1頁
C語言萬年歷課程設計報告_第2頁
C語言萬年歷課程設計報告_第3頁
C語言萬年歷課程設計報告_第4頁
C語言萬年歷課程設計報告_第5頁
已閱讀5頁,還剩7頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、-PAGE . z. . .可修編. .黃河科技學院C語言課程設計課 題:萬年歷 姓 名:學 號:年級專業:班 級:指導教師:院 系: 提交日期:2010年4月-. z. . .可修編. .摘要通過C語言編程實現了一個萬年歷,能實現根本的萬年歷功能。通過本章的講解,使讀者能夠明白萬年歷的實現原理和方法。萬年歷的實現核心是要判斷閏年和根據給定的日期計算其對應的星期,并按照適宜的方式輸出日歷.這都是本章向讀者講述的重點。另外,還向讀者講述了怎樣突出顯示*個日期的方法,這會在實際應用中經常遇到。除了講述萬年歷的實現方法外,本章還回憶了前面章節的知識,如光標定位設置存放器產生中斷輸出一個字符等,以及講

2、述系統日期屏幕輸出的方法等。關鍵字:C語言,函數,歷法計算,萬年歷,中斷-. z.目錄HYPERLINK l _Toc2879848381需求分析1HYPERLINK l _Toc2879848391.1 設計題目 PAGEREF _Toc287984839 h 1HYPERLINK l _Toc2879848401.2 設計要求 PAGEREF _Toc287984840 h 1HYPERLINK l _Toc2879848382概要分析1HYPERLINK l _Toc2879848392.1 設計目的 PAGEREF _Toc287984839 h 1HYPERLINK l _Toc28

3、79848483詳細設計1HYPERLINK l _Toc2879848393.1 設計思想及過程 PAGEREF _Toc287984839 h 1HYPERLINK l _Toc2879848403.2 流程圖5HYPERLINK l _Toc2879848604系統連編與運行5HYPERLINK l _Toc2879848394.1 萬年歷源程序5HYPERLINK l _Toc2879848404.2 運行過程7HYPERLINK l _Toc287984860 心得體會9HYPERLINK l _Toc287984860 參考文獻10-. z. . .可修編. .1需求分析1.1設計

4、題目萬年歷的設計1.2設計要求1、能夠顯示星期;2、能夠顯示年月日;3、能夠修改;4、當系統時間變動時,能自動跳到相應的時間。2概要分析2.1設計目的1.通過本項課程設計,可以培養獨立思考、綜合運用所學有關相應知識的能力,能更好的穩固C語言程序設計課程學習的內容,掌握工程軟件設計的根本方法,強化上機動手編程能力,闖過理論與實踐相結合的難關!更加了解了c語言的好處和其可用性!同時增加了同學之間的團隊合作精神!更加也體會到以后在工作中團隊合作的重要性和必要性!2.通過C語言課程設計,使學生了解高級程序設計語言的構造,掌握根本的程序設計過程和技巧,掌握根本的分析問題和利用計算機求解問題的能力,具備初

5、步的高級語言程序設計能力。為后續各門計算機課程的學習和畢業設計打下堅實根底。3詳細設計3.1設計思想及過程【一】由于萬年歷具有以下特點:1年365天52周+1天,閏年366天52周+2天。平年2月28天,閏年2月29天。由于公元1月1日設為星期六,故3月1日為星期三。注意這個三為使算法到達最簡,故本算法以星期為計算單位。且選3月1日為基月。2400年整一閏,或每4年且不為百年的一閏。(原因:地球繞太陽一周的時間是365天5小時46秒,為了使一年的天數為整數,將一年的天數定為365天,余下的時間積累起來,四年就是23小時15分4秒,將近一天,把這一天加在*年的二月而成29天,該年稱為閏年,其它年

6、稱為平年。但四年加一天又多用了44分56秒,這個數積滿400年為三天。因此400年中只能有97個閏年,所以凡能被400整除,或不能被100整除但能被4整除的年份為閏年。)所以百年%4=0閏或年%4=0并且年0閏。3年3個平年+1個閏年共208周+5天注意這個5天每百年共100*208周+5天-1天=5217周+5天注意這個5天(整百年暫設為平年)每400年共4*5217周+5天+1天整400年閏=20871周+0天注意這個0天和1天(4個整百年只有一個閏年)即400年一輪回!原來萬年歷400年前是一家【二】根據萬年歷以上特點進展編寫:首先對萬年歷年、月、日進展編寫,編寫程序先定義每月的天數為2

7、8天,如月份為1、3、5、7、8、10、12就定義天數為31天反之如果月份為4、6、9、11就輸出天數為30天,由上可見2月份為28天但是如果為閏年就有29天就要定義另一個函數#define Year(*) (*%4=0&*%100!=0|*%400=0) 1:0當為閏年時可得1加上該程序便可得到每月的天數。具體程序見五、萬年歷程序再對其中的星期進展編寫:由于公元1月1日設為星期六,故3月1日為星期三,可以用萬年3月1日星期算法(特別是那個三)由于其公式為:*年3月1日星期幾=(3天+百年%4*5天+年/4*5天+年%4+月星期表+日-1天)%7*年3月1日星期幾=(百年%4*5天+年/4*5

8、天+年%4+月星期表+日+2天)%7或*年3月1日星期幾=(百年%4*5天+年+年/4+月星期表+日+2天)%74百年3月1日星期算法百年%4=0其公式為:*年3月1日星期幾=(年+年/4+月星期表+日+2天)% 例000年3月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日星期幾=

9、(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*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日星期幾

10、=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+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

11、+0+0+3)%7=8%7=星期一(注意:2100年是平年)2101年3月1日星期幾=21%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

12、+3+3)%7=141%7=星期一注:按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月 天數 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月

13、 12月天數 31 28 31 30 31 30 31 31 30 31 30 31星期 4 0 0 3 5 1 3 6 2 4 0 2為對以上的萬年歷星期的算法是正確的對其進展了以下的計算:對于二十世紀任意日期可以用公式*日星期幾=(百年%4*5天+年+年/4+平年月星期表+日+2天)%7=(19%4*5天+年+年/4+平年月星期表+日+2天)%7=(15天+年+年/4+平年月星期表+日+2天)%7以下就是根據上面對其進展的計算: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+

14、49%4+1+3)%7=(60+1+4)%7=210月表=4平年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日是星期五對于二十一世紀新前年蟲算法(20%4*5=0)可以用公式:*日星期幾=(百年%4*5天+年+年/4+閏年月星期表+日+2天)%7 =(20%4*5天+年+年/4+閏年月星期表+日+2天)%7以下就是根據上面對其進展的計算:2000年元旦1日=(0+0/4+1+2)%7=(0+0+1+2)%7=31月表=3閏年故 3+3-6 即202

15、7年元旦是星期六2018年春節16日=(18+18/4+16+2)%7=(18+4+16+2)%7=52月表=0平年故 0+5=5 即2018年春節是星期五2099年12月31日 31日=(99/4*5+99%4+31+2)%7=(120+3+33)%7=212月表=2平年故 2+2=4 即2099年12月31日是星期四對于上面的分析以及公式的推論和計算證明可以對萬年歷中的星期進展了編寫具體編寫程序見五 、萬年歷程序中。3.2流程圖功能控制模塊打印輸出模塊日歷顯示模塊鍵值獲取模塊萬年歷系統4 系系統接與運行4.1萬年歷源程序#include int leap (int year) if(yea

16、r%4=0&year%100!=0|year%400=0) /判斷是否是閏年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

17、 28; int firstday(int month,int year) int w; w=(1+2*month+3*(month+1)/5+year+year/4+year/400-year/100)%7+1; /判斷每個月開場的第一天是星期幾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

18、Mon Tue Wed Thu Fri Sat n); /輸出對應當月的日歷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); 4.2運行過程1.雙擊wintc。1.當對上面的程序進展了調試后運行會出現下面所示:input month and year:2輸入想輸出的月和年:3.顯示輸入的結果,顯示當月日歷:4.直接關閉DOS完畢輸出。-. z. . .可修編. .心得體會1.在這次課程設計中也知道了自己的動手能力不強有待進一部的提高!在設計過程中不能夠把書本上的知識與實踐相結合,這也就增加了設計不好該程序的想法!在設計過程中的一次次設計錯誤增加了我放棄的想法!不過經過大家的努力終于完成了課程設計!完

溫馨提示

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

評論

0/150

提交評論