版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 昆明理工大學(xué)程序設(shè)計(jì)基礎(chǔ)課程綜合設(shè)計(jì)實(shí)踐教學(xué)課題報(bào)告課程名稱(chēng): c語(yǔ)言程序設(shè)計(jì)綜合大作業(yè) 課題名稱(chēng):數(shù)學(xué)計(jì)算工具程序設(shè)計(jì) 組長(zhǎng):學(xué)號(hào) 201310401344 姓名鐘倫賦 組員:學(xué)號(hào) 201310401321 姓名朱潘偉學(xué)號(hào) 201310401309 姓名陸光道學(xué)院: 信息工程與自動(dòng)學(xué)院 專(zhuān)業(yè)班級(jí): 自動(dòng)化133 指導(dǎo)教師: 鄭明雄 昆明理工大學(xué)計(jì)算中心2014年5 月 日 填寫(xiě)格式及說(shuō)明1、 系統(tǒng)概述 (一)功能概述主函數(shù):大概思路:顯示界面并提示選擇功能函數(shù)判斷選擇的正確性調(diào)用所選功能函數(shù)選擇是否繼續(xù)調(diào)用當(dāng)前功能函數(shù)判斷選擇的正確性返回主菜單繼續(xù)運(yùn)行(1) 實(shí)現(xiàn)主函數(shù)完成選項(xiàng)菜單集成各個(gè)
2、計(jì)算功能函數(shù);(2) 實(shí)現(xiàn)求任意數(shù)的階乘;(3) 實(shí)現(xiàn)求組合數(shù);(4) 實(shí)現(xiàn)求任意兩個(gè)整數(shù)的最大公約數(shù)和最小公倍數(shù);(5) 實(shí)現(xiàn)判斷任意數(shù)是否素?cái)?shù);(6) 實(shí)現(xiàn)顯示菲波拉契數(shù)列的前n項(xiàng)。各功能函數(shù)的數(shù)據(jù)輸入形式和范圍在顯示界面上有適當(dāng)提示,基輸入出錯(cuò)或超出范圍則提示重新輸入。所輸出的數(shù)據(jù)僅在屏幕上顯示,不作保存。本程序的優(yōu)點(diǎn)在于多處使用循環(huán)結(jié)構(gòu)控制程序運(yùn)行方向,根據(jù)需求輕松實(shí)現(xiàn)循環(huán)調(diào)用各功能函數(shù)。此程序沒(méi)什么大的難點(diǎn),而循環(huán)結(jié)構(gòu)卻成為本程序主函數(shù)的一大亮點(diǎn)。如用do-while 循環(huán)結(jié)構(gòu),或判斷所輸入的字符是否為所要求輸入的字符,或反復(fù)調(diào)用正在運(yùn)行的功能函數(shù),或返回主菜單繼續(xù)運(yùn)行。整個(gè)主函數(shù)被
3、囊括在一個(gè)大的do-while 循環(huán)結(jié)構(gòu)當(dāng)中,使其實(shí)現(xiàn)不斷循環(huán),其中借助getchar語(yǔ)句實(shí)現(xiàn)運(yùn)行的停頓。因而每個(gè)getchar語(yǔ)句既起到了錄入字符的作用又起到了運(yùn)行停頓的作用,當(dāng)用戶(hù)一輸入數(shù)據(jù)時(shí),程序便可立刻運(yùn)行,快捷完成其功能,而不需要重新啟動(dòng)程序。本程序利用菜單顯示提供了較好的人機(jī)交互界面。(二)算法概述:從主菜單中選擇相對(duì)應(yīng)的數(shù)字,使程序進(jìn)入不同的程序模塊,用switch實(shí)現(xiàn)其功能,程序共分為五個(gè)模塊,分別為:主函數(shù)、jicheng( )函數(shù)(求階乘)、comb( )函數(shù)(求組合數(shù))、qiubeishu ( )函數(shù)(求最小公倍數(shù)和最大公約數(shù))、qiusushu( )函數(shù)(求素?cái)?shù))、fi
4、bonacci( )函數(shù)(求菲波拉契數(shù)列)、 remenu() 函數(shù)(返回主菜單) 各函數(shù)主要算法見(jiàn)個(gè)流程圖2、數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)1、 數(shù)據(jù)的定義:主要定義了int、ouble 、#define max 48char 、unsigned long int2、 數(shù)據(jù)的輸出形式:%d(整形)三、 模塊設(shè)計(jì)1、說(shuō)明、用for循環(huán)求由實(shí)參傳給形參的數(shù)、用do-while循環(huán)、switch函數(shù)實(shí)現(xiàn)功能的選擇、調(diào)用fibonacci數(shù)列函數(shù)2、功能要求及分工:各計(jì)算功能單獨(dú)編寫(xiě)成函數(shù),在主函數(shù)中通過(guò)選項(xiàng)菜單調(diào)用函數(shù)。主函數(shù)完成選項(xiàng)菜單集成各個(gè)計(jì)算功能函數(shù);(7) 求任意數(shù)的階乘;(8) 求組合數(shù);(9) 求任意
5、兩個(gè)整數(shù)的最大公約數(shù)和最小公倍數(shù);(10) 判斷任意數(shù)是否素?cái)?shù);(11) 顯示菲波拉契數(shù)列的前n項(xiàng)。各功能函數(shù)的數(shù)據(jù)輸入形式和范圍在顯示界面上有適當(dāng)提示,基輸入出錯(cuò)或超出范圍則提示重新輸入。所輸出的數(shù)據(jù)僅在屏幕上顯示,不作保存。3、程序的控制流程入下圖所示。n0dn); result=a/(b*c); printf(所要求的組合數(shù)為=%dn,result);改正:printf(所要求的組合數(shù)為=%0.fn,result);(二)、程序測(cè)試 1、菜單界面/菜單主界面組員共同設(shè)計(jì)/ 2、求階乘:/本人設(shè)計(jì)求階乘和組合數(shù)的部分是由我完成的,首先定義自定義求階乘函數(shù),然后寫(xiě)入代碼實(shí)現(xiàn)功能,代碼如下:d
6、ouble jiecheng(t) /用戶(hù)自定義一個(gè)函數(shù),用來(lái)求任意數(shù)的階乘 int t; int i; double sum=1; for(i=1;i=t;i+) /用for循環(huán)求由實(shí)參傳給形參的數(shù) sum=sum*i; return(sum); /返回函數(shù)值 3、求組合數(shù):/本人設(shè)計(jì)求組合數(shù):根據(jù)上面求階乘函數(shù)完成,首先自定義求組合數(shù)函數(shù)comb( ),在編寫(xiě)代碼實(shí)現(xiàn)其功能,其中在求組合數(shù)函數(shù)中調(diào)用了上面jiecheng()函數(shù),其代碼如下:void comb()int m,n; double result,a,b,c;do printf(輸入m和n的值,用空格分隔(m=n),并回車(chē)確認(rèn):
7、n); /用do循環(huán)判斷當(dāng)mn); /判斷當(dāng)mn時(shí),循環(huán)繼續(xù),直到mn時(shí)結(jié)束循環(huán) a=jiecheng(n);b=jiecheng(m);c=jiecheng(n-m); result=a/(b*c); /調(diào)用下面定義的函數(shù)進(jìn)行組合數(shù)運(yùn)算 printf(所要求的組合數(shù)為=%0.fn,result); 4、求任意整數(shù)的最小公倍數(shù)和最大公約數(shù): /以下另外四個(gè)功能函數(shù)都是其他組員完成 5、判斷任意數(shù)是否是素?cái)?shù): 6、顯示菲波拉契數(shù)列的前n項(xiàng): 7、退出程序:五、程序清單(程序源代碼):/綜合大作業(yè)#include stdio.h /文件包含#include math.h#include stdli
8、b.hchar d,h; /定義全局字符變量 /*功能函數(shù):求任意數(shù)的階乘*/double jiecheng(t) /用戶(hù)自定義一個(gè)函數(shù),用來(lái)求任意數(shù)的階乘 int t; int i;double sum=1; for(i=1;i=t;i+) /用for循環(huán)求由實(shí)參傳給形參的數(shù) sum=sum*i; return(sum); /返回函數(shù)值 /*功能函數(shù):求組合數(shù)*/void comb()int m,n; double result,a,b,c;do printf(輸入m和n的值,用空格分隔(m=n),并回車(chē)確認(rèn):n); /用do循環(huán)判斷當(dāng)mn); /判斷當(dāng)mn時(shí),循環(huán)繼續(xù),直到mn時(shí)結(jié)束循環(huán)
9、a=jiecheng(n);b=jiecheng(m);c=jiecheng(n-m); result=a/(b*c); /調(diào)用下面定義的函數(shù)進(jìn)行組合數(shù)運(yùn)算 printf(所要求的組合數(shù)為=%0.fn,result); /*功能函數(shù):求任意兩個(gè)整數(shù)的最大公約數(shù)和最小公倍數(shù)*/void qiubeishu() /自定義函數(shù) int a,b,num1,num2,temp; /定義整型變量a,b,num1,num2,temp(中間變量) printf(請(qǐng)輸入兩個(gè)整數(shù),用空格分隔,并回車(chē)確認(rèn):n); scanf(%d%d,&num1,&num2); /鍵盤(pán)敲入兩個(gè)數(shù)num1,num2 if(num1n
10、um2) /把num1與num2中較大的數(shù)賦給a,較小的數(shù)賦給btemp=num1; num1=num2; num2=temp;a=num1; b=num2; while(b!=0) /利用輾除法,直到b為0為止 temp=a%b; a=b; b=temp; printf(公約數(shù):%dn,a); printf(公倍數(shù):%dn,num1*num2/a);/功能函數(shù):判斷任意數(shù)上否素?cái)?shù)void qiusushu() /自定義函數(shù) int n,k,flag; /定義變量,flag是一個(gè)標(biāo)志變量 double m; printf(n 請(qǐng)輸入一個(gè)整數(shù),并回車(chē)確認(rèn):); /輸入要判斷的整數(shù) scanf(%
11、k,&n); /將輸入的整數(shù)存入變量n的空間 m=sqrt(n); /定義m為n的平方根 flag=0;for(k=2;k0&nmax) /判斷n的值break; printf(輸入的數(shù)據(jù)非法,請(qǐng)重新輸入項(xiàng)數(shù)!n);scanf(%d,&n); /重新輸入getchar(); printf(nn); /換兩行printf(菲波拉契數(shù)列的前%d項(xiàng)為:nn,n); /輸出數(shù)列的各項(xiàng)printf(%12ld%12ld,f1,f2); ln=2;for(i=3;i=n;i+)f3=f1+f2; /數(shù)列通項(xiàng)if(ln+%6=0) printf(n); /每6個(gè)數(shù)換行printf(%12lu,f3); /輸
12、出f3f1=f2;f2=f3; printf(nn); /換行/*功能函數(shù):判斷繼續(xù)還是返回主菜單*/void remenu() /自定義函數(shù) printf(n是否繼續(xù)本項(xiàng)操作?請(qǐng)選擇y/n并回車(chē)確認(rèn):n); /當(dāng)所輸入的字符不是小寫(xiě)的或大寫(xiě)的y和n時(shí)提示重新輸入for(d=a;d!=y&d!=n&d!=y&d!=n;d=getchar() )printf();/*主函數(shù)功能:顯示界面菜單選項(xiàng),集成調(diào)用各功能函數(shù)等.*/main()do /用do-while 循環(huán)結(jié)囊括整個(gè)主函數(shù)體,目的是讓程序在執(zhí)行完任務(wù)后立刻返回主菜單 printf(*n); printf(nnnnn 數(shù)學(xué)計(jì)算工具 nnn
13、nn); printf(* *n); printf(* *n); printf(* 歡 迎 使 用! *n); printf(* *n); printf(* *n); printf(* 請(qǐng)按數(shù)字鍵選擇功能函數(shù): *n); printf(* *n); printf(* 1,求任意數(shù)的階乘 *n); printf(* *n); printf(* 2,求組合數(shù) *n);/顯示友好界面 printf(* *n); printf(* 3,求任意兩個(gè)整數(shù)的最大公約數(shù)和最小公倍數(shù) *n); printf(* *n); printf(* 4,判斷任意數(shù)上否素?cái)?shù) *n); printf(* *n); print
14、f(* 5,顯示菲波拉契數(shù)列的前n項(xiàng) *n); printf(* *n); printf(* 6:結(jié)束程序運(yùn)行 再見(jiàn)! *n); printf(* *n); printf(*n); printf(n); /* do-while 循環(huán)結(jié)構(gòu)判斷所輸入的數(shù)據(jù)合法性*/ printf(請(qǐng)按1-6數(shù)字鍵選擇功能函數(shù),按回車(chē)鍵確認(rèn):n); do h=getchar(); while(h6); /*switch結(jié)構(gòu)函數(shù)內(nèi)的所有do-while循環(huán)結(jié)構(gòu)被用來(lái)根據(jù)用戶(hù)需要而重復(fù)執(zhí)行一個(gè)功能函數(shù)*/ switch(h) case 1: do int x;double y; /調(diào)用求階乘函數(shù) doprintf(聲明
15、:由于資源有限,只能輸入0-170之間的任何整數(shù),否則將導(dǎo)致錯(cuò)誤結(jié)果!n請(qǐng)輸入所要求階乘的數(shù):n); scanf(%lu,&x);while(x0); y=jiecheng(x); printf(所要求的階乘%lu!=%len,x,y); remenu(); while(d=y|d=y);break; case 2: do comb(); remenu(); while(d=y|d=y); break; /調(diào)用求組合數(shù)函數(shù) case 3: doqiubeishu();remenu(); while(d=y|d=y); break; /調(diào)用求最大公約數(shù)和最小公倍數(shù)函數(shù) case 4: do qi
16、usushu(); remenu(); while(d=y|d=y); break; /調(diào)用判斷是否是素?cái)?shù)函數(shù) case 5: do fibonacci(); remenu(); while(d=y|d=y); break; /調(diào)用fibonacci數(shù)列函數(shù) case 6: printf(結(jié)束程序運(yùn)行 再見(jiàn)!n); exit(0); while(1); /返回主菜單六、總結(jié)和體會(huì): ( 1 )組長(zhǎng):經(jīng)過(guò)一個(gè)月的努力與奮斗我們組通過(guò)組員之間的分工配合和精誠(chéng)合作終于完成了這次綜合設(shè)計(jì),在做的過(guò)程中,我們組員之間也有過(guò)意見(jiàn)不統(tǒng)一的時(shí)候,但是經(jīng)過(guò)討論后最終達(dá)成了一致的意見(jiàn),在做的過(guò)程中我們付出汗水的同
17、時(shí)也收獲了一種快樂(lè)和成就感。在做這個(gè)大作業(yè)的過(guò)程中我們不僅學(xué)到了很多有關(guān)c語(yǔ)言的知識(shí)同時(shí)也體會(huì)到了許多人生感悟,這次綜合大作業(yè)讓我們體會(huì)到許多事情通過(guò)與別人的合作會(huì)變得更加簡(jiǎn)單。這次作業(yè)我和組員一起寫(xiě)了數(shù)學(xué)計(jì)算工具,我們秉著相互配合精誠(chéng)合作的原則每人完成兩個(gè)部分的功能,菜單主界面由我們共同完成。開(kāi)始的時(shí)候,我們都很茫然不知道從哪里開(kāi)始但是我們并沒(méi)有沮喪而是查了很多相關(guān)的資料在我們共同的努力下終于確定好了函數(shù)的框架,接下來(lái)我們就分工每人寫(xiě)了兩個(gè)小模塊。 剛開(kāi)始學(xué)c語(yǔ)言這門(mén)課的時(shí)候我覺(jué)得完全無(wú)法理解,覺(jué)得這門(mén)課沒(méi)有一點(diǎn)邏輯性,不能理解、老師一講課我就想為什么要這樣為什么會(huì)這樣,搞得我頭昏腦漲完全沒(méi)
18、有學(xué)下去的心情。因此我完全沒(méi)學(xué)到什么在剛開(kāi)始的時(shí)候,后來(lái)老師說(shuō)c語(yǔ)言只要記住就行了當(dāng)歷史背下來(lái)就行了,這時(shí)我似乎明白了該怎么學(xué)了但是由于前面沒(méi)學(xué)好所以到了后面還是有點(diǎn)困難。但是,對(duì)于c語(yǔ)言這門(mén)課程我雖然不是學(xué)的很出色,上課我還是很認(rèn)真的聽(tīng)課的所以通過(guò)看書(shū)我首先學(xué)著去讀懂程序,慢慢的我學(xué)著去體會(huì)編程的思想,就這樣我一步一步的學(xué)習(xí)結(jié)合老師上課的課件和重點(diǎn)知識(shí)我進(jìn)一步學(xué)會(huì)了一些復(fù)雜一點(diǎn)的程序。在這次大作業(yè)中我有失敗、有沮喪但是也有成長(zhǎng),在看到運(yùn)行有錯(cuò)誤的時(shí)候我看著屏幕上的一個(gè)個(gè)錯(cuò)誤我非常沮喪但是沮喪的同時(shí)還把錯(cuò)誤改了過(guò)來(lái),這個(gè)過(guò)程中我明白了重要的不是結(jié)果而是產(chǎn)生結(jié)果的過(guò)程,我在這次大作業(yè)中成長(zhǎng)了許多。 我希望,在下學(xué)期的等級(jí)考試中,我的
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)藥分公司藥品研發(fā)管理規(guī)范
- 校車(chē)的應(yīng)急預(yù)案
- 建筑工程工法管理辦法
- IT行業(yè)外包安全管理辦法
- 《Excel數(shù)據(jù)獲取與處理實(shí)戰(zhàn)》 課件 第8章 宏和VBA
- 2022年大學(xué)心理學(xué)專(zhuān)業(yè)大學(xué)物理二期中考試試卷-附解析
- 2022年大學(xué)法醫(yī)學(xué)專(zhuān)業(yè)大學(xué)物理下冊(cè)期中考試試題-含答案
- 2022年大學(xué)能源動(dòng)力專(zhuān)業(yè)大學(xué)物理下冊(cè)開(kāi)學(xué)考試試卷D卷-附解析
- 2022年大學(xué)動(dòng)物醫(yī)學(xué)專(zhuān)業(yè)大學(xué)物理下冊(cè)期中考試試卷D卷-含答案
- 腦血管病介入診療護(hù)理
- 特大橋雙線(xiàn)矩形空心橋臺(tái)施工方案
- 公務(wù)員申論答題標(biāo)準(zhǔn)格子紙版A4打印版
- 骨肉瘤化療臨床路徑
- 第六章休閑體育產(chǎn)業(yè)PPT課件
- 道路水穩(wěn)層施工方案(完整版)
- 匹茲堡睡眠質(zhì)量指數(shù)(psqi)表格
- 5、火災(zāi)事故桌面演練記錄表
- 《甲基化與腫瘤》PPT課件.ppt
- 行政法對(duì)憲法實(shí)施的作用探討
- BIM等信息技術(shù)的使用
- 西方發(fā)愿文是一篇圓滿(mǎn)的作品它包括了初中后三階段最
評(píng)論
0/150
提交評(píng)論