c++課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告--求解方程_第1頁(yè)
已閱讀1頁(yè),還剩6頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  C++課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告</p><p>  姓名 李然 學(xué)號(hào)0511590128 班級(jí)05115901 任課教師 肖亮 時(shí)間 9.24 </p><p>  教師指定題 3-5 求解方程 評(píng)定難易級(jí)別 A </p><p>  實(shí)驗(yàn)報(bào)告成績(jī) </p>&

2、lt;p><b>  .實(shí)驗(yàn)內(nèi)容:</b></p><p>  1.1 程序功能介紹</p><p>  用因式分解的方法求解方程ax^n+bx^(n-1)+ ……+cx+k的根。方法是根據(jù)方程的第一項(xiàng)與最后一項(xiàng)(常數(shù)項(xiàng)),求解方程的一個(gè)根。具體做法是:a是一個(gè)能整除第一項(xiàng)系數(shù)的整數(shù),k是一個(gè)能整除常數(shù)項(xiàng)的數(shù),將所有的(k/a)代入方程,檢驗(yàn)是否為方程的根,如果

3、是,則把方程除以(x-k/a)得到新方程,即降階。對(duì)新方程重復(fù)以上步驟,直到首項(xiàng)為x^2,再利用二次方程的算法求解出方程的實(shí)根或虛根。</p><p>  1.2 程序設(shè)計(jì)要求</p><p> ?。?)定義一個(gè)方程類,將與方程有關(guān)的數(shù)據(jù)和操作封裝到類中,并改寫主程序結(jié)構(gòu),使程序可以反復(fù)運(yùn)行。</p><p> ?。?)擴(kuò)充其功能,使該程序能求解冪n=6或更高次冪,

4、也可求解線性方程。</p><p> ?。?)增加功能,使程序既可以從鍵盤中讀入方程,也可以由文件中讀入方程。</p><p>  2.源程序結(jié)構(gòu)流程框圖與說(shuō)明(含新增子函數(shù)的結(jié)構(gòu)框圖)</p><p><b>  3.基本數(shù)據(jù)結(jié)構(gòu)</b></p><p>  class Equ{ //方程的類</p>

5、<p>  char terms[100][40]; //每一項(xiàng)數(shù)的指針 </p><p>  char equ[5000]; //方程</p><p>  int n,numbers; //n為方程的階數(shù),numbers為方程的項(xiàng)數(shù)</p><p><b>  public:</b></p><

6、;p>  Equ(char*); //構(gòu)造函數(shù)</p><p>  void InputFromFile(); //從文件輸入方程</p><p>  void getfactorsof(int *factor_list,int &num,int val);//將val項(xiàng)的整數(shù)因子放入數(shù)組factor_list中</p><p>  vo

7、id getterm(char *src,char *dest,int &loc);//從字符串scr的第loc個(gè)字符起復(fù)制一個(gè)完整的項(xiàng)到字符串</p><p>  void reduceequbyfactor(char *base,char *newequ,float factor);//降階</p><p>  void gettermforpower(char *equ,ch

8、ar *dest,int power);//將階數(shù)為power的項(xiàng)數(shù)復(fù)制到dest</p><p>  int getcoeff(char *term); //返回一項(xiàng)的系數(shù)</p><p>  float getcoeff_f(char *term); //取得一項(xiàng)的系數(shù)</p><p>  int getdegreeofterm(char *ter

9、m); //返回term這項(xiàng)的x的階數(shù) </p><p>  int remaindertheorem(char *equ,float root); //判斷root是否為方程的解 ,不是返回1</p><p>  int exp(int,int); //求解val的e次冪</p><p>  float exp(float val,int e);

10、 //求解val的e次冪</p><p>  float forallfactors(int *a,int *k,int n_a,int n_k,char *equ); //驗(yàn)根 </p><p>  float calcequval(char*,float); //得出val代入x后該項(xiàng)的數(shù)值 </p><p>  void qiujie()

11、; //主要操作過(guò)程</p><p>  void quadraticequation(int a,int b,int c);//求解一元二次方程</p><p>  void qiuyicifangcheng(int b,int c); //求解線性方程</p><p>  void qiulingcifangcheng(char *t) //

12、求解0次方程</p><p><b>  {</b></p><p>  if(t[0]=='0'&&t[1]=='\0') //若方程為0=0,解為全體實(shí)數(shù)</p><p>  cout<<"全體實(shí)數(shù)!"<<endl;</p>&

13、lt;p>  else cout<<"無(wú)解!"<<endl; //若方程為一個(gè)非零常數(shù)等于零,無(wú)解</p><p><b>  }</b></p><p><b>  };</b></p><p>  4.程序運(yùn)行結(jié)果界面 </p><p>&

14、lt;b>  圖1. 初始界面</b></p><p><b>  圖2. 運(yùn)行界面</b></p><p>  5. 課程設(shè)計(jì)遇到的技術(shù)問(wèn)題與解決思路</p><p>  問(wèn)題1: 該程序設(shè)計(jì)的關(guān)鍵是將算法推廣,原程序只適用于求x?5階數(shù)的方程,現(xiàn)在要求能求解冪n=6或更高次冪。</p><p> 

15、 解決辦法: 將原程序中用于放置x的項(xiàng)數(shù)的數(shù)組terms和方程解的固定數(shù)組roots該成動(dòng)態(tài)數(shù)組,即根據(jù)輸入方程項(xiàng)數(shù)的最高階來(lái)決定具體的數(shù)組維數(shù),需要在輸入方程后進(jìn)行判斷。這一部分的代碼如下:</p><p>  if(strchr(ex,'x')!=NULL){ </p><p>  if(strchr(ex,'^')!=NULL){ </p>

16、<p>  for(int i=0;ex[i]!='^';i++); //跳過(guò)第一項(xiàng)的系數(shù)、x和`^`,找到`^` 后的字符,即為階數(shù)最高項(xiàng)的階數(shù) </p><p><b>  i++;</b></p><p>  n=(int

17、(ex[i]-'0')) //將字符轉(zhuǎn)化為數(shù)值,即最高階項(xiàng)階數(shù),將值賦給n</p><p><b>  }</b></p><p><b>  else</b></p><p>  n=1; //方程里沒有字符`^`,方程為一次,即n=1</p><p><b>

18、  }</b></p><p><b>  else</b></p><p>  n=0; //方程里沒有x,方程為0次,即n=0</p><p>  要求還要求解線性方程,這部分主要是在求解一元二次方程時(shí)實(shí)現(xiàn)的,代碼如下:</p><p>  void Equ::qiuyicifangcheng(in

19、t b,int c)</p><p><b>  {</b></p><p>  cout<<-(float)c/(float)b<<endl;</p><p><b>  } </b></p><p>  函數(shù)調(diào)用時(shí)b和c的值通過(guò)求系數(shù)的函數(shù)確定</p>&

20、lt;p>  問(wèn)題2:文件中讀取方程</p><p>  解決辦法:從眾多C++書中讀取相關(guān)資料并找到如下程序:</p><p>  從文件輸入:void:InputFromFile()</p><p><b>  {</b></p><p>  ifstream ins;char equation[256];co

21、ut<<"請(qǐng)輸入文件名: "<<endl;cin>>equation;</p><p>  ins.open(equation,ios::in|ios::nocreate);</p><p>  if(ins.fail())</p><p><b>  {</b></p>&

22、lt;p>  cerr<<"該文件不存在!"<<endl;</p><p>  system("pause");exit(1);</p><p><b>  }</b></p><p>  for(int i=0; i<(n+1)&&equ[loc]!=

23、'='&&equ[loc]!='\0'&&equ[loc]!='\n';i++)</p><p>  getterm (equ,terms[i],loc);numbers=i; </p><p>  ins.close();}</p><p><b>  }</b>

24、</p><p>  經(jīng)過(guò)幾天的研究,程序終于像一座冰山一樣開始慢慢融化,終于明白了程序的大體意思,但是有幾個(gè)函數(shù)是從來(lái)沒用過(guò)的,所以設(shè)計(jì)思路卻是一團(tuán)亂麻,不知道應(yīng)該從何處下手,經(jīng)過(guò)幾天的苦思冥想,進(jìn)展還是不大,只能向老師和同學(xué)請(qǐng)教,有時(shí)間就到圖書館去,那里有許多c++的參考書,我邊看書邊做。好不容易程序做出來(lái)一點(diǎn)頭緒,不過(guò)這個(gè)程序還真是困難重重。通過(guò)這次課程設(shè)計(jì),我學(xué)到了許多課本上學(xué)不到的知識(shí)。更加鍛煉了我的毅

溫馨提示

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

評(píng)論

0/150

提交評(píng)論