C語言課程設(shè)計計算器程序設(shè)計報告書_第1頁
C語言課程設(shè)計計算器程序設(shè)計報告書_第2頁
C語言課程設(shè)計計算器程序設(shè)計報告書_第3頁
C語言課程設(shè)計計算器程序設(shè)計報告書_第4頁
C語言課程設(shè)計計算器程序設(shè)計報告書_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、課程設(shè)計說明書題 目 計算器程序設(shè)計 起訖日期 2006 年 7月 3日至 2006 年 8月 6日所在院系 軟件學院 專 業(yè) 機械+軟件 班 級 04-2 學生姓名 學 號 指導(dǎo)教師 2010年 8 月 日摘 要 當今社會是信息社會,科技經(jīng)濟高速發(fā)展的社會!為了更方便人們的工作生活和加速人們處理信息的速度,計算器應(yīng)運而生。由于它體積小巧,攜帶方便,價格便宜,構(gòu)造簡單等諸多的優(yōu)點成為人們生活中的必備品! 隨著科技的發(fā)展計算器的種類變得更多,功能變得更強大,體積變得更??!電腦的出現(xiàn)改變?nèi)藗兊纳盍晳T,很多事情都可以電腦來完成!電腦的更大一個優(yōu)點就是可以通過軟件的應(yīng)用無限的延伸電腦功能的外延!下面

2、我們將用我們學習的c語言編寫一個簡易的計算器程序!實現(xiàn)簡單的初步的計算功能! 本程序的編寫基礎(chǔ)是tubro c2.0漢化版,它在tubro c的原有基礎(chǔ)上實現(xiàn)了多漢字的支持方便了我們的使用。生成的程序可移植性強兼容性好穩(wěn)定!現(xiàn)在只實現(xiàn)了加、減、乘、除、求冪、求模,求平方根,求sin,求cos,求log10,以及一個時鐘原代碼。這個系統(tǒng)是基于軟件發(fā)展的生命周期來研制的,它可以直接輸入數(shù)學表達式,不需要任何轉(zhuǎn)換,就可以直接輸出數(shù)學四則運算的結(jié)果。但是,每次只能運算一個表達式。不能運算多個表達式。在程序里面在添加一組選擇函數(shù)即可。本論文主要介紹了本課題的開發(fā)背景,開發(fā)的過程和所要完成的功能。重點的說

3、明了系統(tǒng)設(shè)計思想,設(shè)計的步驟、難點技術(shù)和解決方案。關(guān)鍵詞:c語言 tubro c 2.0漢化版 計算器 時鐘 目 錄第一章 綜述111 課題的現(xiàn)實意義112 軟件環(huán)境113 硬件環(huán)境1第二章 系統(tǒng)設(shè)計流程圖221 系統(tǒng)流程圖222 主要功能表2第三章 系統(tǒng)分析和設(shè)計331 圖形的繪制和輸出332 文本的輸出顯示3 33 計算函數(shù)的調(diào)用434 程序的運行和退出5第四章 系統(tǒng)測試641 系統(tǒng)測試642 調(diào)試643 錯誤原因分析一644 錯誤原因分析二6 第五章 用戶使用說明書851 運行turbo c程序進入計算器界面852 計算器的使用9 53 退出程序9 第六章 工作總結(jié)10 參考文獻11附錄

4、: 源代碼第一章 綜述1.1 課題的現(xiàn)實意義現(xiàn)實學習生活中,常會遇到一些數(shù)目較大數(shù)據(jù)繁雜的數(shù)值運算,徒手運算起來很困難,這時候我們就必須用到計算器,所以便著手開發(fā)了這個計算器程序,以便用于自己的學習工作。人們對計算的要求不斷提高,普通的功能簡單的僅能進行四則運算的計算工具已經(jīng)不能滿足需要,需要一種能進行多種計算。現(xiàn)在已經(jīng)有一些功能較為強大、涵蓋面較廣的計算軟件,而且各種平臺的小工具仍不斷出現(xiàn)。這些大大方便了我們的生活給我們更多的選擇和實現(xiàn)方式。這個程序可以直接輸入數(shù)學表達式,不需要任何轉(zhuǎn)換,就可以直接輸出數(shù)學四則運算的結(jié)果。并且操作簡單、界面清晰、靈活、實用、方便等要求出發(fā),它所能完成的主要計

5、算功能有以下幾個方面:加法,減法,乘法,除法,求冪,求模,求平方根,求sin,求cos,求log10。計算器的設(shè)計使我們所學到的c語言知識在現(xiàn)實中得到檢驗!信息時代是科技和經(jīng)濟發(fā)展的產(chǎn)物,軟件產(chǎn)業(yè)是信息時代的產(chǎn)物,它在我們的生活工作中發(fā)揮著越來越大的作用,計算器的設(shè)計對我們知識的掌握有很大的作用,更能方便他人,可行性很強!1.2 硬件環(huán)境一臺完整的電腦,包括鍵盤、鼠標,最小硬盤空間1ghz 386,486,586及兼容機.640k基本內(nèi)存; 1m以上擴充內(nèi)存,10m以上的顯示內(nèi)存.1.3 軟件環(huán)境開發(fā)環(huán)境:本系統(tǒng)的設(shè)計采用的是tc語言開發(fā)windows xp sp2操作系統(tǒng),turbo c 2

6、.0漢化版 , wps word第二章 程序設(shè)計流程圖21 系統(tǒng)流程圖(圖 1)開始輸入第一個操作數(shù)加法減法乘法除法求冪求模開平方求正弦求余弦求對數(shù)輸入第二個操作數(shù)顯示結(jié)果寄存器清零結(jié)束22 主要功能表(表 1)序號文件名主要功能備注1+加法兩個操作數(shù)2-減法兩個操作數(shù)3*乘法兩個操作數(shù)4/除法兩個操作數(shù)5%求模兩個操作數(shù)6求x的y次冪兩個操作數(shù)7s求平方根一個操作數(shù)8o求sin一個操作數(shù)9i求cos一個操作數(shù)10l求log10一個操作數(shù)11=等于12c寄存器清零13q退出表 1第三章 系統(tǒng)分析和設(shè)計3.1 圖形的繪制和輸出在turbo c環(huán)境下,繪制程序中的計算器的圖形,計算器的輸入輸出和顯

7、示結(jié)果的顯示屏,繪制計算器的按鍵,繪制邊框。turbo c為用戶提供了一個功能很強的畫圖軟件庫,它又稱為borland圖形接口,它包括圖形庫文件(graphics.lib),圖形頭文件(graphics.h)和許多圖形顯示器(圖形終端)的驅(qū)動程序(如cga.bgi、egavga.bgi等)。還有一些字符集的字體驅(qū)坳程序(如goth.chr黑體字符集等)。編寫圖形程序時用到的一些圖形庫函數(shù)均在graphics.lib 中,執(zhí)行這些函數(shù)時,所需的有關(guān)信息(如宏定義等)則包含在graphics.h頭文件中。因此用戶在自已的畫圖源程序中必須包括graphics.h頭文件,在進行目標程序連接時,要將gr

8、aphics.lib連接到自己的目標程序中去。在編制圖形程序時,進入圖形方式前,首先要在程序中對使用的圖形系統(tǒng)初始化,即要用什么類型的圖形顯示適配器的驅(qū)動程序,采用什么模式的圖形方式(也就是相應(yīng)程序的入口地址),以及該適配器驅(qū)動程序的尋找路徑名。所用系統(tǒng)的顯示適配器一定要支持所選用的顯示模式,否則將出錯。turbo.c提供了一個圖形系統(tǒng)初始化函數(shù)initgraph可完成這些功能。當我們使用的存儲模式為tiny(微型)、 small(小型)或medium(中型)時,不需要遠指針,因而可以將初始化函數(shù)調(diào)用格式寫成如下形式(該說明適用于后面所述的任一函數(shù)): intitgrapg(&graphdri

9、ver, &graphmode,”); 其中驅(qū)動程序目錄路徑為空字符“”時,表示就在當前目錄下,參數(shù)graphmode用所示的模式號或標示符來定義,參數(shù)graphdriver是一個枚舉變量detect,cga,vga,,一般: graphdriver=detect一旦執(zhí)行了初始化,顯示器即被設(shè)置成相應(yīng)模式的圖形方式。上面初始化過程中,將由detect檢測所用適配器類型,并將當前目錄下相應(yīng)的驅(qū)動程序裝入,并采用最高分辯率顯示模式作為graphmode的值。如檢測到為cga適配器時,則graphmode等于4或為cgahi,若檢測到vga適配器,則graphmode等于2或為vgahi。由于圖形程

10、序運行并顯示圖象直接與顯示器有關(guān),而如何控制驅(qū)動顯示器進行顯示,turbo c并沒有向用戶提供這種技術(shù),而這也是不必要的,因它與顯示器硬件結(jié)構(gòu)息息相關(guān),編程者并不需要知道這些東西,否則太復(fù)雜了!但用戶的圖形程序要能運行并顯示,則必須要包含有驅(qū)動顯示器的這種程序。不同種類的顯示器因硬件結(jié)構(gòu)不同,因而驅(qū)動程序也不同,這些驅(qū)動程序已經(jīng)在tubro c系統(tǒng)盤上提供。在用戶的圖形程序中,進行圖形系統(tǒng)初始化時,即執(zhí)行函數(shù)。initgraph(&graphdriver,&graphmode,char path-for-driver)時,程序就按照path-for-driver所指的路徑將圖形驅(qū)動程序裝入內(nèi)存

11、。這樣,以后的圖形功能才能被支持。若在所指路徑下找不到相應(yīng)顯示器的驅(qū)動程序,或沒有對驅(qū)動程序進行裝入操作,則運行圖形程序時,就會在屏幕上顯示出錯信息:bgi error: graphics not initialized(use”initgraph”)必須在工作盤上復(fù)制上這些文件,否則圖形程序就無法運行,而出現(xiàn)上述的錯誤信息。3.2 文本的輸出顯示turbo c2.0的字符屏幕函數(shù)主要包括文本窗口大小的設(shè)定、窗口顏色的設(shè)置、窗口文本的清除和輸入輸出等函數(shù)。在turbo c2.0環(huán)境下,用ottextxy定位輸出文本,如計算器上的函數(shù)意義的解釋,一些使用說明,程序設(shè)計人。 turbo c2.0默

12、認定義的文本窗口為整個屏幕, 共有80列(或40列)25行的文本單元, 每個單元包括一個字符和一個屬性, 字符即ascii 碼字符, 屬性規(guī)定該字符的顏色和強度。turbo c2.0可以定義屏幕上的一個矩形域作為窗口, 使用window()函數(shù)定義。 窗口定義之后, 用有關(guān)窗口的輸入輸出函數(shù)就可以只在此窗口內(nèi)進行操作而不超出窗口的邊界。 window()函數(shù)的調(diào)用格式為: void window(int left, int top, int right, int bottom); 函數(shù)中形式參數(shù)(int left, int top)是窗口左上角的坐標, (int right, int bott

13、om)是窗口的右下角坐標, 其中(left, top)和(right, bottom) 是相對于整個屏幕而言的。turbo c 2.0規(guī)定整個屏幕的左上角坐標為(1, 1), 右下角坐標為(80, 25)。并規(guī)定沿水平方向為 x軸, 方向朝右; 沿垂直方向為 y軸, 方向朝下。若window()函數(shù)中的坐標超過了屏幕坐標的界限, 則窗口的定義就失去了意義, 也就是說定義將不起作用, 但程序編譯鏈接時并不出錯。另外, 一個屏幕可以定義多個窗口, 但現(xiàn)行窗口只能有一個(因為dos為單任務(wù)操作系統(tǒng)), 當需要用另一窗口時, 可將定義該窗口的window()函數(shù)再調(diào)用一次, 此時該窗口便成為現(xiàn)行窗口了

14、。 如要定義一個窗口左上角在屏幕(20, 5)處, 大小為30列15行的窗口可寫成:window(20, 5, 50, 25); 窗口內(nèi)文本的輸出函數(shù) int cprintf(, ); int cputs(char *string); int putch(int ch); cprintf()函數(shù)輸出一個格式化的字符串或數(shù)值到窗口中。它與printf() 函數(shù)的用法完全一樣, 區(qū)別在于cprintf()函數(shù)的輸出受窗口限制, 而printf() 函數(shù)的輸出為整個屏幕。 cputs()函數(shù)輸出一個字符串到屏幕上, 它與puts()函數(shù)用法完全一樣, 只是受窗口大小的限制。 putch()函數(shù)輸出一

15、個字符到窗口內(nèi)。 int getche(void); 該函數(shù)在前面已經(jīng)講過, 需要說明的是, getche()函數(shù)從鍵盤上獲得一個字符, 在屏幕上顯示的時候, 如果字符超過了窗口右邊界, 則會被自動轉(zhuǎn)移到下一行的開始位置。 void clrscr(void); 清除當前窗口中的文本內(nèi)容, 并把光標定位在窗口的左上角(1, 1)處。 void clreol(void); 清除當前窗口中從光標位置到行尾的所有字符, 光標位置不變。 void gotoxy(x, y); 該函數(shù)很有用, 它用來定位光標在當前窗口中的位置。這里x, y是指光標要定位處的坐標(相對于窗口而言), 當x, y超出了窗口的大

16、小時, 該函數(shù)就不起作用了。 3.3 計算函數(shù)的調(diào)用1.調(diào)用 c庫函數(shù)中的函數(shù),數(shù)學函數(shù)#inchude 如:sin,cos,sqrt,log102.建立一些函數(shù),如c鍵清空寄存器 3.4 程序的運行和退出1.運行 通過tubro c安裝路徑找到tc2.0文件夾中的tc.exe文件,雙擊該文件,即可進入tc2.0環(huán)境。2.退出退出tc可以按f10鍵進入主菜單,選擇file菜單下的quit命令,再按回車鍵即可退出tc環(huán)境。(也可以在tc環(huán)境下直接按alt+x鍵退出程序。這是tc環(huán)境下的熱鍵)第四章 系統(tǒng)測試程序調(diào)試是指對程序的查錯和排錯。為了便于查錯、閱讀,在設(shè)計該程序的過程中我們采用了結(jié)構(gòu)化程

17、序方法編輯,添加了盡可能多的注釋,這就為接下來的調(diào)試過程帶來了很多方便。經(jīng)過仔細檢查之后進行上機調(diào)試。進行編譯,如果在編譯和連接過程中發(fā)現(xiàn)錯誤,屏幕上顯示了出錯信息,根據(jù)提示找到出錯的位置,加以改正,再進行編譯如此反復(fù),直到順利通過編譯和連接為止。在本次實習過程中碰到的編譯、連接的錯誤主要有:缺少變量定義,定義位置不正確、語法錯誤、轉(zhuǎn)義字符漏用、邏輯錯誤等。1 系統(tǒng)測試系統(tǒng)測試結(jié)果如下:輸出:錯誤c:jisuanqibyjzj.txt 183: 未定義的符號left在 run 函數(shù)中錯誤 c:jisuanqibyjzj.txt 183: 需要用常量表達式在 run 函數(shù)中錯誤: c:jisua

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

19、仔細的檢查。經(jīng)認真修改之后重新保存文件。4.3 錯誤原因分析一缺少變量定義,定義位置不正確由于該程序相對來講稍有些長,前后有些變量不容易聯(lián)系起來,但是在錯誤信息的提示下一般還是很容易找到。不過需要注意的是在定義的時候有些函數(shù)使用同樣的變量名而表示不同的作用,因而使用要很小心,定義及定義的位置要特別留意。為減少這樣的錯誤我后來還是用不同的變量名來表示,結(jié)果引起的那些錯誤解決了。例如: 未定義void mwindow(char *header); /*窗口函數(shù)*/ 或mwindow( calculator ); /* 顯示主窗口 */,所以輸出void mwindow( char *header

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

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

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

23、對應(yīng)的函數(shù)。加法:輸入一個被加數(shù)數(shù),按“+”,輸入被加數(shù),按“=”,輸出結(jié)果。減法:輸入被減數(shù)數(shù),按“-”,輸入減數(shù),按“=”,輸出結(jié)果。乘法: 輸入一個數(shù),按“*”,輸入另個數(shù),按“=”,輸出結(jié)果。除法: 輸入一個被除數(shù),按“+”,輸入另個除數(shù),按“=”,輸出結(jié)果。求x的y次方: 輸入數(shù)x,按“”,輸入數(shù)y,按“=”,輸出結(jié)果。求x/y的模: 輸入數(shù)x,按“%”,輸入數(shù)y,按“=”,輸出結(jié)果。求sin: 輸入一個數(shù), 按“o”,按“=”,輸出結(jié)果。求cos: 輸入一個數(shù), 按“i”,按“=”,輸出結(jié)果。求log10: 輸入一個數(shù), 按“l(fā)”,按“=”,輸出結(jié)果。c鍵:把寄存器清零q鍵:退出計

24、算器界面53 退出程序退出tc可以按f10鍵進入主菜單,選擇file菜單下的quit命令,再按回車鍵即可退出tc環(huán)境。(也可以在tc環(huán)境下直接按alt+x鍵退出程序。這是tc環(huán)境下的熱鍵) 第六章 工作總結(jié) 經(jīng)過了四個星期的c語言程序設(shè)計終于在老師的細心指導(dǎo)和同學的熱情幫助下基本完成了計算器課題的設(shè)計修改任務(wù)!雖然有些地方不盡如人意但是初步達到了對自己的要求!剛開始設(shè)計的時候找不到頭緒,不知道該從哪里下手!通過向同學詢問和向老師尋求幫助找走進了設(shè)計的門檻!通過網(wǎng)上查找到很多成功的計算器程序,通過對那些已經(jīng)成功地程序進行分析找到自己的設(shè)計思路,制定設(shè)計流程。并通過比較各種程序了解各個程序的利弊,

25、從而明確自己計算器的設(shè)計方向和如何通過技術(shù)手段達到自己的目的!萬事開頭難,可是對于并不是很熟悉的c語言在下面的工作中困難處處能遇見.通過查找c語言教材去圖書館查找相關(guān)的資料和同學一起討論終于把一個個棘手的陌生的問題解決。測試階段中發(fā)現(xiàn)了幾處錯誤導(dǎo)致程序不能編譯,通過耐心的分析源代碼終于編好了一個完整無誤的程序。 在這次的c語言程序設(shè)計實習中遇到了現(xiàn)實編程中必然見到的問題通過這些問題的解決積累了編程的實踐經(jīng)驗。在實際的編程操作中發(fā)現(xiàn)自己c語言知識的不足,加深了對c語言的理解。在學習之余體驗到收獲的感覺。同時認識到程序員的工作并不是我們想象的那么簡單輕松的,在現(xiàn)在的編程中要有足夠的耐心和熱情。參考

26、文獻1 黃明等.21世紀進階輔導(dǎo) c語言程序設(shè)計.大連理工大學出版社,20052 馬靖善等.c語言程序設(shè)計.清華大學出版社,20053 譚浩強.c語言程序設(shè)計(第二版).北京:高等教育出版社,20024 張毅坤等.c語言程序設(shè)計教程m .西安交通大學出版社,2003參考文獻1 譚浩強.c程序設(shè)計.北京:清華大學出版社,19992 薛剛等.c語言實用教程.長春:吉林科學技術(shù)出版社,19973 高福祥等.匯編語言程序設(shè)計.沈陽:東北大學出版社,1995 4 c語言程序設(shè)計網(wǎng)附錄:源代碼:#include /*dos接口函數(shù)*/#include /*數(shù)學函數(shù)的定義*/#include /*屏幕操作函

27、數(shù)*/#include /*i/o函數(shù)*/#include /*庫函數(shù)*/#include /*變量長度參數(shù)表*/#include /*圖形函數(shù)*/#include /*字符串函數(shù)*/#include /*字符操作函數(shù)*/#define up 0x48 /*光標上移鍵*/#define down 0x50 /*光標下移鍵*/#define left 0x4b /*光標左移鍵*/#define right 0x4d /*光標右移鍵*/#define enter 0x0d /*回車鍵*/#include#include#include#define centerx 320#define cente

28、ry 175#define click 100#define clickdelay 30#define hebeep 10000#define lowbeep 500#define beepdelay 200void *rar; /*全局變量,保存光標圖象*/struct palettetype palette; /*使用調(diào)色板信息*/int graphdriver; /* 圖形設(shè)備驅(qū)動*/int graphmode; /* 圖形模式值*/int errorcode; /* 錯誤代碼*/int maxcolors; /* 可用顏色的最大數(shù)值*/int maxx, maxy; /* 屏幕的最大分

29、辨率*/double aspectratio; /* 屏幕的像素比*/void drawboder(void); /*畫邊框函數(shù)*/void initialize(void); /*初始化函數(shù)*/void computer(void); /*計算器計算函數(shù)*/void changetextstyle(int font, int direction, int charsize); /*改變文本樣式函數(shù)*/void mwindow(char *header); /*窗口函數(shù)*/int specialkey(void) ; /*獲取特殊鍵函數(shù)*/int arrow(); /*設(shè)置箭頭光標函數(shù)*/in

30、t mrk_18=-5,-160,5,-160,5,-130,-5,-130, ;int mrk_28=-5,-160,5,-160,2,-130,-2-130, ;int hourhand8=-3,-100,3,-120,4, 10,-4,10;int mihand8=-3,-120,3,-120,4, 10,-4,10;int sechand8=-2,-150,2,-150,3, 10,-3,10;void click() sound(click); delay(clickdelay); nosound();void highbeep() sound(hebeep); delay(beep

31、delay); nosound;void lowbeep() sound(lowbeep);void drawpoly(int *data,int angle,int color) int usedata8; float sinang,cosang; int i; sinang=sin(float)angle/180*3.14); cosang=cos(float)angle/180*3.14); for(i=0;i8;i+=2) usedatai =centerx+ cosang*datai-sinang*datai+1+.5; usedatai+1=centery+sinang*datai

32、+cosang*datai+1+.5; setfillstyle(solid_fill,color); fillpoly(4,usedata);void drawclock(struct time *cutime) int ang; float hourrate,minrate,secrate; setbkcolor(blue); cleardevice(); setcolor(white); for(ang=0;angti_sec/60; minrate=(float)cutime-ti_min+secrate)/60; hourrate=(float)cutime-ti_hour/12)+

33、minrate)/12; ang=hourrate*360; drawpoly(hourhand,ang,yellow);/*畫時針*/ ang=minrate*360; drawpoly(mihand,ang, green);/*畫分針*/ ang=secrate*360; drawpoly(sechand,ang, red);/*畫秒針*/*主函數(shù)*/int main() int gdriver=ega, gmode=egahi; int curpage; struct time curtime ,newtime ; initgraph(&gdriver,&gmode,c:tc); set

34、bkcolor(blue); cleardevice(); gettime(&curtime); curpage=0; drawclock(&curtime); while(1) if(kbhit() break; gettime(&newtime); if(newtime.ti_sec!=curtime.ti_sec) if(curpage=0) curpage=1; else curpage=0; curtime=newtime; setactivepage(curpage); drawclock(&curtime); setvisualpage(curpage); if(newtime.

35、ti_min=0&newtime.ti_sec=0) highbeep(); else if(newtime.ti_min=59& newtime.ti_sec=59) lowbeep(); else click(); closegraph(); initialize();/* 設(shè)置系統(tǒng)進入圖形模式 */ computer(); /*運行計算器 */ closegraph();/*系統(tǒng)關(guān)閉圖形模式返回文本模式*/ return(0); /*結(jié)束程序*/* 設(shè)置系統(tǒng)進入圖形模式 */void initialize(void) int xasp, yasp; /* 用于讀x和y方向縱橫比*/ gr

36、aphdriver = detect; /* 自動檢測顯示器*/ initgraph( &graphdriver, &graphmode, );/*初始化圖形系統(tǒng)*/ errorcode = graphresult(); /*讀初始化結(jié)果*/ if( errorcode != grok ) /*如果初始化時出現(xiàn)錯誤*/ printf(graphics system error: %sn, grapherrormsg( errorcode ) ); /*顯示錯誤代碼*/ exit( 1 ); /*退出*/ getpalette( &palette ); /* 讀面板信息*/ maxcolors

37、= getmaxcolor() + 1; /* 讀取顏色的最大值*/ maxx = getmaxx(); /* 讀屏幕尺寸 */ maxy = getmaxy(); /* 讀屏幕尺寸 */ getaspectratio( &xasp, &yasp ); /* 拷貝縱橫比到變量中*/ aspectratio = (double)xasp/(double)yasp;/* 計算縱橫比值*/*計算器函數(shù)*/void computer(void) struct viewporttype vp; /*定義視口類型變量*/ int color, height, width; int x, y,x0,y0,

38、i, j,v,m,n,act,flag=1; float num1=0,num2=0,result; /*操作數(shù)和計算結(jié)果變量*/ char cnum5,str220=,c,temp20=; char str1=1230.456+-789*/qc=%;/* 定義字符串在按鈕圖形上顯示的符號 */ mwindow( calculator ); /* 顯示主窗口 */ color = 7; /*設(shè)置灰顏色值*/ getviewsettings( &vp ); /* 讀取當前窗口的大小*/ width=(vp.right+1)/10; /* 設(shè)置按鈕寬度 */ height=(vp.bottom-1

39、0)/10 ; /*設(shè)置按鈕高度 */ x = width /2; /*設(shè)置x的坐標值*/ y = height/2; /*設(shè)置y的坐標值*/ setfillstyle(solid_fill, color+3); bar( x+width*2, y, x+7*width, y+height ); /*畫一個二維矩形條顯示運算數(shù)和結(jié)果*/ setcolor( color+3 ); /*設(shè)置淡綠顏色邊框線*/ rectangle( x+width*2, y, x+7*width, y+height ); /*畫一個矩形邊框線*/ setcolor(red); /*設(shè)置顏色為紅色*/ outtext

40、xy(x+3*width,y+height/2,0.); /*輸出字符串0.*/ x =2*width-width/2; /*設(shè)置x的坐標值*/ y =2*height+height/2; /*設(shè)置y的坐標值*/ for( j=0 ; j4 ; +j ) /*畫按鈕*/ for( i=0 ; i=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; /*如

41、果移到頭,再左移,則移動到最右邊字符位置*/ else x=x-width-width/2; m-; /*否則,左移到前一個字符位置*/ if(v=up) /*上移箭頭時新位置計算*/ 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(isdigit(c)|c=.) /*判斷是否是數(shù)字或小數(shù)點*/ i

42、f(flag=-1) /*如果標志為-1,表明為負數(shù)*/ strcpy(str2,-); /*將負號連接到字符串中*/ flag=1; /*將標志值恢復(fù)為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,3*height/2); outtextxy(5*width,height,str2); /*顯示字符串*/ if(c=+)

43、 num1=atof(str2); /*將第一個操作數(shù)轉(zhuǎn)換為浮點數(shù)*/ 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.); /*顯示字符串*/ if(c=-) if(strcmp(str2,)=0) /*如果str2為空,說明是負號,而不是減號*/ flag=-1; /*設(shè)置負數(shù)標志*/ else num1=atof(st

44、r2); /*將第二個操作數(shù)轉(zhuǎn)換為浮點數(shù)*/ strcpy(str2,); /*將str2清空*/ act=2; /*做計算減法標志值*/ 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); /*將第二個操作數(shù)轉(zhuǎn)換為浮點數(shù)*/ strcpy(str2,); /*將str2清空*/ act=3; /*做計算乘法標志值*/ setfi

45、llstyle(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); /*將第二個操作數(shù)轉(zhuǎn)換為浮點數(shù)*/ 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); /*將第二個操作數(shù)轉(zhuǎn)換為浮點數(shù)*/ strcpy(str2,); /*將str2清空*/ act=5; /*做計算乘方標志值*/ setfillstyle(solid_fill,color+3); /*設(shè)置用淡綠色實體填充*/ bar(2*width+width/2,heigh

溫馨提示

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

最新文檔

評論

0/150

提交評論