計算器課程設計_第1頁
計算器課程設計_第2頁
計算器課程設計_第3頁
計算器課程設計_第4頁
計算器課程設計_第5頁
已閱讀5頁,還剩12頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、湖南文理學院課程設計報告課程名稱: 計算器程序設計 系 部: 電氣與信息工程學院 專業班級: 通信09102班 學生姓名: 邱金華 指導教師: 楊民生 完成時間: 2010/9/25 報告成績: 評閱意見: 評閱教師 日期 計算器程序設計第一章 綜述1.1 課題的現實意義現實學習生活中,常會遇到一些數目較大數據繁雜的數值運算,徒手運算起來很困難,這時候我們就必須用到計算器,所以便著手開發了這個計算器程序,以便用于自己的學習工作。人們對計算的要求不斷提高,普通的功能簡單的僅能進行四則運算的計算工具已經不能滿足需要,需要一種能進行多種計算。現在已經有一些功能較為強大、涵蓋面較廣的計算軟件,而且各種

2、平臺的小工具仍不斷出現。這些大大方便了我們的生活給我們更多的選擇和實現方式。這個程序可以直接輸入數學表達式,不需要任何轉換,就可以直接輸出數學四則運算的結果。并且操作簡單、界面清晰、靈活、實用、方便等要求出發,它所能完成的主要計算功能有以下幾個方面:加法,減法,乘法,除法,求冪,求模,求平方根,求Sin,求Cos,求Log10。計算器的設計使我們所學到的c語言知識在現實中得到檢驗!信息時代是科技和經濟發展的產物,軟件產業是信息時代的產物,它在我們的生活工作中發揮著越來越大的作用,計算器的設計對我們知識的掌握有很大的作用,更能方便他人,可行性很強!1.2 硬件環境一臺完整的電腦,包括鍵盤、鼠標,

3、最小硬盤空間1GHz<1> 386,486,586及兼容機.640K基本內存;<2> 1M以上擴充內存,10M以上的顯示內存.1.3 軟件環境開發環境:本系統的設計采用的是TC語言開發Windows XP sp2操作系統,Turbo C 2.0漢化版 , WPS word第二章 程序的作用及設計目的2.1 程序的功能作用計算器是Windows 操作系統提供的一個附件功能許多人用Visual Basic Visual C+等編制計算器,由于這些程序提供了控件所以實現相對容易。Turbo C 沒有控件,但我們可以利用它所具有的函數模仿畫出其界面,實現計算器的基本功能,進行浮

4、點數加、減、乘、除、乘方和求模運算。2.2 程序設計目的通過本程序訓練讀者程序設計的基本技能,掌握字符串的表示方法和字符串函數的功能、Turbo C 圖形操作的基本知識、鍵盤上特殊鍵的獲取以及圖形方式下光標的顯示。第三章 程序分析和設計實現計算器功能,首先是輸出計算器圖形樣式,然后是通過按鍵的方式實現數值運算。所以程序主要由兩大部分實現,一部分功能是顯示計算器,一部分是實現計算功能顯示。計算器是在屏幕上顯示圖形,Turbo C 提供了PC 系統環境下擴充的屏幕和圖形支持系統,利用此系統提供的字符屏幕處理函數和圖形系統的有關信息及函數即可很好地實現。計算功能主要要解決的是接收按鍵信息的處理,要進

5、行識別,如果按鍵是數字符號,要將其轉變為操作數,如果是運算操作符,則進行相應的處理。3.1 主界面首先是畫一個帶標題calculator 的窗口,窗口為一白色邊框,窗口中最上面是一個綠色光條,此光條上顯示數字和運算結果,光條下有20 個紅色邊框的灰色矩形塊模擬命令按鈕按鈕,上面顯示有數字和運算符號,并且在按鈕上有圖形光,標通過移動光標鍵移動到所需位置,按回車鍵即選擇了相應的符號。主界面如圖2-1。 所示光標移動到字符Q 上,按回車鍵結束運算.3.2 設計思路(1) main()主函數設置了程序的流程,首先初始化圖形系統,然后調用計算器computer()函數進行計算,當從計算器程序返回時,關閉

6、圖形系統,結束程序。(2) initialize()初始化函數Turbo C 通常的工作方式是字符文本模式,要顯示圖形,調用圖形函數,則必須進入圖形工作方式,應首先調用函數initgraph(&GraphDriver, &GraphMode, "" )初始化圖形系統,并裝入相應的圖形驅動器。該函數把由GraphDriver 所指向的圖形驅動器代碼裝入內存。如果圖形驅動器未裝入內存,圖形函數將不能操作圖形函數所用的屏顯模式由GraphMode所指向的整數值確定。該函數的第三個參數為圖形驅動器的路徑,設為空串表示在當前工作路徑上尋找。圖形驅動器包含在.BGI 文

7、件中,且必須在該系統下是可用的,.BGI 程序在Turbo 的目錄下。用DETECT 自動檢測目前系統屏顯硬件的類型,并且選用最大分辨率的屏顯模式。初始化后將一些信息保存在相應的變量中,以備后用。如果圖形初始化失敗,則程序結束。為了方便設計計算器界面,在這個函數中,獲取了圖形屏幕的最大尺寸以及縱橫比。(3) mwindow() 主窗口函數設置視口大小為當前窗口的一半,然后調用畫邊框函數drawboder()畫出邊框。本程序視口設置在左上角位置,讀者可以自行計算將視口設在屏幕中央,同時將計算函數中的圖形輸出做相應的調整。(4) drawboder()畫邊框函數通過函數getviewsetting

8、s(&vp)把有關當前視口的信息裝入由vp 所指向的結構中。vp是struct viewporttype 類型,其結構定義如下:struct viewporttypeint left,top,right,bottom;int clip;域left 、top、 right、 bottom 中存放視口左上角和右下角的坐標。當clip 為0時不進行對超出視口邊界輸出的剪裁,否則,執行剪裁以防止超出邊界。字符屏幕操作和圖形函數的核心是窗口,它是屏幕的活動部分,在這個活動窗口中將顯示輸出。Turbo C 在字符屏幕和圖形系統之間用了稍微不同的術語,以保持兩個系統的獨立。字符屏幕的函數提供了窗口(

9、Window), 而圖形系統提供了視口(Viewport), 但概念是一樣的,但是當屏幕用字符模式時,左上角坐標為(1,1), 而在圖形狀態下,左上角坐標為(0,0)。根據視口坐標,利用畫矩形函數rectangle()畫出邊框線。本程序視口設置在屏幕的左上角位置,我們可以自行計算將視口設在屏幕中央,同時將計算器函數中的圖形輸出做相應的調整。(5) computer()計算器函數該函數是本程序的主要函數,其流程是先調用mwindow()函數顯示一白色邊框的窗口,再在窗口中顯示計算器,然后接收按鍵進行運算。為了布局合理、操作方便要根據窗口大小設計按鈕的大小和位置。讀取當前窗口的大小后,設置了兩個單

10、位變量width 和height, 圖形顯示以這兩個變量為計算單位,布局如圖2-2 所示。圖中的符號按鈕利用函數setfillstyle()設置用淡綠色實體填充模式,然后用bar()函數畫一個二維矩形條,setcolor()函數設置邊框線顏色,rectangle()函數畫一個矩形邊框線,利用outtextxy()函數將預先存儲在str1 中的字符串中的字符輸出,因為outtextxy()輸出的是字符串,所以先利用函數sprintf()將要輸出的字符寫入字符數組str2, 轉變為字符串,然后輸出。界面設置好后,首先在第一個按鈕位置顯示光標,此時可以移動和按下光標,當按下Alt+X 鍵時可以結束程

11、序,否則執行循環判斷移動的是哪個光標鍵,變量m 和n 記錄光標位置,光標移動某個位置按回車后則程序判斷所按的字符進行相應的處理:1 當所選為數字或小數點,則先判斷是否為負數,如果是負數則將符號連接到字符串中,否則只連接所選的數字或小數點,并顯示數據。2 當所選為“-” 時先判斷有無操作數,沒有則為負數,做負數標記,否則是做減法,做減法標志,并將當前的操作數保存3 當所選為”+”, “*”, “/”, “” ,”%”, 時處理方式一樣均是先保存第一個操作數,做運算標志。準備接受第二個操作數4 當所選為“=” 時,根據運算符號標志值act 進行相應的運算,將結果顯示。5. 當所選為“c” 時,表示

12、清零,所以將第一和第二操作數均置0。6. 當所選為“Q” 時,則運算結束。數據和結果的顯示仍然是用outtextxy()函數,并且利用填充二維矩形條覆蓋前一次的輸出.(6) arrow()設計圖形鼠標函數由于在圖形方式下,光標是不可見的,所以為了能正確地選擇按鈕,自己設計一個光標圖形。方法是用fillpoly(8,raw)畫一個由raw 所指向的數組中定義的8 個x、 y 坐標點所圍成的封閉圖形。用當前填充模式和顏色對該形狀進行填充后形狀像鼠標,利用函數imagesize()測試圖像大小,分配內存區域,將圖像保存,通過圖像的讀取函數getimage()和putimage()以及圖像算子異或XO

13、R_PUT 操作實現光標圖像的顯示和隱藏,同一位置兩次異或,圖像就消去了。(7) specialkey()讀取特殊鍵函數利用函數bioskey(1)讀取用戶所按鍵的信息,int bioskey(int cmd) 函數原型在bios.h 中,功能是完成直接鍵盤操作。如果cmd 是0, bioskey()返回下一個在鍵盤鍵入的值(它將等待到按下一個鍵)。它返回一個16 位的二進制數,包括兩種不同的值。當按下”普通鍵”時,它的低8 位數存放該字符的ASCII 碼;對于“特殊鍵”,低8 位為0。 “特殊鍵”包括箭頭鍵、功能鍵等高8 位字節存放該鍵的掃描碼,所以程序中用到了語句key=bioskey(0

14、), 表示返回下一個在鍵盤上按下的鍵,并保存在變量key 中,key=key&0xff?key&0xff:key>>8 ,對所按的鍵進行判斷,如果key&0xff 為真,即低8 位不為0, 則說明按下的是普通鍵,因為 0xff 16 進制數代表的二進制碼高8 位為0,低8 位為1。 和0 相與,結果為0, 和1 相與,結果保持原數。這樣就將低8 位,也就是該字符的ASCII 碼值賦給key, 如果key&0xff 為假,即低8 位為0 ,說明按下的是特殊鍵,將key 右移8 位后,也就是將其高8 位值賦給key。cmd 如果是1, bioskey()

15、查詢是否按下了一個鍵,當按下一個鍵時返回非0 值,否則返回0 值,所以用while(bioskey(1)=0) 語句等待按鍵。(8)程序的運行和退出1.運行 通過Tubro C安裝路徑找到TC2.0文件夾中的tc.exe文件,雙擊該文件,即可進入TC2.0環境。2.退出退出TC可以按F10鍵進入主菜單,選擇File菜單下的Quit命令,再按回車鍵即可退出TC環境。(也可以在TC環境下直接按Alt+X鍵退出程序。這是TC環境下的熱鍵) 第四章 程序測試程序調試是指對程序的查錯和排錯。為了便于查錯、閱讀,在設計該程序的過程中我們采用了結構化程序方法編輯,添加了盡可能多的注釋,這就為接下來的調試過程

16、帶來了很多方便。經過仔細檢查之后進行上機調試。進行編譯,如果在編譯和連接過程中發現錯誤,屏幕上顯示了出錯信息,根據提示找到出錯的位置,加以改正,再進行編譯如此反復,直到順利通過編譯和連接為止。在本次實習過程中碰到的編譯、連接的錯誤主要有:缺少變量定義,定義位置不正確、語法錯誤、轉義字符漏用、邏輯錯誤等。41 系統測試系統測試結果如下:輸出:錯誤C:jisuanqibyjzj.TXT 183: 未定義的符號'LEFT'在 Run 函數中錯誤 C:jisuanqibyjzj.TXT 183: 需要用常量表達式在 Run 函數中錯誤: C:jisuanqibyjzj.TXT 393:

17、main的宣告;開始編譯文件: C:jisuanqibyjzj.TXT42 調試根據電腦所給的提示出現語法錯誤,缺少變量的定義大多的語法錯誤在通過書本參考下能夠修改。主要是平時看書不仔細、不太注意而產生的。如沒有注意具體數據使用是有一定的范圍限定;過分重視分號的重要性而在for、if、while語句中畫蛇添足加分號;在使用文件的時候忘記將文件先打開,對打開的方式與使用的情況不太注意而造成不匹配;還有漏掉形參的定義是值不能傳遞等等。這些語法錯誤有信息框的提示一般是能夠排除的。另外還有部分注釋的位置也錯了,最重要的是邏輯上的錯誤,一般電腦不容易發現。所以更要對程序仔細的檢查。經認真修改之后重新保存

18、文件。4.3 錯誤原因分析一缺少變量定義,定義位置不正確由于該程序相對來講稍有些長,前后有些變量不容易聯系起來,但是在錯誤信息的提示下一般還是很容易找到。不過需要注意的是在定義的時候有些函數使用同樣的變量名而表示不同的作用,因而使用要很小心,定義及定義的位置要特別留意。為減少這樣的錯誤我后來還是用不同的變量名來表示,結果引起的那些錯誤解決了。例如: 未定義void mwindow(char *header); /*窗口函數*/ 或mwindow( "Calculator" ); /* 顯示主窗口 */,所以輸出void mwindow( char *header )中就有錯

19、誤,因為缺少定義。語法錯誤大多的語法錯誤在通過書本參考下能夠修改。主要是平時缺乏鍛煉、不太注意而產生的。如沒有注意具體數據使用是有一定的范圍限定;過分重視分號的重要性而在for、if、while語句中畫蛇添足加分號;在使用文件的時候忘記將文件先打開,對打開的方式4.4 錯誤原因分析二注釋的位置程序設計中在注釋的時候不能同我們平常寫字一樣隨心所欲,我們應該注意注釋的格式。注釋中不能含有c語言可執行的語句!邏輯錯誤編譯、連接的成功并不意味著程序的最終成功。邏輯上的錯誤機器不易檢查出來,這時需要對數據結果進行分析。這種錯誤的查找是最難的,需要有相當的耐心和細心去把問題找出來。這也是本次程序編輯過程中

20、碰到的最大的難題。往往運行之后得不到另人滿意的結果,此時解決的方法一則用“分段檢查”的方法,在程序的不同位置設幾個printf函數語句,輸出有關變量的值,逐段往下檢查,對檢查出的錯誤進行修改,當調試完畢將設置的printf都刪去。若在程序中找不到問題,則再來考慮算法是否邏輯嚴謹,再進行修改。如此循環往復,直到最后程序運行成功。在本次程序編輯過程中,我就是常遇到編譯能通過,能夠運行程序,但是總在輸入、刪除等操作完之后再想去看數據文件中存在的數據記錄的時候,卻一條記錄也顯示不出來,可能是對n變量的定義或使用出錯了,于是在每個主要函數的操作過程中添加了printf語句用來顯示n的變化,在執行某個函數

21、前添加插入語句顯示n的起始值,在執行完該個函數后再添加插入語句顯示此時n的結果值,觀察n的變化是否正確,如果錯誤了,也就說明該函數編寫過程有錯。諸如這樣的調試方法,不斷縮小檢查范圍,最后將錯誤找到,進行修改。所以到最后我找到了錯誤,及時改正,終于把程序完成了,一切功能顯示正常。第五章 用戶使用說明書 51 運行Turbo C程序進入計算器界面通過他Tubroc 的路徑找到TC文件夾找到TC文件夾中的tc.exe文件,并用鼠標雙擊該文件名進入TC環境。打開jisuanqibyjzj.c文件52 計算器的使用 基本使用:用控制鼠標圖形移動,當移動到相應得按鈕時按回車鍵輸入當前數字或執行對應的函數。

22、加法:輸入一個被加數數,按“+”,輸入被加數,按“=”,輸出結果。減法:輸入被減數數,按“-”,輸入減數,按“=”,輸出結果。乘法: 輸入一個數,按“*”,輸入另個數,按“=”,輸出結果。除法: 輸入一個被除數,按“+”,輸入另個除數,按“=”,輸出結果。求x的y次方: 輸入數x,按“”,輸入數y,按“=”,輸出結果。53 退出程序退出TC可以按F10鍵進入主菜單,選擇File菜單下的Quit命令,再按回車鍵即可退出TC環境。(也可以在TC環境下直接按Alt+X鍵退出程序。這是TC環境下的熱鍵) 第六章 心得體會及總結經過了一個星期的c語言程序設計終于在老師的細心指導和同學的熱情幫助下基本完成

23、了計算器課題的設計修改任務,雖然有些地方不盡如人意但是初步達到了對自己的要求。剛開始設計的時候找不到頭緒,不知道該從哪里下手,通過向同學詢問和向老師尋求幫助找走進了設計的門檻。通過網上查找到很多成功的計算器程序,通過對那些已經成功地程序進行分析找到自己的設計思路,制定設計流程。并通過比較各種程序了解各個程序的利弊,從而明確自己計算器的設計方向和如何通過技術手段達到自己的目的。萬事開頭難,可是對于并不是很熟悉的c語言在下面的工作中困難處處能遇見.通過查找c語言教材去圖書館查找相關的資料和同學一起討論終于把一個個棘手的陌生的問題解決。測試階段中發現了幾處錯誤導致程序不能編譯,通過耐心的分析源代碼終

24、于編好了一個完整無誤的程序。編程是一件很枯燥很無聊的事情,但是出于完成作業,得到學分的壓力,還必須強破自己堅持下去,按照老師所說的模塊化思想,分部分的進行編寫。而且編程是一件高精度、模范化的事情,稍有疏乎都會影響全局,也可能因為某一處的小的錯誤而導致整個程序的無法運行。所以認真仔細就是非常重要的了。 在這次的c語言程序設計實習中遇到了現實編程中必然見到的問題通過這些問題的解決積累了編程的實踐經驗。在實際的編程操作中發現自己c語言知識的不足,加深了對c語言的理解。在學習之余體驗到收獲的感覺。同時認識到程序員的工作并不是我們想象的那么簡單輕松的,在現在的編程中要有足夠的耐心和熱情。通過這次課程設計

25、,使我對C語言有了更進一步的認識和了解,要想學好它要重在實踐,要通過不斷的上機操作才能更好地學習它,我也發現我的好多不足之處,首先是自己在指法上還不行,經常按錯字母,通過學習也有所改進;再有對C語言的一些標準庫函數不太了解,還有對函數調用的正確使用不夠熟悉,還有對C語言中經常出現的錯誤也不了解,通過實踐的學習,我認識到學好計算機要重視實踐操作,不僅僅是學習C語言,還是其它的語言,以及其它的計算機方面的知識都要重在實踐,所以后在學習過程中,我會更加注視實踐操作,使自己便好地學好計算機。在課程設計過程中,收獲知識,提高能力的同時,我也學到了很多人生的哲理,懂得怎么樣去制定計劃,怎么樣去實現這個計劃

26、,并掌握了在執行過程中怎么樣去克服心理上的不良情緒。因此在以后的生活和學習的過程中,我一定會把課程設計的精神帶到生活中,不畏艱難,勇往直前! 附: 源程序#include <dos.h> /*DOS接口函數*/#include <math.h> /*數學函數的定義*/#include <conio.h> /*屏幕操作函數*/#include <stdio.h> /*I/O函數*/#include <stdlib.h> /*庫函數*/#include <stdarg.h> /*變量長度參數表*/#include <gr

27、aphics.h> /*圖形函數*/#include <string.h> /*字符串函數*/#include <ctype.h> /*字符操作函數*/#define UP 0x48 /*光標上移鍵*/#define DOWN 0x50 /*光標下移鍵*/#define LEFT 0x4b /*光標左移鍵*/#define RIGHT 0x4d /*光標右移鍵*/#define ENTER 0x0d /*回車鍵*/void *rar; /*全局變量,保存光標圖象*/struct palettetype palette; /*使用調色板信息*/int GraphDr

28、iver;/* 圖形設備驅動*/int GraphMode;/* 圖形模式值*/int ErrorCode;/* 錯誤代碼*/int MaxColors;/* 可用顏色的最大數值*/int MaxX, MaxY;/* 屏幕的最大分辨率*/double AspectRatio;/* 屏幕的像素比*/void drawboder(void); /*畫邊框函數*/void initialize(void); /*初始化函數*/void computer(void); /*計算器計算函數*/void changetextstyle(int font, int direction, int charsi

29、ze); /*改變文本樣式函數*/void mwindow(char *header); /*窗口函數*/int specialkey(void) ; /*獲取特殊鍵函數*/int arrow(); /*設置箭頭光標函數*/*主函數*/int main() initialize();/* 設置系統進入圖形模式*/ computer();/*運行計算器*/ closegraph();/*系統關閉圖形模式返回文本模式*/ return(0); /*結束程序*/* 設置系統進入圖形模式*/void initialize(void) int xasp, yasp;/* 用于讀x和y方向縱橫比*/ Gr

30、aphDriver = DETECT; /* 自動檢測顯示器*/ initgraph( &GraphDriver, &GraphMode, "" );/*初始化圖形系統*/ ErrorCode = graphresult();/*讀初始化結果*/ if( ErrorCode != grOk ) /*如果初始化時出現錯誤*/ printf("Graphics System Error: %sn", grapherrormsg( ErrorCode ) ); /*顯示錯誤代碼*/ exit( 1 ); /*退出*/ getpalette( &

31、amp;palette );/* 讀面板信息*/ MaxColors = getmaxcolor() + 1;/* 讀取顏色的最大值*/ MaxX = getmaxx(); /* 讀屏幕尺寸*/ MaxY = getmaxy(); /* 讀屏幕尺寸*/ getaspectratio( &xasp, &yasp );/* 拷貝縱橫比到變量中*/ AspectRatio = (double)xasp/(double)yasp;/* 計算縱橫比值*/*計算器函數*/void computer(void) struct viewporttype vp; /*定義視口類型變量*/ int

32、 color, height, width; int x, y,x0,y0, i, j,v,m,n,act,flag=1; float num1=0,num2=0,result; /*操作數和計算結果變量*/ char cnum5,str220="",c,temp20="" char str1="1230.456+-789*/Qc=%"/* 定義字符串在按鈕圖形上顯示的符號 */ mwindow( "Calculator" ); /* 顯示主窗口 */ color = 7; /*設置灰顏色值*/ getviewse

33、ttings( &vp ); /* 讀取當前窗口的大小*/ width=(vp.right+1)/10; /* 設置按鈕寬度 */ height=(vp.bottom-10)/10 ; /*設置按鈕高度 */ x = width /2; /*設置x的坐標值*/ y = height/2;/*設置y的坐標值*/ setfillstyle(SOLID_FILL, color+3); bar( x+width*2, y, x+7*width, y+height ); /*畫一個二維矩形條顯示運算數和結果*/ setcolor( color+3 ); /*設置淡綠顏色邊框線*/ rectang

34、le( x+width*2, y, x+7*width, y+height ); /*畫一個矩形邊框線*/ setcolor(RED); /*設置顏色為紅色*/ outtextxy(x+3*width,y+height/2,"0."); /*輸出字符串"0."*/ x =2*width-width/2; /*設置x的坐標值*/ y =2*height+height/2; /*設置y的坐標值*/ for( j=0 ; j<4 ; +j ) /*畫按鈕*/ for( i=0 ; i<5 ; +i ) setfillstyle(SOLID_FILL

35、, color); setcolor(RED); bar( x, y, x+width, y+height ); /*畫一個矩形條*/ rectangle( x, y, x+width, y+height ); sprintf(str2,"%c",str1j*5+i); /*將字符保存到str2中*/ outtextxy( x+(width/2), y+height/2, str2); x =x+width+ (width / 2) ;/*移動列坐標*/ y +=(height/2)*3;/* 移動行坐標*/ x =2*width-width/2; /*復位列坐標*/ x0

36、=2*width; y0=3*height; x=x0; y=y0; gotoxy(x,y); /*移動光標到x,y位置*/ arrow(); /*顯示光標*/ putimage(x,y,rar,XOR_PUT); m=0; n=0; strcpy(str2,""); /*設置str2為空串*/ while(v=specialkey()!=45) /*當壓下Alt+x鍵結束程序,否則執行下面的循環*/ while(v=specialkey()!=ENTER) /*當壓下鍵不是回車時*/ putimage(x,y,rar,XOR_PUT); /*顯示光標圖象*/ if(v=R

37、IGHT) /*右移箭頭時新位置計算*/ if(x>=x0+6*width) /*如果右移,移到尾,則移動到最左邊字符位置*/ x=x0; m=0; else x=x+width+width/2; m+; /*否則,右移到下一個字符位置*/ if(v=LEFT) /*左移箭頭時新位置計算*/ if(x<=x0) x=x0+6*width; m=4; /*如果移到頭,再左移,則移動到最右邊字符位置*/ else x=x-width-width/2;m-; /*否則,左移到前一個字符位置*/ if(v=UP) /*上移箭頭時新位置計算*/ if(y<=y0) y=y0+4*hei

38、ght+height/2;n=3; /*如果移到頭,再上移,則移動到最下邊字符位置*/ else y=y-height-height/2; n-; /*否則,移到上邊一個字符位置*/ if(v=DOWN) /*下移箭頭時新位置計算*/ if(y>=7*height) y=y0; n=0; /*如果移到尾,再下移,則移動到最上邊字符位置*/ else y=y+height+height/2;n+; /*否則,移到下邊一個字符位置*/ putimage(x,y,rar,XOR_PUT); /*在新的位置顯示光標箭頭*/ c=str1n*5+m; /*將字符保存到變量c中*/ if(isdig

39、it(c)|c='.') /*判斷是否是數字或小數點*/ if(flag=-1) /*如果標志為-1,表明為負數*/ strcpy(str2,"-"); /*將負號連接到字符串中*/ flag=1; /*將標志值恢復為1*/ sprintf(temp,"%c",c); /*將字符保存到字符串變量temp中*/ strcat(str2,temp); /*將temp中的字符串連接到str2中*/ setfillstyle(SOLID_FILL,color+3); bar(2*width+width/2,height/2,15*width/2,

40、3*height/2); outtextxy(5*width,height,str2); /*顯示字符串*/ if(c='+') num1=atof(str2); /*將第一個操作數轉換為浮點數*/ strcpy(str2,""); /*將str2清空*/ act=1; /*做計算加法標志值*/ setfillstyle(SOLID_FILL,color+3); bar(2*width+width/2,height/2,15*width/2,3*height/2); outtextxy(5*width,height,"0."); /*顯示

41、字符串*/ if(c='-') if(strcmp(str2,"")=0) /*如果str2為空,說明是負號,而不是減號*/ flag=-1; /*設置負數標志*/ else num1=atof(str2); /*將第二個操作數轉換為浮點數*/ strcpy(str2,""); /*將str2清空*/ act=2; /*做計算減法標志值*/ setfillstyle(SOLID_FILL,color+3); bar(2*width+width/2,height/2,15*width/2,3*height/2); /*畫矩形*/ outte

42、xtxy(5*width,height,"0."); /*顯示字符串*/ if(c='*') num1=atof(str2); /*將第二個操作數轉換為浮點數*/ strcpy(str2,""); /*將str2清空*/ act=3; /*做計算乘法標志值*/ setfillstyle(SOLID_FILL,color+3); bar(2*width+width/2,height/2,15*width/2,3*height/2); outtextxy(5*width,height,"0."); /*顯示字符串*/ if

43、(c='/') num1=atof(str2); /*將第二個操作數轉換為浮點數*/ strcpy(str2,""); /*將str2清空*/ act=4; /*做計算除法標志值*/ setfillstyle(SOLID_FILL,color+3); bar(2*width+width/2,height/2,15*width/2,3*height/2); outtextxy(5*width,height,"0."); /*顯示字符串*/ if(c='') num1=atof(str2); /*將第二個操作數轉換為浮點數*/

44、 strcpy(str2,""); /*將str2清空*/ act=5; /*做計算乘方標志值*/ setfillstyle(SOLID_FILL,color+3); /*設置用淡綠色實體填充*/ bar(2*width+width/2,height/2,15*width/2,3*height/2); /*畫矩形*/ outtextxy(5*width,height,"0."); /*顯示字符串*/ if(c='%') num1=atof(str2); /*將第二個操作數轉換為浮點數*/ strcpy(str2,"")

45、; /*將str2清空*/ act=6; /*做計算模運算乘方標志值*/ setfillstyle(SOLID_FILL,color+3); /*設置用淡綠色實體填充*/ bar(2*width+width/2,height/2,15*width/2,3*height/2); /*畫矩形*/ outtextxy(5*width,height,"0."); /*顯示字符串*/ if(c='=') num2=atof(str2); /*將第二個操作數轉換為浮點數*/ switch(act) /*根據運算符號計算*/ case 1:result=num1+num2

46、;break; /*做加法*/ case 2:result=num1-num2;break; /*做減法*/ case 3:result=num1*num2;break; /*做乘法*/ case 4:result=num1/num2;break; /*做除法*/ case 5:result=pow(num1,num2);break; /*做x的y次方*/ case 6:result=fmod(num1,num2);break; /*做模運算*/ setfillstyle(SOLID_FILL,color+3); /*設置用淡綠色實體填充*/ bar(2*width+width/2,height/2,15*width/2,3*height/2); /*覆蓋結果區*/ sprintf(temp,"%f",result); /*將結果保存到temp中*/ outtextxy(5*width,height,temp); /*顯示結果*/ if(c='c') num1=0; /*將兩個操作數復位0,符號標志為1*/ num2=0; flag=1; strcpy(str2,""); /*將str2清空*/ setfillstyle(SOLID_FILL,color+3); /*設置用淡綠色實體填充*/ bar

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論