版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、課程設(shè)計(jì)說明書題 目 計(jì)算器程序設(shè)計(jì) 起訖日期 2006 年 7月 3日至 2006 年 8月 6日所在院系 軟件學(xué)院 專 業(yè) 機(jī)械+軟件 班 級 04-2 學(xué)生姓名 偶偶哦 學(xué) 號 指導(dǎo)教師 2006年 8 月 日摘 要 當(dāng)今社會(huì)是信息社會(huì),科技經(jīng)濟(jì)高速發(fā)展的社會(huì)!為了更方便人們的工作生活和加速人們處理信息的速度,計(jì)算器應(yīng)運(yùn)而生。由于它體積小巧,攜帶方便,價(jià)格便宜,構(gòu)造簡單等諸多的優(yōu)點(diǎn)成為人們生活中的必備品! 隨著科技的發(fā)展計(jì)算器的種類變得更多,功能變得更強(qiáng)大,體積變得更?。‰娔X的出現(xiàn)改變?nèi)藗兊纳盍?xí)慣,很多事情都可以電腦來完成!電腦的更大一個(gè)優(yōu)點(diǎn)就是可以通過軟件的應(yīng)用無限的延伸電腦功能的外
2、延!下面我們將用我們學(xué)習(xí)的c語言編寫一個(gè)簡易的計(jì)算器程序!實(shí)現(xiàn)簡單的初步的計(jì)算功能! 本程序的編寫基礎(chǔ)是Tubro C2.0漢化版,它在tubro c的原有基礎(chǔ)上實(shí)現(xiàn)了多漢字的支持方便了我們的使用。生成的程序可移植性強(qiáng)兼容性好穩(wěn)定!現(xiàn)在只實(shí)現(xiàn)了加、減、乘、除、求冪、求模,求平方根,求Sin,求Cos,求Log10,以及一個(gè)時(shí)鐘原代碼。這個(gè)系統(tǒng)是基于軟件發(fā)展的生命周期來研制的,它可以直接輸入數(shù)學(xué)表達(dá)式,不需要任何轉(zhuǎn)換,就可以直接輸出數(shù)學(xué)四則運(yùn)算的結(jié)果。但是,每次只能運(yùn)算一個(gè)表達(dá)式。不能運(yùn)算多個(gè)表達(dá)式。在程序里面在添加一組選擇函數(shù)即可。本論文主要介紹了本課題的開發(fā)背景,開發(fā)的過程和所要完成的功能。
3、重點(diǎn)的說明了系統(tǒng)設(shè)計(jì)思想,設(shè)計(jì)的步驟、難點(diǎn)技術(shù)和解決方案。關(guān)鍵詞:C語言 Tubro c 2.0漢化版 計(jì)算器 時(shí)鐘 目 錄第一章 綜述111 課題的現(xiàn)實(shí)意義112 軟件環(huán)境113 硬件環(huán)境1第二章 系統(tǒng)設(shè)計(jì)流程圖221 系統(tǒng)流程圖222 主要功能表2第三章 系統(tǒng)分析和設(shè)計(jì)331 圖形的繪制和輸出332 文本的輸出顯示3 33 計(jì)算函數(shù)的調(diào)用434 程序的運(yùn)行和退出5第四章 系統(tǒng)測試641 系統(tǒng)測試642 調(diào)試643 錯(cuò)誤原因分析一644 錯(cuò)誤原因分析二6 第五章 用戶使用說明書851 運(yùn)行Turbo C程序進(jìn)入計(jì)算器界面852 計(jì)算器的使用9 53 退出程序9 第六章 工作總結(jié)10 參考文獻(xiàn)
4、11附錄: 源代碼第一章 綜述1.1 課題的現(xiàn)實(shí)意義現(xiàn)實(shí)學(xué)習(xí)生活中,常會(huì)遇到一些數(shù)目較大數(shù)據(jù)繁雜的數(shù)值運(yùn)算,徒手運(yùn)算起來很困難,這時(shí)候我們就必須用到計(jì)算器,所以便著手開發(fā)了這個(gè)計(jì)算器程序,以便用于自己的學(xué)習(xí)工作。人們對計(jì)算的要求不斷提高,普通的功能簡單的僅能進(jìn)行四則運(yùn)算的計(jì)算工具已經(jīng)不能滿足需要,需要一種能進(jìn)行多種計(jì)算?,F(xiàn)在已經(jīng)有一些功能較為強(qiáng)大、涵蓋面較廣的計(jì)算軟件,而且各種平臺(tái)的小工具仍不斷出現(xiàn)。這些大大方便了我們的生活給我們更多的選擇和實(shí)現(xiàn)方式。這個(gè)程序可以直接輸入數(shù)學(xué)表達(dá)式,不需要任何轉(zhuǎn)換,就可以直接輸出數(shù)學(xué)四則運(yùn)算的結(jié)果。并且操作簡單、界面清晰、靈活、實(shí)用、方便等要求出發(fā),它所能完成
5、的主要計(jì)算功能有以下幾個(gè)方面:加法,減法,乘法,除法,求冪,求模,求平方根,求Sin,求Cos,求Log10。計(jì)算器的設(shè)計(jì)使我們所學(xué)到的c語言知識在現(xiàn)實(shí)中得到檢驗(yàn)!信息時(shí)代是科技和經(jīng)濟(jì)發(fā)展的產(chǎn)物,軟件產(chǎn)業(yè)是信息時(shí)代的產(chǎn)物,它在我們的生活工作中發(fā)揮著越來越大的作用,計(jì)算器的設(shè)計(jì)對我們知識的掌握有很大的作用,更能方便他人,可行性很強(qiáng)!1.2 硬件環(huán)境一臺(tái)完整的電腦,包括鍵盤、鼠標(biāo),最小硬盤空間1GHz 386,486,586及兼容機(jī).640K基本內(nèi)存; 1M以上擴(kuò)充內(nèi)存,10M以上的顯示內(nèi)存.1.3 軟件環(huán)境開發(fā)環(huán)境:本系統(tǒng)的設(shè)計(jì)采用的是TC語言開發(fā)Windows XP sp2操作系統(tǒng),Turbo
6、 C 2.0漢化版 , WPS word第二章 程序設(shè)計(jì)流程圖21 系統(tǒng)流程圖(圖 1)開始輸入第一個(gè)操作數(shù)加法減法乘法除法求冪求模開平方求正弦求余弦求對數(shù)輸入第二個(gè)操作數(shù)顯示結(jié)果寄存器清零結(jié)束22 主要功能表(表 1)序號文件名主要功能備注1+加法兩個(gè)操作數(shù)2-減法兩個(gè)操作數(shù)3*乘法兩個(gè)操作數(shù)4/除法兩個(gè)操作數(shù)5%求模兩個(gè)操作數(shù)6求x的y次冪兩個(gè)操作數(shù)7S求平方根一個(gè)操作數(shù)8O求Sin一個(gè)操作數(shù)9I求Cos一個(gè)操作數(shù)10L求Log10一個(gè)操作數(shù)11=等于12C寄存器清零13Q退出表 1第三章 系統(tǒng)分析和設(shè)計(jì)3.1 圖形的繪制和輸出在Turbo C環(huán)境下,繪制程序中的計(jì)算器的圖形,計(jì)算器的輸入
7、輸出和顯示結(jié)果的顯示屏,繪制計(jì)算器的按鍵,繪制邊框。Turbo C為用戶提供了一個(gè)功能很強(qiáng)的畫圖軟件庫,它又稱為BorLand圖形接口,它包括圖形庫文件(graphics.lib),圖形頭文件(graphics.h)和許多圖形顯示器(圖形終端)的驅(qū)動(dòng)程序(如CGA.BGI、EGAVGA.BGI等)。還有一些字符集的字體驅(qū)坳程序(如goth.chr黑體字符集等)。編寫圖形程序時(shí)用到的一些圖形庫函數(shù)均在graphics.lib 中,執(zhí)行這些函數(shù)時(shí),所需的有關(guān)信息(如宏定義等)則包含在graphics.h頭文件中。因此用戶在自已的畫圖源程序中必須包括graphics.h頭文件,在進(jìn)行目標(biāo)程序連接時(shí),
8、要將graphics.lib連接到自己的目標(biāo)程序中去。在編制圖形程序時(shí),進(jìn)入圖形方式前,首先要在程序中對使用的圖形系統(tǒng)初始化,即要用什么類型的圖形顯示適配器的驅(qū)動(dòng)程序,采用什么模式的圖形方式(也就是相應(yīng)程序的入口地址),以及該適配器驅(qū)動(dòng)程序的尋找路徑名。所用系統(tǒng)的顯示適配器一定要支持所選用的顯示模式,否則將出錯(cuò)。Turbo.C提供了一個(gè)圖形系統(tǒng)初始化函數(shù)initgraph可完成這些功能。當(dāng)我們使用的存儲(chǔ)模式為tiny(微型)、 small(小型)或medium(中型)時(shí),不需要遠(yuǎn)指針,因而可以將初始化函數(shù)調(diào)用格式寫成如下形式(該說明適用于后面所述的任一函數(shù)): intitgrapg(&grap
9、hdriver, &graphmode,”); 其中驅(qū)動(dòng)程序目錄路徑為空字符“”時(shí),表示就在當(dāng)前目錄下,參數(shù)graphmode用所示的模式號或標(biāo)示符來定義,參數(shù)graphdriver是一個(gè)枚舉變量DETECT,CGA,VGA,,一般: graphdriver=DETECT一旦執(zhí)行了初始化,顯示器即被設(shè)置成相應(yīng)模式的圖形方式。上面初始化過程中,將由DETECT檢測所用適配器類型,并將當(dāng)前目錄下相應(yīng)的驅(qū)動(dòng)程序裝入,并采用最高分辯率顯示模式作為graphmode的值。如檢測到為CGA適配器時(shí),則graphmode等于4或?yàn)镃GAHI,若檢測到VGA適配器,則graphmode等于2或?yàn)閂GAHI。由
10、于圖形程序運(yùn)行并顯示圖象直接與顯示器有關(guān),而如何控制驅(qū)動(dòng)顯示器進(jìn)行顯示,Turbo C并沒有向用戶提供這種技術(shù),而這也是不必要的,因它與顯示器硬件結(jié)構(gòu)息息相關(guān),編程者并不需要知道這些東西,否則太復(fù)雜了!但用戶的圖形程序要能運(yùn)行并顯示,則必須要包含有驅(qū)動(dòng)顯示器的這種程序。不同種類的顯示器因硬件結(jié)構(gòu)不同,因而驅(qū)動(dòng)程序也不同,這些驅(qū)動(dòng)程序已經(jīng)在Tubro C系統(tǒng)盤上提供。在用戶的圖形程序中,進(jìn)行圖形系統(tǒng)初始化時(shí),即執(zhí)行函數(shù)。initgraph(&graphdriver,&graphmode,char path-for-driver)時(shí),程序就按照path-for-driver所指的路徑將圖形驅(qū)動(dòng)程序
11、裝入內(nèi)存。這樣,以后的圖形功能才能被支持。若在所指路徑下找不到相應(yīng)顯示器的驅(qū)動(dòng)程序,或沒有對驅(qū)動(dòng)程序進(jìn)行裝入操作,則運(yùn)行圖形程序時(shí),就會(huì)在屏幕上顯示出錯(cuò)信息:BGI Error: Graphics not initialized(use”initgraph”)必須在工作盤上復(fù)制上這些文件,否則圖形程序就無法運(yùn)行,而出現(xiàn)上述的錯(cuò)誤信息。3.2 文本的輸出顯示Turbo C2.0的字符屏幕函數(shù)主要包括文本窗口大小的設(shè)定、窗口顏色的設(shè)置、窗口文本的清除和輸入輸出等函數(shù)。在Turbo C2.0環(huán)境下,用ottextxy定位輸出文本,如計(jì)算器上的函數(shù)意義的解釋,一些使用說明,程序設(shè)計(jì)人。 Turbo C
12、2.0默認(rèn)定義的文本窗口為整個(gè)屏幕, 共有80列(或40列)25行的文本單元, 每個(gè)單元包括一個(gè)字符和一個(gè)屬性, 字符即ASCII 碼字符, 屬性規(guī)定該字符的顏色和強(qiáng)度。Turbo C2.0可以定義屏幕上的一個(gè)矩形域作為窗口, 使用window()函數(shù)定義。 窗口定義之后, 用有關(guān)窗口的輸入輸出函數(shù)就可以只在此窗口內(nèi)進(jìn)行操作而不超出窗口的邊界。 window()函數(shù)的調(diào)用格式為: void window(int left, int top, int right, int bottom); 函數(shù)中形式參數(shù)(int left, int top)是窗口左上角的坐標(biāo), (int right, int
13、bottom)是窗口的右下角坐標(biāo), 其中(left, top)和(right, bottom) 是相對于整個(gè)屏幕而言的。Turbo C 2.0規(guī)定整個(gè)屏幕的左上角坐標(biāo)為(1, 1), 右下角坐標(biāo)為(80, 25)。并規(guī)定沿水平方向?yàn)?X軸, 方向朝右; 沿垂直方向?yàn)?Y軸, 方向朝下。若window()函數(shù)中的坐標(biāo)超過了屏幕坐標(biāo)的界限, 則窗口的定義就失去了意義, 也就是說定義將不起作用, 但程序編譯鏈接時(shí)并不出錯(cuò)。另外, 一個(gè)屏幕可以定義多個(gè)窗口, 但現(xiàn)行窗口只能有一個(gè)(因?yàn)镈OS為單任務(wù)操作系統(tǒng)), 當(dāng)需要用另一窗口時(shí), 可將定義該窗口的window()函數(shù)再調(diào)用一次, 此時(shí)該窗口便成為現(xiàn)
14、行窗口了。 如要定義一個(gè)窗口左上角在屏幕(20, 5)處, 大小為30列15行的窗口可寫成:window(20, 5, 50, 25); 窗口內(nèi)文本的輸出函數(shù) int cprintf(, ); int cputs(char *string); int putch(int ch); cprintf()函數(shù)輸出一個(gè)格式化的字符串或數(shù)值到窗口中。它與printf() 函數(shù)的用法完全一樣, 區(qū)別在于cprintf()函數(shù)的輸出受窗口限制, 而printf() 函數(shù)的輸出為整個(gè)屏幕。 cputs()函數(shù)輸出一個(gè)字符串到屏幕上, 它與puts()函數(shù)用法完全一樣, 只是受窗口大小的限制。 putch()函
15、數(shù)輸出一個(gè)字符到窗口內(nèi)。 int getche(void); 該函數(shù)在前面已經(jīng)講過, 需要說明的是, getche()函數(shù)從鍵盤上獲得一個(gè)字符, 在屏幕上顯示的時(shí)候, 如果字符超過了窗口右邊界, 則會(huì)被自動(dòng)轉(zhuǎn)移到下一行的開始位置。 void clrscr(void); 清除當(dāng)前窗口中的文本內(nèi)容, 并把光標(biāo)定位在窗口的左上角(1, 1)處。 void clreol(void); 清除當(dāng)前窗口中從光標(biāo)位置到行尾的所有字符, 光標(biāo)位置不變。 void gotoxy(x, y); 該函數(shù)很有用, 它用來定位光標(biāo)在當(dāng)前窗口中的位置。這里x, y是指光標(biāo)要定位處的坐標(biāo)(相對于窗口而言), 當(dāng)x, y超出了
16、窗口的大小時(shí), 該函數(shù)就不起作用了。 3.3 計(jì)算函數(shù)的調(diào)用1.調(diào)用 C庫函數(shù)中的函數(shù),數(shù)學(xué)函數(shù)#inchude 如:sin,cos,sqrt,log102.建立一些函數(shù),如c鍵清空寄存器 3.4 程序的運(yùn)行和退出1.運(yùn)行 通過Tubro C安裝路徑找到TC2.0文件夾中的tc.exe文件,雙擊該文件,即可進(jìn)入TC2.0環(huán)境。2.退出退出TC可以按F10鍵進(jìn)入主菜單,選擇File菜單下的Quit命令,再按回車鍵即可退出TC環(huán)境。(也可以在TC環(huán)境下直接按Alt+X鍵退出程序。這是TC環(huán)境下的熱鍵)第四章 系統(tǒng)測試程序調(diào)試是指對程序的查錯(cuò)和排錯(cuò)。為了便于查錯(cuò)、閱讀,在設(shè)計(jì)該程序的過程中我們采用了
17、結(jié)構(gòu)化程序方法編輯,添加了盡可能多的注釋,這就為接下來的調(diào)試過程帶來了很多方便。經(jīng)過仔細(xì)檢查之后進(jìn)行上機(jī)調(diào)試。進(jìn)行編譯,如果在編譯和連接過程中發(fā)現(xiàn)錯(cuò)誤,屏幕上顯示了出錯(cuò)信息,根據(jù)提示找到出錯(cuò)的位置,加以改正,再進(jìn)行編譯如此反復(fù),直到順利通過編譯和連接為止。在本次實(shí)習(xí)過程中碰到的編譯、連接的錯(cuò)誤主要有:缺少變量定義,定義位置不正確、語法錯(cuò)誤、轉(zhuǎn)義字符漏用、邏輯錯(cuò)誤等。1 系統(tǒng)測試系統(tǒng)測試結(jié)果如下:輸出:錯(cuò)誤C:jisuanqibyjzj.TXT 183: 未定義的符號LEFT在 Run 函數(shù)中錯(cuò)誤 C:jisuanqibyjzj.TXT 183: 需要用常量表達(dá)式在 Run 函數(shù)中錯(cuò)誤: C:j
18、isuanqibyjzj.TXT 393:main的宣告;開始編譯文件: C:jisuanqibyjzj.TXT42 調(diào)試根據(jù)電腦所給的提示出現(xiàn)語法錯(cuò)誤,缺少變量的定義大多的語法錯(cuò)誤在通過書本參考下能夠修改。主要是平時(shí)看書不仔細(xì)、不太注意而產(chǎn)生的。如沒有注意具體數(shù)據(jù)使用是有一定的范圍限定;過分重視分號的重要性而在for、if、while語句中畫蛇添足加分號;在使用文件的時(shí)候忘記將文件先打開,對打開的方式與使用的情況不太注意而造成不匹配;還有漏掉形參的定義是值不能傳遞等等。這些語法錯(cuò)誤有信息框的提示一般是能夠排除的。另外還有部分注釋的位置也錯(cuò)了,最重要的是邏輯上的錯(cuò)誤,一般電腦不容易發(fā)現(xiàn)。所以更
19、要對程序仔細(xì)的檢查。經(jīng)認(rèn)真修改之后重新保存文件。4.3 錯(cuò)誤原因分析一缺少變量定義,定義位置不正確由于該程序相對來講稍有些長,前后有些變量不容易聯(lián)系起來,但是在錯(cuò)誤信息的提示下一般還是很容易找到。不過需要注意的是在定義的時(shí)候有些函數(shù)使用同樣的變量名而表示不同的作用,因而使用要很小心,定義及定義的位置要特別留意。為減少這樣的錯(cuò)誤我后來還是用不同的變量名來表示,結(jié)果引起的那些錯(cuò)誤解決了。例如: 未定義void mwindow(char *header); /*窗口函數(shù)*/ 或mwindow( Calculator ); /* 顯示主窗口 */,所以輸出void mwindow( char *hea
20、der )中就有錯(cuò)誤,因?yàn)槿鄙俣x。語法錯(cuò)誤大多的語法錯(cuò)誤在通過書本參考下能夠修改。主要是平時(shí)缺乏鍛煉、不太注意而產(chǎn)生的。如沒有注意具體數(shù)據(jù)使用是有一定的范圍限定;過分重視分號的重要性而在for、if、while語句中畫蛇添足加分號;在使用文件的時(shí)候忘記將文件先打開,對打開的方式4.4 錯(cuò)誤原因分析二注釋的位置程序設(shè)計(jì)中在注釋的時(shí)候不能同我們平常寫字一樣隨心所欲,我們應(yīng)該注意注釋的格式。注釋中不能含有c語言可執(zhí)行的語句!邏輯錯(cuò)誤編譯、連接的成功并不意味著程序的最終成功。邏輯上的錯(cuò)誤機(jī)器不易檢查出來,這時(shí)需要對數(shù)據(jù)結(jié)果進(jìn)行分析。這種錯(cuò)誤的查找是最難的,需要有相當(dāng)?shù)哪托暮图?xì)心去把問題找出來。這也是
21、本次程序編輯過程中碰到的最大的難題。往往運(yùn)行之后得不到另人滿意的結(jié)果,此時(shí)解決的方法一則用“分段檢查”的方法,在程序的不同位置設(shè)幾個(gè)printf函數(shù)語句,輸出有關(guān)變量的值,逐段往下檢查,對檢查出的錯(cuò)誤進(jìn)行修改,當(dāng)調(diào)試完畢將設(shè)置的printf都刪去。若在程序中找不到問題,則再來考慮算法是否邏輯嚴(yán)謹(jǐn),再進(jìn)行修改。如此循環(huán)往復(fù),直到最后程序運(yùn)行成功。在本次程序編輯過程中,我就是常遇到編譯能通過,能夠運(yùn)行程序,但是總在輸入、刪除等操作完之后再想去看數(shù)據(jù)文件中存在的數(shù)據(jù)記錄的時(shí)候,卻一條記錄也顯示不出來,可能是對n變量的定義或使用出錯(cuò)了,于是在每個(gè)主要函數(shù)的操作過程中添加了printf語句用來顯示n的變
22、化,在執(zhí)行某個(gè)函數(shù)前添加插入語句顯示n的起始值,在執(zhí)行完該個(gè)函數(shù)后再添加插入語句顯示此時(shí)n的結(jié)果值,觀察n的變化是否正確,如果錯(cuò)誤了,也就說明該函數(shù)編寫過程有錯(cuò)。諸如這樣的調(diào)試方法,不斷縮小檢查范圍,最后將錯(cuò)誤找到,進(jìn)行修改。所以到最后我找到了錯(cuò)誤,及時(shí)改正,終于把程序完成了,一切功能顯示正常。 第五章 用戶使用說明書 51 運(yùn)行Turbo C程序進(jìn)入計(jì)算器界面通過他Tubroc 的路徑找到TC文件夾找到TC文件夾中的tc.exe文件,并用鼠標(biāo)雙擊該文件名進(jìn)入TC環(huán)境。打開jisuanqibyjzj.c文件52 計(jì)算器的使用 基本使用:用控制鼠標(biāo)圖形移動(dòng),當(dāng)移動(dòng)到相應(yīng)得按鈕時(shí)按回車鍵輸入當(dāng)前數(shù)
23、字或執(zhí)行對應(yīng)的函數(shù)。加法:輸入一個(gè)被加數(shù)數(shù),按“+”,輸入被加數(shù),按“=”,輸出結(jié)果。減法:輸入被減數(shù)數(shù),按“-”,輸入減數(shù),按“=”,輸出結(jié)果。乘法: 輸入一個(gè)數(shù),按“*”,輸入另個(gè)數(shù),按“=”,輸出結(jié)果。除法: 輸入一個(gè)被除數(shù),按“+”,輸入另個(gè)除數(shù),按“=”,輸出結(jié)果。求x的y次方: 輸入數(shù)x,按“”,輸入數(shù)y,按“=”,輸出結(jié)果。求x/y的模: 輸入數(shù)x,按“%”,輸入數(shù)y,按“=”,輸出結(jié)果。求sin: 輸入一個(gè)數(shù), 按“O”,按“=”,輸出結(jié)果。求cos: 輸入一個(gè)數(shù), 按“I”,按“=”,輸出結(jié)果。求log10: 輸入一個(gè)數(shù), 按“L”,按“=”,輸出結(jié)果。C鍵:把寄存器清零Q鍵
24、:退出計(jì)算器界面53 退出程序退出TC可以按F10鍵進(jìn)入主菜單,選擇File菜單下的Quit命令,再按回車鍵即可退出TC環(huán)境。(也可以在TC環(huán)境下直接按Alt+X鍵退出程序。這是TC環(huán)境下的熱鍵) 第六章 工作總結(jié) 經(jīng)過了四個(gè)星期的c語言程序設(shè)計(jì)終于在老師的細(xì)心指導(dǎo)和同學(xué)的熱情幫助下基本完成了計(jì)算器課題的設(shè)計(jì)修改任務(wù)!雖然有些地方不盡如人意但是初步達(dá)到了對自己的要求!剛開始設(shè)計(jì)的時(shí)候找不到頭緒,不知道該從哪里下手!通過向同學(xué)詢問和向老師尋求幫助找走進(jìn)了設(shè)計(jì)的門檻!通過網(wǎng)上查找到很多成功的計(jì)算器程序,通過對那些已經(jīng)成功地程序進(jìn)行分析找到自己的設(shè)計(jì)思路,制定設(shè)計(jì)流程。并通過比較各種程序了解各個(gè)程序
25、的利弊,從而明確自己計(jì)算器的設(shè)計(jì)方向和如何通過技術(shù)手段達(dá)到自己的目的!萬事開頭難,可是對于并不是很熟悉的c語言在下面的工作中困難處處能遇見.通過查找c語言教材去圖書館查找相關(guān)的資料和同學(xué)一起討論終于把一個(gè)個(gè)棘手的陌生的問題解決。測試階段中發(fā)現(xiàn)了幾處錯(cuò)誤導(dǎo)致程序不能編譯,通過耐心的分析源代碼終于編好了一個(gè)完整無誤的程序。 在這次的c語言程序設(shè)計(jì)實(shí)習(xí)中遇到了現(xiàn)實(shí)編程中必然見到的問題通過這些問題的解決積累了編程的實(shí)踐經(jīng)驗(yàn)。在實(shí)際的編程操作中發(fā)現(xiàn)自己c語言知識的不足,加深了對c語言的理解。在學(xué)習(xí)之余體驗(yàn)到收獲的感覺。同時(shí)認(rèn)識到程序員的工作并不是我們想象的那么簡單輕松的,在現(xiàn)在的編程中要有足夠的耐心和熱
26、情。參考文獻(xiàn)1 黃明等.21世紀(jì)進(jìn)階輔導(dǎo) C語言程序設(shè)計(jì).大連理工大學(xué)出版社,20052 馬靖善等.C語言程序設(shè)計(jì).清華大學(xué)出版社,20053 譚浩強(qiáng).C語言程序設(shè)計(jì)(第二版).北京:高等教育出版社,20024 張毅坤等.C語言程序設(shè)計(jì)教程M .西安交通大學(xué)出版社,2003參考文獻(xiàn)1 譚浩強(qiáng).C程序設(shè)計(jì).北京:清華大學(xué)出版社,19992 薛剛等.C語言實(shí)用教程.長春:吉林科學(xué)技術(shù)出版社,19973 高福祥等.匯編語言程序設(shè)計(jì).沈陽:東北大學(xué)出版社,1995 4 C語言程序設(shè)計(jì)網(wǎng)附錄:源代碼:#include /*DOS接口函數(shù)*/#include /*數(shù)學(xué)函數(shù)的定義*/#include /*屏
27、幕操作函數(shù)*/#include /*I/O函數(shù)*/#include /*庫函數(shù)*/#include /*變量長度參數(shù)表*/#include /*圖形函數(shù)*/#include /*字符串函數(shù)*/#include /*字符操作函數(shù)*/#define UP 0x48 /*光標(biāo)上移鍵*/#define DOWN 0x50 /*光標(biāo)下移鍵*/#define LEFT 0x4b /*光標(biāo)左移鍵*/#define RIGHT 0x4d /*光標(biāo)右移鍵*/#define ENTER 0x0d /*回車鍵*/#include#include#include#define CENTERX 320#define C
28、ENTERY 175#define CLICK 100#define CLICKDELAY 30#define HEBEEP 10000#define LOWBEEP 500#define BEEPDELAY 200void *rar; /*全局變量,保存光標(biāo)圖象*/struct palettetype palette; /*使用調(diào)色板信息*/int GraphDriver; /* 圖形設(shè)備驅(qū)動(dòng)*/int GraphMode; /* 圖形模式值*/int ErrorCode; /* 錯(cuò)誤代碼*/int MaxColors; /* 可用顏色的最大數(shù)值*/int MaxX, MaxY; /* 屏幕
29、的最大分辨率*/double AspectRatio; /* 屏幕的像素比*/void drawboder(void); /*畫邊框函數(shù)*/void initialize(void); /*初始化函數(shù)*/void computer(void); /*計(jì)算器計(jì)算函數(shù)*/void changetextstyle(int font, int direction, int charsize); /*改變文本樣式函數(shù)*/void mwindow(char *header); /*窗口函數(shù)*/int specialkey(void) ; /*獲取特殊鍵函數(shù)*/int arrow(); /*設(shè)置箭頭光標(biāo)函數(shù)
30、*/int 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(
31、BEEPDELAY); 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*d
32、atai+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/
33、12)+minrate)/12; ang=hourrate*360; DrawPoly(HourHand,ang,YELLOW);/*畫時(shí)針*/ 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);
34、 setbkcolor(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(newt
35、ime.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)進(jìn)入圖形模式 */ computer(); /*運(yùn)行計(jì)算器 */ closegraph();/*系統(tǒng)關(guān)閉圖形模式返回文本模式*/ return(0); /*結(jié)束程序*/* 設(shè)置系統(tǒng)進(jìn)入圖形模式 */void initialize(void) int xasp, yasp; /* 用于讀x和y方向縱橫比*
36、/ GraphDriver = DETECT; /* 自動(dòng)檢測顯示器*/ initgraph( &GraphDriver, &GraphMode, );/*初始化圖形系統(tǒng)*/ ErrorCode = graphresult(); /*讀初始化結(jié)果*/ if( ErrorCode != grOk ) /*如果初始化時(shí)出現(xiàn)錯(cuò)誤*/ printf(Graphics System Error: %sn, grapherrormsg( ErrorCode ) ); /*顯示錯(cuò)誤代碼*/ exit( 1 ); /*退出*/ getpalette( &palette ); /* 讀面板信息*/ MaxCol
37、ors = getmaxcolor() + 1; /* 讀取顏色的最大值*/ MaxX = getmaxx(); /* 讀屏幕尺寸 */ MaxY = getmaxy(); /* 讀屏幕尺寸 */ getaspectratio( &xasp, &yasp ); /* 拷貝縱橫比到變量中*/ AspectRatio = (double)xasp/(double)yasp;/* 計(jì)算縱橫比值*/*計(jì)算器函數(shù)*/void computer(void) struct viewporttype vp; /*定義視口類型變量*/ int color, height, width; int x, y,x0,
38、y0, i, j,v,m,n,act,flag=1; float num1=0,num2=0,result; /*操作數(shù)和計(jì)算結(jié)果變量*/ char cnum5,str220=,c,temp20=; char str1=1230.456+-789*/Qc=%;/* 定義字符串在按鈕圖形上顯示的符號 */ mwindow( Calculator ); /* 顯示主窗口 */ color = 7; /*設(shè)置灰顏色值*/ getviewsettings( &vp ); /* 讀取當(dāng)前窗口的大小*/ width=(vp.right+1)/10; /* 設(shè)置按鈕寬度 */ height=(vp.bott
39、om-10)/10 ; /*設(shè)置按鈕高度 */ x = width /2; /*設(shè)置x的坐標(biāo)值*/ y = height/2; /*設(shè)置y的坐標(biāo)值*/ setfillstyle(SOLID_FILL, color+3); bar( x+width*2, y, x+7*width, y+height ); /*畫一個(gè)二維矩形條顯示運(yùn)算數(shù)和結(jié)果*/ setcolor( color+3 ); /*設(shè)置淡綠顏色邊框線*/ rectangle( x+width*2, y, x+7*width, y+height ); /*畫一個(gè)矩形邊框線*/ setcolor(RED); /*設(shè)置顏色為紅色*/ out
40、textxy(x+3*width,y+height/2,0.); /*輸出字符串0.*/ x =2*width-width/2; /*設(shè)置x的坐標(biāo)值*/ y =2*height+height/2; /*設(shè)置y的坐標(biāo)值*/ for( j=0 ; j4 ; +j ) /*畫按鈕*/ for( i=0 ; i=x0+6*width) /*如果右移,移到尾,則移動(dòng)到最左邊字符位置*/ x=x0; m=0; else x=x+width+width/2; m+; /*否則,右移到下一個(gè)字符位置*/ if(v=LEFT) /*左移箭頭時(shí)新位置計(jì)算*/ if(x=x0) x=x0+6*width; m=4;
41、 /*如果移到頭,再左移,則移動(dòng)到最右邊字符位置*/ else x=x-width-width/2; m-; /*否則,左移到前一個(gè)字符位置*/ if(v=UP) /*上移箭頭時(shí)新位置計(jì)算*/ if(y=7*height) y=y0; n=0; /*如果移到尾,再下移,則移動(dòng)到最上邊字符位置*/ else y=y+height+height/2; n+; /*否則,移到下邊一個(gè)字符位置*/ putimage(x,y,rar,XOR_PUT); /*在新的位置顯示光標(biāo)箭頭*/ c=str1n*5+m; /*將字符保存到變量c中*/ if(isdigit(c)|c=.) /*判斷是否是數(shù)字或小數(shù)點(diǎn)
42、*/ if(flag=-1) /*如果標(biāo)志為-1,表明為負(fù)數(shù)*/ strcpy(str2,-); /*將負(fù)號連接到字符串中*/ flag=1; /*將標(biāo)志值恢復(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(
43、c=+) num1=atof(str2); /*將第一個(gè)操作數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù)*/ strcpy(str2,); /*將str2清空*/ act=1; /*做計(jì)算加法標(biāo)志值*/ 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為空,說明是負(fù)號,而不是減號*/ flag=-1; /*設(shè)置負(fù)數(shù)標(biāo)志*/ else num1=ato
44、f(str2); /*將第二個(gè)操作數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù)*/ strcpy(str2,); /*將str2清空*/ act=2; /*做計(jì)算減法標(biāo)志值*/ 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); /*將第二個(gè)操作數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù)*/ strcpy(str2,); /*將str2清空*/ act=3; /*做計(jì)算乘法標(biāo)志值*/ s
45、etfillstyle(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); /*將第二個(gè)操作數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù)*/ strcpy(str2,); /*將str2清空*/ act=4; /*做計(jì)算除法標(biāo)志值*/ 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); /*將第二個(gè)操作數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù)*/ strcpy(str2,); /*將str2清空*/ act=5; /*做計(jì)算乘方標(biāo)志值*/ setfillstyle(SOLID_FILL,color+3); /*設(shè)置用淡綠色實(shí)體填充*/ bar(2*width+
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度房地產(chǎn)中介客戶信息保密協(xié)議范本2篇
- 二零二五年三方二手車交易風(fēng)險(xiǎn)防范及保險(xiǎn)合同2篇
- 二零二五年度企業(yè)合同管理培訓(xùn)與人才發(fā)展意見建議書3篇
- 護(hù)理本科專業(yè)課課程思政教學(xué)評價(jià)指標(biāo)體系的構(gòu)建
- 服裝知識培訓(xùn)課件
- 2025版綠色家居裝飾工程勞務(wù)合作合同2篇
- Unit 4《Lesson 3 My tidy bag》(說課稿)-2024-2025學(xué)年粵人版(2024)英語三年級上冊
- 工業(yè)機(jī)器人智能生產(chǎn)線升級改造擴(kuò)建項(xiàng)目可行性研究報(bào)告寫作模板-備案審批
- 二零二五年度房地產(chǎn)項(xiàng)目股權(quán)劃轉(zhuǎn)及融資合作協(xié)議3篇
- 湖南省長沙市2025年新高考適應(yīng)性考試生物學(xué)模擬試題(含答案)
- 智能制造企業(yè)數(shù)字化轉(zhuǎn)型建設(shè)方案
- (隱蔽)工程現(xiàn)場收方計(jì)量記錄表
- 病理生理學(xué)課件脂代謝紊亂
- 教師幽默朗誦節(jié)目《我愛上班》
- 《細(xì)胞工程學(xué)》考試復(fù)習(xí)題庫(帶答案)
- 中學(xué)課堂教學(xué)評價(jià)量表
- 食堂食材配送以及售后服務(wù)方案
- 稱量與天平培訓(xùn)試題及答案
- 塊單項(xiàng)活動(dòng)教學(xué)材料教案丹霞地貌
- 青年人應(yīng)該如何樹立正確的人生觀
- 開封辦公樓頂發(fā)光字制作預(yù)算單
評論
0/150
提交評論