通俗易懂版基于MFC科學(xué)計(jì)算器
《通俗易懂版基于MFC科學(xué)計(jì)算器》由會員分享,可在線閱讀,更多相關(guān)《通俗易懂版基于MFC科學(xué)計(jì)算器(39頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、. 2013/6/22 作者編寫的科學(xué)強(qiáng)大的易懂的新手入門的科學(xué)計(jì)算器, 基于MFC編寫的科學(xué)計(jì)算器 指導(dǎo)教師對課程設(shè)計(jì)的評定意見 搞 要 本課程設(shè)計(jì)是在基于對話框的應(yīng)用程序中模擬一個(gè)計(jì)算器,本計(jì)算器可以進(jìn)行十進(jìn)制下的四則運(yùn)算(加、減、乘、除)和四則混合運(yùn)算,可以把十進(jìn)制轉(zhuǎn)化為二進(jìn)制或十六進(jìn)制,可以進(jìn)行一些常用的函數(shù)運(yùn)算(比如sin、cos、tan、cot、sqrt、ln等),還可以支持帶“(”,“)”符號的表達(dá)式的計(jì)算。系統(tǒng)開發(fā)平臺為Windows XP,程序設(shè)計(jì)設(shè)計(jì)語言采用Visual C++6.0,程序運(yùn)行平臺為Windows 98/2000/XP。程序通過調(diào)試運(yùn)
2、行,初步實(shí)現(xiàn)了設(shè)計(jì)目標(biāo)。 關(guān)鍵詞 程序設(shè)計(jì);計(jì)算器;C++; 1 引言 在現(xiàn)代社會中,計(jì)算器已經(jīng)進(jìn)入了每一個(gè)家庭,人們在生活和學(xué)習(xí)中經(jīng)常需要使用到計(jì)算器,它的出現(xiàn)大大減少了人們在計(jì)算方面的工作量,可以說它在人們生活和學(xué)習(xí)中是不可缺少的。 1.1 C++介紹 C++語言的主要特點(diǎn)表現(xiàn)在兩個(gè)方面,一是全面兼容C語言,二是支持面向?qū)ο蟮某绦蛟O(shè)計(jì)方法[1]。 (1) C++是一個(gè)更好的C,它保持了C語言的優(yōu)點(diǎn),大多數(shù)的C程序代碼略作修改或不作修改就可在C++的集成環(huán)境下調(diào)試和運(yùn)行。這對于繼承和開發(fā)當(dāng)前已在廣泛的軟件是非常重要的,可以節(jié)省大量的人力和物力。 (2)
3、C++是一種面向?qū)ο蟮某绦蛟O(shè)計(jì)語言它使得程序的各個(gè)模塊的獨(dú)立性更強(qiáng),程序的可讀性和可移植性更強(qiáng),程序代碼的結(jié)構(gòu)更加合理,程序的擴(kuò)充性更強(qiáng)。這對于設(shè)計(jì)、編制和調(diào)試一些大型的軟件尤為重要。 (3) C++集成環(huán)境不僅支持C++程序的編譯和調(diào)試,而且也支持C程序的編譯和調(diào)試。通常,C++程序環(huán)境 約定:當(dāng)源程序文件的擴(kuò)展名為c.時(shí),則為C程序;而當(dāng)源程序文件的擴(kuò)展名為cpp.時(shí),則為C++程序。 (4) C++語句非常簡練,對語法限制比較寬松,因此C++語法非常靈活。其優(yōu)點(diǎn)是給用戶編程帶來書寫上的方便。其缺點(diǎn)是由于編譯時(shí)對語法限制比較寬松,許多邏輯上的錯(cuò)誤不容易發(fā)現(xiàn),給用戶編程增加了難度。
4、 3以下是詳盡的代碼 在C***Dlg添加下面代碼,這個(gè)自己一定要看懂,里面是各個(gè)按鈕的響應(yīng)函數(shù),不是叫你直接復(fù)制粘貼,而是一個(gè)個(gè)雙擊按鈕添加代碼,最后成了以下的樣式。 // text2Dlg.cpp : 實(shí)現(xiàn)文件 // #include "stdafx.h" #include "text2.h" #include "text2Dlg.h" #include "afxdialogex.h" #include"atlsimpstr.h" #ifdef _DEBUG #define new DEBUG_NEW #endif
5、// 用于應(yīng)用程序“關(guān)于”菜單項(xiàng)的 CAboutDlg 對話框 class CAboutDlg : public CDialogEx { public: CAboutDlg(); // 對話框數(shù)據(jù) enum { IDD = IDD_ABOUTBOX }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 // 實(shí)現(xiàn) protected: DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() :
6、CDialogEx(CAboutDlg::IDD) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) END_MESSAGE_MAP() // Ctext2Dlg 對話框 Ctext2Dlg::Ctext2Dlg(CWnd* pParent /*=NULL*/) : CDialogEx(Ctext2Dlg::IDD, pPare
7、nt) , m_strResult(_T("")) , OperatorPressed(false) , Restarted(false) , s(0) , m_Edit3(_T("")) , L(0) , L1(0) , PB(0) , radio(0) , m_strout(_T("")) , m_MM3(_T("")) , m_Inv(false) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void Ctext2Dlg::DoDataExchange(CDataEx
8、change* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Text(pDX, IDC_EDIT1, m_strResult); DDX_Text(pDX, IDC_EDIT3, m_Edit3); DDX_Text(pDX, IDC_MM3, m_MM3); } BEGIN_MESSAGE_MAP(Ctext2Dlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_0, &Ctext2Dl
9、g::OnBnClicked0) ON_BN_CLICKED(IDC_1, &Ctext2Dlg::OnBnClicked1) ON_BN_CLICKED(IDC_2, &Ctext2Dlg::OnBnClicked2) ON_BN_CLICKED(IDC_3, &Ctext2Dlg::OnBnClicked3) ON_BN_CLICKED(IDC_4, &Ctext2Dlg::OnBnClicked4) ON_BN_CLICKED(IDC_5, &Ctext2Dlg::OnBnClicked5) ON_BN_CLICKED(IDC_6, &Ctext2Dlg::OnB
10、nClicked6) ON_BN_CLICKED(IDC_7, &Ctext2Dlg::OnBnClicked7) ON_BN_CLICKED(IDC_8, &Ctext2Dlg::OnBnClicked8) ON_BN_CLICKED(IDC_9, &Ctext2Dlg::OnBnClicked9) ON_BN_CLICKED(IDC_POINT, &Ctext2Dlg::OnBnClickedPoint) ON_BN_CLICKED(IDC_ADD, &Ctext2Dlg::OnBnClickedAdd) ON_BN_CLICKED(IDC_SUB, &Ctext2
11、Dlg::OnBnClickedSub) ON_BN_CLICKED(IDC_mul, &Ctext2Dlg::OnBnClickedmul) ON_BN_CLICKED(IDC_DIV, &Ctext2Dlg::OnBnClickedDiv) ON_BN_CLICKED(IDC_EQUAL, &Ctext2Dlg::OnBnClickedEqual) ON_BN_CLICKED(IDC_BACKSPACE, &Ctext2Dlg::OnBnClickedBackspace) ON_BN_CLICKED(IDC_C, &Ctext2Dlg::OnBnClickedC)
12、ON_BN_CLICKED(IDC_SIN, &Ctext2Dlg::OnBnClickedSin) ON_BN_CLICKED(IDC_COS, &Ctext2Dlg::OnBnClickedCos) ON_BN_CLICKED(IDC_TAN, &Ctext2Dlg::OnBnClickedTan) ON_BN_CLICKED(IDC_SQRT, &Ctext2Dlg::OnBnClickedSqrt) ON_BN_CLICKED(IDC_LKOUHAO, &Ctext2Dlg::OnBnClickedLkouhao) ON_BN_CLICKED(IDC_RKOUHAO
13、, &Ctext2Dlg::OnBnClickedRkouhao) ON_BN_CLICKED(IDC_PI, &Ctext2Dlg::OnBnClickedPi) ON_BN_CLICKED(IDC_INT, &Ctext2Dlg::OnBnClickedInt) ON_BN_CLICKED(IDC_MOD, &Ctext2Dlg::OnBnClickedMod) ON_BN_CLICKED(IDC_CE, &Ctext2Dlg::OnBnClickedCe) ON_BN_CLICKED(IDC_DAOSHU, &Ctext2Dlg::OnBnClickedDaoshu)
14、 ON_BN_CLICKED(IDC_JIAJIAN, &Ctext2Dlg::OnBnClickedJiajian) ON_BN_CLICKED(IDC_N, &Ctext2Dlg::OnBnClickedN) ON_BN_CLICKED(IDC_SQUARE, &Ctext2Dlg::OnBnClickedSquare) ON_BN_CLICKED(IDC_CUBE, &Ctext2Dlg::OnBnClickedCube) ON_BN_CLICKED(IDC_TENX, &Ctext2Dlg::OnBnClickedTenx) ON_BN_CLICKED(IDC_
15、EXP, &Ctext2Dlg::OnBnClickedExp) ON_BN_CLICKED(IDC_LOG, &Ctext2Dlg::OnBnClickedLog) ON_BN_CLICKED(IDC_SINH, &Ctext2Dlg::OnBnClickedSinh) ON_BN_CLICKED(IDC_COSH, &Ctext2Dlg::OnBnClickedCosh) ON_BN_CLICKED(IDC_TANH, &Ctext2Dlg::OnBnClickedTanh) ON_BN_CLICKED(IDC_IN, &Ctext2Dlg::OnBnClickedIn
16、) ON_BN_CLICKED(IDC_XY, &Ctext2Dlg::OnBnClickedXy) ON_BN_CLICKED(IDC_KAILIFANG, &Ctext2Dlg::OnBnClickedKailifang) ON_BN_CLICKED(IDC_RADIO1, &Ctext2Dlg::OnBnClickedRadio1) ON_BN_CLICKED(IDC_RADIO2, &Ctext2Dlg::OnBnClickedRadio2) ON_BN_CLICKED(IDC_FE, &Ctext2Dlg::OnBnClickedFe) ON_BN_CLICK
17、ED(IDC_YX, &Ctext2Dlg::OnBnClickedYx) ON_BN_CLICKED(IDC_INV, &Ctext2Dlg::OnBnClickedInv) ON_BN_CLICKED(IDC_MC, &Ctext2Dlg::OnBnClickedMc) ON_BN_CLICKED(IDC_MR, &Ctext2Dlg::OnBnClickedMr) ON_BN_CLICKED(IDC_MS, &Ctext2Dlg::OnBnClickedMs) ON_BN_CLICKED(IDC_MADD, &Ctext2Dlg::OnBnClickedMadd)
18、 ON_BN_CLICKED(IDC_MSUB, &Ctext2Dlg::OnBnClickedMsub) ON_BN_CLICKED(IDC_SIN2, &Ctext2Dlg::OnBnClickedSin2) ON_BN_CLICKED(IDC_COS2, &Ctext2Dlg::OnBnClickedCos2) ON_BN_CLICKED(IDC_TAN2, &Ctext2Dlg::OnBnClickedTan2) ON_BN_CLICKED(IDC_PI2, &Ctext2Dlg::OnBnClickedPi2) END_MESSAGE_MAP() // C
19、text2Dlg 消息處理程序 BOOL Ctext2Dlg::OnInitDialog() { CDialogEx::OnInitDialog(); // 將“關(guān)于...”菜單項(xiàng)添加到系統(tǒng)菜單中。 // IDM_ABOUTBOX 必須在系統(tǒng)命令范圍內(nèi)。 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) {
20、 BOOL bNameValid; CString strAboutMenu; bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); ASSERT(bNameValid); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // 設(shè)置此對話框的圖標(biāo)。當(dāng)應(yīng)用程序主窗口不是對
21、話框時(shí),框架將自動 // 執(zhí)行此操作 SetIcon(m_hIcon, TRUE); // 設(shè)置大圖標(biāo) SetIcon(m_hIcon, FALSE); // 設(shè)置小圖標(biāo) // TODO: 在此添加額外的初始化代碼 return TRUE; // 除非將焦點(diǎn)設(shè)置到控件,否則返回 TRUE } void Ctext2Dlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAb
22、out.DoModal(); } else { CDialogEx::OnSysCommand(nID, lParam); } } // 如果向?qū)υ捒蛱砑幼钚』粹o,則需要下面的代碼 // 來繪制該圖標(biāo)。對于使用文檔/視圖模型的 MFC 應(yīng)用程序, // 這將由框架自動完成。 void Ctext2Dlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // 用于繪制的設(shè)備上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast
23、
24、, y, m_hIcon);
}
else
{
CDialogEx::OnPaint();
}
}
//當(dāng)用戶拖動最小化窗口時(shí)系統(tǒng)調(diào)用此函數(shù)取得光標(biāo)
//顯示。
HCURSOR Ctext2Dlg::OnQueryDragIcon()
{
return static_cast
25、_strResult if(OperatorPressed==true||Restarted==true) //如果按下了"=","AC","sqrt","tan","sin"等按忸時(shí), m_strResult="0"; //變量m_strResult的值為按下的按忸"0"(否則下面會出現(xiàn)03...的情況出現(xiàn)) else m_strResult+="0"; //在按下數(shù)字鍵的情況下,則在m_strResult后加"0" OperatorPressed=false;
26、 // OperatorPressed是bool型的變量 Restarted=false; // Restarted是bool型的變量 UpdateData(FALSE); //把字符串變量m_strResult傳給編輯框 } void Ctext2Dlg::OnBnClicked1() { UpdateData(TRUE); if(OperatorPressed==true||Restarted==true) m_strResult="1";
27、 else m_strResult+="1"; OperatorPressed=false; Restarted=false; UpdateData(FALSE); } void Ctext2Dlg::OnBnClicked2() { UpdateData(TRUE); if(Operato
28、rPressed==true||Restarted==true) m_strResult="2"; else m_strResult+="2"; OperatorPressed=false; Restarted=false; UpdateData(FALSE); } void Ctext2Dlg::OnBnClicked3() { UpdateData(TRUE);
29、 if(OperatorPressed==true||Restarted==true) m_strResult="3"; else m_strResult+="3"; OperatorPressed=false; Restarted=false; UpdateData(FALSE); } void Ctext2Dlg::O
30、nBnClicked4() { UpdateData(TRUE); if(OperatorPressed==true||Restarted==true) m_strResult="4"; else m_strResult+="4"; OperatorPressed=false; Restarted=false; UpdateData(FALSE);
31、 } void Ctext2Dlg::OnBnClicked5() { UpdateData(TRUE); if(OperatorPressed==true||Restarted==true) m_strResult="5"; else m_strResult+="5"; OperatorPressed=false; Restart
32、ed=false; UpdateData(FALSE); } void Ctext2Dlg::OnBnClicked6() { UpdateData(TRUE); if(OperatorPressed==true||Restarted==true) m_strResult="6"; else m_strResult+="6"; OperatorPres
33、sed=false; Restarted=false; UpdateData(FALSE); } void Ctext2Dlg::OnBnClicked7() { UpdateData(TRUE); if(OperatorPressed==true||Restarted==true) m_strResult="7"; else m_strResult+="
34、7"; OperatorPressed=false; Restarted=false; UpdateData(FALSE); } void Ctext2Dlg::OnBnClicked8() { UpdateData(TRUE); if(OperatorPressed==true||Restarted==true) m_strResult="8"; else
35、 m_strResult+="8"; OperatorPressed=false; Restarted=false; UpdateData(FALSE); } void Ctext2Dlg::OnBnClicked9() { UpdateData(TRUE); if(OperatorPressed==true||Restarted==true) m_strResult="9";
36、 else m_strResult+="9"; OperatorPressed=false; Restarted=false; UpdateData(FALSE); } void Ctext2Dlg::OnBnClickedPoint() { UpdateData(TRUE); if(OperatorPressed==true||Re
37、started==true) m_strResult="."; else m_strResult+="."; OperatorPressed=false; Restarted=false; UpdateData(FALSE); } void Ctext2Dlg::OnBnClickedAdd() //以下“- * /”都是一個(gè)道理,在此寫一個(gè)說明一下 { UpdateData(T
38、RUE); //把編輯框顯示的字符串傳給相應(yīng)的變量m_strResult m_strResult+="+"; //在變量m_strResult后加"+" OperatorPressed=false; Restarted=false; //把bool變量OperatorPressed和Restarted的值改為false UpdateData(FALSE); //把字符串變量m_strResult傳給編輯框 }
39、 void Ctext2Dlg::OnBnClickedSub() { UpdateData(TRUE); m_strResult+="-"; OperatorPressed=false; Restarted=false; UpdateData(FALSE); } void Ctext2Dlg::OnBnClickedmul() { UpdateData(TRUE);
40、 m_strResult+="*"; OperatorPressed=false; Restarted=false; UpdateData(FALSE); } void Ctext2Dlg::OnBnClickedDiv() { UpdateData(TRUE); m_strResult+="/";
41、
OperatorPressed=false;
Restarted=false;
UpdateData(FALSE);
}
void Ctext2Dlg::OnBnClickedEqual()
{
UpdateData(TRUE);
L1=true;
int p=0,i=0,g[10]={0},k=0,j;
for(;i 42、
j=p;
g[j]=i;
p++;
}
}
for(;k
43、(_T("%1f"),a[0]);
while(L==1)
{
MOD(m_strResult);
L=0;
}
while(PB==E)
{
EXP10(m_strResult);
PB=#;
}
while(PB==X)
{
Xy(m_strResult);
PB=#;
}
while(PB==c)
{
SqrtMul(m_strResult);
}
ClearZero(m_Edit3);
UpdateData(FALSE);
OperatorPressed=true;
}
voi 44、d Ctext2Dlg::OnBnClickedBackspace()
{
UpdateData(TRUE); //把編輯框顯示的字符串傳給相應(yīng)的變量m_strResult
if(m_strResult!="0"&&m_strResult.GetLength()>1) //判斷編輯框是否只剩下“0”或者是否有字符在編輯框上
m_strResult=m_strResult.Left(m_strResult.GetLength()-1); //把m_strResult左邊的數(shù)(長度已經(jīng)減一)重新賦給m_strResult
else
{
Resta 45、rted=true; //把bool變量Restarted的值改為true
m_strResult="0"; //變量m_strResult的值為按下的按忸"0"
}
UpdateData(FALSE);//把字符串變量m_strResult傳給編輯框
}
void Ctext2Dlg::OnBnClickedC()
{
Restarted=true; //把bool變量Restarted的值改為true
m_strResult="0"; //變量m_strResult的值為按下的按忸"0"
UpdateData(FALSE);//把字符 46、串變量m_strResult傳給編輯框
}
void Ctext2Dlg::OnBnClickedSin() //以下“cos tan sinh cosh tanh”都是一個(gè)道理,在此寫一個(gè)說明一下
{
UpdateData(TRUE);//把編輯框顯示的字符串傳給相應(yīng)的變量m_strResult
double result; //定義一個(gè)局部變量double型的result
if(radio==1) //判斷是否按下度(這里還沒有設(shè)置梯度的消息命令響應(yīng)函數(shù))
result=sin(_wtof(m_strResult)*6.283185 47、3071795864769/360.0); //計(jì)算sin(度)的公式
else
result=sin(_wtof(m_strResult));//計(jì)算sin(弧度)的公式
m_Edit3.Format(_T("%1f"),result);//將result的double型數(shù)據(jù)轉(zhuǎn)換成字符串,并傳遞給編輯框2的變量m_Edit3
ClearZero(m_Edit3); //清零
m_strResult=m_Edit3; //將編輯框2的變量m_Edit3上的字符串賦值給編輯框1的變量m_strResult
OperatorPressed=true; 48、 //把bool變量OperatorPressed的值改為true
UpdateData(FALSE); //把字符串變量m_strResult,m_Edit3傳給各自的編輯框
}
void Ctext2Dlg::OnBnClickedCos()
{
UpdateData(TRUE);
double result;
if(radio==1)
result=cos(_wtof(m_strResult)*6.2831853071795864769/360.0);
else
result=cos(_wtof(m_strResul 49、t));
m_Edit3.Format(_T("%1f"),result);
ClearZero(m_Edit3);
m_strResult=m_Edit3;
OperatorPressed=true;
UpdateData(FALSE);
}
void Ctext2Dlg::OnBnClickedTan()
{
UpdateData(TRUE);
double result;
if(radio==1)
result=tan(_wtof(m_strResult)*6.2831853071795864769/360.0);
el 50、se
result=tan(_wtof(m_strResult));
m_Edit3.Format(_T("%1f"),result);
ClearZero(m_Edit3);
m_strResult=m_Edit3;
OperatorPressed=true;
UpdateData(FALSE);
}
void Ctext2Dlg::OnBnClickedSqrt()
{
UpdateData(TRUE); //把編輯框顯示的字符串傳給相應(yīng)的變量m_strResult
double result; //定義一個(gè)局部變量 51、double型的result
result=sqrt(_wtof(m_strResult));//計(jì)算sqrt
m_Edit3.Format(_T("%1f"),result);//將result的double型數(shù)據(jù)轉(zhuǎn)換成字符串,并傳遞給編輯框2的變量m_Edit3
ClearZero(m_Edit3); //清零
OperatorPressed=true;//把bool變量OperatorPressed的值改為true
UpdateData(FALSE);//把字符串變量m_Edit3傳給編輯框
}
double Ctext2Dlg::Geta 52、Str(CString str) //這個(gè)函數(shù)的作用是將只有數(shù)字和.的字符串轉(zhuǎn)成double的數(shù)值,即相當(dāng)于_wtof()這個(gè)函數(shù)
//這個(gè)函數(shù)也是自己添加
{
int i=0;
double rate=10.0,itemp=0.0;
for(;i 53、
if(rate==10.0) //整數(shù)部分
itemp=itemp*rate+(str.GetAt(i)-0);//獲得整數(shù)
else //小數(shù)部分
{
itemp=itemp+rate*(str.GetAt(i)-0);//獲得小數(shù)
rate=rate/10; //每次讓rate小10倍
}
}
else if(str.GetAt(i)==.) 54、 //如果str.GetAt(i)是小數(shù)點(diǎn)
rate=0.1; //讓rate=0.1,開始計(jì)算小數(shù)部分
}
return (itemp);
}
void Ctext2Dlg::OnBnClickedLkouhao()
{
UpdateData(TRUE); //把編輯框顯示的字符串傳給相應(yīng)的變量m_strResult
if(OperatorPressed==true||Restarted==true)
m_strResult="("; 55、 //變量m_strResult的值為按下的按忸"("
else
m_strResult+="("; //在按下數(shù)字鍵的情況下,則在m_strResult后加"("
OperatorPressed=false;
Restarted=false; //把bool變量OperatorPressed和Restarted的值改為false
UpdateData(FALSE); //把字符串變量m_strResul 56、t傳給編輯框
}
void Ctext2Dlg::OnBnClickedRkouhao()
{
UpdateData(TRUE);
if(OperatorPressed==true||Restarted==true)
m_strResult=")";
else
m_strResult+=")";
OperatorPressed=false;
Restart 57、ed=false;
UpdateData(FALSE);
}
void Ctext2Dlg::Bracket(CString str0,int *h)//這個(gè)代碼也是自己添加
{
CString str1=_T(""),str2=_T(""),str3=_T("");
int i=0;
for(;i 58、 //i自加一次,用來跳過左括號
for(;i 59、//把括號后邊的表達(dá)式賦給str3
}
}
else
str1+=str0.GetAt(i); //把括號前邊的表達(dá)式賦給str3
}
GetStr(str2);
//調(diào)用GetStr(str2)函數(shù),把str2里的數(shù)字和運(yùn)算符保存在數(shù)組中
GetResult(); //計(jì)算出表達(dá)式str2的值
for(i=0;i 60、=() //如果m_strResult中有括號
str2.Format(_T("%1f"),a[0]); //把a(bǔ)[0]轉(zhuǎn)化為字符串賦給str2
m_strResult=str1+str2+str3;
//把str1,str2,str3的值加起來賦給m_strResult
}
void Ctext2Dlg::GetResult()//自己定義添加這個(gè)函數(shù),代碼如下
{
int i=0,x=0,y=1,t=0,z=1;
//這個(gè)循環(huán)的目的是把所有除法運(yùn)算都改為乘法計(jì)算
for(i 61、=0;i<=s;i++)
{
if(b[i]==/) //當(dāng)循環(huán)遇到除號時(shí)
{
a[i+1]=1/a[i+1]; //把a(bǔ)[i+1]的值改為1/a[i+1]
b[i]=*; //把b[i]的值改為乘號
}
}
//這個(gè)循環(huán)可以對所有乘法進(jìn)行計(jì) 62、算
for(i=0;i<=s;i++)
{
if(b[i]==*) //當(dāng)循環(huán)遇到乘號時(shí)
{
//如果i-t==2(再上次循環(huán)中,t被賦值成了i,這次2個(gè)值只相差2,說明表達(dá)式的情況是連續(xù)乘法,比如2*3*4)以2*3*4為例,在這個(gè)條件之前,函數(shù)已經(jīng)進(jìn)行了2*3的運(yùn)算,其計(jì)算結(jié)果保存在原來的2中,把2的值覆蓋了,這個(gè)條件的作用是讓2*3的結(jié)果再和4相乘,結(jié)果保存在原來的2中
if(i-t==2) 63、
{
a[t-z]=a[t-z]*a[i+1];
//進(jìn)行乘法運(yùn)算,把結(jié)果保存在前面的數(shù)組元素中
z=z+2;
//這里引進(jìn)變量z,可以解決很多數(shù)連續(xù)相乘的問題,比如2*2*2*2*2*2
}
else
a[i-1]=a[i-1]*a[i+1];
//碰到乘號后把乘號前后2個(gè)數(shù)字相乘,結(jié)果保存在前面的數(shù)組元素
a[i+1]=1000000.0; 64、 //對乘號后面的數(shù)字初始化為0.0
b[i]= ; //對乘號初始化為空格
//2數(shù)相乘后把乘號及其后面的數(shù)字初始化了,如果是2*3*4的情況,將會無法計(jì)算*4,所以要用開始的條件語句來解決
t=i; //把i的值賦給t
}
}
//這個(gè)循環(huán)的目的是對數(shù)組a和b進(jìn)行整理,因?yàn)橐呀?jīng)進(jìn)行了乘法和除法運(yùn)算,進(jìn)行運(yùn)算的時(shí)候,把一些數(shù)字和運(yùn)算符初始化了這個(gè)函數(shù)的作用可以使中間一些初始化了的數(shù)字和符號被 65、后面的數(shù)字和符號代替,讓數(shù)組可以重新排列
for(i=0;i<=s;i++)
{
if(a[i]!=1000000.0) //如果a[i]的值不為0.0
{
a[x]=a[i]; //把a(bǔ)[i]的值賦給a[x]
x+=2; //x自加2
}
if(b[i]!= ) 66、 //如果b[i]的值不為空格
{
b[y]=b[i]; //把b[i]的值賦給b[y]
y=y+2; //y自加2
}
}
//這個(gè)循環(huán)是進(jìn)行最后的加減法運(yùn)算
for(i=0,x=2;i<=y-2;i++)
//這里i的上限小于等于y-2,可以保證不進(jìn)行多余的運(yùn)算
{
if(b[i]==+) //如果b[i]等于加號
{
a[0]=a[0]+a[x];
x+=2;
}
//把加號后的數(shù)字和a[0]相加,結(jié)果保存在a[0]中
else if(b[i]==-)
- 溫馨提示:
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. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 設(shè)備采購常用的四種評標(biāo)方法
- 車間員工管理須知(應(yīng)知應(yīng)會)
- 某公司設(shè)備維護(hù)保養(yǎng)工作規(guī)程
- 某企業(yè)潔凈車間人員進(jìn)出管理規(guī)程
- 企業(yè)管理制度之5S管理的八個(gè)口訣
- 標(biāo)準(zhǔn)化班前會的探索及意義
- 某企業(yè)內(nèi)審員考試試題含答案
- 某公司環(huán)境保護(hù)考核管理制度
- 現(xiàn)場管理的定義
- 員工培訓(xùn)程序
- 管理制度之生產(chǎn)廠長的職責(zé)與工作標(biāo)準(zhǔn)
- 某公司各級專業(yè)人員環(huán)保職責(zé)
- 企業(yè)管理制度:5S推進(jìn)與改善工具
- XXX公司環(huán)境風(fēng)險(xiǎn)排查及隱患整改制度
- 生產(chǎn)車間基層管理要點(diǎn)及建議