版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(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è)方程類(lèi),將與方程有關(guān)的數(shù)據(jù)和操作封裝到類(lèi)中,并改寫(xiě)主程序結(jié)構(gòu),使程序可以反復(fù)運(yùn)行。</p><p> (2)擴(kuò)充其功能,使該程序能求解冪n=6或更高次冪,
4、也可求解線(xiàn)性方程。</p><p> ?。?)增加功能,使程序既可以從鍵盤(pán)中讀入方程,也可以由文件中讀入方程。</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{ //方程的類(lèi)</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); //求解線(xiàn)性方程</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; //方程里沒(méi)有字符`^`,方程為一次,即n=1</p><p><b>
18、 }</b></p><p><b> else</b></p><p> n=0; //方程里沒(méi)有x,方程為0次,即n=0</p><p> 要求還要求解線(xiàn)性方程,這部分主要是在求解一元二次方程時(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++書(shū)中讀取相關(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ò)幾天的研究,程序終于像一座冰山一樣開(kāi)始慢慢融化,終于明白了程序的大體意思,但是有幾個(gè)函數(shù)是從來(lái)沒(méi)用過(guò)的,所以設(shè)計(jì)思路卻是一團(tuán)亂麻,不知道應(yīng)該從何處下手,經(jīng)過(guò)幾天的苦思冥想,進(jìn)展還是不大,只能向老師和同學(xué)請(qǐng)教,有時(shí)間就到圖書(shū)館去,那里有許多c++的參考書(shū),我邊看書(shū)邊做。好不容易程序做出來(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)益歸上傳用戶(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++課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告--求解方程
- C++課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告--求解方程.doc
- c++課程設(shè)計(jì)——聊天程序?qū)嶒?yàn)報(bào)告
- c++課程設(shè)計(jì)——學(xué)籍管理系統(tǒng)實(shí)驗(yàn)報(bào)告
- c++課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告---字符串操作
- c++課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告---職工信息管理系統(tǒng)課程設(shè)計(jì)
- C++課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告---字符串操作.doc
- c++程序設(shè)計(jì)課程設(shè)計(jì) ----學(xué)生成績(jī)管理系統(tǒng)實(shí)驗(yàn)報(bào)告
- c++上機(jī)實(shí)驗(yàn)報(bào)告
- c++課程設(shè)計(jì)報(bào)告
- c語(yǔ)言課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告資料
- c++掃雷課程設(shè)計(jì)報(bào)告
- c語(yǔ)言圖形時(shí)鐘課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告
- 課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告
- 電子科大c++實(shí)驗(yàn)報(bào)告
- c++面向?qū)ο笳n程設(shè)計(jì)報(bào)告
- c++課程設(shè)計(jì)報(bào)告--幸運(yùn)52
- c++課程設(shè)計(jì)報(bào)告--幻方
- c++課程設(shè)計(jì)報(bào)告--坦克游戲
- c++推箱子課程設(shè)計(jì)報(bào)告
評(píng)論
0/150
提交評(píng)論