C語言四則運算測試程序設(shè)計報告_第1頁
C語言四則運算測試程序設(shè)計報告_第2頁
C語言四則運算測試程序設(shè)計報告_第3頁
C語言四則運算測試程序設(shè)計報告_第4頁
C語言四則運算測試程序設(shè)計報告_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、昆明理工大學(xué)計算機程序設(shè)計基礎(chǔ)課程綜合實踐型教學(xué)課題報告課題名稱:100以內(nèi)的整數(shù)四則運算測試程序設(shè)計組長: 學(xué)號 040401067 姓名 周紹平組員: 學(xué)號 040401070 姓名 鄧 磊學(xué)號 040401106 姓名 劉云路學(xué)號 姓名學(xué)號 姓名學(xué)號 姓名學(xué)號 姓名學(xué)院: 信自學(xué)院 專業(yè)班級: 自動化0421 指導(dǎo)教師: 耿植林 昆明理工大學(xué)計算中心2005 年 6月18日昆明理工大學(xué)計算中心計算機程序設(shè)計基礎(chǔ)課程綜合實踐型教學(xué)課題報告課程名稱:100以內(nèi)的整數(shù)四則運算測試程序設(shè)計 學(xué)院: 信自學(xué)院 專業(yè)班級: 自動化0421學(xué)號姓名小組編號所選題號自評小組工作量(16)自評分?jǐn)?shù)分?jǐn)?shù)04

2、0401067周紹平15595040401070鄧 磊15586040401106劉云路15585設(shè)計說明與功能描述(基本思路及關(guān)鍵語句說明)作為一個數(shù)學(xué)運算的程序,在我看來至少要有以下幾個功能:1、 出題。既然是出題,那么就要求每次出的不一樣。2、 解題。如果一個用于數(shù)學(xué)計算的程序,無法讓使用者輸入解答。這便是一個空殼。3、 判斷。和解題相似,如果一個程序無法判斷使用者輸入結(jié)果的正誤,又在誰會使用它呢?4、 顯示。使用者有看到自己做的答卷和正確答案的要求和希望。5、 重做。使用者在知道自己做錯的題后,一般會選擇重做錯題,以達(dá)到對其的了解。6、 菜單。不用說,這幾乎是每一個程序都要求的。這是為

3、了方便使用者進(jìn)行多種選擇。7、 循環(huán)。這就要求程序能多次重復(fù)地運行。設(shè)計這個程序的基本思路:分別設(shè)計出題(計算和除法)、評分、答卷、正解、菜單、重做七個功能模塊。然后再設(shè)計一個主函數(shù),不斷地調(diào)用菜單這個函數(shù),使其達(dá)到各項功能。同時,菜單函數(shù)與各函數(shù)要緊密地聯(lián)系在一起,可以說菜單這個函數(shù)是整個程序中的樞紐。關(guān)鍵語句說明:由于數(shù)據(jù)要求共享,即多次調(diào)用。將幾個變量定義為全局變量(運算數(shù)(sy10,sr10),運算符(fh10),輸入結(jié)果(jd10),正確結(jié)果(jg10),分?jǐn)?shù)(fs)。運算數(shù)由隨機函數(shù)產(chǎn)生,并對取余以保證其在以內(nèi)。隨即數(shù)種子由系統(tǒng)時間函數(shù)產(chǎn)生。運算符也由隨機函數(shù)產(chǎn)生,對取余。生成個數(shù)

4、字,再轉(zhuǎn)換為相應(yīng)的運算符。(srand( (unsigned)time( null ) ); syi=rand()%100; sri=rand()%100; p=rand()%4; )程序中多次用到循環(huán),對控制循環(huán)變量的定義和運算有很高的要求。由于菜單選項函數(shù)的出現(xiàn),這就要求對輸入選項的合法性進(jìn)行驗證,如果不合法就要求重輸。( while(!(c=0&c6); return c; )錯題正解和錯題重做都要求其的處理在知道錯題的基礎(chǔ)上的。因此if(jgi=jdi,這個語句是個基礎(chǔ),在這兩個函數(shù)中它是根本,如果不能對其正確的判斷,就無法達(dá)到相應(yīng)的功能。 由于除法的特殊性除數(shù)不能為和得到的結(jié)果是整數(shù)

5、。我們專門設(shè)計了一個用于產(chǎn)生除法的函數(shù),將其放入計算這個函數(shù)中。下面是這個函數(shù)的核心部分:srand( (unsigned)time( null ) ); fa: sy=rand()%100; if(sy=0) goto fa;for(i=1;i=10 sy是否為0隨機產(chǎn)生兩個數(shù)對100取余及運算符輸入結(jié)果(jd)是否為答案(jg) 假for循環(huán)產(chǎn)生sy的約數(shù)csb 從csb中隨機抽取一個除數(shù)將值返回函數(shù)jisuan分?jǐn)?shù)(fs+0)分?jǐn)?shù)(fs+10)真否結(jié)束結(jié)束3、重做(chongzuo)4、主函數(shù)(main)開始開始調(diào)用計算函數(shù)(jisuan)調(diào)用計算這個函數(shù)(jisuan)m10?假調(diào)用菜

6、單函數(shù)(caidan)真for循環(huán)jd=jg?輸入選項(key=?)真key=0?假輸出題目dajuan1zhengjie輸入結(jié)果2假pingjiajd=jg?3真chongzuo4假jisuanfor循環(huán)再次輸出該題5結(jié)束結(jié)束真由于其它四個函數(shù)較為簡單或者和某些函數(shù)相似,這里就不再重復(fù)說明。在程序中用到的數(shù)據(jù)說明:運算符:隨機產(chǎn)生4個數(shù)字(0、1、2、3),定義為int p(全局變量),再轉(zhuǎn)換為運算符(+、-、*、/),定義為char fh10(全局變量) .運算數(shù):隨機產(chǎn)生兩個運算數(shù),對100取余。定義為 int sy10,sr10(全局變量).結(jié)果和答案:定義為 int jd10,jg1

7、0(全局變量).循環(huán)控制變量:定義為 int i(函數(shù)(jisuan,chufa)),j(函數(shù)(dajuan)),k(函數(shù)(zhengjie)),m,n(函數(shù)(chongzuo)),key(主函數(shù)(main)).臨時交換數(shù)據(jù)變量:int gh(函數(shù)(jisuan)).統(tǒng)計分?jǐn)?shù):int fs(全局變量).四、程序調(diào)試與測試 100以內(nèi)的四則運算出題 (程序調(diào)試過程中遇到的問題)第一;重做程序調(diào)試中遇到的問題:在重做程序的調(diào)試中遇到的問題不太多,主要是答錯的題給三次重做機會的程序設(shè)計一開始不能正常運行,要不就是給予無限次的機會,要不就是只能重做一次。由于開始我不能找出錯誤所在,調(diào)試了多次也不能很好

8、的運行,經(jīng)過多次的調(diào)試,改正,再調(diào)試,再改正,到最后終于將錯誤的地方改正了,正確的程序應(yīng)當(dāng)是“ for(n=0;n3;n+) printf(你仍未做對!你還有%d次機會: ,2-n);/*再次計算*/printf(%2d %c %2d =?,sym,fhm,srm);scanf(%d,&jdm); if(jdm=jgm) printf(恭喜!你做對了!n); break;/*跳出循環(huán)*/ ” 這樣就很好的解決了前面所遇到的問題。第二;評價程序中遇到的問題: 我們做的這個自動出題程序中,當(dāng)答題者做完題目后,程序會按成績分段給出響應(yīng)的評價。在做這部分程序的時候遇到的困難主要是score數(shù)據(jù)的獲得,

9、一開始不知道該用哪個函數(shù)對成績進(jìn)行評價,經(jīng)過看書和小組內(nèi)部的討論才知道了應(yīng)當(dāng)用條件函數(shù)switch對成績score進(jìn)行分段并給出相應(yīng)的評價結(jié)果score的數(shù)據(jù)從主函數(shù)獲得:“ int fs; printf(請輸入成績(0,10,20.100):);scanf(%d,&fs); switch(fs) ” 這才使得程序能夠正常運行。第三;菜單程序設(shè)計中遇到的問題: 本程序的主菜單選項分為顯示答卷、錯題的正確解、再進(jìn)行一次練習(xí)、系統(tǒng)對成績的評價、退出系統(tǒng)等選項。在做這個程序的時候,一開始我用的是05代表以上各選項,但是在定義的時候卻定義成了16,導(dǎo)致程序在運行的過程中5選項和0選項都無法運行,而這個

10、錯誤在編譯時又不能找出來,所以讓我費了大量的時間才知道是自己不認(rèn)真定義錯了。而這個程序主要是使用printf()函數(shù)顯示菜單項,用sacnf()函數(shù)接收選項字符while條件限定選項的合法性,非法字符則重新輸入并返回主函數(shù):“printf(n* 數(shù)學(xué)四則運算測試軟件 *nnn); printf( 1.顯示答卷 2.錯題正解nn); printf( 3.系統(tǒng)評估 4.錯題重做nn); printf( 5.再次練習(xí) 0.退出系統(tǒng)nn); printf(n*); printf(n請輸入選項(0-5):); /*提示輸入選項*/ 第四;計算程序的設(shè)計中的問題: 在這部分程序的設(shè)計中沒什么大的問題,計算

11、程序主要是用隨機函數(shù)rand()產(chǎn)生032767之間的整數(shù),與100取余數(shù)后得到099之間的整數(shù)運算符也由隨機數(shù)產(chǎn)生,rand()%4 得到03之間的隨機數(shù),約定0:減法,1:加法,2:乘法,3:除法。for循環(huán)控制題目數(shù)量,每次循環(huán)先產(chǎn)生題目并顯示出來,將計算結(jié)果保存在jg中然后再等待做題的人從鍵盤輸入計算結(jié)果保存在s中,將jg與s進(jìn) 行比較判定正確性做完10道題后(循環(huán)結(jié)束),顯示測試結(jié)果并進(jìn)行評價。 第五;除法程序中遇到的問題: 除法運算程序的設(shè)計是本程序設(shè)計中最難解決也是出錯最多的部分。主要除法運算的每一次運算不可能都是整數(shù),這就使得程序的設(shè)計難度提高了許多,特別是在主函數(shù)的調(diào)用中主程

12、序中遇到的問題:在主程序的調(diào)試過程中,遇到的問題較為突出。主要有兩個方面。一是菜單選項的不運行。二是計算函數(shù)對除法函數(shù)的調(diào)用問題。為了解決這兩個問題,我們小組進(jìn)行了多次的試驗,但是都無法解決這兩個問題。這使得我們有點失落。主程序最后的解決是在詢問了老師之后才解決的。我們在老師的幫助下發(fā)現(xiàn)并解決了這兩個問題。菜單選項的問題是由于,對選項字符的合法性驗證有問題。對函數(shù)調(diào)用的不成功則是對指針的不熟悉,從而造成了調(diào)用的不恰當(dāng),使數(shù)據(jù)的返回存在問題。五、程序清單#include stdio.h#include #include #include /* 字符操作函數(shù)*/* 定義全局變量*/int sy10

13、,sr10,jd10,jg10; /* sy,fh,sr,jd,jg分別保存第一運算數(shù),運算 符, 第二運算數(shù),輸入結(jié)果,正確結(jié)果*/ int fs=0; /* s接收鍵盤輸入的結(jié)果,score保存成績*/char fh10; /* fh保存運算符號*/ /*作者:鄧?yán)?編寫日期:2005.6.13 最后修改日期:2005.6.13*/void chufa(int *s1,int *s2,int *s3)int i,b=1,c,jg; /*i為控制循環(huán)變量,jg,jd分別保存輸入結(jié)果和正確答案*/int cs20=0,sy,sr; /*cs為除數(shù)數(shù)組,sy保存被除數(shù),sr為從cs中抽取的除數(shù)*

14、/srand( (unsigned)time( null ) ); fa: sy=rand()%100; if(sy=0) goto fa;for(i=1;i=sy;i+) /*產(chǎn)生除數(shù)數(shù)組的循環(huán)*/if(sy%i=0) csb=i; b+;else continue; /*循環(huán)結(jié)束*/c=rand()%b; /*隨機抽取除數(shù)*/if(c=0) c=c+1;sr=csc;jg=sy/sr;*s1=sy; /*指針變量*/*s2=sr;*s3=jg;/* 作者:周紹平 編寫日期:2005.6.8 最后修改日期:2005.6.14*/* 自動生成10道運算題目,數(shù)值在099之間 每出1道題后等待操

15、作者輸入運算結(jié)果 判斷輸入的結(jié)果是否正確,正確則加10分 給出最終得分*/* 算法:用隨機函數(shù)rand()產(chǎn)生032767之間的整數(shù),與100取余數(shù)后得到099之間的整數(shù) 運算符也由隨機數(shù)產(chǎn)生,rand()%4 得到03之間的隨機數(shù),約定0:減法,1:加法, 2:乘法,3:除法。for循環(huán)控制題目數(shù)量,每次循環(huán)先產(chǎn)生題目并顯示出來,將計 算結(jié)果保存在jg中然后再等待做題的人從鍵盤輸入計算結(jié)果保存在s中,將jg與s進(jìn) 行比較判定正確性做完10道題后(循環(huán)結(jié)束),顯示測試結(jié)果并進(jìn)行評價*/void jisuan() int p; /* p為隨機產(chǎn)生的運算符號,規(guī)定0為加法,1為減法,2為乘法,3為

16、除法*/int i,gh; /* i為循環(huán)控制變量,gh用于臨時交換數(shù)據(jù)*/printf(你將進(jìn)行的是100以內(nèi)數(shù)字的四則運算!n);srand( (unsigned)time( null ) ); /* 隨即數(shù)種子由系統(tǒng)時間函數(shù)產(chǎn)生*/* 循環(huán)產(chǎn)生10道100之內(nèi)的加減乘除法運算題目*/for(i=0;i10;i+)syi=rand()%100; /* 隨機產(chǎn)生第一個操作數(shù)(199)*/sri=rand()%100; /* 隨機產(chǎn)生第二個操作數(shù)(199)*/p=rand()%4; /* 隨機產(chǎn)生運算符(03)*/ if(p=0) /* 轉(zhuǎn)換成運算符號,p為0表示做加法*/fhi=+; jgi

17、=syi+sri; /* fh為,jg為syi+sri*/else if(p=1) /* p為1,表示做減法*/fhi=-; if(syisri) gh=syi; syi=sri;sri=gh; /* 如果sy=0&c6); /*驗證選項是否合法,若否則重輸*/ return c; /*返回選擇項*/*作者:鄧?yán)?編寫日期:2005.6.12 最后修改日期:2005.6.12*/*對成績結(jié)果進(jìn)行評價,便于做題都了解自己的情況,進(jìn)行有針對性的學(xué)習(xí).按分?jǐn)?shù)的不同層次進(jìn)行評價*/*算法:用條件函數(shù)switch對成績score進(jìn)行分段并給出相應(yīng)的評價,結(jié)果score的數(shù)據(jù)從主函數(shù)獲得*/void pi

18、ngjia()printf(你的成績是%d分.n,fs); /* 顯示測試結(jié)果*/switch(fs) /*顯示評價*/ case 100: printf(真棒!不要驕傲喲!n); break; case 90: printf(優(yōu)秀!恭喜你取得了好成績!n); break; case 80: case 70: printf(良好!請繼續(xù)努力,下次取得更好的成績!n); break; case 60: printf(及格!成績不太理想喲!再接再勵吧!n); break; case 50: case 40: case 30: case 20: case 10: printf(多花點功夫吧,不然你會

19、后悔的!n); break; case 0: printf(太差勁了!再不努力的話,你就完了!再做一次吧!n); break; printf(nn); /*作者:劉云路 編寫日期:2005.6.12 最后修改日期:2005.6.12*/*顯示答卷*/*各數(shù)據(jù)從主函數(shù)中獲取*/void dajuan()int j;printf(你的答卷為:n);for(j=0;j10;j+)printf(%2d %c %2d = %2dn,syj,fhj,srj,jdj); printf(nn);/*作者:周紹平 編寫日期:2005.6.12 最后修改日期:2005.6.12*/*對錯題給出正確的答案*/*各數(shù)

20、據(jù)從主函數(shù)中獲取*/void zhengjie()int k;printf(你答錯的題的正確答案為:n);for(k=0;k10;k+) if(jdk=jgk) continue; elseprintf(%2d %c %2d = %2dn,syk,fhk,srk,jgk); printf(nn);/*作者:劉云路 編寫日期:2005.6.12 最后修改日期:2005.6.12*/*將錯題給出,讓做題者再次對其進(jìn)行計算*/*各數(shù)據(jù)從主函數(shù)中獲取*/void chongzuo()int m,n;printf(以下是你做錯的題,請重做:n);for(m=0;m10;m+) /*用循環(huán)對錯題進(jìn)行選擇*

21、/if(jdm=jgm) continue; /*做對的題則跳過*/else printf(%2d %c %2d =?,sym,fhm,srm); scanf(%d,&jdm);if(jdm=jgm) printf(恭喜!你做對了!n);/*再次對輸入的答案進(jìn)行檢驗*/else /*若仍未做對,則用此函數(shù)*/ for(n=0;n3;n+) printf(你仍未做對!你還有%d次機會: ,2-n);/*再次計算*/ printf(%2d %c %2d =?,sym,fhm,srm); scanf(%d,&jdm); if(jdm=jgm) printf(恭喜!你做對了!n); break;/*跳

22、出循環(huán)*/ /*循環(huán)結(jié)束*/ printf(nn);/*作者:周紹平、劉云路、鄧?yán)?編寫日期:2005.6.13 最后修改日期:2005.5.14*/*主函數(shù)*/void main()int key=1;jisuan();while(key)switch(caidan() case 1: printf(nnn); dajuan(); break;case 2: printf(nnn); zhengjie(); break;case 3: printf(nnn); pingjia(); break;case 4: printf(nnn); chongzuo(); break;case 5: pr

23、intf(nnn); jisuan(); break;case 0: key=0; 個人收獲和體會:(1)組長:周紹平這次c語言的程序設(shè)計,對于我來說是一個挑戰(zhàn)。我對c語言的學(xué)習(xí)并不是很好,尤其是在數(shù)組之后的內(nèi)容,對它并不了解,使用也達(dá)不到要求,更不要說靈活的運用它們了。這在程序的設(shè)計中也有所體現(xiàn)。每一個函數(shù)都設(shè)計好了,也調(diào)試好了,把它們分開運行并沒有錯誤,但是當(dāng)把它們組合成一個程序時,便是一個一個地出現(xiàn)錯誤。把這個問題解決了,另一個新的問題又來了。這不能說是對知識的欠缺。通過這次的程序設(shè)計,我懂得了無論什么事都要去做才會發(fā)現(xiàn)問題,才有可能去解決問題。對知識的學(xué)習(xí),不能潛償輒止,要深入去學(xué)習(xí),去了解,這樣才會有所收獲。有許多東西,許多事,不是想像中的那么容易,不去實踐,永遠(yuǎn)也不會有提高,尤其是學(xué)習(xí)計算機。我的另一個感受便是團隊精神,如果沒有我們這個小組成員的共同努力,我想這個程序也是沒法完成的。共同合作、共同分享、

溫馨提示

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

最新文檔

評論

0/150

提交評論