算術測試程序課程設計報告_第1頁
已閱讀1頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  課程設計報告</b></p><p>  題目:算術題測試程序</p><p><b>  學生姓名:____</b></p><p>  學 號:_________</p><p>  班 級: ___ _</p><p>  指

2、導教師:____ _</p><p><b>  年 月 日</b></p><p><b>  需求分析說明</b></p><p><b>  設計目的 </b></p><p>  掌握棧的存儲結構。 </p><p>  掌握?;静僮鞯?/p>

3、實現(xiàn)。 </p><p>  能引用棧解決相關的實際問題。 </p><p>  程序最終需要完成的具體功能</p><p>  能隨機出題,題數(shù)由用戶輸入確定,算術題包括加減乘除四則運算,表達式項數(shù)應不限,可以包含括號;</p><p>  需要進行表達式的合法性驗證;</p><p><b>  用戶交互

4、輸入答案;</b></p><p>  計算機核對用戶答案;</p><p>  能對用戶的測試評分;</p><p>  實現(xiàn)多用戶系統(tǒng),并對用戶的用戶名和得分保存到文件,此功能選作。</p><p><b>  設計要求</b></p><p>  (1)要求用面向對象程序設計思想

5、實現(xiàn);</p><p>  (2)系統(tǒng)具有一定的容錯性;</p><p> ?。?)要求具有較好的交互性。</p><p><b>  總體設計</b></p><p>  該程序大致由兩大部分構成。第一部分為界面部分,用來實現(xiàn)簡單的人機交互,控制程序的整體進程;第二部分為功能實現(xiàn)部分,用來實現(xiàn)各個功能模塊。</p

6、><p><b>  框圖說明</b></p><p><b>  詳細設計</b></p><p>  隨機出題,題數(shù)由用戶輸入確定,算術題包括加減乘除四則運算,表達式項數(shù)不限,可以包含括號</p><p>  設計一個表達式類class ss,該類中包含了表達式(字符串型)產生函數(shù)string ra

7、ndomExcs()、操作數(shù)獲取函數(shù)char getOd(bool preIsDiv)以及運算符獲取函數(shù)char getOp(bool innerIsZero),其中表達式產生函數(shù)又用到了隨機數(shù)產生函數(shù)rand()以實現(xiàn)隨機產生的表達式項數(shù)不固定,括號是否出現(xiàn)以及括號位置隨機的功能。該功能用來實現(xiàn)待用戶輸入題數(shù)之后,程序立即隨機產生對應數(shù)量的表達式供用戶測試。</p><p><b>  表達式的合法性

8、驗證</b></p><p>  此功能包含在上述表達式類當中,該類中包含的操作數(shù)和運算符獲取函數(shù)char getOd(bool preIsDiv)、char getOp(bool innerIsZero)中分別用到了兩個bool型參數(shù)bool preIsDiv和bool innerIsZero,當獲取操作數(shù)時必須檢驗該數(shù)之前是否有除號,當獲取運算符時必須檢驗該符號之后是否是0,另外該類之外還定義了一

9、個函數(shù)double fune(string st)用來檢驗括號內的結果是否為0。該功能用來保證隨機出現(xiàn)的表達式必須是合法的。</p><p><b>  用戶交互輸入答案</b></p><p>  該功能在測試函數(shù)void ceshi()部分實現(xiàn),該函數(shù)當中定義了一個double型變量double youresult當表達式顯示在屏幕上等待用戶輸入答案時,用戶便可輸

10、入自己的答案(youresult)進行測試。</p><p><b>  計算機核對用戶答案</b></p><p>  該功能也在測試函數(shù)void ceshi()得到實現(xiàn),該函數(shù)中定義了一個double型變量double result當用戶輸入答案(youresult)后,程序立即判斷用戶的答案(youresult)是否等于表達式的正確結果result。如果相等則顯

11、示“正確”,否則顯示“計算錯誤!”并顯示正確值。</p><p><b>  對用戶的測試評分</b></p><p>  該功能仍依靠測試函數(shù)void ceshi()實現(xiàn),函數(shù)中定義一個計數(shù)變量float num,并賦初值0,每當用戶答對一道題便自加1,最后循環(huán)結束時用num除以總題數(shù)乘上100便得到用戶的最終得分。測試結束后,系統(tǒng)會提示是否繼續(xù)進行測試,如果想繼續(xù)

12、輸入題數(shù)就輸入y,否則輸入n退出程序。</p><p><b>  實現(xiàn)部分</b></p><p>  class ss //表達式類的定義以及各成員函數(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) //檢驗括號內的結果是否為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() //顯示表達式、用戶輸入及核對用戶答案</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<<"請輸入題數(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<<"錯誤!正確答案為:"<<result<<endl;</p><p><b>  }</b></p><p>  score=num/n*100;</p><p>  cout<<

40、;endl;</p><p>  cout<<"您的成績?yōu)?"<<score<<endl;</p><p><b>  }</b></p><p><b>  程序測試</b></p><p>  1.首次運行設定題數(shù)為2進行算術測試</

41、p><p>  2.輸入y繼續(xù)進行測試,這次輸入的題數(shù)為3</p><p><b>  3.輸入n結束程序</b></p><p><b>  4.運行結果分析</b></p><p>  (1)每次測試出現(xiàn)的表達式項數(shù)不等,括號是否出現(xiàn)和出現(xiàn)的位置符合隨機的要求;</p><p&g

42、t; ?。?)測試過程中并未出現(xiàn)表達式不合法的情況,表明程序中對表達式合法性檢驗是正確的;</p><p>  (3)能準確核對用戶答案并正確顯示用戶成績,但成績的小數(shù)位數(shù)保留處理稍顯不足。</p><p><b>  5.改進算法</b></p><p>  在程序中包含頭文件#include<iomanip>,改輸出代碼為:co

43、ut<<"您的成績?yōu)?"<<setprecision(3)<<score<<endl;并再次調試檢驗</p><p><b>  總結</b></p><p>  課程設計的目的是培養(yǎng)應用《數(shù)據(jù)結構》設計方法及思想解決實際問題的能力,掌握使用數(shù)據(jù)結構的設計方法和思想,數(shù)據(jù)結構是實踐性很強的課程。課程設

溫馨提示

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

評論

0/150

提交評論