版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p><b> C++課程設(shè)計(jì)報(bào)告</b></p><p><b> ?。ㄔO(shè)計(jì)題目:)</b></p><p> 姓 名: **** </p><p> 學(xué) 號: ********* </p><p> 專 業(yè): ****
2、****** </p><p> 班 級: ******* </p><p> 指導(dǎo)老師: ***** </p><p><b> 200 年 月</b></p><p><b> 目錄</b></p><
3、;p> 課程設(shè)計(jì)目的……………………………………………………</p><p> 項(xiàng)目要求與簡介…………………………………………………</p><p> 系統(tǒng)分析…………………………………………………………</p><p> 3.1 系統(tǒng)功能結(jié)構(gòu)與模塊劃分………………………………….</p><p> 3.2 系統(tǒng)模塊圖…………
4、………………………………………….</p><p> 3.3 系統(tǒng)采用的關(guān)鍵(難點(diǎn))技術(shù)…………………………….</p><p> 3.4 主要類說明………………………………………………….</p><p> 測試運(yùn)行的結(jié)果………………………………………………….</p><p> 心得體會………………………………….……………………
5、…</p><p><b> 程序代碼清單</b></p><p> 參考書目…………………………………………………………</p><p><b> 1 課程設(shè)計(jì)目的</b></p><p> 目標(biāo)是使學(xué)生了解可視化程序設(shè)計(jì)語言的基礎(chǔ)知識,掌握面向?qū)ο缶幊痰姆治鲈O(shè)計(jì)方法,以及與面向?qū)ο蠹夹g(shù)相
6、關(guān)的一些軟件開發(fā)技術(shù),掌握在 VisualC++6環(huán)境下進(jìn)行可視化程序設(shè)計(jì)技術(shù)。通過實(shí)踐具體的項(xiàng)目,為他們進(jìn)一步開展相關(guān)領(lǐng)域的學(xué)習(xí)和科研打下良好的基礎(chǔ)。</p><p><b> 2 項(xiàng)目要求與簡介</b></p><p> 1、二進(jìn)制、八進(jìn)制、十進(jìn)制及十六進(jìn)制數(shù)的加、減、乘、除、乘方、取模等簡單計(jì)算</p><p> 2、科學(xué)計(jì)算函數(shù),
7、包括(反)正弦、(反)余弦、(反)正切、(反)余切、開方、指數(shù)等函數(shù)運(yùn)行</p><p> 4、具備歷史計(jì)算的記憶功能</p><p> 5、對不正確的表達(dá)式能指出其錯(cuò)誤原因</p><p> 6、整理上機(jī)步驟、完成實(shí)驗(yàn)報(bào)告、提交可運(yùn)行的程序,給出實(shí)驗(yàn)數(shù)據(jù)和實(shí)驗(yàn)結(jié)果。</p><p><b> 3 系統(tǒng)實(shí)現(xiàn)</b>
8、;</p><p> 3.1 系統(tǒng)功能結(jié)構(gòu)與模塊劃分</p><p> ?。ㄏ到y(tǒng)總體結(jié)構(gòu)與功能模塊的劃分,并對各個(gè)模塊進(jìn)行說明)</p><p><b> (1)。初始設(shè)計(jì)</b></p><p> 設(shè)立tag1和tag2作為角度,弧度轉(zhuǎn)換標(biāo)志和進(jìn)制轉(zhuǎn)換標(biāo)志,輸入框添加m_exp控件變量,輸出框添加m_error控
9、件變量,歷史紀(jì)錄添加m_history控件變量</p><p><b> ?。?)。運(yùn)算函數(shù):</b></p><p><b> 數(shù)字判斷:</b></p><p> int IsNumber(char c)</p><p> { //數(shù)字判斷</p><p>
10、if(c>='0'&&c<='9'||c>='A'&&c<='F')return 1;</p><p> else return 0;</p><p><b> }</b></p><p><b> 操作符判斷
11、:</b></p><p> int IsOperator(char c)</p><p> { //操作符判斷</p><p> if(c=='+'||c=='-'||c=='*'||c=='/'||c=='^')return 1;</p><
12、p> else return 0;</p><p><b> }</b></p><p><b> 優(yōu)先級判斷:</b></p><p> char Precede(char x,char y)</p><p> { //優(yōu)先級判斷</p><p> i
13、f(x=='('&&y==')')return '=';</p><p> else if(x=='('||y=='(')return '<';</p><p> else if(x>='a'&&x<='t')
14、return '>';</p><p> else if(y>='a'&&x<='t')return '<';</p><p> else if(x=='^'||y=='+'||y=='-'||y==')')return
15、 '>';</p><p> else if((x=='*'||x=='/')&&y!='^')return '>';</p><p> else return '<';</p><p><b> }</b>&
16、lt;/p><p><b> 二目運(yùn)算:</b></p><p> double Operate2(double a,double b,char theta)</p><p> { //二目運(yùn)算</p><p> double result;</p><p> switch(theta)
17、</p><p> { case '+' :result=a+b;break;</p><p> case '-' :result=a-b;break;</p><p> case '*' :result=a*b;break;</p><p> case '/'
18、 :</p><p> if(b==0){result=0;break;}</p><p> else {result=a/b;break;}</p><p> case '^' :</p><p> if(a==0&&b<=0){result=0;break;}</p><p
19、> else {result=pow(a,b);break;}</p><p> default :result=0;</p><p><b> }</b></p><p> return result;</p><p><b> }</b></p><p>
20、<b> 函數(shù)運(yùn)算:</b></p><p> double Operate1(double a,char theta)</p><p> { //函數(shù)運(yùn)算</p><p> double result;</p><p> switch(theta)</p><p><b>
21、; {</b></p><p> case 'i' :if(tag1)a=a/57.295779513;result=sin(a);break;</p><p> case 's' :if(a>=-1&&a<=1){result=asin(a);if(tag1)result*=57.295779513;}<
22、/p><p> else result=0;break;</p><p> case 'o' :if(tag1)a=a/57.295779513;result=cos(a);break;</p><p> case 'c' :if(a>=-1&&a<=1){result=acos(a);if(tag1)r
23、esult*=57.295779513;}</p><p> else result=0;break;</p><p> case 'a' :if(tag1)a=a/57.295779513;result=tan(a);break;</p><p> case 't' :result=atan(a);if(tag1)result
24、*=57.295779513;break;</p><p> case 'p' :if(tag1)a=a/57.295779513;result=1/tan(a);break;</p><p> case 'd' :result=atan(1/a);if(tag1)result*=57.295779513;break;</p><p&
25、gt; case 'q' :result=sqrt(a);break;</p><p> case 'b' :result=fabs(a);break;</p><p> default :result=0;</p><p><b> }</b></p><p> return
26、 result;</p><p><b> }</b></p><p><b> (3)??丶瘮?shù):</b></p><p> 數(shù)字鍵盤數(shù)字分別用m_exp=m_exp+'n'處理,n=0,1,……,8,9。</p><p> 十六進(jìn)制字母分別用m_exp=m_exp+
27、9;K'處理,K=A,B,C,D,E,F。</p><p> 運(yùn)算符號分別用m_exp=m_exp+'a'處理,a=+,-,*,/,^。</p><p> 輔助符號分別用m_exp=m_exp+'b'處理,b=.,(,)。</p><p> 函數(shù)運(yùn)算符號分別用m_exp=m_exp+'c'處理,</
28、p><p> c=sin(,cos(,tan(,cot(,sqr(,asin(,acos(,atan(,acot(,abs(。</p><p><b> 輸出結(jié)果函數(shù):</b></p><p> void CCalculatorDlg::OnBUTTONresult() </p><p><b> {<
29、;/b></p><p> CString temp;</p><p> m_error="";</p><p> UpdateData(1);</p><p> m_error=Error(m_exp);</p><p> if(m_error==""){<
30、;/p><p> temp=m_exp;</p><p> m_error=evaluate(m_exp);</p><p> m_history.InsertString(0,temp+'='+m_error);</p><p><b> }</b></p><p> Up
31、dateData(0);</p><p><b> }</b></p><p> 清空用m_exp="";m_error="";處理。</p><p><b> 退格鍵函數(shù):</b></p><p> void CCalculatorDlg::OnB
32、UTTONbackspace() </p><p><b> {</b></p><p> CString temp;</p><p> UpdateData(1);</p><p> if(m_exp.Right(1)=='(')</p><p><b> {
33、</b></p><p> if(m_exp.GetLength()>=5)</p><p><b> {</b></p><p> temp=m_exp.Right(5);</p><p> temp=temp.Left(4);</p><p><b> }
34、</b></p><p><b> else </b></p><p><b> {</b></p><p> temp=m_exp.Right(4);</p><p> temp=temp.Left(3);</p><p><b> }<
35、;/b></p><p> if(temp.Right(1)>='a'&&temp.Right(1)<='z')</p><p><b> {</b></p><p> if(temp.Left(1)=='a')m_exp=m_exp.Left(m_exp.
36、GetLength()-5);</p><p> else m_exp=m_exp.Left(m_exp.GetLength()-4);</p><p><b> }</b></p><p> else m_exp=m_exp.Left(m_exp.GetLength()-1);</p><p><b>
37、 }</b></p><p><b> else</b></p><p> m_exp=m_exp.Left(m_exp.GetLength()-1);</p><p> UpdateData(0);</p><p><b> }</b></p><p>
38、;<b> 3.2 數(shù)據(jù)流圖</b></p><p> ?。ㄏ到y(tǒng)的數(shù)據(jù)流程圖,并進(jìn)行說明)</p><p> 以一個(gè)編緝框接受用戶輸入的表達(dá)式,輸入須用軟件提供的軟鍵盤。</p><p> 從輸入到計(jì)算的過程由一個(gè)按鍵觸發(fā),如“=”。</p><p> 出錯(cuò)處理只分析表達(dá)式出錯(cuò)。</p><p
39、> 歷史記錄中保存運(yùn)算的表達(dá)式和其結(jié)果。</p><p> 3.3 系統(tǒng)采用的關(guān)鍵(難點(diǎn))技術(shù)</p><p> (對開發(fā)過程采用的關(guān)鍵技術(shù)進(jìn)行說明,自己創(chuàng)新的地方也在此作詳細(xì)的說明)</p><p> 進(jìn)制變化根據(jù)進(jìn)制標(biāo)志tag2使用控件切換,并且鎖定不符合進(jìn)制輸入的控件。</p><p> 在初始化中加入CheckRadi
40、oButton(IDC_RADIO3,IDC_RADIO6,IDC_RADIO5);使得開啟計(jì)算器是默認(rèn)使用十進(jìn)制。</p><p> 清楚歷史紀(jì)錄用m_history.ResetContent();實(shí)現(xiàn)。</p><p><b> 3.4 源程序清單</b></p><p> ?。谐鲈创a,注意格式要規(guī)范。代碼中有適當(dāng)?shù)淖⑨專?lt;/
41、p><p> // CalculatorDlg.cpp : implementation file</p><p><b> //</b></p><p> #include "stdafx.h"</p><p> #include "Calculator.h"</p&g
42、t;<p> #include "CalculatorDlg.h"</p><p> #ifdef _DEBUG</p><p> #define new DEBUG_NEW</p><p> #undef THIS_FILE</p><p> static char THIS_FILE[] = _
43、_FILE__;</p><p><b> #endif</b></p><p> /////////////////////////////////////////////////////////////////////////////</p><p> // CAboutDlg dialog used for App About<
44、;/p><p> class CAboutDlg : public CDialog</p><p><b> {</b></p><p><b> public:</b></p><p> CAboutDlg();</p><p> // Dialog Data<
45、/p><p> //{{AFX_DATA(CAboutDlg)</p><p> enum { IDD = IDD_ABOUTBOX };</p><p> //}}AFX_DATA</p><p> // ClassWizard generated virtual function overrides</p><p&
46、gt; //{{AFX_VIRTUAL(CAboutDlg)</p><p> protected:</p><p> virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support</p><p> //}}AFX_VIRTUAL</p><p> //
47、 Implementation</p><p> protected:</p><p> //{{AFX_MSG(CAboutDlg)</p><p> //}}AFX_MSG</p><p> DECLARE_MESSAGE_MAP()</p><p><b> };</b></
48、p><p> CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)</p><p><b> {</b></p><p> //{{AFX_DATA_INIT(CAboutDlg)</p><p> //}}AFX_DATA_INIT</p><p>
49、;<b> }</b></p><p> void CAboutDlg::DoDataExchange(CDataExchange* pDX)</p><p><b> {</b></p><p> CDialog::DoDataExchange(pDX);</p><p> //{{AF
50、X_DATA_MAP(CAboutDlg)</p><p> //}}AFX_DATA_MAP</p><p><b> }</b></p><p> BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)</p><p> //{{AFX_MSG_MAP(CAboutDlg)</p&g
51、t;<p> // No message handlers</p><p> //}}AFX_MSG_MAP</p><p> END_MESSAGE_MAP()</p><p> /////////////////////////////////////////////////////////////////////////////</
52、p><p> // CCalculatorDlg dialog</p><p> CCalculatorDlg::CCalculatorDlg(CWnd* pParent /*=NULL*/)</p><p> : CDialog(CCalculatorDlg::IDD, pParent)</p><p><b> {</
53、b></p><p> //{{AFX_DATA_INIT(CCalculatorDlg)</p><p> m_exp = _T("");</p><p> m_error = _T("");</p><p> //}}AFX_DATA_INIT</p><p>
54、 // Note that LoadIcon does not require a subsequent DestroyIcon in Win32</p><p> m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);</p><p><b> }</b></p><p> void CC
55、alculatorDlg::DoDataExchange(CDataExchange* pDX)</p><p><b> {</b></p><p> CDialog::DoDataExchange(pDX);</p><p> //{{AFX_DATA_MAP(CCalculatorDlg)</p><p>
56、 DDX_Control(pDX, IDC_COMBO1, m_history);</p><p> DDX_Text(pDX, IDC_EDIT1, m_exp);</p><p> DDV_MaxChars(pDX, m_exp, 500);</p><p> DDX_Text(pDX, IDC_EDIT3, m_error);</p>&l
57、t;p> DDV_MaxChars(pDX, m_error, 500);</p><p> //}}AFX_DATA_MAP</p><p><b> }</b></p><p> BEGIN_MESSAGE_MAP(CCalculatorDlg, CDialog)</p><p> //{{AFX_M
58、SG_MAP(CCalculatorDlg)</p><p> ON_WM_SYSCOMMAND()</p><p> ON_WM_PAINT()</p><p> ON_WM_QUERYDRAGICON()</p><p> ON_EN_CHANGE(IDC_EDIT1, OnChangeEdit1)</p><
59、p> ON_BN_CLICKED(IDC_BUTTON_0, OnButton0)</p><p> ON_BN_CLICKED(IDC_BUTTON_1, OnButton1)</p><p> ON_BN_CLICKED(IDC_BUTTON_2, OnButton2)</p><p> ON_BN_CLICKED(IDC_BUTTON_3, On
60、Button3)</p><p> ON_BN_CLICKED(IDC_BUTTON_4, OnButton4)</p><p> ON_BN_CLICKED(IDC_BUTTON_5, OnButton5)</p><p> ON_BN_CLICKED(IDC_BUTTON_6, OnButton6)</p><p> ON_BN_
61、CLICKED(IDC_BUTTON_7, OnButton7)</p><p> ON_BN_CLICKED(IDC_BUTTON_8, OnButton8)</p><p> ON_BN_CLICKED(IDC_BUTTON_9, OnButton9)</p><p> ON_BN_CLICKED(IDC_BUTTON_A, OnBUTTONa)</
62、p><p> ON_BN_CLICKED(IDC_BUTTON_B, OnBUTTONb)</p><p> ON_BN_CLICKED(IDC_BUTTON_C, OnBUTTONc)</p><p> ON_BN_CLICKED(IDC_BUTTON_D, OnBUTTONd)</p><p> ON_BN_CLICKED(IDC_B
63、UTTON_E, OnBUTTONe)</p><p> ON_BN_CLICKED(IDC_BUTTON_F, OnBUTTONf)</p><p> ON_BN_CLICKED(IDC_BUTTONadd, OnBUTTONadd)</p><p> ON_BN_CLICKED(IDC_BUTTONsub, OnBUTTONsub)</p>
64、<p> ON_BN_CLICKED(IDC_BUTTONmul, OnBUTTONmul)</p><p> ON_BN_CLICKED(IDC_BUTTONdiv, OnBUTTONdiv)</p><p> ON_BN_CLICKED(IDC_BUTTONpower, OnBUTTONpower)</p><p> ON_BN_CLICKED
65、(IDC_BUTTONpoint, OnBUTTONpoint)</p><p> ON_BN_CLICKED(IDC_BUTTONleft, OnBUTTONleft)</p><p> ON_BN_CLICKED(IDC_BUTTONright, OnBUTTONright)</p><p> ON_BN_CLICKED(IDC_BUTTONresult,
66、 OnBUTTONresult)</p><p> ON_BN_CLICKED(IDC_BUTTONce, OnBUTTONce)</p><p> ON_BN_CLICKED(IDC_BUTTONbackspace, OnBUTTONbackspace)</p><p> ON_BN_CLICKED(IDC_BUTTONsin, OnBUTTONsin)&l
67、t;/p><p> ON_BN_CLICKED(IDC_BUTTONasin, OnBUTTONasin)</p><p> ON_BN_CLICKED(IDC_BUTTONcos, OnBUTTONcos)</p><p> ON_BN_CLICKED(IDC_BUTTONacos, OnBUTTONacos)</p><p> ON_
68、BN_CLICKED(IDC_BUTTONtan, OnBUTTONtan)</p><p> ON_BN_CLICKED(IDC_BUTTONatan, OnBUTTONatan)</p><p> ON_BN_CLICKED(IDC_BUTTONcot, OnBUTTONcot)</p><p> ON_BN_CLICKED(IDC_BUTTONacot,
69、 OnBUTTONacot)</p><p> ON_BN_CLICKED(IDC_BUTTONsqr, OnBUTTONsqr)</p><p> ON_BN_CLICKED(IDC_BUTTONabs, OnBUTTONabs)</p><p> ON_BN_CLICKED(IDC_RADIO1, OnRadio1)</p><p>
70、; ON_BN_CLICKED(IDC_RADIO2, OnRadio2)</p><p> ON_BN_CLICKED(IDC_RADIO3, OnRadio3)</p><p> ON_BN_CLICKED(IDC_RADIO4, OnRadio4)</p><p> ON_BN_CLICKED(IDC_RADIO5, OnRadio5)</p&g
71、t;<p> ON_BN_CLICKED(IDC_RADIO6, OnRadio6)</p><p> ON_BN_CLICKED(IDC_BUTTONcle, OnBUTTONcle)</p><p> ON_EN_CHANGE(IDC_EDIT3, OnChangeEdit3)</p><p> //}}AFX_MSG_MAP</p&
72、gt;<p> END_MESSAGE_MAP()</p><p> /////////////////////////////////////////////////////////////////////////////</p><p> // CCalculatorDlg message handlers</p><p> BOOL CC
73、alculatorDlg::OnInitDialog()</p><p><b> {</b></p><p> CDialog::OnInitDialog();</p><p> // Add "About..." menu item to system menu.</p><p> //
74、IDM_ABOUTBOX must be in the system command range.</p><p> ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);</p><p> ASSERT(IDM_ABOUTBOX < 0xF000);</p><p> CMenu* pSysMenu =
75、 GetSystemMenu(FALSE);</p><p> if (pSysMenu != NULL)</p><p><b> {</b></p><p> CString strAboutMenu;</p><p> strAboutMenu.LoadString(IDS_ABOUTBOX);</p
76、><p> if (!strAboutMenu.IsEmpty())</p><p><b> {</b></p><p> pSysMenu->AppendMenu(MF_SEPARATOR);</p><p> pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX,
77、 strAboutMenu);</p><p><b> }</b></p><p><b> }</b></p><p> // Set the icon for this dialog. The framework does this automatically</p><p> //
78、 when the application's main window is not a dialog</p><p> SetIcon(m_hIcon, TRUE);// Set big icon</p><p> SetIcon(m_hIcon, FALSE);// Set small icon</p><p> // TODO: Ad
79、d extra initialization here</p><p> CheckRadioButton(IDC_RADIO3,IDC_RADIO6,IDC_RADIO5);</p><p> return TRUE; // return TRUE unless you set the focus to a control</p><p><b>
80、; }</b></p><p> void CCalculatorDlg::OnSysCommand(UINT nID, LPARAM lParam)</p><p><b> {</b></p><p> if ((nID & 0xFFF0) == IDM_ABOUTBOX)</p><p>
81、;<b> {</b></p><p> CAboutDlg dlgAbout;</p><p> dlgAbout.DoModal();</p><p><b> }</b></p><p><b> else</b></p><p><
82、;b> {</b></p><p> CDialog::OnSysCommand(nID, lParam);</p><p><b> }</b></p><p><b> }</b></p><p> // If you add a minimize button to
83、 your dialog, you will need the code below</p><p> // to draw the icon. For MFC applications using the document/view model,</p><p> // this is automatically done for you by the framework.&l
84、t;/p><p> void CCalculatorDlg::OnPaint() </p><p><b> {</b></p><p> if (IsIconic())</p><p><b> {</b></p><p> CPaintDC dc(this); //
85、 device context for painting</p><p> SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);</p><p> // Center icon in client rectangle</p><p> int cxIcon = GetSystemMetrics
86、(SM_CXICON);</p><p> int cyIcon = GetSystemMetrics(SM_CYICON);</p><p> CRect rect;</p><p> GetClientRect(&rect);</p><p> int x = (rect.Width() - cxIcon + 1) / 2
87、;</p><p> int y = (rect.Height() - cyIcon + 1) / 2;</p><p> // Draw the icon</p><p> dc.DrawIcon(x, y, m_hIcon);</p><p><b> }</b></p><p>&l
88、t;b> else</b></p><p><b> {</b></p><p> CDialog::OnPaint();</p><p><b> }</b></p><p><b> }</b></p><p> //
89、The system calls this to obtain the cursor to display while the user drags</p><p> // the minimized window.</p><p> HCURSOR CCalculatorDlg::OnQueryDragIcon()</p><p><b> {&
90、lt;/b></p><p> return (HCURSOR) m_hIcon;</p><p><b> }</b></p><p> //以下為表達(dá)式求值算法</p><p> #include "math.h"</p><p> int tag2=10;
91、</p><p> bool tag1=0;</p><p> int IsNumber(char c)</p><p> { //數(shù)字判斷</p><p> if(c>='0'&&c<='9'||c>='A'&&c<='
92、;F')return 1;</p><p> else return 0;</p><p><b> }</b></p><p> int IsOperator(char c)</p><p> { //操作符判斷</p><p> if(c=='+'||c=
93、='-'||c=='*'||c=='/'||c=='^')return 1;</p><p> else return 0;</p><p><b> }</b></p><p> char Precede(char x,char y)</p><p>
94、; { //優(yōu)先級判斷</p><p> if(x=='('&&y==')')return '=';</p><p> else if(x=='('||y=='(')return '<';</p><p> else if(x>=&
95、#39;a'&&x<='t')return '>';</p><p> else if(y>='a'&&x<='t')return '<';</p><p> else if(x=='^'||y=='+'|
96、|y=='-'||y==')')return '>';</p><p> else if((x=='*'||x=='/')&&y!='^')return '>';</p><p> else return '<';</p
97、><p><b> }</b></p><p> double Operate2(double a,double b,char theta)</p><p> { //二目運(yùn)算</p><p> double result;</p><p> switch(theta)</p>
98、;<p> { case '+' :result=a+b;break;</p><p> case '-' :result=a-b;break;</p><p> case '*' :result=a*b;break;</p><p> case '/' :</p&
99、gt;<p> if(b==0){result=0;break;}</p><p> else {result=a/b;break;}</p><p> case '^' :</p><p> if(a==0&&b<=0){result=0;break;}</p><p> els
100、e {result=pow(a,b);break;}</p><p> default :result=0;</p><p><b> }</b></p><p> return result;</p><p><b> }</b></p><p> double
101、Operate1(double a,char theta)</p><p> { //函數(shù)運(yùn)算</p><p> double result;</p><p> switch(theta)</p><p><b> {</b></p><p> case 'i' :i
102、f(tag1)a=a/57.295779513;result=sin(a);break;</p><p> case 's' :if(a>=-1&&a<=1){result=asin(a);if(tag1)result*=57.295779513;}</p><p> else result=0;break;</p><p
103、> case 'o' :if(tag1)a=a/57.295779513;result=cos(a);break;</p><p> case 'c' :if(a>=-1&&a<=1){result=acos(a);if(tag1)result*=57.295779513;}</p><p> else result=
104、0;break;</p><p> case 'a' :if(tag1)a=a/57.295779513;result=tan(a);break;</p><p> case 't' :result=atan(a);if(tag1)result*=57.295779513;break;</p><p> case 'p&
105、#39; :if(tag1)a=a/57.295779513;result=1/tan(a);break;</p><p> case 'd' :result=atan(1/a);if(tag1)result*=57.295779513;break;</p><p> case 'q' :result=sqrt(a);break;</p>
106、<p> case 'b' :result=fabs(a);break;</p><p> default :result=0;</p><p><b> }</b></p><p> return result;</p><p><b> }</b></
107、p><p> CString evaluate(CString exp)</p><p> { //表達(dá)式求值主函數(shù)</p><p> CString t,f;</p><p> char optr[40]={0};</p><p> char expression[80],theta,temp,c;<
108、/p><p> double opnd[40]={0};</p><p> int i=0,optr_i=0,opnd_i=0,j,zpart,k;</p><p> double operand,weight,a,b,xpart; </p><p> strcpy(expression,exp);</p>&
109、lt;p> expression[exp.GetLength()]='\0';</p><p> while(expression[i]!='\0'||optr_i!=0)</p><p> { operand=0;</p><p> weight=(double)tag2;</p><p>
110、 if(IsNumber(expression[i]))</p><p> { while(IsNumber(expression[i]))</p><p> { if(expression[i]>='A'&&expression[i]<='F')</p><p> expression[
111、i]-=7;</p><p> operand=operand*weight+(int)expression[i]-48;</p><p><b> i++;</b></p><p><b> }</b></p><p> if(expression[i]=='.')<
112、/p><p><b> { i++;</b></p><p> while(IsNumber(expression[i]))</p><p> { if(expression[i]>='A'&&expression[i]<='F')expression[i]-=7;<
113、;/p><p> operand=operand+((int)expression[i]-48)/weight;</p><p> weight*=tag2;</p><p><b> i++;</b></p><p><b> }</b></p><p><b&g
114、t; }</b></p><p> opnd[opnd_i++]=operand;</p><p><b> }</b></p><p> else if(expression[i]=='-'&&IsNumber(expression[i+1])&&(i==0||express
115、ion[i-1]=='('))</p><p><b> { i++;</b></p><p> while(IsNumber(expression[i]))</p><p> { operand=operand*weight+(int)expression[i]-48;</p><p>
116、;<b> i++;</b></p><p><b> }</b></p><p> if(expression[i]=='.')</p><p><b> { i++;</b></p><p> while(IsNumber(expressio
117、n[i]))</p><p> { operand=operand+((int)expression[i]-48)/weight;</p><p> weight*=tag2;</p><p><b> i++;</b></p><p><b> }</b></p>&l
118、t;p><b> }</b></p><p> opnd[opnd_i++]=0-operand;</p><p><b> }</b></p><p> else if(optr_i==0)</p><p> { f.Format("%c%c%c%c"
119、;,expression[i],expression[i+1],expression[i+2],expression[i+3]);</p><p> if(f=="sin("){optr[optr_i++]='i';optr[optr_i++]='(';i=i+4;}</p><p> else if(f=="asin&qu
120、ot;){optr[optr_i++]='s';optr[optr_i++]='(';i=i+5;}</p><p> else if(f=="cos("){optr[optr_i++]='o';optr[optr_i++]='(';i=i+4;}</p><p> else if(f=="a
121、cos"){optr[optr_i++]='c';optr[optr_i++]='(';i=i+5;}</p><p> else if(f=="tan("){optr[optr_i++]='a';optr[optr_i++]='(';i=i+4;}</p><p> else if(f==&
122、quot;atan"){optr[optr_i++]='t';optr[optr_i++]='(';i=i+5;}</p><p> else if(f=="cot("){optr[optr_i++]='p';optr[optr_i++]='(';i=i+4;}</p><p> else i
123、f(f=="acot"){optr[optr_i++]='d';optr[optr_i++]='(';i=i+5;}</p><p> else if(f=="sqr("){optr[optr_i++]='q';optr[optr_i++]='(';i=i+4;}</p><p>
124、else if(f=="abs("){optr[optr_i++]='b';optr[optr_i++]='(';i=i+4;}</p><p><b> else </b></p><p><b> {</b></p><p> optr[optr_i++]=ex
125、pression[i];</p><p><b> i++;</b></p><p><b> }</b></p><p><b> }</b></p><p> else if(expression[i]=='\0')</p><p
126、> { theta=optr[--optr_i];</p><p> if(theta>='a'&&theta<='t')</p><p> { a=opnd[--opnd_i];</p><p> opnd[opnd_i++]=Operate1(a,theta);</p&g
127、t;<p><b> }</b></p><p> else { b=opnd[--opnd_i];</p><p> a=opnd[--opnd_i];</p><p> opnd[opnd_i++]=Operate2(a,b,theta);</p><p><b> }<
128、/b></p><p><b> }</b></p><p><b> else{</b></p><p> f.Format("%c%c%c%c",expression[i],expression[i+1],expression[i+2],expression[i+3]);</p&g
129、t;<p> if(f=="sin("){temp='i';j=3;}</p><p> else if(f=="asin"){temp='s';j=4;}</p><p> else if(f=="cos("){temp='o';j=3;}</p>
130、<p> else if(f=="acos"){temp='c';j=4;}</p><p> else if(f=="tan("){temp='a';j=3;}</p><p> else if(f=="atan"){temp='t';j=4;}</p>
131、;<p> else if(f=="cot("){temp='p';j=3;}</p><p> else if(f=="acot"){temp='d';j=4;}</p><p> else if(f=="sqr("){temp='q';j=3;}</p&
132、gt;<p> else if(f=="abs("){temp='b';j=3;}</p><p> else {temp=expression[i];j=1;}</p><p> switch(Precede(optr[optr_i-1],temp))</p><p><b> {</b&g
133、t;</p><p> case '<' :</p><p> optr[optr_i++]=temp;</p><p><b> i+=j;</b></p><p><b> break;</b></p><p> case '=
134、39; :</p><p><b> --optr_i;</b></p><p><b> i++;</b></p><p><b> break;</b></p><p> case '>' :</p><p> the
135、ta=optr[--optr_i];</p><p> if(theta>='a'&&theta<='t')</p><p><b> {</b></p><p> a=opnd[--opnd_i];</p><p> opnd[opnd_i++]=Op
136、erate1(a,theta);</p><p><b> }</b></p><p> else{ b=opnd[--opnd_i];</p><p> a=opnd[--opnd_i];</p><p> opnd[opnd_i++]=Operate2(a,b,theta);</p><
137、p><b> }</b></p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- c++課程設(shè)計(jì)——計(jì)算器
- c++課程設(shè)計(jì)--復(fù)數(shù)計(jì)算器
- c++課程設(shè)計(jì)--分?jǐn)?shù)計(jì)算器
- c++課程設(shè)計(jì)--簡單計(jì)算器
- c++計(jì)算器課程設(shè)計(jì)--計(jì)算器程序設(shè)計(jì)
- c++課程設(shè)計(jì)--簡單計(jì)算器
- c++課程設(shè)計(jì)---分?jǐn)?shù)計(jì)算器
- c++課程設(shè)計(jì)---分?jǐn)?shù)計(jì)算器
- c++課程設(shè)計(jì)--計(jì)算器設(shè)計(jì)報(bào)告
- c++課程設(shè)計(jì)報(bào)告--簡單計(jì)算器
- c++簡單計(jì)算器課程設(shè)計(jì)報(bào)告
- c++課程設(shè)計(jì)報(bào)告--復(fù)數(shù)計(jì)算器
- c++課程設(shè)計(jì)報(bào)告--小型特殊計(jì)算器
- c++課程設(shè)計(jì)報(bào)告--小型特殊計(jì)算器
- c++課程設(shè)計(jì)報(bào)告--小型特殊計(jì)算器
- c++課程設(shè)計(jì)報(bào)告--小型特殊計(jì)算器 (2)
- c++課程設(shè)計(jì)報(bào)告---計(jì)算器的設(shè)計(jì)與實(shí)現(xiàn)
- c++設(shè)計(jì)計(jì)算器
- c++語言畢業(yè)課程設(shè)計(jì)報(bào)告正文(計(jì)算器的實(shí)現(xiàn))
- c語言課程設(shè)計(jì)--計(jì)算器
評論
0/150
提交評論