2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩22頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  目錄</b></p><p>  1 基本功能描述1</p><p><b>  2 設(shè)計(jì)思路1</b></p><p><b>  3 軟件設(shè)計(jì)4</b></p><p>  3.1 設(shè)計(jì)步驟4</p><p> 

2、 4 結(jié)論與心得體會(huì)12</p><p>  7 附:設(shè)計(jì)中的關(guān)鍵源代碼14</p><p>  7.2 測(cè)試結(jié)果15</p><p><b>  簡(jiǎn)單計(jì)算器</b></p><p><b>  1 基本功能描述</b></p><p>  簡(jiǎn)單計(jì)算器包括雙目運(yùn)算和單目

3、運(yùn)算功能。雙目運(yùn)算符包含基本的四則運(yùn)算及乘冪功能,單目運(yùn)算符包含正余弦,階乘,對(duì)數(shù),開方,倒數(shù)等運(yùn)算??蓪?duì)輸入任意操作數(shù),包括小數(shù)和整數(shù)及正數(shù)和負(fù)數(shù)進(jìn)行以上的所有運(yùn)算并能連續(xù)運(yùn)算。出現(xiàn)錯(cuò)誤會(huì)給出相應(yīng)提示,同時(shí)包含清除,退格,退出功能以及有與所有按鈕相對(duì)應(yīng)的菜單項(xiàng)。</p><p><b>  2 設(shè)計(jì)思路</b></p><p>  如圖是整個(gè)計(jì)算器的流程圖,打開計(jì)算

4、器程序,輸入數(shù)據(jù),調(diào)用輸入數(shù)據(jù)子程序。子程序開始時(shí)m_num為零。按下數(shù)字按鈕后,判斷m_num的正負(fù)號(hào),對(duì)其進(jìn)行相關(guān)處理,然后在判斷是否有小數(shù)點(diǎn),處理后輸出結(jié)果。</p><p>  回到總流程圖中,輸完第一個(gè)操作數(shù)后,若按下雙目運(yùn)算符,則把m_num存入num2,按下輸入第二個(gè)操作數(shù)并算出結(jié)果。若按下的是單目運(yùn)算符,則直接對(duì)其處理得出結(jié)果。若按下清零,則m_num等于0.在運(yùn)算中還要判斷運(yùn)算是否合法,以及結(jié)果

5、是否超出顯示范圍,以做出相關(guān)提示,按下清零。算出后把結(jié)果保存至num2。若需用算出的結(jié)果繼續(xù)運(yùn)算則回到輸入完第一個(gè)操作數(shù)后,若不需要?jiǎng)t判斷試否需要開始新一輪的運(yùn)算,不需要?jiǎng)t結(jié)束。</p><p>  圖1 輸入數(shù)據(jù)子函數(shù)流程圖</p><p>  圖2 簡(jiǎn)單計(jì)算器總流程圖</p><p><b>  3 軟件設(shè)計(jì)</b></p>

6、<p><b>  3.1 設(shè)計(jì)步驟</b></p><p>  打開Microsoft Visual C++ 6.0,在文件中點(diǎn)擊新建,在彈出框內(nèi)選擇MFC AppWizard[exe]工程,輸入工程名09107xuzhujie及其所在位置,點(diǎn)擊確定,如圖3所示。 </p><p>  圖3 新建MFC AppWizard[exe]工程</p

7、><p>  將彈出MFC AppWizard-step 1對(duì)話框,選擇基本對(duì)話框,點(diǎn)擊完成,如圖4所示。</p><p><b>  圖4 基本對(duì)話框</b></p><p>  這樣,MFC AppWizard就建立了一個(gè)基于對(duì)話窗口的程序框架,如圖5所示。</p><p><b>  圖5 新建的對(duì)話框<

8、;/b></p><p><b>  3.2 界面設(shè)計(jì)</b></p><p><b>  1、創(chuàng)建控件</b></p><p>  在圖5所示的Resoure View選項(xiàng)卡中打開Dialog資源組,雙擊IDD_ 09107xuzhujie_DIALOG,在右邊的窗口中顯示出待編輯的對(duì)話框。開始擺放控件,包括編輯框

9、和按鈕的創(chuàng)建。按鈕的創(chuàng)建以“1”為例進(jìn)行介紹,其他按鈕的創(chuàng)建可參照此進(jìn)行操作。</p><p>  1)在圖5中Controls的“編輯框”按鈕上單擊鼠標(biāo)左鍵,在對(duì)話框編輯窗口上合適的位置按下鼠標(biāo)左鍵并拖動(dòng)鼠標(biāo)畫出一個(gè)大小合適的編輯框。在編輯框上單擊鼠標(biāo)右鍵,在彈出的快捷萊單中選擇屬性選項(xiàng),此時(shí)彈出Edit屬性對(duì)話框,如圖6所示,在該對(duì)話框中輸入ID屬性。 </p><p>  圖6 Ed

10、it屬性對(duì)話框</p><p>  2)在圖3中Controls的“Button”按鈕上單擊鼠標(biāo)左鍵,在對(duì)話框上的合適的位置上按下鼠標(biāo)左鍵并拖動(dòng)鼠標(biāo)畫出一個(gè)大小合適的下壓式按鈕。在按鈕上單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇屬性選項(xiàng),此時(shí)也彈出Push Button屬性對(duì)話框,如圖7所示,在該對(duì)話框中輸入控件的ID值和標(biāo)題屬性。</p><p>  圖7 Push Button屬性</

11、p><p>  按照上面的操作過程編輯其他按鈕和編輯框等對(duì)象的屬性。</p><p>  表1 各按鈕和編輯框等對(duì)象的屬性</p><p>  完成后界面如圖8所示。</p><p><b>  圖8 計(jì)算器界面</b></p><p><b>  2、連接變量和代碼</b>&l

12、t;/p><p>  1) 給編輯框連接變量。在編輯框上單擊鼠標(biāo)右鍵,在彈出菜單中選擇ClassWizard菜單項(xiàng),彈出MFC ClassWizard對(duì)話框,選擇Member Variables選項(xiàng)卡,如圖9所示。 </p><p>  圖9 MFC ClassWizard對(duì)話框中的Menber Variable選項(xiàng)卡</p><p>  在Control IDs列表框

13、中選擇IDC_xianshi,單擊Add Variables按鈕,在彈出的對(duì)話框中連接變量m_num。變量類型設(shè)定為doubel型。如圖10所示。</p><p>  圖10 m_num屬性設(shè)置</p><p>  2) 給“1”按鈕連接代碼。在“1”按鈕上單擊鼠標(biāo)右鍵,選擇ClassWizard菜單項(xiàng),在彈出的對(duì)話框中選擇Messages Maps選項(xiàng)卡,然后在Object IDs列表框

14、中選擇IDC_ADD_BUTTON,在Messages列表框中選擇BN_CLICKED項(xiàng),即選擇單擊按鈕事件,如圖11所示。 </p><p>  圖11 “1”按鈕鏈接代碼對(duì)話框</p><p><b>  3、菜單的設(shè)計(jì)</b></p><p>  選擇 插入/資源命令,將顯示插入資源對(duì)話框。如圖12所示。選擇Menu,點(diǎn)擊新建即可。<

15、;/p><p>  圖12 插入資源對(duì)話框</p><p>  Resoure View選項(xiàng)卡中打開Menu資源組,雙擊IDR_MENU1, 然后給菜單添加相應(yīng)的標(biāo)題,并把每個(gè)菜單對(duì)應(yīng)的ID值與相應(yīng)的按鈕的一致。如圖13所示。</p><p>  圖13 菜單屬性對(duì)話框</p><p>  在對(duì)話框的任何一個(gè)空白域單擊鼠標(biāo)右鍵,然后在彈出的快捷菜

16、單中選擇Properties命令,彈出Dialog Properties對(duì)話框,如圖14。在對(duì)話框中的菜單組合框中選擇IDR_MENU1。</p><p>  圖14 對(duì)話屬性對(duì)話框</p><p>  最終的得到的界面如圖15。</p><p>  圖15 計(jì)算器完整界面</p><p>  3.3 關(guān)鍵功能的實(shí)現(xiàn)</p>&

17、lt;p><b>  1)操作數(shù)的輸入</b></p><p>  編輯框所關(guān)聯(lián)的變量為m_num,程序開始時(shí)為零。每按下一個(gè)數(shù)字鍵按鈕,就把它累加到m_num里并刷新顯示。BOOL型變量ele來判斷是否有小數(shù)點(diǎn)和一個(gè)整型數(shù)dint來表示小數(shù)點(diǎn)后的數(shù)據(jù)的位數(shù)。當(dāng)ele=TRUE時(shí),表示有小數(shù)點(diǎn),否則則表示無小數(shù)點(diǎn)。按下小數(shù)點(diǎn)按鈕后執(zhí)行ele=TRUE。當(dāng)按下一個(gè)數(shù)字鍵時(shí),首先根據(jù)ele

18、判斷是否按下小數(shù)點(diǎn),若有則把小數(shù)點(diǎn)后數(shù)的位數(shù)加1,dint則為此次鍵入的數(shù)所處的位數(shù),將鍵入的數(shù)除以dint個(gè)10然后累加到編輯框所關(guān)聯(lián)的變量m_num上,若沒有則把m_num乘以10,然后累加到編輯框所關(guān)聯(lián)的變量m_num上。</p><p>  2)單目運(yùn)算符功能的實(shí)現(xiàn)</p><p>  由于單目運(yùn)算符中必須有執(zhí)行運(yùn)算的函數(shù),因而頭文件中要加入math.h,如m_num=sqrt(m

19、_num).按下按鈕即可實(shí)現(xiàn)其功能。為實(shí)現(xiàn)連續(xù)運(yùn)算,程序有所改動(dòng),參見(6)。</p><p>  3)雙目運(yùn)算符功能的實(shí)現(xiàn)</p><p>  雙目運(yùn)算符需要兩個(gè)操作數(shù)才能運(yùn)算,所以在執(zhí)行雙目運(yùn)算符按鈕的函數(shù)代碼中,要把m_num中的值保存到變量num2中,然后把m_num清零。這樣即可保存第一個(gè)操作數(shù)。另外先定義了一個(gè)整形變量addt,在不同的雙目運(yùn)算符中給addt賦不同的值,然后在等

20、號(hào)中用switch語句來匹配addt值來判斷需要執(zhí)行何種雙目運(yùn)算。為實(shí)現(xiàn)連續(xù)運(yùn)算,程序有所改動(dòng),參見(6)。</p><p>  4)退格鍵功能的實(shí)現(xiàn)</p><p>  當(dāng)按下一次退格按鈕時(shí),若m_num為整數(shù),只需對(duì)其中數(shù)據(jù)除以10再取整即可,若按下一次退格按鈕為小數(shù),則根據(jù)小數(shù)點(diǎn)后數(shù)據(jù)的位數(shù)dint進(jìn)行操作,先對(duì)m_num執(zhí)行(dint-1)次乘以10運(yùn)算,然后取整,接著執(zhí)行(din

21、t-1)次除以10的運(yùn)算即可。完成后需要把dint將減小1。</p><p>  5) 正負(fù)號(hào)功能的實(shí)現(xiàn)</p><p>  在頭文件中定義一個(gè)BOOL型變量ele2來判斷m_num的正負(fù)。ele2=TRUE時(shí)表示為正。在鍵入操作數(shù)時(shí)需要用到ele2。在正負(fù)號(hào)按鈕的消息響應(yīng)函數(shù)內(nèi)容為m_num=-m_num;ele2=!ele2。</p><p>  6)連續(xù)運(yùn)算功

22、能的實(shí)現(xiàn)</p><p>  要連續(xù)運(yùn)算必須將每次運(yùn)算的結(jié)果保存下來。</p><p>  對(duì)于雙目運(yùn)算符:首先在等號(hào)按鈕的消息處理函數(shù)中在m_num清零之前將m_num的值賦給num2.不過這樣的話如果再按雙目運(yùn)算符則num2的值將會(huì)被覆蓋,于是在雙目運(yùn)算符按鈕的消息處理函數(shù)中將“num2=m_num;”改為“if(m_num!=0)num2=m_num;”.這樣若已經(jīng)保存了結(jié)果則不進(jìn)行

23、覆蓋。然后在每個(gè)數(shù)字按鈕前加上“if(addt==0)num2=0;”,這樣如果進(jìn)行完一次運(yùn)算之后按下任一數(shù)字鍵表示不需要連續(xù)運(yùn)算,則將保存的結(jié)果刪除,若按下的是雙目運(yùn)算符按鈕則可以繼續(xù)運(yùn)算。</p><p>  對(duì)于單目運(yùn)算符:每次運(yùn)算完之后都會(huì)對(duì)m_num清零,因此其結(jié)果也要賦給num2,下次運(yùn)算是則會(huì)用到num2,于是第一次運(yùn)算時(shí)直接將m_num 的值賦給num2,對(duì)其進(jìn)行運(yùn)算。以開根號(hào)為例,在消息處理函數(shù)

24、代碼中將“m_num=sqrt(m_num);”改為“num2=m_num;m_num=sqrt(num2); num2=m_num;”。但是第一次運(yùn)算執(zhí)行完成之后m_num被清零,所以之后將m_num 的值不能賦給num2,代碼改為 “if(m_num>=0)m_num=sqrt(num2); num2=m_num;”。其他單目運(yùn)算符同理。</p><p>  為實(shí)現(xiàn)連續(xù)運(yùn)算是不需要按下等號(hào)即可實(shí)現(xiàn),又在

25、所有的運(yùn)算符按鈕的消息處理函數(shù)代碼前加上了“if(addt!=0)Onequal();”。既若之前有按下雙目運(yùn)算符和兩個(gè)操作數(shù)則連續(xù)運(yùn)算再按下任一運(yùn)算符時(shí)會(huì)自動(dòng)調(diào)用等號(hào)的處理函數(shù)將上次的運(yùn)算完成并保存結(jié)果方便下一次的運(yùn)算。</p><p><b>  4 結(jié)論與心得體會(huì)</b></p><p>  經(jīng)過多番測(cè)試,得出結(jié)論為設(shè)計(jì)的計(jì)算器能夠完成功能描述內(nèi)容中的全部功能。

26、</p><p>  經(jīng)過2個(gè)星期的VC++課程設(shè)計(jì),我在老師和同學(xué)的共同幫助下,順利完成該課程設(shè)計(jì),收獲很大。本學(xué)期我們開設(shè)了《面向?qū)ο蟪绦蛟O(shè)計(jì)與VC++實(shí)踐》課MFC部分皆為需要實(shí)踐內(nèi)容,正所謂“紙上談兵終覺淺,覺知此事要躬行?!彼栽诒緦W(xué)期課程設(shè)計(jì)是很及時(shí)、很必要的。這樣不僅能加深我們對(duì)MFC程序設(shè)計(jì)的掌握,而且還及時(shí)、真正的做到了學(xué)以致用。主要是以下幾點(diǎn)。</p><p>  基本

27、功要過硬。不能馬虎經(jīng)常犯犯小錯(cuò)誤。提高自己找錯(cuò)糾錯(cuò)能力,通常錯(cuò)誤總是那幾種,多練習(xí)就熟練了。</p><p>  要善于查找資料提高自己的資料查詢能力,要善于利用網(wǎng)絡(luò)來獲得知識(shí),獲得幫助。開始著手程序設(shè)計(jì)時(shí),有些功能感覺無從下手,都不知道要干什么。這些問題只要找到相關(guān)的資料就會(huì)得到提示從而理解所要解決問題的大致方向。有了明確的目的,就可以發(fā)揮自己的頭腦來完成它了。</p><p>  要善

28、于思考。程序中有些實(shí)現(xiàn)難點(diǎn)和最初完成程序時(shí)免不了的許多不足就需要自己根據(jù)代碼認(rèn)真思考來解決。只有這樣才能糾正程序的不足并使其更加人性化。</p><p>  這次課程設(shè)計(jì)讓我學(xué)到了很多,不僅是鞏固了先前學(xué)的MFC程序設(shè)計(jì)知識(shí),而且也培養(yǎng)了我的動(dòng)手能力,更令我的創(chuàng)造性思維得到拓展。希望今后類似這樣課程設(shè)計(jì)、類似這樣的鍛煉機(jī)會(huì)能更多些!</p><p><b>  5 參考文獻(xiàn)<

29、;/b></p><p>  [1] 揣錦華.面向?qū)ο蟪绦蛟O(shè)計(jì)與VC++實(shí)踐.西安電子科技大學(xué)出版社,2005</p><p>  [2] 張建宏,湯練兵,馬德駿.計(jì)算機(jī)程序設(shè)計(jì)基礎(chǔ)-C語言程序設(shè)計(jì).科學(xué)出版社,2006</p><p>  [3] 陳清華.Visual C++課程設(shè)計(jì)案例精選與編程指導(dǎo).東南大學(xué)出版社,2004</p><

30、p><b>  6 思考題</b></p><p>  1、程序中如何實(shí)現(xiàn)小數(shù)的顯示與運(yùn)算?</p><p>  答:在09107xuzhujieDlg.h頭文件中定義一個(gè)BOOL型變量ele來判斷是否有小數(shù)點(diǎn)和一個(gè)整型數(shù)dint來表示小數(shù)點(diǎn)后的數(shù)據(jù)的位數(shù)。當(dāng)ele=TRUE時(shí),表示有小數(shù)點(diǎn),否則則表示無小數(shù)點(diǎn)。按下小數(shù)點(diǎn)按鈕后執(zhí)行ele=TRUE。首先根據(jù)el

31、e判斷是否按下小數(shù)點(diǎn),若有則把小數(shù)點(diǎn)后數(shù)的位數(shù)加1,dint則為此次鍵入的數(shù)所處的位數(shù),將鍵入的數(shù)除以dint個(gè)10然后累加到編輯框所關(guān)聯(lián)的變量m_num上。</p><p>  2、描述等號(hào)對(duì)應(yīng)的消息處理函數(shù)中需要處理的問題及相應(yīng)的實(shí)現(xiàn)代碼?</p><p>  答:在雙目運(yùn)算符按鈕函數(shù)代碼中將整形變量addt賦值,然后在等號(hào)中用switch語句來匹配addt值來判斷需要執(zhí)行何種雙目運(yùn)算

32、。并將結(jié)果保存以進(jìn)行下次運(yùn)算時(shí)使用 ,玩策劃那個(gè)一些變量的清零。</p><p><b>  實(shí)現(xiàn)代碼如下:</b></p><p>  switch (addt) //數(shù)據(jù)判斷</p><p><b>  {</b></p><p>  case 0: //為實(shí)現(xiàn)連續(xù)按下兩次等號(hào)后能清零</

33、p><p>  UpdateData(FALSE); //數(shù)據(jù)刷新</p><p><b>  break;</b></p><p><b>  case 1:</b></p><p>  m_num=num2+m_num; //兩數(shù)相加</p><p>  UpdateData

34、(FALSE); //數(shù)據(jù)刷新</p><p><b>  break;</b></p><p><b>  case 2:</b></p><p>  m_num=num2-m_num; //兩數(shù)相減</p><p>  UpdateData(FALSE); //數(shù)據(jù)刷新</p>&

35、lt;p><b>  break;</b></p><p><b>  case 3:</b></p><p>  m_num=num2*m_num; //兩數(shù)相乘</p><p>  UpdateData(FALSE); //數(shù)據(jù)刷新</p><p><b>  break;<

36、;/b></p><p><b>  case 4:</b></p><p>  if (m_num==0) //在除法中,判斷除數(shù)是否為0</p><p>  GetDlgItem(IDC_xianshi)->SetWindowText("錯(cuò)誤,0不能作除數(shù)");</p><p>  e

37、lse {m_num=num2/m_num;UpdateData(FALSE);}</p><p><b>  break;</b></p><p><b>  case 5:</b></p><p>  m_num=pow(num2,m_num); //取模</p><p>  UpdateDat

38、a(FALSE); //數(shù)據(jù)刷新</p><p><b>  break;</b></p><p><b>  }</b></p><p>  if(m_num>=1.7E308||m_num<-1.7E308)</p><p>  GetDlgItem(IDC_xianshi)->

39、;SetWindowText("結(jié)果過大,無法顯示");</p><p>  num2=m_num;</p><p><b>  m_num=0;</b></p><p><b>  num1=0;</b></p><p><b>  dint=0;</b>

40、</p><p>  ele=FALSE;</p><p><b>  addt=0;</b></p><p>  ele2=TRUE;</p><p><b>  7 附錄</b></p><p><b>  7.1 調(diào)試報(bào)告</b></p>

41、;<p>  1、編譯時(shí)提示錯(cuò)誤:</p><p>  “C:\Documents and Settings\周同\桌面\09107xuzhujie\09107xuzhujieDlg.cpp(230) : error C2018: unknown character '0xa3'</p><p>  C:\Documents and Settings\周同\桌

42、面\09107xuzhujie\09107xuzhujieDlg.cpp(230) : error C2018: unknown character '0xbb'</p><p>  C:\Documents and Settings\周同\桌面\09107xuzhujie\09107xuzhujieDlg.cpp(231) : error C2143: syntax error : missin

43、g ';' before 'if'”</p><p>  原因?yàn)榉痔?hào)是在中文輸入法狀態(tài)下輸入,將其改為英文輸入狀態(tài)下了分號(hào)即可。</p><p>  2、重做時(shí)調(diào)用其他工程中的對(duì)話框資源后編譯鏈接運(yùn)行后還是本來有的那個(gè)對(duì)話框,后來將原先的對(duì)話框資源刪除并將調(diào)用的對(duì)話框的ID改為原先的對(duì)話框的ID,再次編譯鏈接運(yùn)行之后沒有反應(yīng)了,經(jīng)過多次摸索發(fā)現(xiàn)調(diào)用過來的對(duì)話

44、框是關(guān)聯(lián)了菜單了,而新建的工程里沒有菜單,因此將調(diào)用的對(duì)話框取消與菜單的關(guān)聯(lián),再次再次編譯鏈接運(yùn)行之后一切正常。</p><p>  3、用GetDlgItem(IDC_NAME_EDIT)->SetWindowText(" ");來提示操作錯(cuò)誤時(shí),總是沒有任何效果,經(jīng)老師幫助得以解決。</p><p>  因?yàn)閁pdateData(FALSE)是將變量傳到前

45、臺(tái)顯示,SetWindowText就是設(shè)置前臺(tái)顯示的新內(nèi)容。所以在SetWindowText后如果還有UpdateData(FALSE)則其效果會(huì)被后者覆蓋,因此程序中SetWindowText之后不用UpdateData(FALSE)即可。</p><p>  4、當(dāng)操作數(shù)超過10位數(shù)時(shí),用backspace會(huì)出現(xiàn)錯(cuò)誤結(jié)果,一番研究研究發(fā)現(xiàn)用int(m_num)取整有問題,int只有4個(gè)字節(jié),當(dāng)超過其范圍時(shí)就會(huì)

46、出錯(cuò)。因此將取整的方法改為先用fmod取其除以1的余數(shù)得到其小數(shù)位,然后用m_num減去其小數(shù)位即可。</p><p><b>  7.2 測(cè)試結(jié)果</b></p><p>  1.輸入“90.5”,“-”,“60.7”,“+”,“2.36”,“ =”,并在菜單中同樣輸入這組操作,均得到結(jié)果如圖16。</p><p><b>  圖1

47、6 結(jié)果圖1</b></p><p>  結(jié)果正確,證明可以實(shí)現(xiàn)雙目運(yùn)算符的連續(xù)運(yùn)算,菜單功能正常。</p><p>  2.輸入“901”,“+/-”,“backspace”,“+”,“120”,“sin”,結(jié)果如圖17.</p><p><b>  圖17 結(jié)果圖2</b></p><p>  因?yàn)棣腥〉?/p>

48、是3.1415926,因此與0.5有小小偏差,認(rèn)為結(jié)果正確。證明可以實(shí)現(xiàn)單目運(yùn)算符的連續(xù)運(yùn)算與backspace回格功能。</p><p>  3.輸入“0”,“l(fā)n”,結(jié)果如圖18.</p><p><b>  結(jié)果圖18</b></p><p>  證明錯(cuò)誤提示功能實(shí)現(xiàn)正常。</p><p><b>  7

49、.3 關(guān)鍵源代碼</b></p><p>  1、09107xuzhujieDlg.h里變量的定義:</p><p>  BOOL ele2; // ele定義為布爾值,判斷當(dāng)前值是否是正數(shù)還是負(fù)數(shù)</p><p><b>  int addt;</b></p><p><b>  int i;&l

50、t;/b></p><p>  int dint;//dent判斷小數(shù)后的位數(shù)</p><p>  BOOL ele; //ele2定義為布爾值,判斷是否有小數(shù)點(diǎn)</p><p>  double num2;</p><p>  double num1;</p><p>  2、程序運(yùn)行時(shí)初始化和頭文件:<

51、/p><p>  m_num=0; //輸出框清0</p><p>  num1=0; //變量1為0</p><p>  num2=0; //變量2為0</p><p>  dint=0; //小數(shù)點(diǎn)位數(shù) </p><p>  addt=0; //整數(shù)位數(shù)無</p><p>  ele=FALSE

52、; //當(dāng)前無小數(shù)</p><p>  ele2=TRUE;</p><p>  09107xuzhujieDlg.cpp里加上頭文件#include "math.h"</p><p>  3、 數(shù)字鍵1的程序:(數(shù)字鍵2到9類似)</p><p>  if(addt==0)num2=0;</p><p

53、>  if(ele2==TRUE)</p><p>  m_num=m_num*10+1; //單擊數(shù)字鍵1后把數(shù)據(jù)傳送到輸出框中</p><p>  else m_num=m_num*10-1;</p><p>  if (ele==TRUE) //當(dāng)前是否有小數(shù)點(diǎn),如果有</p><p><b>  {</b>

54、</p><p><b>  num1=1; </b></p><p>  dint=dint++;</p><p>  for (i=0;i<dint;i++)</p><p><b>  {</b></p><p>  num1=num1/10; //1/10,得到

55、的小數(shù)放入輸出框中</p><p><b>  }</b></p><p>  if (ele2==TRUE) //當(dāng)前值是否是正數(shù)還是負(fù)數(shù),如果是正數(shù)</p><p>  m_num=(m_num-1)/10+num1; //前面不加負(fù)號(hào)</p><p><b>  else</b></p&

56、gt;<p>  m_num=(m_num+1)/10-num1; //否則前面加負(fù)號(hào)</p><p><b>  }</b></p><p>  UpdateData(FALSE); //數(shù)據(jù)刷新</p><p>  5、 加法鍵+的程序:(-,*,/,x,x^y的代碼類似)</p><p>  if(n

57、um2==0)</p><p>  {num2=m_num; //把第二個(gè)值賦于輸出框的成員變量</p><p>  m_num=0; //輸出框的成員變量清0</p><p>  ele=FALSE; //當(dāng)前小數(shù)無</p><p>  ele2=TRUE; //當(dāng)前符號(hào)為正</p><p>  dint=0; //

58、小數(shù)位數(shù)無</p><p><b>  addt=1;</b></p><p><b>  }</b></p><p>  6、 Sqrt鍵的程序:</p><p>  if(m_num!=0)num2=m_num;</p><p>  if(m_num>=0)<

59、;/p><p>  {m_num=sqrt(num2); //對(duì)數(shù)進(jìn)行開根號(hào)</p><p>  UpdateData(FALSE); //數(shù)據(jù)刷新</p><p>  num2=m_num;</p><p><b>  }</b></p><p>  else GetDlgItem(IDC_xian

60、shi)->SetWindowText("錯(cuò)誤,負(fù)數(shù)不能開根號(hào)");</p><p><b>  m_num=0;</b></p><p><b>  num1=0;</b></p><p><b>  dint=0;</b></p><p>  el

61、e=FALSE;</p><p>  ele2=TRUE;</p><p><b>  7、n!鍵的程序:</b></p><p>  if(m_num!=0)num2=m_num;</p><p>  if(fmod(num2,1)==0)</p><p><b>  {m_num=1

62、;</b></p><p>  for(i=1;i<=num2;i++)m_num*=i; //對(duì)數(shù)進(jìn)行求階乘</p><p>  UpdateData(FALSE); //數(shù)據(jù)刷新</p><p>  num2=m_num;</p><p>  if(m_num>=1.7E308||m_num<-1.7E308

63、)</p><p>  GetDlgItem(IDC_xianshi)->SetWindowText("結(jié)果過大,無法顯示");</p><p><b>  }</b></p><p>  else GetDlgItem(IDC_xianshi)->SetWindowText("不是整數(shù)無法進(jìn)行階乘運(yùn)算

64、");</p><p><b>  m_num=0;</b></p><p><b>  num1=0;</b></p><p><b>  dint=0;</b></p><p>  ele=FALSE;</p><p>  ele2=TRU

65、E;</p><p>  8、1/x鍵的程序:</p><p>  if(m_num!=0)num2=m_num;</p><p>  if(num2!=0)</p><p><b>  {</b></p><p>  m_num=1.0/num2; //對(duì)數(shù)進(jìn)行求倒數(shù)</p>&l

66、t;p>  UpdateData(FALSE);//數(shù)據(jù)刷新</p><p>  num2=m_num;</p><p>  if(m_num>=1.7E308||m_num<-1.7E308)</p><p>  GetDlgItem(IDC_xianshi)->SetWindowText("結(jié)果過大,無法顯示");&l

67、t;/p><p><b>  } </b></p><p>  else GetDlgItem(IDC_xianshi)->SetWindowText("錯(cuò)誤,0不能求倒數(shù)");</p><p><b>  m_num=0;</b></p><p><b>  num

68、1=0;</b></p><p><b>  dint=0;</b></p><p>  ele=FALSE;</p><p>  ele2=TRUE;</p><p>  9、sin鍵的程序:(cos的代碼類似)</p><p>  if(m_num!=0)num2=m_num;&l

69、t;/p><p>  m_num=sin(num2*3.1415926/180); //對(duì)數(shù)進(jìn)行正弦</p><p>  UpdateData(FALSE); //數(shù)據(jù)刷新</p><p>  num2=m_num;</p><p><b>  m_num=0;</b></p><p><b&g

70、t;  num1=0;</b></p><p><b>  dint=0;</b></p><p>  ele=FALSE;</p><p>  ele2=TRUE;</p><p>  10、ln鍵的程序:</p><p>  if(m_num!=0)num2=m_num;</

71、p><p>  if(m_num>0)</p><p><b>  {</b></p><p>  m_num=log(num2); //對(duì)數(shù)進(jìn)行求ln</p><p>  UpdateData(FALSE); //數(shù)據(jù)刷新</p><p>  num2=m_num;</p>&l

72、t;p><b>  }</b></p><p>  else GetDlgItem(IDC_xianshi)->SetWindowText("錯(cuò)誤,操作數(shù)需大于0");</p><p><b>  m_num=0;</b></p><p><b>  num1=0;</b&g

73、t;</p><p><b>  dint=0;</b></p><p>  ele=FALSE;</p><p>  ele2=TRUE;</p><p><b>  11、=鍵的程序:</b></p><p>  switch (addt) //數(shù)據(jù)判斷</p>

74、;<p><b>  {</b></p><p>  case 0: //為實(shí)現(xiàn)連續(xù)按下兩次等號(hào)后能清零</p><p>  UpdateData(FALSE); //數(shù)據(jù)刷新</p><p><b>  break;</b></p><p><b>  case 1:<

75、;/b></p><p>  m_num=num2+m_num; //兩數(shù)相加</p><p>  UpdateData(FALSE); //數(shù)據(jù)刷新</p><p><b>  break;</b></p><p><b>  case 2:</b></p><p>

76、  m_num=num2-m_num; //兩數(shù)相減</p><p>  UpdateData(FALSE); //數(shù)據(jù)刷新</p><p><b>  break;</b></p><p><b>  case 3:</b></p><p>  m_num=num2*m_num; //兩數(shù)相乘&l

77、t;/p><p>  UpdateData(FALSE); //數(shù)據(jù)刷新</p><p><b>  break;</b></p><p><b>  case 4:</b></p><p>  if (m_num==0) //在除法中,判斷除數(shù)是否為0</p><p>  Ge

78、tDlgItem(IDC_xianshi)->SetWindowText("錯(cuò)誤,0不能作除數(shù)");</p><p>  else {m_num=num2/m_num;UpdateData(FALSE);}</p><p><b>  break;</b></p><p><b>  case 5:</

79、b></p><p>  m_num=pow(num2,m_num); //取模</p><p>  UpdateData(FALSE); //數(shù)據(jù)刷新</p><p><b>  break;</b></p><p><b>  }</b></p><p>  if(

80、m_num>=1.7E308||m_num<-1.7E308)</p><p>  GetDlgItem(IDC_xianshi)->SetWindowText("結(jié)果過大,無法顯示");</p><p>  num2=m_num;</p><p><b>  m_num=0;</b></p>

81、<p><b>  num1=0;</b></p><p><b>  dint=0;</b></p><p>  ele=FALSE;</p><p><b>  addt=0;</b></p><p>  ele2=TRUE;</p><p&

82、gt;  12、清除鍵Clear的程序:</p><p>  m_num=0; //輸出框清0</p><p>  num1=0; //變量1為0</p><p>  num2=0; //變量2為0</p><p>  dint=0; //小數(shù)無位數(shù)</p><p>  addt=0; //整數(shù)位數(shù)無</p>

83、;<p>  ele=FALSE; //當(dāng)前無小數(shù)</p><p>  ele2=TRUE; </p><p>  UpdateData(FALSE); //數(shù)據(jù)刷新</p><p>  13、退格鍵Backspace的程序:</p><p>  if (ele==FALSE ) //判斷當(dāng)前是否有小數(shù)點(diǎn),如果沒有</p&

84、gt;<p>  m_num=m_num/10-fmod(m_num/10,1); //去掉小數(shù)位</p><p><b>  else</b></p><p><b>  {</b></p><p>  if (ele==TRUE && dint>0) //如果是小數(shù)</p>

85、;<p><b>  {</b></p><p>  for (i=0;i<dint-1;i++) //移動(dòng)小數(shù)點(diǎn)</p><p><b>  {</b></p><p>  m_num=m_num*10; //移動(dòng)至只有一個(gè)小數(shù)位</p><p><b>  }<

86、;/b></p><p>  m_num=m_num-fmod(m_num,1); //去掉小數(shù)位</p><p>  for (i=0;i<dint-1;i++) //小數(shù)點(diǎn)移至原來位置</p><p><b>  {</b></p><p>  m_num=m_num/10; </p>&l

87、t;p><b>  }</b></p><p><b>  }</b></p><p>  dint=dint--;</p><p><b>  }</b></p><p>  if (dint==0)ele=FALSE;</p><p>  if

88、(m_num==0)ele2=TRUE;</p><p>  UpdateData(FALSE); //數(shù)據(jù)刷新</p><p>  14、退出鍵Exit的程序:</p><p><b>  OnOK() ;</b></p><p>  15、關(guān)聯(lián)關(guān)于對(duì)話框代碼:</p><p>  CAbout

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(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)論