




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、簡單計(jì)算器1 基本功能描述簡單計(jì)算器包括雙目運(yùn)算符和單目運(yùn)算符。雙目運(yùn)算符包含基本的四則運(yùn)算及乘冪功能,單目運(yùn)算符包含正余弦、階乘、對數(shù)、開方、倒數(shù)等運(yùn)算。可對輸入任意操作數(shù)包含小數(shù)和整數(shù)及正數(shù)和負(fù)數(shù)進(jìn)行以上的所有運(yùn)算并能連續(xù)運(yùn)算。出現(xiàn)錯(cuò)誤會(huì)給出提示,同時(shí)包含清除、退格、退出功能以及有與所有按鈕相對應(yīng)的菜單項(xiàng)。2 設(shè)計(jì)思路 如圖1,是輸入數(shù)據(jù)子函數(shù)的流程圖。打開計(jì)算器程序,輸入數(shù)據(jù),判斷此次輸入之前是否有數(shù)字輸入,如果有,則在之前輸入的數(shù)字字符后加上現(xiàn)有的數(shù)字字符;如果沒有,則直接使編輯框顯示所輸入的數(shù)字字符。判斷是否繼續(xù)鍵入數(shù)字,如果是,則繼續(xù)進(jìn)行前面的判斷,如果否,則用UpdateData
2、(FALSE)刷新顯示。 如圖2,是整個(gè)計(jì)算器的流程圖。對于輸入的算式,判斷運(yùn)算符是雙目運(yùn)算符還是單目運(yùn)算符。如果是雙目運(yùn)算符,則把操作數(shù)存入數(shù)組az+2中,把運(yùn)算符存入bz+1中;如果是單目運(yùn)算符,則把字符串轉(zhuǎn)化為可計(jì)算的數(shù)字,再進(jìn)行計(jì)算。下面判斷運(yùn)算符是否合法,如果合法,則將結(jié)果存入a0,不合法,則彈出對話框,提示錯(cuò)誤。結(jié)束程序。圖1 輸入數(shù)據(jù)子函數(shù)流程圖繼續(xù)鍵入數(shù)字?pass3=1表示已有數(shù)字輸入在之前輸入的數(shù)字字符后面加上現(xiàn)在的數(shù)字字符。Eg:m_str+=”9”。直接使編輯框顯示所輸入的數(shù)字字符。Eg:m_str=”9”。輸入一個(gè)數(shù)字之前是否有數(shù)字輸入? pass3=1?開始NYYN
3、用UpdateData(FALSE)刷新顯示開始輸入單目運(yùn)算符雙目運(yùn)算符Y將字符串轉(zhuǎn)換為可計(jì)算的數(shù)字是否每一個(gè)操作數(shù)都存入a數(shù)組?N把操作數(shù)存入az+2,把運(yùn)算符存入bz+1。進(jìn)行運(yùn)算N運(yùn)算是否合法?Y彈出對話框提示錯(cuò)誤將結(jié)果存入a0結(jié)束圖2 簡單計(jì)算器總流程圖3 軟件設(shè)計(jì)3.1設(shè)計(jì)步驟 打開Microsoft Visual C+6.0,在文件中點(diǎn)擊新建,在彈出框內(nèi)選擇MFC AppWizardexe工程,輸入工程名及其存儲(chǔ)路徑,點(diǎn)擊確定,如圖3所示。圖3 新建MFC AppWizardexe工程 將彈出MFC AppWizard-step1對話框,選擇基本對話框,點(diǎn)擊完成,如圖4所示。圖4
4、基本對話框這樣,MFC AppWizard就建立了一個(gè)基于對話窗口的程序框架,如圖5所示。圖5 新建的對話框3.2界面設(shè)計(jì)1、 創(chuàng)建控件在圖5所示的Resoure View選項(xiàng)卡中打開Dialog資源組,雙擊IDD_LUXIAOYING_DIALOG,在右邊的窗口中顯示出待編輯的對話框。開始擺放控件,包括編輯框和按鈕的創(chuàng)建。按鈕的創(chuàng)建以“0”為例進(jìn)行介紹,其他按鈕的創(chuàng)建可參照此進(jìn)行操作。 1)在圖5中控件的“編輯框”按鈕上單擊鼠標(biāo)左鍵,在對話框編輯窗口上合適的位置按下鼠標(biāo)左鍵并拖動(dòng)鼠標(biāo)畫一個(gè)大小合適的編輯框。在編輯框上單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇屬性選項(xiàng),此時(shí)彈出Edit屬性對話框,如
5、圖6所示,在該對話框中輸入ID屬性。圖6 Edit屬性對話框 2)在圖5中控件的“Button”按鈕上單擊鼠標(biāo)左鍵,在對話框上的合適的位置按下鼠標(biāo)左鍵并拖動(dòng)鼠標(biāo)畫出一個(gè)大小合適的下壓式按鈕。在按鈕上單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇屬性選項(xiàng),此時(shí)彈出Push Button屬性對話框,如圖7所示,在該對話框中輸入ID值和標(biāo)題屬性。圖7 Push Button屬性 按照上面的操作過程編輯其他按鈕和編輯框等對象的屬性。 表1 各按鈕和編輯框等對象的屬性對象ID標(biāo)題或說明編輯框IDC_RESULT_EDIT顯示按鈕IDC_0_BUTTON10按鈕IDC_1_BUTTON21按鈕IDC_2_BUTTO
6、N32按鈕IDC_3_BUTTON43按鈕IDC_4_BUTTON54按鈕IDC_5_BUTTON65按鈕IDC_6_BUTTON76 續(xù)表1對象ID標(biāo)題或說明按鈕IDC_7_BUTTON87按鈕IDC_8_BUTTON98按鈕IDC_9_BUTTON109按鈕IDC_OR_BUTTON11+/-按鈕IDC_DIAN_BUTTON12.按鈕IDC_JIA_BUTTON13+按鈕IDC_JIAN_BUTTON14-按鈕IDC_CHENG_BUTTON15*按鈕IDC_CHU_BUTTON16/按鈕IDC_CLEAR_BUTTON17Clear按鈕IDC_SQRT_BUTTON18sqrt按鈕ID
7、C_DAOSHU_BUTTON191/x按鈕IDC_DENGYU_BUTTON20=按鈕IDC_LN_BUTTON21ln按鈕IDC_MI_BUTTON2210x按鈕IDC_COS_BUTTON23cos按鈕IDC_SIN_BUTTON24sin按鈕IDC_TUIWEI_BUTTONBackspace按鈕IDC_LOG_BUTTON26log 續(xù)表1對象ID標(biāo)題或說明按鈕IDC_TAN_BUTTON27tan按鈕IDC_JIECHENG_BUTTON28n!完成后界面如圖8所示圖8 計(jì)算機(jī)界面2 連接變量和代碼1) 給編輯框連接變量。在編輯框上單擊鼠標(biāo)右鍵,在彈出的菜單中選擇建立類向?qū)Р藛雾?xiàng),
8、彈出MFC ClassWizard對話框,選擇Member Variables選項(xiàng)卡,如圖9所示。2) 在Control IDs列表框中選擇IDC_RESULT_EDIT,單擊Add Variables按鈕,在彈出的對話框中連接變量m_str。變量類型設(shè)定為CString型。如圖10所示。 圖9 MFC ClassWizard對話框中的Member Variables選項(xiàng)卡圖10 m_str屬性設(shè)置2) 給“0”按鈕連接代碼。在“0”按鈕上單擊鼠標(biāo)右鍵,選擇建立類向?qū)Р藛雾?xiàng),在彈出的對話框中選擇Messages Maps選項(xiàng)卡,然后在Object IDs列表框中選擇IDC_0_BUTTON1,
9、在Messages列表框中選擇BN_CLICKED項(xiàng),即選擇單擊按鈕事件,如圖11所示。圖11 “0”按鈕連接代碼對話框3 菜單的設(shè)計(jì)選擇插入/資源命令,將顯示插入資源對話框,如圖12所示。選擇Menu,單擊新建即可。圖12 插入資源對話框 Resoure View選項(xiàng)卡中打開Menu資源組,雙擊IDR_MENU1,然后給菜單添加相應(yīng)的標(biāo)題,并把每個(gè)菜單對應(yīng)的ID值與相應(yīng)的按鈕的一致。如圖13所示。圖13 菜單屬性對話框在對話框的任何一個(gè)空白域單擊鼠標(biāo)右鍵,然后在彈出的快捷菜單中選擇屬性命令,彈出對話屬性對話框,如圖14所示。在對話框中的菜單組合框中選擇IDR_MENU1。圖14 對話屬性對話
10、框最終得到的界面如圖15所示。圖15 計(jì)算器完整界面3.3 關(guān)鍵功能的實(shí)現(xiàn)1) 操作數(shù)、小數(shù)點(diǎn)以及雙目運(yùn)算符的輸入 編輯框所關(guān)聯(lián)的變量為m_str,程序開始時(shí)為零。每按下一個(gè)數(shù)字鍵按鈕、雙目運(yùn)算符按鈕或小數(shù)點(diǎn)按鈕,就把它累加到m_str里并刷新顯示。BOOL型變量pass1判斷之前是否有操作符輸入,有,則pass為1;無,則為0。BOOL型變量pass2判斷是否有小數(shù)點(diǎn),有,則為0;無,則為1;BOOL型變量pass3判斷之前是否有數(shù)字輸入,有,則為0;無,則為1。2) 單目運(yùn)算符功能的實(shí)現(xiàn) 由于所輸入的操作數(shù)類型為String類,所以需要將其轉(zhuǎn)化為數(shù)字才能進(jìn)行運(yùn)算。首先,將比率rate賦值為
11、10,將每一位輸入的字符與0字符做差,得到他們ASCII值的差,在遇到小數(shù)點(diǎn)之前,將這些差值通過循環(huán)求和以及乘以rate值得到字符串所表達(dá)的數(shù)值的整數(shù)部分,然后,當(dāng)遇到小數(shù)點(diǎn)時(shí),將rate賦值為0.1,再通過類似的計(jì)算方法得到字符串所表達(dá)的數(shù)值的小數(shù)部分,最后,將所得數(shù)值的整數(shù)部分和小數(shù)部分合在一起賦值給變量a,再通過單目運(yùn)算符作用于a上即可實(shí)現(xiàn)相應(yīng)功能。3) 雙目運(yùn)算符功能的實(shí)現(xiàn) 由于所輸入的操作數(shù)類型為String類,所以要通過與單目運(yùn)算符中類似的方法將其轉(zhuǎn)換為數(shù)值,再進(jìn)行相關(guān)運(yùn)算。對于雙目運(yùn)算符功能中操作數(shù)和操作符的區(qū)分,可以將它們分別存儲(chǔ)在數(shù)組a中和數(shù)組b中加以區(qū)分,再進(jìn)行計(jì)算。4)
12、退格鍵功能的實(shí)現(xiàn) 如果m_str中有字符串,則每次按下退位鍵都將去掉最右邊一個(gè)字符剩下的字符串重新賦值給m_str,從而實(shí)現(xiàn)退位功能。如果,m_str中本來就沒有字符串,則將字符0賦值給m_str。5) 正負(fù)號功能的實(shí)現(xiàn) 由于所輸入的操作數(shù)類型為String類,所以要通過與單目運(yùn)算符中類似的方法將其轉(zhuǎn)換為數(shù)值,再進(jìn)行相關(guān)運(yùn)算。對于正負(fù)號功能,只要在原來數(shù)值的前面加一個(gè)負(fù)號,即可實(shí)現(xiàn)相應(yīng)功能。4結(jié)論與心得體會(huì) 經(jīng)過多次調(diào)試,設(shè)計(jì)的計(jì)算器可以實(shí)現(xiàn)本次要求的所有功能。 此次VC+課程設(shè)計(jì),在同學(xué)的幫助下,順利完成,收獲也很大。本學(xué)期我們開設(shè)了面向?qū)ο蟪绦蛟O(shè)計(jì)與VC+實(shí)踐這門課,其中MFC部分皆是需要
13、實(shí)踐的,所以,此次課程設(shè)計(jì)是很及時(shí)、很有必要的。這樣,不僅能加深我們對MFC程序設(shè)計(jì)的掌握,而且,還能讓我們真正做到學(xué)以致用。課程設(shè)計(jì)剛開始的時(shí)候,覺著比較輕松,畢竟上課時(shí)做過簡單計(jì)算器,覺著這次的題目也不會(huì)太難。后來,通過老師的講解,發(fā)現(xiàn)這次課程設(shè)計(jì)與平時(shí)做的計(jì)算器有很多不同,不僅需要考慮運(yùn)算的優(yōu)先級,還需要實(shí)現(xiàn)連續(xù)運(yùn)算,而且還有單目運(yùn)算與雙目運(yùn)算的不同等一系列新的問題。但是,真正開始做的時(shí)候,通過查找資料和與同學(xué)的交流,漸漸有了頭緒。在完成過程中,仍然避免不了會(huì)遇到一些問題,這時(shí),不僅需要思考,還需要查閱相關(guān)資料來解決。當(dāng)然,做課程設(shè)計(jì),基本知識是必備的。只有具有了一定的基礎(chǔ)知識,才能在課
14、程設(shè)計(jì)過程中高質(zhì)高效完成。同時(shí),也不能請示任何一道題,每一道題都有它自己的難點(diǎn)。這次課程設(shè)計(jì)讓我學(xué)到了很多,不僅鞏固了先前學(xué)的MFC程序設(shè)計(jì)知識,而且也培養(yǎng)了我的實(shí)踐能力,將理論知識與實(shí)踐聯(lián)系起來,更令我的創(chuàng)造性思維得到了拓展。希望以后類似這樣的課程設(shè)計(jì)、這樣的實(shí)踐機(jī)會(huì)能多一些。5思考題1、程序中如何實(shí)現(xiàn)小數(shù)的顯示與運(yùn)算?答:編輯框所關(guān)聯(lián)的變量為Cstring類的m_str,當(dāng)輸入小數(shù)點(diǎn)時(shí),直接將字符.加在之前已輸入字符后面即可。運(yùn)算時(shí),通過BOOL型變量pass2判斷是否有小數(shù)點(diǎn),有,則為0;無,則為1。當(dāng)有小數(shù)點(diǎn)時(shí),在把已輸入的字符串轉(zhuǎn)化為相應(yīng)數(shù)值時(shí),乘以的比率rate為0.1,且每乘一次
15、,都使rate值變?yōu)樵瓉韗ate值的十分之一,之后由于頭文件中加了“math.h”,故,再通過進(jìn)行相關(guān)數(shù)學(xué)運(yùn)算即可得到結(jié)果。2、 描述等號對應(yīng)的消息處理函數(shù)中需要處理的問題及相應(yīng)的實(shí)現(xiàn)代碼?答:等號對應(yīng)的消息處理函數(shù)中需要實(shí)現(xiàn)雙目運(yùn)算符的功能和連續(xù)運(yùn)算,同時(shí)還要解決運(yùn)算優(yōu)先級的問題,另外還需要有相應(yīng)的錯(cuò)誤提示。實(shí)現(xiàn)代碼:void CLuxiaoyingDlg:OnDengyuButton20() / TODO: Add your control notification handler code hereint i, j, z, s, x=0, y=1, t, m=1;char b10;dou
16、ble rate=10.0, itemp=0.0,a20, l;for(i=0;i<20;i+)ai=100000000.0;for(i=0;i<10;i+)bi=' '/以下為雙目運(yùn)算;z=0;for(i=0;i<m_str.GetLength();i+)/GetLength獲得當(dāng)前字節(jié)文件的邏輯/長度if(isdigit(m_str.GetAt(i)/isdigit 若參數(shù)c為阿拉伯?dāng)?shù)字,則/返回TRUE,否則返回NULL(0)。 /m_str.GetAt(i)取出字符串 中的第i個(gè)字符 /(編號從 0起)if(rate=10.0) itemp=itemp
17、*rate+(m_str.GetAt(i)-'0');if(i=m_str.GetLength()-1)az=itemp;elseitemp=itemp+rate*(m_str.GetAt(i)-'0');rate=rate/10;if(i=m_str.GetLength()-1)az=itemp;else if(m_str.GetAt(i)='.')rate=0.1;else if(m_str.GetAt(i)='+')az=itemp;itemp=0;z+;bz='+'z+;rate=10.0;else if(
18、m_str.GetAt(i)='-')az=itemp;itemp=0;z+;bz='-'z+;rate=10.0;else if(m_str.GetAt(i)='*')az=itemp;itemp=0;z+;bz='*'z+;rate=10.0;else if(m_str.GetAt(i)='/')az=itemp;itemp=0;z+;bz='/'z+;rate=10.0;s=z;for(j=0;j<=s;j+)/除法轉(zhuǎn)換成乘法if(bj='/')if(aj+1=0) Me
19、ssageBox("0不能作為除數(shù)!");elseaj+1=1/aj+1;bj='*'for(j=0;j<=s;j+)/乘法,有乘號時(shí)執(zhí)行乘法計(jì)算,同時(shí)注意優(yōu)先級if(bj='*')if(j-t=2)at-m=at-m*aj+1;/實(shí)現(xiàn)連乘m=m+2;else aj-1=aj-1*aj+1;/乘法的實(shí)現(xiàn)aj+1=100000000.0;bj=' 't=j;for(j=0;j<=s;j+)/數(shù)值和運(yùn)算符的傳遞if(aj!=100000000.0)ax=aj;x+=2;if(bj!=' ')by=bj;
20、y+=2;for(j=0;j<=y-2;j+)/加減法if(bj='+')a0=a0+aj+1;else if(bj='-')a0=a0-aj+1;if(abs(a0)>100000000)MessageBox("您輸入的數(shù)值過大!");elsem_str.Format("%1f",a0);pass1=0;UpdateData(0);6附錄6.1調(diào)試報(bào)告運(yùn)行時(shí),backspace按鍵功能不能實(shí)現(xiàn),點(diǎn)擊后無任何反應(yīng)。經(jīng)過檢查,程序和關(guān)聯(lián)的相關(guān)變量等都沒錯(cuò)誤,可是該鍵沒有響應(yīng)。在與同學(xué)討論后,重新添加改按鈕,功能正
21、常實(shí)現(xiàn)。6.2測試結(jié)果1、 輸入“2”,“+”,“6”,“-”,“3”,“*”,“9”,“=”,并在菜單中同樣輸入這組操作,均得到結(jié)果如圖16。圖16 結(jié)果圖12、 輸入“0”,“l(fā)n”,得到結(jié)果如圖17。圖17 結(jié)果圖23、 輸入“30”,“sin”,得到結(jié)果如圖18。圖18 結(jié)果圖36.3關(guān)鍵源代碼1、0到9的輸入void CLuxiaoyingDlg:On0Button1() / TODO: Add your control notification handler code hereUpdateData(TRUE);if(pass1=1&&pass3=0)m_str+=
22、"0"if(pass1=1&&pass3=1)/在編輯框1的字符串后加上字符0m_str="0"pass3=0;UpdateData(FALSE);void CLuxiaoyingDlg:On1Button2() / TODO: Add your control notification handler code here UpdateData(TRUE);if(pass1=1&&pass3=0)m_str+="1"if(pass1=1&&pass3=1)/在編輯框1的字符串后加上字符1
23、m_str="1"pass3=0;UpdateData(FALSE);void CLuxiaoyingDlg:On2Button3() / TODO: Add your control notification handler code hereUpdateData(TRUE);if(pass1=1&&pass3=0)m_str+="2"if(pass1=1&&pass3=1)/在編輯框1的字符串后加上字符2m_str="2"pass3=0;UpdateData(FALSE);void CLuxiaoy
24、ingDlg:On3Button4() / TODO: Add your control notification handler code hereUpdateData(TRUE);if(pass1=1&&pass3=0)m_str+="3"if(pass1=1&&pass3=1)/在編輯框1的字符串后加上字符3m_str="3"pass3=0;UpdateData(FALSE);void CLuxiaoyingDlg:On4Button5() / TODO: Add your control notification
25、handler code hereUpdateData(TRUE);if(pass1=1&&pass3=0)m_str+="4"if(pass1=1&&pass3=1)/在編輯框1的字符串后加上字符4m_str="4"pass3=0;UpdateData(FALSE);void CLuxiaoyingDlg:On5Button6() / TODO: Add your control notification handler code hereUpdateData(TRUE);if(pass1=1&&pass
26、3=0)m_str+="5"if(pass1=1&&pass3=1)/在編輯框1的字符串后加上字符5m_str="5"pass3=0;UpdateData(FALSE);void CLuxiaoyingDlg:On6Button7() / TODO: Add your control notification handler code hereUpdateData(TRUE);if(pass1=1&&pass3=0)m_str+="6"if(pass1=1&&pass3=1)/在編輯框1
27、的字符串后加上字符6m_str="6"pass3=0;UpdateData(FALSE);void CLuxiaoyingDlg:On7Button8() / TODO: Add your control notification handler code hereUpdateData(TRUE);if(pass1=1&&pass3=0)m_str+="7"if(pass1=1&&pass3=1)/在編輯框1的字符串后加上字符7m_str="7"pass3=0;UpdateData(FALSE);voi
28、d CLuxiaoyingDlg:On8Button9() / TODO: Add your control notification handler code hereUpdateData(TRUE);if(pass1=1&&pass3=0)m_str+="8"if(pass1=1&&pass3=1)/在編輯框1的字符串后加上字符8m_str="8"pass3=0;UpdateData(FALSE);void CLuxiaoyingDlg:On9Button10() / TODO: Add your control no
29、tification handler code hereUpdateData(TRUE);if(pass1=1&&pass3=0)m_str+="9"if(pass1=1&&pass3=1)/在編輯框1的字符串后加上字符9m_str="9"pass3=0;UpdateData(FALSE);2、 加減乘除和小數(shù)點(diǎn)的輸入void CLuxiaoyingDlg:OnJiaButton13() / TODO: Add your control notification handler code hereUpdateData(TR
30、UE);m_str = m_str + "+"/加號pass1=1;UpdateData(FALSE);void CLuxiaoyingDlg:OnJianButton14() / TODO: Add your control notification handler code hereUpdateData(TRUE);m_str = m_str + "-"/減號pass1=1;UpdateData(FALSE);void CLuxiaoyingDlg:OnChengButton15() / TODO: Add your control notifica
31、tion handler code hereUpdateData(TRUE);m_str = m_str + "*" /乘號pass1=1;UpdateData(FALSE);void CLuxiaoyingDlg:OnChuButton16() / TODO: Add your control notification handler code hereUpdateData(TRUE);m_str = m_str + "/"/除號pass1=1;UpdateData(FALSE);void CLuxiaoyingDlg:OnDianButton12()
32、 / TODO: Add your control notification handler code hereUpdateData(1);if(pass1=1&&pass2=1)m_str+="."pass2=0;UpdateData(0);3、 清除功能的實(shí)現(xiàn)void CLuxiaoyingDlg:OnClearButton17() / TODO: Add your control notification handler code hereUpdateData(1);m_str="0"pass1=1;/ 之前是否有操作符輸入,有,則
33、為1,無,則為0pass2=1;/是否有小數(shù)點(diǎn),有,則為0,無,則為1pass3=1;/ 之前是否有數(shù)字輸入,有,則為0,無,則為1UpdateData(0);4、 cos功能的實(shí)現(xiàn)void CLuxiaoyingDlg:OnCosButton23() / TODO: Add your control notification handler code heredouble a,itemp=0,rate=10.0;int i;UpdateData(TRUE);for(i=0;i<m_str.GetLength();i+)if(isdigit(m_str.GetAt(i)if(rate=1
34、0.0) itemp=itemp*rate+(m_str.GetAt(i)-'0');if(i=m_str.GetLength()-1)a=itemp;elseitemp=itemp+rate*(m_str.GetAt(i)-'0');rate=rate/10;if(i=m_str.GetLength()-1)a=itemp;else if(m_str.GetAt(i)='.')rate=0.1;a=cos(a*3.1415926/180);m_str.Format("%1f",a);pass1=0;UpdateData(FA
35、LSE);5、 倒數(shù)功能的實(shí)現(xiàn)void CLuxiaoyingDlg:OnDaoshuButton19() / TODO: Add your control notification handler code heredouble a,itemp=0,rate=10.0;int i;UpdateData(TRUE);for(i=0;i<m_str.GetLength();i+)if(isdigit(m_str.GetAt(i)if(rate=10.0) itemp=itemp*rate+(m_str.GetAt(i)-'0');if(i=m_str.GetLength()
36、-1)a=itemp;elseitemp=itemp+rate*(m_str.GetAt(i)-'0');rate=rate/10;if(i=m_str.GetLength()-1)a=itemp;else if(m_str.GetAt(i)='.')rate=0.1;if(a=0)MessageBox("0沒有倒數(shù)!");elsea=1/a;m_str.Format("%1f",a);pass1=0;UpdateData(FALSE);6、 等于號功能的實(shí)現(xiàn)void CLuxiaoyingDlg:OnDengyuButt
37、on20() / TODO: Add your control notification handler code hereint i, j, z, s, x=0, y=1, t, m=1;char b10;double rate=10.0, itemp=0.0,a20, l;for(i=0;i<20;i+)ai=100000000.0;for(i=0;i<10;i+)bi=' '/以下為雙目運(yùn)算;z=0;for(i=0;i<m_str.GetLength();i+)/GetLength 獲得當(dāng)前字節(jié)文件的邏輯長度if(isdigit(m_str.GetAt(
38、i)/isdigit 若參數(shù)c為阿拉伯?dāng)?shù)字,則返回TRUE,否則返回NULL(0)。 /m_str.GetAt(i)取出字符串 中的第i個(gè)字符(編號從 0起)if(rate=10.0) itemp=itemp*rate+(m_str.GetAt(i)-'0');if(i=m_str.GetLength()-1)az=itemp;elseitemp=itemp+rate*(m_str.GetAt(i)-'0');rate=rate/10;if(i=m_str.GetLength()-1)az=itemp;else if(m_str.GetAt(i)='.&
39、#39;)rate=0.1;else if(m_str.GetAt(i)='+')az=itemp;itemp=0;z+;bz='+'z+;rate=10.0;else if(m_str.GetAt(i)='-')az=itemp;itemp=0;z+;bz='-'z+;rate=10.0;else if(m_str.GetAt(i)='*')az=itemp;itemp=0;z+;bz='*'z+;rate=10.0;else if(m_str.GetAt(i)='/')az=it
40、emp;itemp=0;z+;bz='/'z+;rate=10.0;s=z;for(j=0;j<=s;j+)/除法轉(zhuǎn)換成乘法if(bj='/')if(aj+1=0) MessageBox("0不能作為除數(shù)!");elseaj+1=1/aj+1;bj='*'for(j=0;j<=s;j+)/乘法,有乘號時(shí)執(zhí)行乘法計(jì)算,同時(shí)注意優(yōu)先級if(bj='*')if(j-t=2)at-m=at-m*aj+1;/實(shí)現(xiàn)連乘m=m+2;else aj-1=aj-1*aj+1;/乘法的實(shí)現(xiàn)aj+1=100000000.
41、0;bj=' 't=j;for(j=0;j<=s;j+)/數(shù)值和運(yùn)算符的傳遞if(aj!=100000000.0)ax=aj;x+=2;if(bj!=' ')by=bj;y+=2;for(j=0;j<=y-2;j+)/加減法if(bj='+')a0=a0+aj+1;else if(bj='-')a0=a0-aj+1;if(abs(a0)>100000000)MessageBox("您輸入的數(shù)值過大!");elsem_str.Format("%1f",a0);pass1=0;
42、UpdateData(0);7、 階乘的計(jì)算void CLuxiaoyingDlg:OnJiechengButton28() / TODO: Add your control notification handler code heredouble a,itemp=0,rate=10.0;int i,k;UpdateData(TRUE);for(i=0;i<m_str.GetLength();i+)if(isdigit(m_str.GetAt(i)if(rate=10.0) itemp=itemp*rate+(m_str.GetAt(i)-'0');if(i=m_str.
43、GetLength()-1)a=itemp;elseitemp=itemp+rate*(m_str.GetAt(i)-'0');rate=rate/10;if(i=m_str.GetLength()-1)a=itemp;else if(m_str.GetAt(i)='.')rate=0.1;if(a=0)a=1;elsek=1;for(i=1;i<=a;i+)k*=i;a=k;m_str.Format("%1f",a);pass1=0;UpdateData(FALSE);8、 ln功能的實(shí)現(xiàn)void CLuxiaoyingDlg:OnL
44、nButton21() / TODO: Add your control notification handler code heredouble a,itemp=0,rate=10.0;int i;UpdateData(TRUE);for(i=0;i<m_str.GetLength();i+)if(isdigit(m_str.GetAt(i)if(rate=10.0) itemp=itemp*rate+(m_str.GetAt(i)-'0');if(i=m_str.GetLength()-1)a=itemp;elseitemp=itemp+rate*(m_str.Get
45、At(i)-'0');rate=rate/10;if(i=m_str.GetLength()-1)a=itemp;else if(m_str.GetAt(i)='.')rate=0.1;if(a=0)MessageBox("0不能取對數(shù)!");elsea=log(a);m_str.Format("%1f",a);pass1=0;UpdateData(FALSE);9、 log功能的實(shí)現(xiàn)void CLuxiaoyingDlg:OnLogButton26() / TODO: Add your control notificat
46、ion handler code heredouble a,itemp=0,rate=10.0;int i;UpdateData(TRUE);for(i=0;i<m_str.GetLength();i+)if(isdigit(m_str.GetAt(i)if(rate=10.0) itemp=itemp*rate+(m_str.GetAt(i)-'0');if(i=m_str.GetLength()-1)a=itemp;elseitemp=itemp+rate*(m_str.GetAt(i)-'0');rate=rate/10;if(i=m_str.Get
47、Length()-1)a=itemp;else if(m_str.GetAt(i)='.')rate=0.1;if(a=0)MessageBox("0不能取對數(shù)!");elsea=log10(a);m_str.Format("%1f",a);pass1=0;UpdateData(FALSE);10、 冪功能的實(shí)現(xiàn)void CLuxiaoyingDlg:OnMiButton22() / TODO: Add your control notification handler code heredouble a,k,itemp=0,rate=1
48、0.0;int i;UpdateData(TRUE);for(i=0;i<m_str.GetLength();i+)if(isdigit(m_str.GetAt(i)if(rate=10.0) itemp=itemp*rate+(m_str.GetAt(i)-'0');if(i=m_str.GetLength()-1)a=itemp;elseitemp=itemp+rate*(m_str.GetAt(i)-'0');rate=rate/10;if(i=m_str.GetLength()-1)a=itemp;else if(m_str.GetAt(i)=
49、39;.')rate=0.1;k=1;for(i=0;i<a;i+)k*=10; a=k;m_str.Format("%1f",a);pass1=0;UpdateData(FALSE);11、 正負(fù)功能的實(shí)現(xiàn)void CLuxiaoyingDlg:OnOrButton11() / TODO: Add your control notification handler code heredouble itemp=0,rate=10.0,a;int i;UpdateData(TRUE);for(i=0;i<m_str.GetLength();i+)if(is
50、digit(m_str.GetAt(i)if(rate=10.0) itemp=itemp*rate+(m_str.GetAt(i)-'0');if(i=m_str.GetLength()-1)a=itemp;elseitemp=itemp+rate*(m_str.GetAt(i)-'0');rate=rate/10;if(i=m_str.GetLength()-1)a=itemp;else if(m_str.GetAt(i)='.')rate=0.1;a=-a;m_str.Format("%1f",a);pass1=0;UpdateData(FALSE);12、 sin功能的實(shí)現(xiàn)void CLuxiaoyingDlg:OnSinButton24
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 貨車股份轉(zhuǎn)讓協(xié)議合同模板
- 2025年老年照護(hù)師職業(yè)考試試卷及答案
- 2025年歷史文化遺產(chǎn)保護(hù)考試題及答案
- 商場接手轉(zhuǎn)讓協(xié)議書范本
- 模板廠整體出售合同協(xié)議
- 向父母借巨款協(xié)議書范本
- 員工短視頻出鏡合同協(xié)議
- 售賣電子設(shè)備合同協(xié)議
- 品牌運(yùn)營費(fèi)合同協(xié)議
- 2025職員借用合同
- 2025年4月新高考語文全國Ⅰ卷各地模考試題匯編之語用
- 山東省聊城市2025年高考模擬試題(二)數(shù)學(xué)+答案
- 小學(xué)數(shù)學(xué)西師大版(2024)三年級下冊旋轉(zhuǎn)與平移現(xiàn)象教學(xué)設(shè)計(jì)
- 田園綜合體可行性研究報(bào)告
- 2025年中考語文二輪復(fù)習(xí):散文閱讀 專題練習(xí)題(含答案)
- 2019年上海市嘉定區(qū)高考英語一模試卷
- GB/T 3608-2008高處作業(yè)分級
- 2022年保德縣城污水處理有限公司招聘筆試試題及答案解析
- 薩提亞模式家庭治療課件
- 社會(huì)語言學(xué) 語言的性別、年齡變異課件
- 肺動(dòng)脈高壓診斷流程及治療策略課件
評論
0/150
提交評論