用MFC繪制各種數(shù)學(xué)圖形,如sin,cos等_第1頁(yè)
用MFC繪制各種數(shù)學(xué)圖形,如sin,cos等_第2頁(yè)
用MFC繪制各種數(shù)學(xué)圖形,如sin,cos等_第3頁(yè)
用MFC繪制各種數(shù)學(xué)圖形,如sin,cos等_第4頁(yè)
用MFC繪制各種數(shù)學(xué)圖形,如sin,cos等_第5頁(yè)
已閱讀5頁(yè),還剩20頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、*理工大學(xué)C+面向?qū)ο笳n程設(shè)計(jì)報(bào)告院(系): 計(jì)算機(jī)工程學(xué)院 專業(yè): 計(jì)算機(jī)科學(xué)與技術(shù) 學(xué)生姓名: * 班級(jí) 計(jì)算111 學(xué)號(hào): 2011070* 題目: 設(shè)計(jì)繪制各種數(shù)學(xué)圖形程序 起迄日期: 2013.6.232013.7.5 設(shè)計(jì)地點(diǎn): 計(jì)算機(jī)學(xué)院機(jī)房 指 導(dǎo) 教 師: * 完成日期: 2013 年7月 5 日目錄一、需求分析1 選做此課題的目的.32 程序所實(shí)現(xiàn)的功能.3二、 設(shè)計(jì)內(nèi)容1 模塊圖.32 主程序及其主要模塊的流程圖.33 類圖.4 3.1表達(dá)式.4 3.2 儲(chǔ)存運(yùn)算符的棧.5 3.3儲(chǔ)存運(yùn)算數(shù)的棧.5 3.4 圓.5 3.5 橢圓.6 3.6 三葉玫瑰線.6 3.7 四葉玫

2、瑰線.7 3.8 阿基米德螺線.7 3.9 心形線.74 函數(shù)關(guān)系圖.85 編寫程序代碼.9三、 調(diào)試分析1 實(shí)際完成的情況說明.122 程序的性能分析.123 上機(jī)過程中出現(xiàn)的問題及其解決方案.124 程序中可以改進(jìn)的地方說明.13四、 用戶手冊(cè).13五、 設(shè)計(jì)總結(jié).15六、 參考文獻(xiàn).15七、 附錄.151、 需求分析1. 選作此課題的目的在日常生活中我們常常需要解決一些復(fù)雜的數(shù)學(xué)問題,而這些數(shù)學(xué)問題的解答往往可以從它的函數(shù)圖形上很直觀、明了的表現(xiàn)出來(lái),這時(shí)快捷方便的繪制出該數(shù)學(xué)函數(shù)的圖形就顯得尤為重要。所以我們使用Microsoft提供的MFC類庫(kù)來(lái)實(shí)現(xiàn)數(shù)學(xué)函數(shù)圖形的繪制。2 .程序所實(shí)

3、現(xiàn)的功能本程序支持用戶輸入一般表達(dá)式,然后輸出其對(duì)應(yīng)的函數(shù)圖形,例如:一次(二次)函數(shù),三角函數(shù),雙曲余弦,雙曲正弦,雙曲正切,冪函數(shù),指數(shù)函數(shù)(以10為底,以e為底)。另外,還支持一些供選擇的數(shù)學(xué)圖形,例如:圓,橢圓,三葉玫瑰線,四葉玫瑰線,阿基米德螺線,心形線。2、 設(shè)計(jì)內(nèi)容1. 模塊圖主界面表達(dá)式特殊數(shù)學(xué)圖形阿基米德螺線三葉玫瑰線圓心形線四葉玫瑰線橢圓2. 主程序及主要模塊的流程圖開始選擇圖形類型No確定Yes輸入表達(dá)式或參數(shù)圖形結(jié)束3.類圖3.1 表達(dá)式CGraphDlgpublic:double Pow(double ,double ); /冪函數(shù)求值double Operate(d

4、ouble ,char ,double ); /表達(dá)式求值char Precede(char ,char); /判斷操作符優(yōu)先級(jí)int In(char ); /判斷運(yùn)算數(shù)和運(yùn)算符void Coordinate(); /求點(diǎn)的集合double Calculate(CString ,double);CGraphDlg(CWnd* pParent = NULL);enum IDD = IDD_GRAPH_DIALOG ;protected:Virtual void DoDataExchange(CDataExchange* pDX);private: ICON m_hIcon;UINT m_num;

5、 /點(diǎn)的數(shù)量char *m_stop;CPtrArray m_ptrarray; /點(diǎn)的集合變量CComboBoxm_type; /圖形類型CString m_expression; /表達(dá)式3.2存儲(chǔ)運(yùn)算符的棧OPTRpublic:OPTR(); /缺省構(gòu)造函數(shù)int InitOPTR(); /構(gòu)造一個(gè)空棧char GetTop(); /返回棧頂元素int Push(char e); /進(jìn)棧char Pop(); /出棧virtual OPTR(); /析構(gòu)函數(shù)Public: char *base; /棧底指針char *top; /棧頂指針int size; /當(dāng)前已分配的存儲(chǔ)空間3.3存

6、儲(chǔ)運(yùn)算數(shù)的棧OPNDpublic:OPND(); /缺省構(gòu)造函數(shù)int InitOPND(); /構(gòu)造一個(gè)空棧double GetTop(); /返回棧頂元素int Push(double e); /進(jìn)棧double Pop(); /出棧virtual OPND(); /析構(gòu)函數(shù)Public: double *base; /棧底指針double *top; /棧頂指針int size; /當(dāng)前已分配的存儲(chǔ)空間3.4 圓circlepublic: afx_msg void OnChangeEdit1();afx_msg void OnChangeEdit2();afx_msg void OnCh

7、angeEdit3();afx_msg void OnButton1();circle(CWnd* pParent = NULL); enum IDD = IDD_DIALOG1 ;Public: doublem_x; /圓心橫坐標(biāo)doublem_y; /圓心縱坐標(biāo)doublem_r; /半徑 3.5橢圓ellipsepublic: afx_msg void OnChangeEdit1();afx_msg void OnChangeEdit2();afx_msg void OnChangeEdit3();afx_msg void OnChangeEdit4();afx_msg void OnB

8、utton1();ellipse(CWnd* pParent = NULL); enum IDD = IDD_DIALOG2 ;Public: doublem_x; /橢圓中心橫坐標(biāo)doublem_y; /橢圓中心縱坐標(biāo)doublem_lr; /長(zhǎng)軸doublem_sr; /短軸3.6 三葉玫瑰線sanyiepublic: afx_msg void OnChangeEdit1();afx_msg void OnChangeEdit2();afx_msg void OnButton1();sanyie(CWnd* pParent = NULL); enum IDD = IDD_DIALOG3 ;

9、Public: doublem_a; /系數(shù)adoublem_b; /角度3.7 四葉玫瑰線siyepublic: afx_msg void OnChangeEdit1();afx_msg void OnChangeEdit2();afx_msg void OnButton1();siye(CWnd* pParent = NULL);enum IDD = IDD_DIALOG4 ;Public: doublem_a; /系數(shù)adoublem_b; /角度3.8 阿基米德螺線ajimidepublic: afx_msg void OnChangeEdit1();afx_msg void OnBu

10、tton1();ajimide(CWnd* pParent = NULL);enum IDD = IDD_DIALOG5 ;Public: doublem_a; /系數(shù)adoublem_b; /角度3.9 心形線xinxingxianpublic: afx_msg void OnChangeEdit1();afx_msg void OnButton1();xinxingxian(CWnd* pParent = NULL);enum IDD = IDD_DIALOG6 ;Public: doublem_a; /系數(shù)a(箭頭代表調(diào)用)CGraphDlg:OnButton1()4. 函數(shù)關(guān)系圖 CG

11、raphDlg:OnDrawing()類ajimide類sanyie類circle類siye類xinxingxian類ellipseCGraphDlg:Coordinate()circle:OnButton1() sanyie:OnButton1() CGraphDlg:Calculate(CString m_expression,double x)ellipse:OnButton1() xinxingxian:OnButton1() siye:OnButton1() ajimide:OnButton1()OPND:Push(double e)OPND:GetTop()OPND:InitOPN

12、D()OPTR:GetTop()OPTR:InitOPTR()OPND:Pop()OPTR:GetTop()OPTR:Push(char )CGraphDlg:In(char ch)CGraphDlg:Precede(char s,char c)CGraphDlg:Operate(double,char,double )CGraphDlg:Pow(double, double )5. 編寫程序代碼 1畫坐標(biāo)軸CClientDC dc(this);CRect rect; GetClientRect(&rect) ; dc.SetMapMode(MM_LOMETRIC) ; /設(shè)置映射模式

13、;dc.SetWindowOrg(0,0) ; /設(shè)置屏幕窗口原點(diǎn);dc.SetViewportOrg(CPoint(rect.right/2,rect.bottom/2) ; /設(shè)置視口原點(diǎn)CPen pen1(PS_DOT,1,RGB(100,100,100); /創(chuàng)建筆,并調(diào)整坐標(biāo)顏色CPen *pOldPen = dc.SelectObject(&pen1); /更改筆并保存舊的筆for(int i=-900;i<=900;i+=50) dc.MoveTo (i,500); dc.LineTo (i,-500); for(int j=-500;j<=500;j+=50

14、)dc.MoveTo (-900,j); dc.LineTo (900,j); dc.TextOut (10,500,'y'); /標(biāo)記y軸dc.TextOut (870,0,'x'); /標(biāo)記x軸dc.TextOut (0,0,'0'); /標(biāo)記坐標(biāo)原點(diǎn)dc.TextOut (-8,510,'');dc.TextOut (900,25,'>');CPen pen(PS_SOLID,1,RGB(0,0,0);/創(chuàng)建筆,并調(diào)整坐標(biāo)顏色pOldPen = dc.SelectObject(&pen);/更改

15、筆并保存舊的筆dc.MoveTo (-900,0); /橫坐標(biāo)dc.LineTo (900,0); dc.MoveTo (0,-500); /縱坐標(biāo)dc.LineTo (0,500);2. 選擇圖形類型 /默認(rèn)是表達(dá)式 RedrawWindow();m_expression=""UpdateData(FALSE);CString text;m_type.GetWindowText(text);if(text="圓")circle d_circle; d_circle.DoModal(); /顯示畫圓的對(duì)話框else if(text="橢圓&qu

16、ot;)ellipse d_ellipse;d_ellipse.DoModal(); /顯示畫橢圓的對(duì)話框else if(text="三葉玫瑰線")sanyie d_sanyie;d_sanyie.DoModal(); /顯示畫三葉玫瑰線的對(duì)話框else if(text="四葉玫瑰線")siye d_siye;d_siye.DoModal(); /顯示畫四葉玫瑰線的對(duì)話框else if(text="阿基米德螺線")ajimide d_ajimide;d_ajimide.DoModal(); /顯示畫阿基米德螺線的對(duì)話框else if(

17、text="心形線")xinxingxian d_xinxingxian;d_xinxingxian.DoModal(); /顯示畫心形線的對(duì)話框3. 根據(jù)表達(dá)式畫出圖形for(m_num-=1;m_num>0;m_num-) /從點(diǎn)集合中依次取出點(diǎn)并且相連dc.MoveTo (CPoint *)m_ptrarray.GetAt(m_num)->x, (CPoint *)m_ptrarray.GetAt(m_num)->y);dc.LineTo (CPoint *)m_ptrarray.GetAt(m_num-1)->x, (CPoint *)m_p

18、trarray.GetAt(m_num-1)->y);4. 畫圓dc.Ellipse(m_x-m_r)*50,(m_y+m_r)*50,(m_x+m_r)*50,(m_y-m_r)*50); /調(diào)用Ellipse函數(shù)5. 畫橢圓dc.Ellipse(m_x-m_lr)*50,(m_y+m_sr)*50,(m_x+m_lr)*50,(m_y-m_sr)*50); /調(diào)用Ellipse函數(shù)6. 畫三葉玫瑰線double x=0,y=0;dc.MoveTo (0,0); /從原點(diǎn)開始畫for(double p=-3.14;p<=3.14;p+=0.01) /計(jì)算點(diǎn)的同時(shí)畫線x=m_a*c

19、os(3*(m_b+p)*cos(p);y=m_a*cos(3*(m_b+p)*sin(p);dc.LineTo(50*x,50*y);dc.MoveTo(50*x,50*y); dc.SelectObject(&pen);7. 畫四葉玫瑰線double x=0,y=0;dc.MoveTo (0,0); /從原點(diǎn)開始畫for(double p=-3.14;p<=3.14;p+=0.01) /計(jì)算點(diǎn)的同時(shí)畫線x=m_a*sin(2*(m_b+p)*cos(p);y=m_a*sin(2*(m_b+p)*sin(p);dc.LineTo(50*x,50*y);dc.MoveTo(50*

20、x,50*y); dc.SelectObject(&pen);8. 畫阿基米德螺線double p=-10;double x=0,y=0;x=m_a*p*cos(p);y=m_a*p*sin(p);dc.MoveTo (x*20,20*y);for( p=-10;p<=10;p+=0.01) /計(jì)算點(diǎn)的同時(shí)畫線x=m_a*p*cos(p);y=m_a*p*sin(p);dc.LineTo(20*x,20*y);dc.MoveTo(20*x,20*y); dc.SelectObject(&pen);9. 畫心形線double x=0,y=0;dc.MoveTo (0,0);

21、 /從原點(diǎn)開始畫for(double p=-3.14;p<=3.14;p+=0.01) /計(jì)算點(diǎn)的同時(shí)畫線x=m_a*(1-cos(p)*cos(p);y=m_a*(1-cos(p)*sin(p);dc.LineTo(50*x,50*y);dc.MoveTo(50*x,50*y); dc.SelectObject(&pen);3、 調(diào)試分析1. 實(shí)際完成的情況說明(完成的功能、支持的數(shù)據(jù)類型等) 本程序支持用戶選擇數(shù)學(xué)圖形類型并輸入相應(yīng)的參數(shù),然后輸出其對(duì)應(yīng)的函數(shù)圖形。當(dāng)選擇表達(dá)式時(shí),用戶輸入表達(dá)式,例如:一次(二次)函數(shù),三角函數(shù),雙曲余弦,雙曲正弦,雙曲正切,冪函數(shù),指數(shù)函數(shù)

22、(以10為底,以e為底),點(diǎn)擊圖形按鈕輸出圖形。當(dāng)選擇的數(shù)學(xué)圖形時(shí),例如:圓,橢圓,三葉玫瑰線,四葉玫瑰線,阿基米德螺線,心形線,彈出其對(duì)應(yīng)的對(duì)話框,用戶輸入?yún)?shù),點(diǎn)擊畫圖按鈕輸出圖形。此程序輸入的參數(shù)可以是int類型,也可以是double類型。2. 程序的性能分析本程序中為不同的數(shù)學(xué)圖形定義了相應(yīng)的對(duì)話框,運(yùn)行程序時(shí)選擇不同的圖形對(duì)應(yīng)不同的對(duì)話框,使程序更加清晰明了。本程序根據(jù)不同的圖形建立了不同的類,這樣保證程序的封裝性。而且,這樣使程序便于閱讀。3. 上機(jī)過程中出現(xiàn)的問題及其解決方案在類CGraphaelDlg中調(diào)用類OPTR和類OPNE中的函數(shù)時(shí)編譯出錯(cuò)。解決方案:在類CGraphDl

23、g的添加OPTR和OPND的頭文件。在coordinate()定義Cpoint point2000并將其地址保存到變量m_ptrarray中,點(diǎn)擊畫圖按鈕調(diào)用Ondrawing()函數(shù),結(jié)果沒有圖形輸出。解決方案:coordinate()定義Cpoint point2000,在函數(shù)coordinate()結(jié)束前point的內(nèi)存被釋放,所以數(shù)組沒有被保存。應(yīng)該采用new進(jìn)行如下定義Cpoint *point;point=new CPoint2000;使用sin,cos等數(shù)學(xué)函數(shù)時(shí),提示未定義。解決方案:將頭文件“math.h”包含到程序中。在調(diào)用OPTR和OPND的pop()函數(shù),push()函

24、數(shù),gettop()函數(shù)時(shí),程序中止運(yùn)行。解決方案:在使用棧之前應(yīng)按分解先調(diào)用InitOPTR()函數(shù)和InitOPND()函數(shù)定義兩個(gè)空棧。使用頭文件“math.h”中的pow(double a,double b)函數(shù)時(shí),輸出有誤。解決方案:當(dāng)b為負(fù)數(shù)時(shí),pow(double a,double b)的計(jì)算結(jié)果是一個(gè)復(fù)數(shù),所以輸出有誤。自己定義一個(gè)Pow(double a,double b)函數(shù),對(duì)b進(jìn)行判斷,當(dāng)b是負(fù)數(shù)時(shí)取pow(a,-b)的倒數(shù)。4. 程序中可以改進(jìn)的地方說明以及可以擴(kuò)充的功能本程序不支持自加自減運(yùn)算,所以可以增加此項(xiàng)功能。本程序在畫指數(shù)圖形時(shí),僅僅支持以e為底和以10為底

25、的指數(shù)函數(shù)??梢詳U(kuò)展一下指數(shù)函數(shù)的功能。本程序的運(yùn)行界面太單調(diào),可以改變一下背景圖片,增加用戶使用時(shí)的舒適度。本程序不支持用戶改變線條類型,線條顏色。為了適應(yīng)不同的用戶,這方面需要改進(jìn)。4、 用戶手冊(cè)第一步:選擇所要繪制圖形的類型,點(diǎn)擊“確定”按鈕,如圖選擇“表達(dá)式”第二步:如果第一步選擇表達(dá)式,則在右邊的編輯框中輸入表達(dá)式,然后點(diǎn)擊“畫圖”按鈕即可。如果第一步選擇其他類型,例如“心形線”,則會(huì)彈出相應(yīng)的對(duì)話框,輸入相應(yīng)的參數(shù),然后點(diǎn)擊“圖形”按鈕即可,如下圖:第三步:點(diǎn)擊“退出”按鈕,回到初始界面,然后點(diǎn)擊”X”號(hào)退出程序。5、 設(shè)計(jì)總結(jié) 通過兩周對(duì)C+面向?qū)ο蟪绦蛟O(shè)計(jì)的課程設(shè)計(jì)(繪制各種數(shù)

26、學(xué)圖形)的研究主要有以下幾點(diǎn)感受:首先,C+面向?qū)ο蟪绦蛟O(shè)計(jì)課程設(shè)計(jì)很好的反映了自己這一學(xué)期對(duì)C+面向?qū)ο蟪绦蛟O(shè)計(jì)基礎(chǔ)知識(shí)的掌握情況,讓自己清醒的認(rèn)識(shí)到自己的真實(shí)水平。不動(dòng)手不知道,自己親自動(dòng)手設(shè)計(jì)程序時(shí)才感覺到知識(shí)的不扎實(shí)。有的知識(shí)雖然已經(jīng)學(xué)過,但是用起來(lái)還是感覺有點(diǎn)模糊,這也算是給自己的一個(gè)警醒吧。另外,剛開始學(xué)習(xí)MFC感覺很難,通過對(duì)在網(wǎng)上查找的視頻以及在學(xué)校圖書館借閱的有關(guān)圖書的學(xué)習(xí)漸漸地對(duì)MFC有了一個(gè)初步的認(rèn)識(shí),隨著課設(shè)的一點(diǎn)點(diǎn)深入,自己對(duì)MFC的掌握也越來(lái)越好,最后完成課設(shè)要求。這個(gè)過程不僅會(huì)拓寬自己的知識(shí)面,還會(huì)提高自己的自學(xué)能力。同時(shí),宿舍里的同學(xué)集體討論如何去實(shí)現(xiàn)各種功能,

27、各自發(fā)表看法彼此交流也是一種學(xué)習(xí)的過程。最深刻的感受就是編寫程序過程中的酸甜苦辣。剛開始構(gòu)思時(shí)漏洞百出,程序出錯(cuò)。但是令人高興的是通過不斷的調(diào)試程序,不斷的出錯(cuò),然后不斷的修改,從這過程中學(xué)到了一些調(diào)試程序的技巧。雖然有些語(yǔ)句沒有語(yǔ)法錯(cuò)誤,但是如果語(yǔ)句順序不對(duì)也會(huì)提示錯(cuò)誤 。經(jīng)過痛苦又快樂的調(diào)試過程之后,當(dāng)自己自如的運(yùn)行著程序時(shí)成就感十足?。☆D時(shí)感覺之前付出的一切值了,實(shí)在是值了??傊腋杏XC+面向?qū)ο蟪绦蛟O(shè)計(jì)課程設(shè)計(jì)在鍛煉我們查閱資料以及提高編程技巧方面很有用。課程設(shè)計(jì)提高了我們的動(dòng)手能力,我們能將課本上的死知識(shí)靈活地應(yīng)用到生活當(dāng)中,還有就是能夠感受到十足的成就感,增加學(xué)習(xí)專業(yè)課的興趣。6

28、、 參考文獻(xiàn)李蘭、任鳳華C+面向?qū)ο蟪绦蛟O(shè)計(jì)西安電子科技大學(xué)出版社姚領(lǐng)田、高守傳MFC窗口程序設(shè)計(jì)中國(guó)水利水電出版社吳乃玲、李海文C+程序設(shè)計(jì)實(shí)踐教程(第二版)高等教育出版社孫鑫 孫鑫C+教程7、 附錄1. 判斷運(yùn)算符和運(yùn)算數(shù)int CGraphDlg:In(char ch)if(ch='+'|ch='-'|ch='*'|ch='/'|ch='('|ch='#'|ch=')'|ch='s'|ch='c'| ch='t'|ch='

29、l'|ch='h'|ch='H'|ch='T'|ch='') /操作符return 1; else if(ch='0'|ch='1'|ch='2'|ch='3'|ch='4'|ch='5'| ch='6'|ch='7'|ch='8'|ch='9'|ch='x') /操作數(shù)return 2; else /非法操作符flag=3;return 3;2.

30、判斷運(yùn)算符優(yōu)先級(jí)char CGraphDlg:Precede(char s,char c)switch(s) case '+': case '-': if(c='+'|c='-') return '>' /先出現(xiàn)的+-優(yōu)先級(jí)大于相繼出現(xiàn)的+- else if(c='*'|c='/') return '<' /先出現(xiàn)的+-優(yōu)先級(jí)小于相繼出現(xiàn)的*/ else if(c='(') return '<' /先出現(xiàn)的+-優(yōu)先級(jí)小

31、于相繼出現(xiàn)的( else if(c=')') return '>' /先出現(xiàn)的+-優(yōu)先級(jí)大于相繼出現(xiàn)的) else if(c='s'|c='c'|c='t'|c='C'|c='l'|c='L'|c='h'|c='H'|c='T'|c='') return '<' /先出現(xiàn)的+-優(yōu)先級(jí)小于相繼出現(xiàn)的三角函數(shù) /指數(shù)、冪函數(shù)運(yùn)算符 else if(c='#') /表

32、達(dá)式結(jié)束標(biāo)志 return '>' case '*': case '/': if(c='+'|c='-') return '>' else if(c='*'|c='/') return '>' else if(c='(') return '<' else if(c=')') return '>' else if(c='s'|c='c&#

33、39;|c='t'|c='C'|c='l'|c='L'|c='h'|c='H'|c='T'|c='') return '<' else if(c='#') return '>' case '(': if(c='+'|c='-') return '<' else if(c='*'|c='/') return &

34、#39;<' else if(c='(') return '<' else if(c=')') return '=' else if(c='s'|c='c'|c='t'|c='C'|c='l'|c='L'|c='h'|c='H'|c='T'|c='') return '<' else if(c='#') return

35、 'E' case ')': if(c='+'|c='-') return '>' else if(c='*'|c='/') return '>' else if(c='(') return 'E' else if(c=')') return '>' else if(c='s'|c='c'|c='t'|c='C'|c=

36、9;l'|c='L'|c='h'|c='H'|c='T'|c='') return 'E' else if(c='#') return '>' case '#': /運(yùn)算符棧底元素,即表達(dá)式開始標(biāo)志 if(c='+'|c='-') return '<' else if(c='*'|c='/') return '<' else if(

37、c='(') return '<' else if(c=')') return 'E' else if(c='s'|c='c'|c='t'|c='C'|c='l'|c='L'|c='h'|c='H'|c='T'|c='') return '<' else if(c='#') return '='case '

38、s':case 'c':case 't':case 'C':case 'l':case 'L':case 'h':case 'H':case 'T': if(c='+'|c='-') return '>' else if(c='*'|c='/') return '>' else if(c='(') return '<'

39、; else if(c=')') return '>' else if(c='s'|c='c'|c='t'|c='C'|c='l'|c='L'|c='h'|c='H'|c='T') return 'E' else if(c='') return '<' else if(c='#') return '>'case '&

40、#39;: if(c='+'|c='-') return '>' else if(c='*'|c='/') return '>' else if(c='(') return '<' else if(c=')') return '>' else if(c='s'|c='c'|c='t'|c='C'|c='l'|c='L'

41、|c='h'|c='H'|c='T') return 'E' else if(c='') return '<' else if(c='#') return '>' default: break;return 'E' /錯(cuò)誤提示3. 根據(jù)運(yùn)算符優(yōu)先級(jí)進(jìn)行運(yùn)算符和運(yùn)算數(shù)進(jìn)棧、出棧、計(jì)算操作double CGraphDlg:Calculate(CString m_expression,double x)double a=0,b=0;char *p

42、,e;OPTR s; /定義OPND對(duì)象存放運(yùn)算符OPND q; /定義OPND對(duì)象存放運(yùn)算數(shù)s.InitOPTR (); /定義一個(gè)空棧q.InitOPND (); /定義一個(gè)空棧p=m_expression.GetBuffer (100); /將CString類型的表達(dá)式轉(zhuǎn)換成char *類型s.Push('#'); /將#進(jìn)棧作為表達(dá)式開始的標(biāo)志while(*p!='#'|s.GetTop()!='#') /當(dāng)棧底的#碰到棧頂?shù)?表示結(jié)束if(In(*p)=3) /非法操作符return 0;else if(In(*p)=2&&am

43、p;flag=0) /運(yùn)算數(shù)double A;if(*p='x')q.Push (x);p+;elseA=strtod(p,&m_stop); /提取表達(dá)式中的操作數(shù)q.Push (A);p=m_stop;elseswitch(Precede(s.GetTop(),*p) /判斷運(yùn)算符優(yōu)先級(jí)case '<': /當(dāng)前運(yùn)算符的優(yōu)先級(jí)低前一個(gè)運(yùn)算符,進(jìn)棧if(*p='s'&&*(p+1)='h') /運(yùn)算符雙曲正弦shs.Push ('h');p+;p+;break;else if(*p=

44、'c'&&*(p+1)='h') /運(yùn)算符雙曲余弦chs.Push ('H');p+;p+;break;else if(*p='t'&&*(p+1)='h') /運(yùn)算符雙曲正切ths.Push ('T');p+;p+;break;else if(*p='l'&&*(p+1)='n') /運(yùn)算符lns.Push ('l');p+;p+;break;else if(*p='l'&&am

45、p;*(p+1)='g') /運(yùn)算符lgs.Push ('L');p+;p+;break;else if(*p='c'&&*(p+1)='o'&&*(p+2)='t') /運(yùn)算符cots.Push ('C');p+;p+;p+;break;else if(*p='s'&&*(p+1)='i'&&*(p+2)='n'|*p='c'&&*(p+1)='o'&&*(p+2)='s'|*p='t'&&*(p+1)='a'&&*(p+2)='n') /運(yùn)算符sin,cos,tans.Push (*p);p+;p+;p+;break;else if(*p='('&&(*(p+1)='#'|*(p+1)='+'|*(p+1)='-'|*(p+1)='*'|*(p+1)='/'|*(p+1)=''|*(p

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)網(wǎng)僅提供信息存儲(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)論