原始碼和文件分享 基於C 語言的計算器的設計與實現

2021-09-27 11:09:54 字數 1296 閱讀 2695

一 需求分析

利用c#語言實現乙個計算器程式,包括普通計算器模式、科學計算器模式;實現實數(包括正數、負數、0)的加、減、乘、除、平方等基本遠算,並實現非負數的開方運算。

二 程式設計與實現

首先設計主窗體,包括兩個textbox用來顯示資料,使用資料繫結實現,在model中實現inotifypropertychanged介面,以起到資料更改通知的功能。乙個button和panel作為選單來切換計算器模式。最後乙個panel用來顯示不同模式的計算器輸入面板;

其次是標準計算器輸入面板。包括常用的數字和運算子以及delete,ce和清除按鈕。科學計算模式也只是多了幾個運算子而已。在後置**中獲取被單擊的按鈕的名稱,呼叫model中的print方法在textbox中顯示資料。

model中宣告兩個字串變數作為兩個textbox中的資料,還包括print方法,一方面得到按鈕的名稱,另一方面呼叫此程式中最重要的邏輯處理方法printtext方法。傳進去兩個值,即當前textbox中顯示的資料,輸出兩個值作為textbox在一系列處理之後應顯示的資料。

printandexpression類主要負責處理textbox的顯示和生成算術表示式。getvalue方法根據名字返回應顯示的字串。isopreation方法判斷字串是數字,一元操作符還是二元操作符及其他符號。printtext處理顯示格式。大致為當輸入數字的時候在textbox1中,每按下乙個操作符即將textbox1中的數字連線上操作符顯示在textbox2中,同時處理簡單的一元運算子的運算,生成表示式。最終將表示式傳遞給analyexpressions。將解析表示式運算之後的結果返回。

analyexpressions解析表示式,利用堆疊來實現,將中綴表示式分解之後儲存在字串陣列中,即所謂的「字尾表示式」。大致規則為:

將中綴表示式翻譯成字尾表示式

輸入中綴表示式: a+b*(c+d)-e/f

中綴表示式翻譯成字尾表示式的方法如下:

從左向右依次取得資料ch

如果ch是運算元,直接輸出

如果ch是運算子(含左右括號),則:

如果ch = 「(「,放入堆疊

如果ch = 「)」,依次輸出堆疊中的運算子, 直到遇到」(「為止

如果ch不是」)」或者」(「,那麼就和堆疊頂點位置的運算子top做優先順序比較

如果ch優先順序比top高,那麼 將ch放入堆疊

如果ch優先順序低於或者等於 top,那麼輸出top,然後將ch放入堆疊

如果表示式已經讀取完成,而堆疊中還有運算子時,依次由頂端輸出

原始碼和文件分享 C語言的基於棧實現的表示式求值

一 目的 理解中綴表示式求值的過程 理解中綴轉字尾表示式求值的過程 掌握堆疊的應用 二 問題描述 綴表示式,其中包含括號,加減乘除,乘方等運算,利用中綴表示式,對表示式分析並求值 入的中綴表示式轉換為字尾形式,顯示字尾形式,並通過字尾形式求值 三 資料結構 運算子結構體 typedef struct...

原始碼和文件分享 基於C語言的雜湊查詢的設計與實現

1 問題描述 編寫乙個程式實現雜湊表的相關運算。2 基本要求 完成如下功能 建立 16,74,60,43,54,90。46,31,29,88,77 雜湊表a 0.12 雜湊函式為h k key p,並用線性探查法解決衝突 在上述雜湊表中查詢關鍵字為29的記錄 在上述雜湊表中刪除關鍵字為77的記錄,再...

原始碼和文件分享 基於C語言的課程資訊管理系統

一 設計內容及要求 每門課程包含以下資訊項 課程編號,課程名稱,課程性質,學時,授課學時,實驗或上機學時,學分,開課學期。系統的主要功能包括 建立課程資訊檔案,根據提示輸入課程的各項資訊,然後將課程資訊儲存到乙個檔案中。增加課程資訊,在原有課程資訊檔案的基礎上增加新的課程資訊,要求繼續儲存至原檔案,...