版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、C+程序設計設計性實驗報告實驗項目名稱:高級計算器設計與開發(fā)專業(yè)班級: 數(shù)學061 ;姓名: 馮 凱 ;學號 200612010115 實驗起止日期:起于 2008 年 11 月1日止于 2008 年 12 月10日實驗目的: 1.學會用+語言和利用數(shù)據(jù)結構中的堆棧實現(xiàn)表達式的解析與計算。 2.學會使用動態(tài)鏈接庫技術進行編程;學會編輯、編譯、運行MFC應用程序的基本 過程,并開發(fā)一個可以進行表達式運算的高級計算器。 實驗要求: 1. 能處理雙精度型數(shù)值的加、減、乘、除的表達式計算。 2.編程中使用了動態(tài)連接庫技術。開發(fā)環(huán)境要求: 軟件環(huán)境:windows98/windowsXP/windows
2、2000,Visual C+ 硬件環(huán)境:計算機(Pen4CPU, 256MRAM,60G以上硬盤,輸入輸出設備)技術文檔要求:按照軟件工程技術文檔編寫要求進行。要求流程圖繪制規(guī)范,模塊功能描述清晰,數(shù)據(jù)字典齊全。實驗內(nèi)容:1 語言的順序結構,分支結構,循環(huán)結構,函數(shù),結構體,指針。2 數(shù)據(jù)結構中的堆棧存貯結構及其操作的實現(xiàn)。實驗具體方案:按照系統(tǒng)設計要求,用Visual C+設計和開發(fā)一個MFC應用程序-高級計算器,提交由需求分析;系統(tǒng)設計說明(包括主菜單、子菜單、模塊功能簡介、數(shù)據(jù)字典、系統(tǒng)結構圖);系統(tǒng)技術文檔 (包括系統(tǒng)各模塊主要流程圖,軟件總體測試方案與測試記錄、局部測試方案與測試記錄
3、、軟件調(diào)試和修改記錄、測試結論、運行情況記錄),系統(tǒng)使用說明書,源程序代碼為附錄構成的實驗報告。需求分析: 普通的功能簡單的僅能進行四則運算的計算工具已經(jīng)不能滿足需要,需要一種能進行多種計算工具。而windows自帶的計算器不能處理表達式這是一個缺陷,為此開發(fā)一個能處理表達式運算的高級計算器是十分必要的,這為計算提高了更大的方便,可以大幅度提高計算效率。系統(tǒng)設計說明:(包括主菜單、子菜單、模塊功能簡介、數(shù)據(jù)字典、系統(tǒng)結構圖) 主菜單主要包含: 操作說明、相關主題、退出。 整個程序的模塊組成: Windows基于對話框的資源文件模塊。動態(tài)鏈接庫模塊,主要提供了表達式的解析與計算。其他功能模塊如開
4、平方,取平方,進制轉換等。 數(shù)據(jù)字典 m_edit1 /編輯框變量,用于顯示輸入輸出 CString str1,str2,str3 ; /中間臨時字符串變量 char s70,s270,buffer20; /用于CString字符串的轉換以及將double型數(shù)據(jù)轉 換為CString型字符串。 stack /結構體類型 ElemType *stack; /存棧元素 Int top /存棧頂元素的下標位置 int MaxSiz/存stack數(shù)組長度。 void Initiatestack(Stack &S) /堆棧的初始化 void Push(Stack& S,ElemType item) /
5、進入堆棧 ElemType Pop(Stack& S) /刪除棧頂元素并以函數(shù)值返回 ElemType Peek(Stack &S)/返回當前棧頂元素 int Precedence(char op) /運算符優(yōu)先級的判別 int change(char* str1,char*str2) /將str1的中綴表達式轉換為str2中的后綴表達 double compute(char *str) / 計算后綴表達式 double* tranfrom(double num,int r) /進制轉換的子函數(shù) MessageBox(CString ) /用于彈出對話框,用于警告非法輸入 _T( ) /用于清
6、空CString字符串 Str,Right(int n) /用于從右截取長為n的字符串并賦給str Strtod(char *,char*) /用于將CString型字符串轉化為double型數(shù)據(jù) 計 算 器系統(tǒng)結構圖: 主 菜 單主 控 面 板 進制轉換 乘 法 除 法 減 法顯 示 框 加 法 開 方 三角函數(shù) 對 數(shù) 數(shù) 字 鍵 Delete 系統(tǒng)技術文檔 (包括系統(tǒng)各模塊主要流程圖,軟件總體測試方案與測試記錄、局部測試方案與測試記錄、軟件調(diào)試和修改記錄、測試結論):進制轉換流程圖: 開 始 用要轉換的數(shù)字x除以基數(shù)r,所得余數(shù)yi并壓入棧中 依次彈出棧中的元素即為轉換好的r進制數(shù)。算法
7、結束 商為零 是 否 把商賦給當前數(shù)值 x中綴表達式轉化為后綴表達式算法流程圖: 開 始從左到右掃描中綴表達式str1,讀取字符 將其寫入用于存儲后綴表達式的字符數(shù)組str2中 是數(shù)或小數(shù)點 是 將其壓入運算符棧中,待以它開始的括號表達式結束后出棧 否 是左括號 是 否 是繼續(xù)掃描中綴表達式字符串,直到遇見第一個右括號 運 否 算 符 是 壓入運算符棧中,待它后一個運算對象從str1中寫入到str2中后出棧,寫入str2 該運算符優(yōu)先級 大于棧 頂運算符的優(yōu)先級 是 否 刪除棧頂元素并將其保存在后綴字符串str2中 刪除棧頂元素保存 對于新的棧頂元素 結束算法 否 棧為空 是計算后綴表達式流程
8、圖: 開 始 從左到右掃描后綴表達式str2,讀取字符將其轉換為浮點數(shù)壓入堆棧中 該字符是數(shù)或小數(shù)點 是 否 是不作處理,繼續(xù)掃描 運 算 符 是依次從棧中彈出兩個數(shù)與該運算符做運算,將運算結果繼續(xù)壓入到棧中,繼續(xù)掃描字符串結束,當前棧頂元素即為結果 字符串結尾符 是 否軟件總體測試方案:1 測試計算器能否處理表達式以及是否能得出正確結果。2 計算器對非法輸入的排錯能力,主要有: 一個數(shù)中有多個小數(shù)點 一個表達式中有連續(xù)的運算符3 被開方數(shù)為負數(shù)時情況4 除數(shù)為0時的情況5 進制數(shù)之間能否轉換6 進制數(shù)是否可以當做其他操作的運算對象測試記錄:1在處理表達式運算時對于正確的輸入可以得到滿意的結果
9、2在輸入的數(shù)中有多個小數(shù)點時計算器仍進行進算不具備排錯3除數(shù)為0時結果為被除數(shù)4當有連續(xù)的運算符時程序退出5被開方數(shù)為負數(shù)時顯示為正數(shù)的開放結果6進制數(shù)之間轉換結果錯誤局部測試方案:分為三個模塊獨立測試1 測試能否把一個中綴表達式轉換為后綴表達式2 能否正確計算后綴表達式的值3 進制轉換能否正常工作測試結果:1 子程序能正確轉換得到后綴表達式2 子程序可以進行計算,但當遇到非法輸入時程序自動終止3 進制轉換可以進行,但遇到負數(shù)時轉換的結果每個數(shù)字前都有負號軟件調(diào)試和修改記錄:針對上述問題對軟件進行一些局部改動。1 增加對小數(shù)點的計數(shù)器以此來解決小數(shù)點多余問題2 每次輸入后先對表達式進行排錯掃描
10、,一但發(fā)現(xiàn)非法輸入用對話框警示出錯原因3 改進計算模塊,當除數(shù)為零時返回一個超越數(shù)作為信號來警示除數(shù)為零錯誤4 改進進制轉換模塊,使能處理的數(shù)局限在整數(shù)集合上,不處理表達式5 對各個操作的操作對象進行嚴格排查,增加排錯功能模塊測試結果:各種問題基本解決,但是對以操作符開始的數(shù)字仍不能處理進制轉換不能處理浮點數(shù)測試結論:經(jīng)過不斷地改進與調(diào)試計算器基本上可以達到較高要求。計算器可以處理表達式運算,可以進行數(shù)制轉換,和一些常見的數(shù)學計算如開方,取平方求對數(shù),正弦,余弦等。但是還有一些缺陷沒能解決,如進制轉換不能處理浮點數(shù)的問題還沒能夠解決。但從整體上已經(jīng)達到了要求可以進行更高級的計算。系統(tǒng)運行結果和
11、記錄(軟件運行界面圖、軟件運行數(shù)據(jù)輸入界面圖、軟件運行結果界面圖、運行記錄)軟件界面圖輸入表達式:(10-3.5)*(4.3+2.8)/5 結果為:輸入:1/0輸入 1+2-*3求余弦結果為:求二進制結果為:將上面的二進制數(shù)轉換為八進制將上面二進制數(shù)作為COS()的入口參數(shù)負數(shù)開方點擊計算器操作說明點擊關于主題系統(tǒng)使用說明書:1 在做有加減乘除的表達式時先輸入表達式再按 = 即可得出結果2 表達式中只能含有加減乘除這四種運算,不能含有其他的操作如開方,平方等。3 如果要進行開方、平方、取對數(shù)、正余弦、進制轉換等操作時,先輸入表達式再按相應的按鍵即可得出結果。4 任何以符號開頭的表達式參與運算系
12、統(tǒng)都會自動終止,此時請重新運行程序即可5 進制轉換不可以處理浮點數(shù),只能處理一個整數(shù)6 程序使用了動態(tài)鏈接庫技術,運行程序時必須將程序和動態(tài)鏈接庫文件 hanshu.dll放在同一個目錄下才可正常運行。實驗討論:該計算器的核心部分在于表達式的解析與計算上。本程序采用了堆棧來達到這一效果,但是并非這一種實現(xiàn)方法。如二叉樹也可以實現(xiàn)表達式的解析與計算。因此可以嘗試用樹來實現(xiàn)該計算器。程序功能是否還可以繼續(xù)增加?比如階乘運算,進制轉換可以處理浮點數(shù),可以進行矩陣的加減乘除運算,求函數(shù)的導數(shù)等一系列操作,這樣該計算器的級別將會更高。C+程序設計設計性實驗收獲與總結:通過此次課程設計使我的編程能力有了較
13、大幅度的提高,在項目中成長一點不錯。雖然這算不上項目但它還是提供了一個實戰(zhàn)的機會。此外在這次訓練中也學到了不少新的知識。以前總會用一個工程,現(xiàn)在可以用三個。懂得了什么是動態(tài)鏈接庫技術以及使用意義?;旧险莆樟薓FC程序開發(fā)的環(huán)節(jié)過程這對以后視窗編程有很大的幫助,在此基礎上可以自己開方一些小程序,找到了自我提高的方法。此次編程也讓我對VisualC+編程有了新的認識,也讓我認識到有很多知識還沒學到手至少目前應該掌握VisualC+的基礎這是很重要的一個學習過程。此外這次編程給我了許多啟示,自己到底該怎么樣去學習。自己要不斷的給自己找問題去處理。如計算器開始是學到一點動態(tài)鏈接庫,想辦法去運用它。接
14、著學習了c+運算符的重載,矩陣就是一個典范,那么就可以將此環(huán)節(jié)插入到計算器的高級實現(xiàn)功能上。由此學到的知識自己想辦法去運用,用在你當前思考的問題上。這樣經(jīng)過不斷地知識組合在不知不覺中就會成長我認為這是我得到最寶貴的學習方法。此次實驗,應用了堆棧這一存儲結構來解析表達式,并用動態(tài)鏈接庫技術進行導出。覆蓋了數(shù)據(jù)結構以及c+中的基本知識,對于課本上的知識提供了一個應用平臺。參考文獻:1 譚浩強.C程序設計.北京:清華大學出版社,19992 朱站立.數(shù)據(jù)結構. 西安:交通大學出版社,20043 羅斌 Visual C+編程技巧 北京:中國水利水電出版社,2005附錄:源程序代碼/ calcDlg.cp
15、p : implementation file#include stdafx.h#include calc.h#include calcDlg.h#include#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endifdouble x,y,z;/判斷優(yōu)先級的函數(shù) extern int Precedence(char op);/將中綴表達式轉換為后綴表達式,中綴在str1中,后綴在str2中extern int change(char* str1,char*str2);/計算后綴
16、表達式的值/extern double compute(char *str);/進制轉換函數(shù)/ extern double * tranfrom(double num,int r);/ CAboutDlg dialog used for App Aboutclass CAboutDlg : public CDialogpublic:CAboutDlg();/ Dialog Data/AFX_DATA(CAboutDlg)enum IDD = IDD_ABOUTBOX ;/AFX_DATA/ ClassWizard generated virtual function overrides/AFX
17、_VIRTUAL(CAboutDlg)protected:virtual void DoDataExchange(CDataExchange* pDX); / DDX/DDV support/AFX_VIRTUAL/ Implementationprotected:/AFX_MSG(CAboutDlg)/AFX_MSGDECLARE_MESSAGE_MAP();CAboutDlg:CAboutDlg() : CDialog(CAboutDlg:IDD)/AFX_DATA_INIT(CAboutDlg)/AFX_DATA_INITvoid CAboutDlg:DoDataExchange(CDa
18、taExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CAboutDlg)/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CAboutDlg, CDialog)/AFX_MSG_MAP(CAboutDlg)/ No message handlers/AFX_MSG_MAPEND_MESSAGE_MAP()/ CCalcDlg dialogCCalcDlg:CCalcDlg(CWnd* pParent /*=NULL*/): CDialog(CCalcDlg:IDD, pParent)/AFX_DATA_INIT(CCa
19、lcDlg)m_edit1 = _T();/AFX_DATA_INIT/ Note that LoadIcon does not require a subsequent DestroyIcon in Win32m_hIcon = AfxGetApp()-LoadIcon(IDR_MAINFRAME);void CCalcDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CCalcDlg)DDX_Text(pDX, IDC_EDIT1, m_edit1);/AFX_DATA_MAPBE
20、GIN_MESSAGE_MAP(CCalcDlg, CDialog)/AFX_MSG_MAP(CCalcDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_1, OnNO1)ON_BN_CLICKED(IDC_2, OnNO2)ON_BN_CLICKED(IDC_3, OnNO3)ON_BN_CLICKED(IDC_4, OnNO4)ON_BN_CLICKED(IDC_5, OnNO5)ON_BN_CLICKED(IDC_6, OnNO6)ON_BN_CLICKED(IDC_7, OnNO7)ON_
21、BN_CLICKED(IDC_8, OnNO8)ON_BN_CLICKED(IDC_0, OnN0)ON_BN_CLICKED(IDC_9, OnNO9)ON_BN_CLICKED(IDC_DIAN, OnDOT)ON_BN_CLICKED(IDC_ADD, OnADD)ON_BN_CLICKED(IDC_DENG, OnDENG)ON_BN_CLICKED(IDC_clear, Onclear)ON_BN_CLICKED(IDC_SUB, OnSub)ON_BN_CLICKED(IDC_CHENG, OnCheng)ON_BN_CLICKED(IDC_CHU, OnChu)ON_BN_CLI
22、CKED(IDC_sqrt, Onsqrt)ON_BN_CLICKED(IDC_powe, Onpowe)ON_BN_CLICKED(IDC_DUISHU, OnDuishu)ON_BN_CLICKED(IDC_BUTTON1, Ondelete)ON_BN_CLICKED(IDC_BUTTON3, Onyoukuohao)ON_BN_CLICKED(IDC_BUTTON4, Onzuokuohao)ON_EN_CHANGE(IDC_EDIT1, OnChangeEdit1)ON_BN_CLICKED(IDC_BUTTON2, OnER_jin_zhi)ON_BN_CLICKED(IDC_BU
23、TTON5, Onba_jin_zhi)ON_BN_CLICKED(IDC_BUTTON6, Onshi_liu_jin_zhi)ON_BN_CLICKED(IDC_BUTTON7, OnCOS)ON_BN_CLICKED(IDC_BUTTON8, Onsin)ON_BN_CLICKED(IDC_BUTTON9, OnOP)ON_BN_CLICKED(IDC_BUTTON10, OnZhuti)ON_BN_CLICKED(IDC_BUTTON11, Onexit)/AFX_MSG_MAPEND_MESSAGE_MAP()/ CCalcDlg message handlersBOOL CCalc
24、Dlg:OnInitDialog()CDialog:OnInitDialog();/ Add About. menu item to system menu./ IDM_ABOUTBOX must be in the system command range.ASSERT(IDM_ABOUTBOX & 0 xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR);pSysMenu-AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);/ Set the icon for
25、this dialog. The framework does this automatically/ when the applications main window is not a dialogSetIcon(m_hIcon, TRUE);/ Set big iconSetIcon(m_hIcon, FALSE);/ Set small icon/ TODO: Add extra initialization herereturn TRUE; / return TRUE unless you set the focus to a controlvoid CCalcDlg:OnSysCo
26、mmand(UINT nID, LPARAM lParam)if (nID & 0 xFFF0) = IDM_ABOUTBOX)CAboutDlg dlgAbout;dlgAbout.DoModal();elseCDialog:OnSysCommand(nID, lParam);/ If you add a minimize button to your dialog, you will need the code below/ to draw the icon. For MFC applications using the document/view model,/ this is auto
27、matically done for you by the framework.void CCalcDlg:OnPaint() if (IsIconic()CPaintDC dc(this); / device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);/ Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON)
28、;CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;/ Draw the icondc.DrawIcon(x, y, m_hIcon);elseCDialog:OnPaint();/ The system calls this to obtain the cursor to display while the user drags/ the minimized window.HCURSOR CCalcDlg:OnQuer
29、yDragIcon()return (HCURSOR) m_hIcon;void CCalcDlg:OnNO1() / TODO: Add your control notification handler code herem_edit1+=1;UpdateData(false);void CCalcDlg:OnNO2() / TODO: Add your control notification handler code herem_edit1+=2;UpdateData(false);void CCalcDlg:OnNO3() / TODO: Add your control notif
30、ication handler code herem_edit1+=3;UpdateData(false);void CCalcDlg:OnNO4() / TODO: Add your control notification handler code herem_edit1+=4;UpdateData(false);void CCalcDlg:OnNO5() / TODO: Add your control notification handler code herem_edit1+=5;UpdateData(false);void CCalcDlg:OnNO6() / TODO: Add
31、your control notification handler code herem_edit1+=6;UpdateData(false);void CCalcDlg:OnNO7() / TODO: Add your control notification handler code herem_edit1+=7;UpdateData(false);void CCalcDlg:OnNO8() / TODO: Add your control notification handler code herem_edit1+=8;UpdateData(false);void CCalcDlg:On
32、N0() / TODO: Add your control notification handler code herem_edit1+=0;UpdateData(false);void CCalcDlg:OnNO9() m_edit1+=9;UpdateData(false);void CCalcDlg:OnDOT() / TODO: Add your control notification handler code herem_edit1+=.;UpdateData(false);void CCalcDlg:OnADD() / TODO: Add your control notific
33、ation handler code here m_edit1+=+;UpdateData(false);void CCalcDlg:OnDENG() / TODO: Add your control notification handler code here char s70,s270,buffer120;double r;CString str1,str2,str3;int i=0;str1=m_edit1;strncpy(s,(LPCTSTR)str1,sizeof(s);ssizeof(s)-1=0; if(str1.Left(1)=+|s0=-|s0=*|s0=/|s0=.)str
34、2.Format( n抱 歉!n不 能 處 理 輸 入 的 表 達 式! n請 重 新 輸 入);MessageBox(str2,馮凱溫馨提示);m_edit1=_T( );goto label;for(i=0;si!=0;i+) if(si=+|si=-|si=*|si=/)&(si+1=+|si+1=-|si+1=*|si+1=/)str2.Format( n輸 入 的 表 達 式 錯 誤 ! n請 重 新 輸 入);MessageBox(str2,馮凱溫馨提示);m_edit1=_T( );goto label; change(s,s2);if(change(s,s2)=0) str2.
35、Format( n輸 入 的 表 達 式 錯 誤 ! n請 重 新 輸 入);MessageBox(str2,馮凱溫馨提示);m_edit1=_T( );goto label; r=compute(s2);if(r=sqrt(2) str2.Format( n輸 入 的 表 達 式 錯 誤 ! n請 重 新 輸 入);MessageBox(str2,馮凱溫馨提示);m_edit1=_T( );goto label; _gcvt(r,8,buffer1); for(i=1;buffer1i!=0;i+) if(buffer1i=.&buffer1i+1=0)buffer1i=0;m_edit1=
36、(CString)buffer1; label: UpdateData(false);void CCalcDlg:Onclear() / TODO: Add your control notification handler code herem_edit1=_T( );UpdateData(false);void CCalcDlg:OnSub() / TODO: Add your control notification handler code herem_edit1+=-;UpdateData(false);void CCalcDlg:OnCheng() m_edit1+=*;Updat
37、eData(false);void CCalcDlg:OnChu() / TODO: Add your control notification handler code herem_edit1+=/;UpdateData(false);void CCalcDlg:Onsqrt() / TODO: Add your control notification handler code herechar *s1,buffer120;CString str1,str2,str3;int i; str1=m_edit1;str2=str1;str3=str1;if(str2.Right(1)=B|st
38、r2.Right(1)=o|str2.Right(1)=H|str3.Left(1)=B|str3.Left(1)=o|str3.Left(1)=H) str2.Format( n! 計 算 格 式 錯 誤 n請 重 新 輸 入); MessageBox(str2,馮凱溫馨提示);m_edit1=_T( );goto label; OnDENG(); /調(diào)用等號子過程x=strtod(m_edit1,&s1);if(x0) str2.Format( n負 數(shù) 不 能 開 方 . );MessageBox(str2,馮凱溫馨提示);m_edit1=_T( );goto label;y=sqrt(
39、x);_gcvt(y,16,buffer1);for(i=0;buffer1i!=0;i+) if(buffer1i=.&buffer1i+1=0)buffer1i=0;m_edit1=(CString)buffer1;label:UpdateData(false);void CCalcDlg:Onpowe() / TODO: Add your control notification handler code herechar *s,buffer120;CString str1,str2,str3;int i=0;str1=m_edit1;str2=str1;str3=str1;if(str
40、2.Right(1)=B|str2.Right(1)=o|str2.Right(1)=H|str3.Left(1)=B|str3.Left(1)=o|str3.Left(1)=H) str2.Format( n! 計 算 格 式 錯 誤 n請 重 新 輸 入);MessageBox(str2,馮凱溫馨提示);m_edit1=_T( );goto label; OnDENG(); /調(diào)用等號子過程x=strtod(m_edit1,&s);y=pow(x,2);_gcvt(y,16,buffer1);for(i=0;buffer1i!=0;i+) if(buffer1i=.&buffer1i+1=
41、0)buffer1i=0;m_edit1=(CString)buffer1;label:UpdateData(false);void CCalcDlg:OnDuishu() / TODO: Add your control notification handler code herechar *s1,buffer120;CString str1,str2,str3;int i=0;str1=m_edit1;str2=str1;str3=str1;if(str2.Right(1)=B|str2.Right(1)=o|str2.Right(1)=H|str3.Left(1)=B|str3.Left
42、(1)=o|str3.Left(1)=H) str2.Format( n! 計 算 格 式 錯 誤 n請 重 新 輸 入);MessageBox(str2,馮凱溫馨提示);m_edit1=_T( ); str2=_T( );goto label;OnDENG(); /調(diào)用等號子過程x=strtod(m_edit1,&s1); if(x0) str2.Format( n負 數(shù) 不 能 取 對 數(shù) . );MessageBox(str2,馮凱溫馨提示);m_edit1=_T( );goto label;y=log10(x);_gcvt(y,6,buffer1);for(i=0;buffer1i!=
43、0;i+) if(buffer1i=.&buffer1i+1=0)buffer1i=0;m_edit1=(CString)buffer1;label:UpdateData(false);void CCalcDlg:Ondelete() / TODO: Add your control notification handler code hereCString str1,str2,str3;str1=m_edit1;str1=str1.Left(str1.GetLength()-1);m_edit1=str1;UpdateData(false);void CCalcDlg:Onyoukuohao
44、() / TODO: Add your control notification handler code herem_edit1+=);UpdateData(false);void CCalcDlg:Onzuokuohao() / TODO: Add your control notification handler code herem_edit1+=(;UpdateData(false);void CCalcDlg:OnChangeEdit1() / TODO: If this is a RICHEDIT control, the control will not/ send this
45、notification unless you override the CDialog:OnInitDialog()/ function and call CRichEditCtrl().SetEventMask()/ with the ENM_CHANGE flag ORed into the mask./ TODO: Add your control notification handler code herevoid CCalcDlg:OnER_jin_zhi() / TODO: Add your control notification handler code heredouble
46、 x1,x2,*p;int i=0,j=0,k=0;CString str1,str2,str3;char *s1,buffer135;str1=m_edit1;str2=str1;str3=str1;if(str2.Right(1)=B|str2.Right(1)=o|str2.Right(1)=H|str3.Left(1)=B|str3.Left(1)=o|str3.Left(1)=H) str2.Format( n! 不 能 將 進 制 數(shù) 轉 換 為 二 進 制 );MessageBox(str2,馮凱溫馨提示);m_edit1=_T( );goto label;char s100;s
47、trncpy(s,(LPCTSTR)str1,sizeof(s);sstr1.GetLength()-1=0;for(i=0;si!=0;i+) if(si=.) str2.Format( 抱歉不能處理帶小數(shù)點的數(shù)!n 請輸入一個整數(shù)試試);MessageBox(str2,馮凱溫馨提示);m_edit1=_T( );goto label;else if(si=*|si=/)str2.Format( 抱歉不能處理這類表達式!n 請輸入一個不帶任何符號的整數(shù)試試);MessageBox(str2,馮凱溫馨提示);m_edit1=_T( );goto label;for(i=0;si!=0;i+)
48、if(si=+|si=-|si=*|si=/)&(si+1=+|si+1=-|si+1=*|si+1=/)str2.Format( n輸 入 的 表 達 式 錯 誤 ! n請 重 新 輸 入);MessageBox(str2,馮凱溫馨提示);m_edit1=_T( );goto label;m_edit1=_T( );x1=strtod(str1,&s1);if(x10)x2=-x1;else x2=x1; p=tranfrom(x2,2); for(i=0;pi!=#;i+) _gcvt(pi,32,buffer1); for(j=0;j35;j+) if(buffer1j=.) buffe
49、r1j=buffer1j+1; m_edit1+=(CString)buffer1; if(x10)m_edit1=-+m_edit1; m_edit1+=B; label :UpdateData(false);void CCalcDlg:Onba_jin_zhi() / TODO: Add your control notification handler code heredouble x1,x2,*p;int i=0,j=0;CString str1,str2,str3;char *s1,buffer135;str1=m_edit1;str2=str1;str3=str1;if(str2
50、.Right(1)=B|str2.Right(1)=o|str2.Right(1)=H|str3.Left(1)=B|str3.Left(1)=o|str3.Left(1)=H) str2.Format( n! 不 能 將 進 制 數(shù) 轉 換 為 八 進 制 );MessageBox(str2,馮凱溫馨提示);m_edit1=_T( );goto label;char s35;strncpy(s,(LPCTSTR)str1,sizeof(s);ssizeof(s)-1=0;for(i=0;si!=0;i+) if(si=.) str2.Format( 抱歉不能處理帶小數(shù)點的數(shù)!n 請輸入一個整
51、數(shù)試試);MessageBox(str2,馮凱溫馨提示);m_edit1=_T( );goto label;else if(si=*|si=/)str2.Format( 抱歉不能處理這類表達式!n 請輸入一個不帶任何符號的整數(shù)試試);MessageBox(str2,馮凱溫馨提示);m_edit1=_T( );goto label;for(i=0;si!=0;i+) if(si=+|si=-|si=*|si=/)&(si+1=+|si+1=-|si+1=*|si+1=/)str2.Format( n輸 入 的 表 達 式 錯 誤 ! n請 重 新 輸 入);MessageBox(str2,馮凱溫
52、馨提示);m_edit1=_T( );goto label;m_edit1=_T( );x1=strtod(str1,&s1); if(x10)x2=-x1;else x2=x1; p=tranfrom(x2,8); for(i=0;pi!=#;i+) _gcvt(pi,32,buffer1); for(j=0;j35;j+) if(buffer1j=.) buffer1j=buffer1j+1; m_edit1+=(CString)buffer1; if(x10)m_edit1=-+m_edit1; m_edit1+=o;label :UpdateData(false);void CCalc
53、Dlg:Onshi_liu_jin_zhi() / TODO: Add your control notification handler code heredouble x1,x2,*p;int i=0,j=0;CString str1,str2,str3;char *s1,buffer135;str1=m_edit1;str2=str1;str3=str1;if(str2.Right(1)=B|str2.Right(1)=o|str2.Right(1)=H|str3.Left(1)=B|str3.Left(1)=o|str3.Left(1)=H) str2.Format( n! 不 能 將
54、 進 制 數(shù) 轉 換 為 十 六 進 制 );MessageBox(str2,馮凱溫馨提示);m_edit1=_T( );goto label;char s35;strncpy(s,(LPCTSTR)str1,sizeof(s);ssizeof(s)-1=0;for(i=0;si!=0;i+) if(si=.) str2.Format( 抱歉不能處理帶小數(shù)點的數(shù)!n 請輸入一個整數(shù)試試);MessageBox(str2,馮凱溫馨提示);m_edit1=_T( );goto label;else if(si=*|si=/)str2.Format( 抱歉不能處理這類表達式!n 請輸入一個不帶任何符
55、號的整數(shù)試試);MessageBox(str2,馮凱溫馨提示);m_edit1=_T( );goto label;for(i=0;si!=0;i+) if(si=+|si=-|si=*|si=/)&(si+1=+|si+1=-|si+1=*|si+1=/)str2.Format( n輸 入 的 表 達 式 錯 誤 ! n請 重 新 輸 入);MessageBox(str2,馮凱溫馨提示);m_edit1=_T( );goto label;m_edit1=_T( );x1=strtod(str1,&s1); if(x10)x2=-x1;else x2=x1; p=tranfrom(x2,16);
56、 for(i=0;pi!=#;i+) _gcvt(pi,32,buffer1); for(j=0;j35;j+) if(buffer1j=.) buffer1j=buffer1j+1; m_edit1+=(CString)buffer1; if(x10)m_edit1=-+m_edit1; m_edit1+=H;label :UpdateData(false);void CCalcDlg:OnCOS() / TODO: Add your control notification handler code herechar *s1,buffer120;CString str1,str2,str3
57、;int i=0;str1=m_edit1;str2=str1;str3=str2;if(str2.Right(1)=B|str2.Right(1)=o|str2.Right(1)=H|str3.Left(1)=B|str3.Left(1)=o|str3.Left(1)=H) str2.Format( n! 計 算 格 式 錯 誤 n請 重 新 輸 入);MessageBox(str2,馮凱溫馨提示);m_edit1=_T( );goto label;char s100;strncpy(s,(LPCTSTR)str1,sizeof(s);sstr1.GetLength()-1=0;for(i=
58、0;si!=0;i+) if(s0=.) str2.Format( 抱歉不能處理這類表達式!n 請輸入試試);MessageBox(str2,馮凱溫馨提示);m_edit1=_T( );goto label; OnDENG(); /調(diào)用等號子過程x=strtod(m_edit1,&s1);y=cos(x);_gcvt(y,6,buffer1);for(i=0;buffer1i!=0;i+) if(buffer1i=.&buffer1i+1=0)buffer1i=0;m_edit1=(CString)buffer1;label:UpdateData(false);void CCalcDlg:On
59、sin() / TODO: Add your control notification handler code herechar *s1,buffer120;CString str1,str2,str3;int i=0;str1=m_edit1;str2=str1;str3=str1;if(str2.Right(1)=B|str2.Right(1)=o|str2.Right(1)=H|str3.Left(1)=B|str3.Left(1)=o|str3.Left(1)=H) str2.Format( n! 計 算 格 式 錯 誤 n請 重 新 輸 入);MessageBox(str2,馮凱溫
60、馨提示);m_edit1=_T( );goto label;char s100;strncpy(s,(LPCTSTR)str1,sizeof(s);sstr1.GetLength()-1=0;for(i=0;si!=0;i+)if(s0=.) str2.Format( 抱歉不能處理這類表達式!n 請輸入試試);MessageBox(str2,馮凱溫馨提示);m_edit1=_T( );goto label; OnDENG(); /調(diào)用等號子過程x=strtod(m_edit1,&s1);y=sin(x);_gcvt(y,6,buffer1);for(i=0;buffer1i!=0;i+) if
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 課題申報參考:教育數(shù)字化轉型下高校輔導員數(shù)字素養(yǎng)測評及提升路徑研究
- 2025年度個人商鋪長期租賃合同標的物詳細清單3篇
- 二零二五年度出租房屋消防安全設施改造施工合同4篇
- 二零二五年度假離婚法律風險評估及解決方案合同3篇
- 2025年度無人機租賃合同協(xié)議書8篇
- 2025版木工預制構件生產(chǎn)與安裝合同范本4篇
- 個人合同擔保書(2024年樣本):教育貸款擔保2篇
- 2025年個人挖機租賃合同續(xù)簽協(xié)議4篇
- 2025年度個人委托醫(yī)療健康產(chǎn)業(yè)投資管理協(xié)議2篇
- 2025年門窗行業(yè)產(chǎn)業(yè)扶貧合作協(xié)議3篇
- 2025水利云播五大員考試題庫(含答案)
- 老年髖部骨折患者圍術期下肢深靜脈血栓基礎預防專家共識(2024版)解讀
- 中藥飲片驗收培訓
- 手術室專科護士工作總結匯報
- DB34T 1831-2013 油菜收獲與秸稈粉碎機械化聯(lián)合作業(yè)技術規(guī)范
- 創(chuàng)傷處理理論知識考核試題及答案
- 肝素誘導的血小板減少癥培訓課件
- 抖音認證承諾函
- 高等數(shù)學(第二版)
- 四合一體系基礎知識培訓課件
- ICD-9-CM-3手術與操作國家臨床版亞目表
評論
0/150
提交評論