




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、C 語言課程設計報告書萬年歷系統(tǒng)設計學院:理學院專業(yè):信息與計算科學姓名:指導教師:序言經(jīng)過一個學期對 C 程序設計的學習,同學們都認為真正的學到了有用知識,可能有一些人學的不夠理想,但無論如何,這些知識都為我們的下一步學習打下了堅實的基礎。 做這么一個課程設計, 一方面是為了檢查我們一個學期來我們學習的成果, 另一方面也是為了讓我們進一步的掌握和運用它,同時也讓我們認清自己的不足之處和薄弱環(huán)節(jié),加以彌補和加強。本程序是一個萬年歷程序,可以查詢 1970 年 1 月 1 日到 2100 年 1 月 1 日中任意一天是星期幾,只要在運行程序時按照要求輸入年,月,日,程序就會把這一天是星期幾顯示子
2、啊屏幕上;也可以輸入一個年份和一個月份,程序就會把該月份的月歷顯示在屏幕上,使人一目了然。 該程序能與目前天文學研究中所采用的各種日歷程序所能計算的結果相一致。 還有許多功能等著你去探討。這個程序花費了很多時間,用了一天的時間去設計程序和調(diào)試程序,而在調(diào)試程序的過程中,經(jīng)常會出現(xiàn)一些不如意的地方,所以程序就要修改。所以這樣經(jīng)過一次又一次的修改之后,程序更顯得人性化。通過這一次程序的設計,讓我深深的感受到程序員的辛苦。2012年 6月 11日【課程設計題目:萬年歷系統(tǒng)】【要求】1 :程序的功能多樣;2 :輸入日期能夠判斷該日期是星期幾;3 :輸入一個年份能夠顯示出該年的全部月歷;4 :輸入一個年
3、月能夠顯示該月的月歷;5 :輸入一個年份能夠判斷該年是閏年還是平年;6 :能夠退出?!鞠到y(tǒng)總體功能設計框架】進入程序1:日期查詢2:一年月歷查詢3:月歷查詢4:閏年判斷5:退出1、輸入年,月,日2、輸入年3、輸入年,月4、輸入年( 1970,1-2100,1 )( 0-5000)( 0,15000,12 )( 0-5000)星期 *12 個月歷該月月歷閏、平年屏幕顯示繼續(xù)Y, yN退出程序【系統(tǒng)功能模塊圖】主要功能模塊 1 :輸入 year , month,day計算 month 與當年的 1 月間隔了多少天rr=r+(year/4)*1461+(year%4)*365+dayr=r%7r=0
4、r=1r=2r=3r=4r=5r=6SatSunMonTueWedThuFirY 或y 返回菜單其他輸入均退出程序代碼:printf("please input the day you want(2100,1,1>*,*,*>1970,1,1):"); scanf("%d,%d,%d",&year,&month,&day); for(b=0,r=0;b<month;b+)r=ab+r;year=year-1972;r=r+(year/4)*1461+(year%4)*365+day;if(r%7=0)printf
5、("else if(r%7=1)printf("else if(r%7=2)printf("else if(r%7=3)printf("else if(r%7=4)printf("else if(r%7=5)printf("elseprintf("choose=getchar();Today is Saturday.n");Today is Sunday.n");Today is Monday.n");Today is Tuesday.n");Today is Wednesday.n&
6、quot;);Today is Thursday.n");Today is Firday.n");printf("Continue?(y/n):n");scanf("%c",&choose);if (choose='y'|choose='Y') main();主要功能模塊2 :輸入的年月判斷輸入年是否為定義年是否總天數(shù) S=1總天數(shù) S 為定義年到輸入年的總天數(shù)把 S 加上該年一月到輸入月份的天數(shù),判斷輸入的月份是否再加 1為閏年中的月份是否該月是否大于二月把 S 加上該 年一月到輸入月份的天數(shù)
7、是否把 S 再加上該年一月到輸入的月份的天數(shù)再加 1把 S 加上該年一月到輸入月份的天數(shù)總天數(shù)為 S判斷 S 的最后一天為星期幾從這一天起依次輸出輸入月份的天數(shù)直到該月底為止程序代碼:static int t12=31,0,31,30,31,30,31,31,30,31,30,31;int i,y,weekday=0;long days=0;if(leap_year(year) t1=29;else t1=28;y=tmonth-1;if(year>2006)days=(year-2006)*365+count_leap(year)+monthdays(month,year); week
8、day=days%7;else if(year<2006)days=(2005-year)*365+count_leap(year)+monthdays(month,year);weekday=7-days%7;elsedays=monthdays(month,year);weekday=days%7;for (i=1;i<weekday+2;i+)printf ("t");for (i=1;i<=y;i+)if (i+weekday-1)%7=0) printf ("nt%3dt",i);else printf ("%3dt
9、",i);主要功能模塊 3 :輸入的年份判斷從定義年到輸入的年份中每個年份是否為閏年是否閏年平年每年為 366 天每年為 365 天返回該年的天數(shù)程序代碼: int i;if (year%4=0&&year%100!=0|year%400=0) i=1;else i=0;return i;【用到的語句】1.<stdio.h>,<conio.h>2.main()/*/*頭文件 */主函數(shù) */3.printf(),4.scanf()5.a/*數(shù)組 */6.if7.for語句語句8.void/*要調(diào)用到的函數(shù)*/【源程序代碼】#include<
10、;stdio.h>#include <conio.h>int main()/ 主函數(shù) int leap_year(int y);int count_leap(int year);int monthdays(int month,int year);void monthprint(int year,int month);int year,month,day,b,r,number;/ 定義變量char choose;int a=0,31,28,31,30,31,30,31,31,30,31,30,31;printf("*mainMeun*n");printf(&
11、quot;1:ri qi>>>xing qi ji.n");printf("2:yue li.n");printf("3:ri li.n");printf("4:run nian pan duan. n");printf("5:exitn");printf("n");printf("*n");printf("please input the number:");scanf("%d",&number);
12、if(number=1)printf("please input the day you want(2100,1,1>*,*,*>1970,1,1):");scanf("%d,%d,%d",&year,&month,&day);/ 輸入要查詢的日期for(b=0,r=0;b<month;b+)/ 計算輸入月份與但年月份間隔了多少天r=ab+r;year=year-1972;r=r+(year/4)*1461+(year%4)*365+day;/ 計算輸入日期與1970,1,1 間隔了多少天if(r%7=0)pri
13、ntf("Today is Saturday.n");else if(r%7=1)printf("Today is Sunday.n");else if(r%7=2)printf("else if(r%7=3)printf("else if(r%7=4)printf("else if(r%7=5)printf("elseprintf("Today is Monday.n");Today is Tuesday.n");Today is Wednesday.n");Today i
14、s Thursday.n");Today is Firday.n");choose=getchar();printf("Continue?(y/n):n");/ 選擇是否繼續(xù)scanf("%c",&choose);if (choose='y'|choose='Y') main();/ 主函數(shù)調(diào)用主函數(shù)本身else if(number=2)printf("please input the year(5000>*>0):");scanf("%d",
15、&year);/ 輸入要查詢的年份for(month=1;month<13;month+)/ 循環(huán)輸出 12 個月份的月歷printf("%dyear %dmonthn",year,month);printf("*n");printf("SunMonTueWenThuFriSatn");monthprint(year,month);printf("n");printf("*n");choose=getchar();printf("Continue?(y/n):nn&quo
16、t;);scanf("%c",&choose);if (choose='y'|choose='Y') main();else if(number=3) printf("please input the year and month(2100,1>*,*>1970,1):");scanf("%d,%d",&year,&month);/ 輸入要查詢的年,月printf("%dyear %dmonthn",year,month);printf("
17、;*n");printf("SunMonTueWenThuFrimonthprint(year,month);/printf("n");printf("*n");choose=getchar();printf("Continue?(y/n):nn");scanf("%c",&choose);if (choose='y'|choose='Y') main(); elseif(number=4)printf("please input a year5
18、000>*>0:");scanf("%d",&year);/ 輸入要查詢的年份if(leap_year(year)printf("This is runyear.n");elseprintf("This is pingyear.n");choose=getchar();printf("Continue?(y/n):nn");scanf("%c",&choose);if (choose='y'|choose='Y') main(
19、);Satn");else / 選擇其他則退出 return 0;int leap_year(int year)/ 判斷是否閏年 int i;if (year%4=0&&year%100!=0|year%400=0) i=1;else i=0;return i;int count_leap(int year) int i=0,j,min,max;if(year>2006) min=2006;max=year;else min=year+1;max=2006;for(j=min;j<max;j+)if(leap_year(j) i+;return i;int
20、 monthdays(int month,int year)/ 該月的天數(shù)int sum=0,i,j; if(year>=2006) static int t12=31,0,31,30,31,30,31,31,30,31,30,31;j=month-1;if(leap_year(year) t1=29;else t1=28;for(i=0;i<j;i+)sum=sum+ti;else static int t112=31,30,31,30,31,31,30,31,30,31,0,31; j=12-month;if(leap_year(year) t110=29;else t110=
21、28;for(i=0;i<=j;i+)sum=sum+t1i;return sum;void monthprint(int year,int month)/ 輸出該月的月歷 static int t12=31,0,31,30,31,30,31,31,30,31,30,31; int i,y,weekday=0;long days=0;if(leap_year(year) t1=29; else t1=28; y=tmonth-1; if(year>2006)days=(year-2006)*365+count_leap(year)+monthdays(month,year); we
22、ekday=days%7;else if(year<2006)days=(2005-year)*365+count_leap(year)+monthdays(month,year);weekday=7-days%7;elsedays=monthdays(month,year);weekday=days%7;for (i=1;i<weekday+2;i+)/ 輸出該月第一天所在位置之前的空格printf ("t");for (i=1;i<=y;i+)/ 輸出該月的月歷if (i+weekday-1)%7=0) printf ("nt%3dt&quo
23、t;,i);else printf ("%3dt",i);【調(diào)試及分析過程】1:在代碼編輯器上輸入以上程序代碼后,保存并f9 到 tc3.0 上運行結果輸出:分析: 運行后出現(xiàn) “菜單”,選項意思是: 輸入 1,則確定一個日期是星期幾。輸入 3,則是查詢某年某月的月歷。4,則是判斷輸入年是閏年還是平年。輸入 2,則是查詢某年的5,退出。12 個月歷。2:選擇1 后,再根據(jù)提示輸入* , * , *: 2011,10,28結果輸出:分析:輸入你要查詢的年月日后, 程序會經(jīng)過計算輸出該日的星期號。 然后,輸出結果后, 系統(tǒng)會詢問你是否繼續(xù),輸入 y 或 Y,繼續(xù);輸入 N 或 n 或其他字母都會直接退出。3:選擇 y 后結果輸出:4:選擇 2 后,再根據(jù)提示輸入你想查詢的年份* : 2012結果輸出:分析:輸入你要查詢的年份后,系統(tǒng)會經(jīng)過計算得出每月的月歷,然后輸出。但因為輸出窗口限制,結果只能看到部分。同樣的,輸出結果后,系統(tǒng)仍然會詢問是否繼續(xù)。5:選擇 3 后,再根據(jù)提示輸入你要查詢的月份* , * : 2012,6結果輸出:分析
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度酒店前臺員工節(jié)假日安排聘用合同范本
- 二零二五年度美容化妝品商標權轉(zhuǎn)讓與市場拓展合同
- 二零二五年度房產(chǎn)中介返傭服務保障協(xié)議
- 2025年度科技創(chuàng)新項目勞務費合同范例
- 二零二五年度文化創(chuàng)意產(chǎn)業(yè)補貼協(xié)議
- 2025年度玻璃幕墻安裝工程進度款支付合同
- 2025年度金融產(chǎn)品投資入股合同模板
- 二零二五年度紋身藝術展覽與合作推廣協(xié)議
- 二零二五年度生態(tài)住宅區(qū)掛靠物業(yè)公司合作協(xié)議
- 二零二五年度診所執(zhí)業(yè)醫(yī)師團隊建設聘用合同
- 火災自動報警系統(tǒng)檢查表
- 高速公路橋頭跳車判別和處治
- 骨髓細胞圖譜
- 建筑工程分部分項工程劃分表(新版)
- 勃利縣大四站鎮(zhèn)侵蝕溝治理工程施工組織設計
- 公路瀝青路面設計標準規(guī)范
- 普通高中歷史課程標準(2022年版2023年修訂)解讀
- 第9課《呵護我們的鼻子》課件
- 加油站春季安全教育培訓
- 《統(tǒng)計學原理賈俊平》課件
- 高壓隔膜壓濾機安裝方案
評論
0/150
提交評論