版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 課程設(shè)計(jì)報(bào)告</b></p><p> 題目:算術(shù)題測(cè)試程序</p><p><b> 學(xué)生姓名:____</b></p><p> 學(xué) 號(hào):_________</p><p> 班 級(jí): ___ _</p><p> 指
2、導(dǎo)教師:____ _</p><p><b> 年 月 日</b></p><p><b> 需求分析說(shuō)明</b></p><p><b> 設(shè)計(jì)目的 </b></p><p> 掌握棧的存儲(chǔ)結(jié)構(gòu)。 </p><p> 掌握棧基本操作的
3、實(shí)現(xiàn)。 </p><p> 能引用棧解決相關(guān)的實(shí)際問(wèn)題。 </p><p> 程序最終需要完成的具體功能</p><p> 能隨機(jī)出題,題數(shù)由用戶(hù)輸入確定,算術(shù)題包括加減乘除四則運(yùn)算,表達(dá)式項(xiàng)數(shù)應(yīng)不限,可以包含括號(hào);</p><p> 需要進(jìn)行表達(dá)式的合法性驗(yàn)證;</p><p><b> 用戶(hù)交互
4、輸入答案;</b></p><p> 計(jì)算機(jī)核對(duì)用戶(hù)答案;</p><p> 能對(duì)用戶(hù)的測(cè)試評(píng)分;</p><p> 實(shí)現(xiàn)多用戶(hù)系統(tǒng),并對(duì)用戶(hù)的用戶(hù)名和得分保存到文件,此功能選作。</p><p><b> 設(shè)計(jì)要求</b></p><p> ?。?)要求用面向?qū)ο蟪绦蛟O(shè)計(jì)思想
5、實(shí)現(xiàn);</p><p> (2)系統(tǒng)具有一定的容錯(cuò)性;</p><p> ?。?)要求具有較好的交互性。</p><p><b> 總體設(shè)計(jì)</b></p><p> 該程序大致由兩大部分構(gòu)成。第一部分為界面部分,用來(lái)實(shí)現(xiàn)簡(jiǎn)單的人機(jī)交互,控制程序的整體進(jìn)程;第二部分為功能實(shí)現(xiàn)部分,用來(lái)實(shí)現(xiàn)各個(gè)功能模塊。</p
6、><p><b> 框圖說(shuō)明</b></p><p><b> 詳細(xì)設(shè)計(jì)</b></p><p> 隨機(jī)出題,題數(shù)由用戶(hù)輸入確定,算術(shù)題包括加減乘除四則運(yùn)算,表達(dá)式項(xiàng)數(shù)不限,可以包含括號(hào)</p><p> 設(shè)計(jì)一個(gè)表達(dá)式類(lèi)class ss,該類(lèi)中包含了表達(dá)式(字符串型)產(chǎn)生函數(shù)string ra
7、ndomExcs()、操作數(shù)獲取函數(shù)char getOd(bool preIsDiv)以及運(yùn)算符獲取函數(shù)char getOp(bool innerIsZero),其中表達(dá)式產(chǎn)生函數(shù)又用到了隨機(jī)數(shù)產(chǎn)生函數(shù)rand()以實(shí)現(xiàn)隨機(jī)產(chǎn)生的表達(dá)式項(xiàng)數(shù)不固定,括號(hào)是否出現(xiàn)以及括號(hào)位置隨機(jī)的功能。該功能用來(lái)實(shí)現(xiàn)待用戶(hù)輸入題數(shù)之后,程序立即隨機(jī)產(chǎn)生對(duì)應(yīng)數(shù)量的表達(dá)式供用戶(hù)測(cè)試。</p><p><b> 表達(dá)式的合法性
8、驗(yàn)證</b></p><p> 此功能包含在上述表達(dá)式類(lèi)當(dāng)中,該類(lèi)中包含的操作數(shù)和運(yùn)算符獲取函數(shù)char getOd(bool preIsDiv)、char getOp(bool innerIsZero)中分別用到了兩個(gè)bool型參數(shù)bool preIsDiv和bool innerIsZero,當(dāng)獲取操作數(shù)時(shí)必須檢驗(yàn)該數(shù)之前是否有除號(hào),當(dāng)獲取運(yùn)算符時(shí)必須檢驗(yàn)該符號(hào)之后是否是0,另外該類(lèi)之外還定義了一
9、個(gè)函數(shù)double fune(string st)用來(lái)檢驗(yàn)括號(hào)內(nèi)的結(jié)果是否為0。該功能用來(lái)保證隨機(jī)出現(xiàn)的表達(dá)式必須是合法的。</p><p><b> 用戶(hù)交互輸入答案</b></p><p> 該功能在測(cè)試函數(shù)void ceshi()部分實(shí)現(xiàn),該函數(shù)當(dāng)中定義了一個(gè)double型變量double youresult當(dāng)表達(dá)式顯示在屏幕上等待用戶(hù)輸入答案時(shí),用戶(hù)便可輸
10、入自己的答案(youresult)進(jìn)行測(cè)試。</p><p><b> 計(jì)算機(jī)核對(duì)用戶(hù)答案</b></p><p> 該功能也在測(cè)試函數(shù)void ceshi()得到實(shí)現(xiàn),該函數(shù)中定義了一個(gè)double型變量double result當(dāng)用戶(hù)輸入答案(youresult)后,程序立即判斷用戶(hù)的答案(youresult)是否等于表達(dá)式的正確結(jié)果result。如果相等則顯
11、示“正確”,否則顯示“計(jì)算錯(cuò)誤!”并顯示正確值。</p><p><b> 對(duì)用戶(hù)的測(cè)試評(píng)分</b></p><p> 該功能仍依靠測(cè)試函數(shù)void ceshi()實(shí)現(xiàn),函數(shù)中定義一個(gè)計(jì)數(shù)變量float num,并賦初值0,每當(dāng)用戶(hù)答對(duì)一道題便自加1,最后循環(huán)結(jié)束時(shí)用num除以總題數(shù)乘上100便得到用戶(hù)的最終得分。測(cè)試結(jié)束后,系統(tǒng)會(huì)提示是否繼續(xù)進(jìn)行測(cè)試,如果想繼續(xù)
12、輸入題數(shù)就輸入y,否則輸入n退出程序。</p><p><b> 實(shí)現(xiàn)部分</b></p><p> class ss //表達(dá)式類(lèi)的定義以及各成員函數(shù)的實(shí)現(xiàn)</p><p><b> {public:</b></p><p> string randomExcs();</
13、p><p> char getOp(bool innerIsZero);</p><p> char getOd(bool preIsDiv);</p><p><b> };</b></p><p> string ss::randomExcs()</p><p> { int n=(1
14、+rand()%4)*2+1;</p><p> string expression(n,' ');</p><p> int left,right;</p><p><b> if(n<7)</b></p><p> {bool preIsDiv=false;</p><
15、;p> for(int k=0;k<=n-2;k++)</p><p> {expression[k]=getOd(preIsDiv);</p><p> expression[++k]=getOp(false);</p><p> preIsDiv=expression[k]=='/'?true:false;</p>
16、<p><b> }</b></p><p> expression[k]=getOd(preIsDiv);</p><p><b> }</b></p><p> else if(n==7)</p><p><b> {left=2;</b></
17、p><p> right=left+4;</p><p> expression[left]='(';</p><p> expression[right]=')';</p><p> expression[(left+right)/2]=getOp(false);</p><p>
18、 expression[left+1]=getOd(false);</p><p> bool preIsDiv=expression[(left+right)/2]=='/'?true:false;</p><p> expression[right-1]=getOd(preIsDiv);</p><p> string inner(exp
19、ression,left,right);</p><p> bool innerIsZero=fune(inner)==0?true:false;</p><p> preIsDiv=false;</p><p> for(int i=0;i<=left-2;i++)</p><p> {expression[i]=getOd(
20、preIsDiv);</p><p> expression[++i]=getOp(false);</p><p> preIsDiv=expression[i]=='/'?true:false;</p><p><b> }</b></p><p> expression[left-1]=get
21、Op(innerIsZero);</p><p> for(int j=right+1;j<=n-1;j++)</p><p> {expression[j]=getOp(false);</p><p> preIsDiv=expression[j]=='/'?true:false;</p><p> expre
22、ssion[++j]=getOd(preIsDiv);</p><p><b> }</b></p><p><b> }</b></p><p><b> else</b></p><p> {left=(1+rand()%2)*2;</p><p
23、> right=left+4;</p><p> expression[left]='(';</p><p> expression[right]=')';</p><p> expression[(left+right)/2]=getOp(false);</p><p> expression
24、[left+1]=getOd(false);</p><p> bool preIsDiv=expression[(left+right)/2]=='/'?true:false;</p><p> expression[right-1]=getOd(preIsDiv);</p><p> string inner(expression,left
25、,right);</p><p> bool innerIsZero=fune(inner)==0?true:false;</p><p> preIsDiv=false;</p><p> for(int i=0;i<=left-2;i++)</p><p> {expression[i]=getOd(preIsDiv);&l
26、t;/p><p> expression[++i]=getOp(false);</p><p> preIsDiv=expression[i]=='/'?true:false;</p><p><b> }</b></p><p> expression[left-1]=getOp(innerIsZe
27、ro);</p><p> for(int j=right+1;j<=n-1;j++)</p><p> {expression[j]=getOp(false);</p><p> preIsDiv=expression[j]=='/'?true:false;</p><p> expression[++j]=g
28、etOd(preIsDiv);</p><p><b> }</b></p><p><b> }</b></p><p> return expression;</p><p><b> }</b></p><p> char ss::get
29、Op(bool innerIsZero)</p><p> { char ops[]={'+','-','*','/'};</p><p> return innerIsZero?ops[rand()%3]:ops[rand()%4];</p><p><b> }</b>&
30、lt;/p><p> char ss::getOd(bool preIsDiv)</p><p> {char ods[]={'1','2','3','4','5','6','7','8','9','0'};</p>
31、<p> return preIsDiv?ods[rand()%9]:ods[rand()%10];</p><p><b> }</b></p><p> double fune(string st) //檢驗(yàn)括號(hào)內(nèi)的結(jié)果是否為0</p><p><b> {int a,b;</b></p
32、><p> char c[5];</p><p> memset(c,0,5);</p><p> strcpy(c,st.c_str());</p><p><b> a=c[1];</b></p><p><b> b=c[3];</b></p>&l
33、t;p> switch(c[2])</p><p> {case'+':return a+b;break;</p><p> case'-':return a-b;break;</p><p> case'*':return a*b;break;</p><p> default
34、:return a/b;break;</p><p><b> }}</b></p><p> void ceshi() //顯示表達(dá)式、用戶(hù)輸入及核對(duì)用戶(hù)答案</p><p> {srand((unsigned)time(NULL));</p><p><b> ss a;</b&
35、gt;</p><p><b> int n;</b></p><p> float num=0;</p><p> CalcInfixExp s; </p><p> double result,youresult,score; </p><p> string suanshi;<
36、;/p><p> cout<<"請(qǐng)輸入題數(shù):";</p><p><b> cin>>n;</b></p><p> for(int i=1;i<=n;i++)</p><p> {suanshi=a.randomExcs();</p><p>
37、; char p[100];</p><p> memset(p,0,100); </p><p> strcpy(p,suanshi.c_str());</p><p> cout<<suanshi<<"=?";</p><p> cin>>youresult;</p&
38、gt;<p> if (s.calc(result,p)) </p><p> if(youresult==result)</p><p> {cout<<"正確!"<<endl;</p><p><b> num++;}</b></p><p><
39、b> else</b></p><p> cout<<"錯(cuò)誤!正確答案為:"<<result<<endl;</p><p><b> }</b></p><p> score=num/n*100;</p><p> cout<<
40、;endl;</p><p> cout<<"您的成績(jī)?yōu)?"<<score<<endl;</p><p><b> }</b></p><p><b> 程序測(cè)試</b></p><p> 1.首次運(yùn)行設(shè)定題數(shù)為2進(jìn)行算術(shù)測(cè)試</
41、p><p> 2.輸入y繼續(xù)進(jìn)行測(cè)試,這次輸入的題數(shù)為3</p><p><b> 3.輸入n結(jié)束程序</b></p><p><b> 4.運(yùn)行結(jié)果分析</b></p><p> ?。?)每次測(cè)試出現(xiàn)的表達(dá)式項(xiàng)數(shù)不等,括號(hào)是否出現(xiàn)和出現(xiàn)的位置符合隨機(jī)的要求;</p><p&g
42、t; (2)測(cè)試過(guò)程中并未出現(xiàn)表達(dá)式不合法的情況,表明程序中對(duì)表達(dá)式合法性檢驗(yàn)是正確的;</p><p> (3)能準(zhǔn)確核對(duì)用戶(hù)答案并正確顯示用戶(hù)成績(jī),但成績(jī)的小數(shù)位數(shù)保留處理稍顯不足。</p><p><b> 5.改進(jìn)算法</b></p><p> 在程序中包含頭文件#include<iomanip>,改輸出代碼為:co
43、ut<<"您的成績(jī)?yōu)?"<<setprecision(3)<<score<<endl;并再次調(diào)試檢驗(yàn)</p><p><b> 總結(jié)</b></p><p> 課程設(shè)計(jì)的目的是培養(yǎng)應(yīng)用《數(shù)據(jù)結(jié)構(gòu)》設(shè)計(jì)方法及思想解決實(shí)際問(wèn)題的能力,掌握使用數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)方法和思想,數(shù)據(jù)結(jié)構(gòu)是實(shí)踐性很強(qiáng)的課程。課程設(shè)
溫馨提示
- 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ù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- c語(yǔ)言課程設(shè)計(jì)報(bào)告--小學(xué)算術(shù)運(yùn)算測(cè)試
- c語(yǔ)言課程設(shè)計(jì)報(bào)告---小學(xué)算術(shù)運(yùn)算測(cè)試
- c語(yǔ)言課程設(shè)計(jì)報(bào)告(算術(shù)練習(xí))
- c語(yǔ)言課程設(shè)計(jì)報(bào)---小學(xué)算術(shù)運(yùn)算測(cè)試
- 軟件測(cè)試課程設(shè)計(jì)報(bào)告-計(jì)算器程序測(cè)試
- 小學(xué)算術(shù)課程設(shè)計(jì)
- 課程設(shè)計(jì)--設(shè)計(jì)一個(gè)小學(xué)算術(shù)運(yùn)算測(cè)試軟件
- 算術(shù)表達(dá)式求值演示-課程設(shè)計(jì)報(bào)告
- 程序設(shè)計(jì)課程設(shè)計(jì)報(bào)告
- 程序設(shè)計(jì)課程設(shè)計(jì)報(bào)告
- 簡(jiǎn)單畫(huà)圖程序課程設(shè)計(jì)報(bào)告
- 算術(shù)表達(dá)式求值課程設(shè)計(jì)
- 面向?qū)ο蟪绦蛘n程設(shè)計(jì)報(bào)告
- 簡(jiǎn)單畫(huà)圖程序課程設(shè)計(jì)報(bào)告
- 《java程序設(shè)計(jì)》課程設(shè)計(jì)報(bào)告
- web程序設(shè)計(jì)課程設(shè)計(jì)報(bào)告
- 軟件測(cè)試課程設(shè)計(jì)報(bào)告
- linux程序設(shè)計(jì)課程設(shè)計(jì)報(bào)告
- c課程設(shè)計(jì)報(bào)告-- windows程序設(shè)計(jì)報(bào)告
- java課程設(shè)計(jì)-- 打字速度測(cè)試程序
評(píng)論
0/150
提交評(píng)論