国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

Turbo C 程序設計初步

2019-11-17 05:01:29
字體:
來源:轉載
供稿:網友
 本節(jié)主要介紹Turbo C程序設計的基本步驟及如何編譯、調試和運行源程序。并給出Turbo C的常用編輯命令。最后介紹Turbo C編譯、連接和運行時的常見錯誤。  一、Turbo C程序設計基本步驟  程序設計方法包括三個基本步驟:  第一步: 分析問題。   第二步: 畫出程序的基本輪廓。   第三步: 實現(xiàn)該程序。   3a. 編寫程序   3b. 測試和調試程序   3c. 提供數(shù)據(jù)打印結果   下面, 我們來說明每一步的具體細節(jié)。   第一步: 分析問題   在這一步, 你必須:   a. 作為解決問題的一種方法, 確定要產生的數(shù)據(jù)(輸出)。 作為這一子步的一部分, 你應定義表示輸出的變量。   b. 確定需產生輸出的數(shù)據(jù)(稱為輸入), 作為這一子步的一部分, 你應定義表示輸入的變量。   c. 研制一種算法, 從有限步的輸入中獲取輸出。 這種算法定義為結構化的順序操作, 以便在有限步內解決問題。就數(shù)字問題而言, 這種算法包括獲取輸出的計算, 但對非數(shù)字問題來說, 這種算法包括許多文本和圖象處理操作。   第二步: 畫出程序的基本輪廓   在這一步, 你要用一些句子(偽代碼)來畫出程序的基本輪廓。每個句子對應一個簡單的程序操作。對一個簡單的程序來說, 通過列出程序順序執(zhí)行的動作,便可直接產生偽代碼。然而, 對復雜一些的程序來說, 則需要將大致過程有條理地進行組織。對此, 應使用自上而下的設計方法。   當使用自上而下的設計方法時, 你要把程序分割成幾段來完成。列出每段要實現(xiàn)的任務, 程序的輪廓也就有了, 這稱之為主模塊。當一項任務列在主模塊時,僅用其名加以標識, 并未指出該任務將如何完成。這方面的內容留給程序設計的下一階段來討論。將程序分為幾項任務只是對程序的初步設計。整個程序設計歸結為下圖所示的流程圖1.。   ┏━━━━━━━━━━━━━━━┓   ┃ 主模塊 ┃   ┏━━━━━━━┓ ┃ 輸入數(shù)據(jù) ┃   ┃ 主模塊 ┃ ┃ 計算購房所需的金額 ┃   ┃ ┃ ┃ 計算裝修所需的金額 ┃   ┃ 任務1 ┃ ┃ 計算總金額 ┃   ┃ 任務2 ┃ ┃ 輸出計算結果 ┃   ┃ 任務3 ┃ ┃ ┃   ┃ 任務4 ┃ ┗━━━━━━━┳━━━━━━━┛   ┃ ┃ ┏━━━━━┳━━━━━╋━━━━┳━━━━━┓   ┃ ┃ ┏━━┻━┓┏━━┻━┓┏━━┻━┓┏━┻━┓┏━━┻━┓   ┗━━━━━━━┛ ┃輸入數(shù)據(jù)┃┃購房額..┃┃裝修額..┃┃總額..┃┃輸出結果┃   ┗━━━━┛┗━━━━┛┗━━━━┛┗━━━┛┗━━━━┛   圖1. 程序初步設計 圖2. 第二級程序設計   假如把主模塊的每項任務擴展成一個模塊, 并根據(jù)子任務進行定義的話, 那么, 程序設計就更為具體了(見圖2.)。這些模塊稱為主模塊的子模塊。程序中許多子模塊之間的關系可象圖2.中那樣歸結為一張圖。這種圖稱為結構圖。   要畫出模塊的輪廓, 你可不考慮細節(jié)。假如這樣的話, 你必須使用子模塊,將各個模塊求精, 達到第三級設計。繼續(xù)這一過程, 直至說明程序的全部細節(jié)。   這一級一級的設計過程稱為逐步求精法。在編寫程序之前, 對你的程序進行逐步求精, 對你來說, 是很好的程序設計實踐, 會使你養(yǎng)成良好的設計習慣。   我們則才描述了程序設計中自上而下的設計方法。實際上就是說, 我們設計程序是從程序的"頂部"開始一直考慮到程序的"底部"。   第三步: 實現(xiàn)該程序   程序設計的最后一步是編寫源碼程序。 在這一步, 把模塊的偽代碼翻譯成Turbo C語句。   對于源程序, 你應包含注釋方式的文件編制, 以描述程序各個部分做何種工作。此外, 源程序還應包含調試程序段, 以測試程序的運行情況, 并答應查找編程錯誤。一旦程序運行情況良好, 可去掉調試程序段, 然而, 文件編制應做為源程序的固定部分保留下來, 便于你或其他人維護和修改。
  二、源程序的輸入、編譯和運行    
      C語言是一種中級語言, 用戶用C語言編寫的程序稱為源程序, 存放用C 語言所寫源程序文件名字最后的兩個字符一般必須為".c"。計算機硬件不能直接執(zhí)行源程序, 必須將源程序翻譯成二進制目標程序。翻譯工作是由一個程序完成的,這個程序稱為編譯程序, 翻譯的過程稱為編譯, 編譯的結果稱為目標程序, 存放目標程序文件名字緊后的字符一般為".OBJ"或".O"。程序翻譯成目標程序后, 便可進行連接。"連接"的目的是使程序變成在計算機上可以執(zhí)行的最終形式。在這一階段, 從系統(tǒng)程序庫來的程序要與目標程序連接, 連接的結果稱為執(zhí)行程序,存放執(zhí)行程序文件名字一般以".EXE"結尾。   在Turbo C集成開發(fā)環(huán)境中建立一個新程序通常有以下幾個步驟:   (1). 在編輯器中編寫源文件。   (2). 生成可執(zhí)行文件。   在DOS提示符下鍵入TC, 即可進入Turbo C了。進入主TC屏后, 按F3鍵, 即可在隨之出現(xiàn)的框中輸入文件名, 文件名可以帶".C"也可以不帶( 此時系統(tǒng)會自動加上)。輸入文件名后, 按回車, 即可將文件調入, 假如文件不存在, 就建立一個新文件(也可用下面例子中的方法輸入文件名)。系統(tǒng)隨之進入編輯狀態(tài)。就可以輸入或修改源程序了, 源程序輸入或修改完畢以后, 按Ctrl+F9(同時按下Ctrl鍵和F9鍵), 則立即進行編譯、連接和執(zhí)行, 這三項工作是連續(xù)完成的。   下面我們試著建立一個Turbo C名為"HELLO.C"的源程序(因程序很小, 這里就不畫出該程序的輪廓圖了):   1. 操作步驟:   (1). 將系統(tǒng)置于DOS提示符下:   (2). 鍵入命令:   tc hello.c   使系統(tǒng)進入Turbo C集成開發(fā)環(huán)境, 并建立一個名為HELLO.C的文件。這時, 系統(tǒng)進入Turbo C編輯環(huán)境。   (3). 通過鍵盤輸入程序, 例如:   main()   {   
  Turbo C 常用的編輯命令   Turbo C編輯程序大約有50條命令, 用以移動光標, 按頁查看正文, 查找并替換字符串等。如下表所示。   表1. Turbo C編輯程序命令   ━━━┳━━━━━━━━━┳━━━━━━━━━━━━━
   
   
  類別 ┃ 功能 ┃ 默認鍵   ━━━╋━━━━━━━━━╋━━━━━━━━━━━━━   ┃ 字符左 ┃ Ctrl+S或Left   基 ┃ 字符右 ┃ Ctrl+D或Right   本 ┃ 字左 ┃ Ctrl+A   光 ┃ 字右 ┃ Ctrl+F   標 ┃ 上行 ┃ Ctrl+E或Up   移 ┃ 下行 ┃ Ctrl+X或Down   動 ┃ 上滾 ┃ Ctrl+W   命 ┃ 下滾 ┃ Ctrl+Z   令 ┃ 上一頁 ┃ Ctrl+R或PgUp   ┃ 下一頁 ┃ Ctrl+C或PgDn   ━━━╋━━━━━━━━━╋━━━━━━━━━━━━━   快 ┃ 行頭 ┃ Ctrl+QS或Home   速 ┃ 行尾 ┃ Ctrl+QD或End   光 ┃ 窗口頭 ┃ Ctrl+QE   標 ┃ 窗口底 ┃ Ctrl+QX   移 ┃ 文件頭 ┃ Ctrl+QR   動 ┃ 文件尾 ┃ Ctrl+QC   命 ┃ 塊頭 ┃ Ctrl+QB   令 ┃ 塊尾 ┃ Ctrl+QK   ┃ 上次光標位置 ┃ Ctrl+QP   ━━━╋━━━━━━━━━╋━━━━━━━━━━━━━   輸 ┃ 插入模式 ┃ Ctrl+V或Ins   入 ┃ 插入行 ┃ Ctrl+N   與 ┃ 刪除行 ┃ Ctrl+Y   刪 ┃ 刪除至行尾 ┃ Ctrl+QY   除 ┃ 刪除光標左邊字符┃ Ctrl+H或Backspace   命 ┃ 刪除光標處字符 ┃ Ctrl+G或Del   令 ┃ 刪除光標右邊字符┃ Ctrl+T   ━━━╋━━━━━━━━━╋━━━━━━━━━━━━━   ┃ 標記塊首 ┃ Ctrl+KB   ┃ 標記塊尾 ┃ Ctrl+KK   ┃ 標記單個字 ┃ Ctrl+KT   塊 ┃ 復制塊 ┃ Ctrl+KC   命 ┃ 刪除塊 ┃ Ctrl+KY   令 ┃ 塊取消 ┃ Ctrl+KH   ┃ 塊移動 ┃ Ctrl+KV   ┃ 讀塊 ┃ Ctrl+KR   ┃ 寫塊 ┃ Ctrl+KW   ━━━╋━━━━━━━━━╋━━━━━━━━━━━━━   ┃ 異常結束操作 ┃ Ctrl+U或Ctrl+Break   ┃ 制表 ┃ Ctrl+L或Tab   其 ┃ 自動縮進 ┃ Ctrl+OI   ┃ 定界符配對 ┃ Ctrl+Q[或Ctrl+Q]   它 ┃ 查找 ┃ Ctrl+QF   ┃ 查找并替換 ┃ Ctrl+QA   ┃ 查找標記 ┃ Ctrl+QN   ┃ 退出編輯 ┃ Ctrl+KQ   ━━━┻━━━━━━━━━┻━━━━━━━━━━━━━   Turbo C 程序的調試   一個程序設計好了以后, 通常會有一些錯誤, 查找和修改程序中的錯誤是令人頭痛的事。Turbo C集成開發(fā)環(huán)境提供了一調試裝置, 使得這一個工作輕易了許多, 程序調試達到了編譯和運行級。   一、TC消息窗口   使用TC最好的理由之一是它答應用戶修改語法錯誤(編譯時) 和評估編譯器給出的警告。TC將編譯器和連接器發(fā)出的消息收集到一緩沖區(qū)中, 然后在消息窗口中顯示, 這樣在訪問源代碼的同時, 還能一下看到這些消息。   現(xiàn)將上面的HELLO.C制造一點語法錯誤, 將第一行包含語句的#去掉, 再去掉第五行printf語句中的后引號。現(xiàn)在程序看上去是這樣的:   include   main()   {   printf("Hello, world/n);   }   按CTRL+F9重新編譯之。編譯窗口將顯示有多少錯誤和警告: 應為兩個錯誤, 0個警告。   當看見編譯窗口中的Press anykey提示時, 按空格鍵, 消息窗口馬上被激活,亮條出現(xiàn)在第一個錯誤或警告上, 這時編輯窗口中也會有一亮條--- 它標志著編譯器給出的錯誤或警告在源代碼中的相應位置。   這時可用光標鍵將消息窗口中的亮條上下移動, 注重到編輯窗口中的亮條也隨著跟蹤源代碼中錯誤發(fā)生的位置。假如將亮條置于"compile"上, 則編輯器顯示文件的最后位置。   假如消息窗口太長看不見, 可用左、右光標水平滾動消息, 為了一次能夠多看點信息, 可按F5放大消息窗口。放大后, 編輯窗口不可見了, 因此不進行錯誤跟蹤。現(xiàn)在, 保持分屏模式。   為了改正錯誤, 將消息窗口中的亮條置于第一個錯誤消息上, 回車, 光標移到編輯窗口中錯誤產生處, 注重, 編輯器狀態(tài)給出所選消息( 這在放大模式下是有用的)改正之。(將第一行拿走的#重新寫上)。   當不只一個錯誤時, 可用兩種方法來修改下一錯誤。   第一種方法和前面一樣, 按F6回到消息窗口選擇想修改的下一條消息。   第二種方法不用回到消息窗口, 只要按Alt+F8, 編譯器就會將光標移至消息窗口中列的下一個錯誤。按Alt+F7可移至前一個錯誤。   這兩種方法各有長短, 視情況而定。有時源代碼中一個愚蠢的錯誤把編譯弄糊涂了, 產生好多消息, 這時選擇修改第一條消息就使得其余的一些錯誤消息沒有什么意義了, 這種情況發(fā)生時, 使用方法一會方便些, 一修改完第一個錯誤之后回到消息窗口, 再滾動到下一個有意義的消息上, 選擇之。在別的情況下, 按Alt+F8會方便得多。   記住, Alt+F7和Alt+F8是熱鍵, TC中無論何時均起作用。因此在消息窗口中按Alt+F8得到的不是當前亮行消息, 而是下一個消息(按Enter選擇當前消息)。   但假如沒別的編譯消息, Alt+F8就不起作用了。   注: 可以如此法選擇連接消息, 但它們不跟蹤源文件。在修改語法錯誤的過程當中, 經常需要增加、刪除正文, 編輯器是記住的, 依然能正確定位錯誤位置。   沒有必要記住行號和增加、刪除的正文行。

  二、Turbo C集成調試器   一旦修改好語法錯誤之后程序編譯就沒什么問題了, 但還是可能不按要求運行, 因為可能有邏輯錯誤(運行錯誤)。這種錯誤跟蹤就無助于發(fā)現(xiàn)錯誤位置了。    
      TC有一個集成調試器可以跟蹤運行錯誤。通過調試器可以運行, 在斷點處暫停,檢查變量的值, 甚至可以改變之, 以看程序會有什么反應。   Turbo C集成調試器是源程序級的調試器, 即用同你編寫程序一樣的" 語言"來控制調試器。例如, 為了顯示數(shù)組中的一個元素的值, 可告訴調試器顯示這樣的表達式的值:   Ctrl+F4 Debug/Eavluate 計算表達式, 答應修改變量的值。   Debug/Find Function 查找函數(shù)定義, 顯示在編輯窗口中。 僅在調試時才有效。   Ctrl+F3 Debug/Call Stack 顯示調用棧, 可顯示任何函數(shù)的當前執(zhí)行位置, 其方法是在調用棧中選擇相應的函數(shù)名。僅在調試時有效。   Debug/Source Debugging 控制是否答應調試: 置為On時, 集成調試器和單獨調試器均可用 ; 置為   Standalone時, 只能用單獨調試器調試, 雖然還能在TC中運行; 置為None時, 在.EXE文件不置調試信息,兩種調試均不能調試。   Ctrl+F4 Break/Watch/Add Watch 增加一監(jiān)視表達式。   Break/Watch/Delete Watch 刪除一監(jiān)視表達式。   Break/Watch/Edit 編輯一監(jiān)視表達式。   Break/Watch/Remove All 刪除所有監(jiān)視表達式。   Watches   Ctrl+F8 Break/Watch/Toggle 設置或清除光標所在行的斷點。   Breakpoint   Break/Watch/Clear 刪除程序中所有斷點。   Breakpoint   Break/Watch/Next 顯示下一斷點   Breakpoint   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━      表3. 調試器菜單命令及其熱鍵   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━   熱鍵 菜單命令 功能   ───────────────────────────────────   F5 在整屏和分屏之間放大縮小活動窗口。   Alt+F5 將顯示轉到用戶屏, 擊任意鍵返回。   F6 在編輯窗口與監(jiān)視窗口或消息窗口間   切換。   Alt+F6 若編輯窗口是活動的, 轉到最近一次   裝入編輯器的文件; 若下面窗口是活   動的, 則在監(jiān)視窗口和消息窗口間切換。   Ctrl+F9 Run/Run 調試運行或不調試運行程序, 必要時   編譯、連接源文件, 若編譯、 連接時   Debug/Source Debuging和O/C/C/OBJ   Debug Information為On, 則運行程序   到斷點或程序末尾。   Project/Remove Messages 刪除消息窗口中的內容。   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  判定程序是否出錯或者為什么出錯是編程中最有挑戰(zhàn)意義的一方面。這里建義你進行預防性設計, 具體做法為:   (1). 將代碼寫清楚點, 應作適當縮進, 使用文字說明和描述性的變量名。    
      (2). 代碼應簡單, 把精力放在簡單語句中的復雜表達式, 而不是一些復雜語句。Turbo C的代碼優(yōu)化機制將大大提高代碼的效率, 而且調試、閱讀、 修改起來輕易。   (3). 盡量用目的簡單、好定義的函數(shù)構建程序。 這會便于編制調試程序和分析結果, 而且閱讀、修改起來也要輕易一些。   (4). 應盡量減少各個函數(shù)要求的數(shù)據(jù)和改變數(shù)據(jù)的元素個數(shù)。 這也會便于編制測試程序和分析結果; 同樣便于閱讀、修改程序。并且還限制了出錯函數(shù)可能造成的巨大混亂的牽涉面, 便得能在一個調試節(jié)中多運行函數(shù)幾次。   (5). 要留心編寫程序中的公共函數(shù), 或者說在其它程序中可再用的函數(shù)。   編寫、調試一個一般性的函數(shù)通常要比編寫、調試兩個或更多的非凡函數(shù)要輕易。   Turbo C編譯、連接和運行時的常見錯誤   一、編譯時的常見錯誤   1. 數(shù)據(jù)類型錯誤。此類錯誤是初學者編程時的常見現(xiàn)象, 下面是一些要引起注重的錯誤:   (1) 所有變量和常量必須要加以說明。   (2) 變量只能賦給相同類型的數(shù)據(jù)。   (3) 對scanf()語句, 用戶可能輸入錯誤類型的數(shù)據(jù)項, 這將導致運行時出錯, 并報出錯信息。為避免這樣的錯誤出現(xiàn), 你就提示用戶輸入正確類型的數(shù)據(jù)。   (4) 在執(zhí)行算術運算時要注重:   a. 根據(jù)語法規(guī)則書寫雙精度數(shù)字。要寫0.5, 而不是寫.5; 要寫1.0,而不是1。盡管C語言會自動地把整型轉換成雙精度型, 但書寫雙精度型是個好習慣。讓C語言為你做強行轉換這是一種效率不高的程序   設計風格。 這有可能導致轉換產生錯誤。   b. 不要用0除。這是一個災難性的錯誤, 它會導致程序失敗, 不管C語言的什么版本, 都是如此, 執(zhí)行除法運算要非凡小心。   c. 確保所有的雙精度數(shù)(包括那些程序輸入用的雙精度數(shù)) 是在實數(shù)范圍之內。   d. 所有整數(shù)必須在整數(shù)答應的范圍內。這適用于所有計算結果, 包括中間結果。   2. 將函數(shù)后面的";"忘掉。此時錯誤提示色棒將停在該語句下的一行, 并顯示:   Statement missing ; in function <函數(shù)名>   3. 給宏指令如#include, #define等語句尾加了";"號。   4. "{"和"}"、"("和")"、"/*"和"*/"不匹配。 引時色棒將位于錯誤所在的行, 并提示出有關丟掉括號的信息。   5. 沒有用#include指令說明頭文件, 錯誤信息提示有關該函數(shù)所使用的參數(shù)未定義。   6. 使用了Turbo C保留要害字作為標識符, 此時將提示定義了太多數(shù)據(jù)類型。   7. 將定義變量語句放在了執(zhí)行語句后面。此時會提示語法錯誤。   8. 使用了未定義的變量, 此時屏幕顯示:   Undefined symbol '<變量名>' in function <函數(shù)名>   9. 警告錯誤太多。忽略這些警告錯誤并不影響程序的執(zhí)行和結果。 編譯時當警告錯誤數(shù)目大于某一規(guī)定值時(缺省為100)便退出編譯器, 這時應改變集成開發(fā)環(huán)境Options/Compiler/Errors中的有關警告錯誤檢查開關為off。   10. 將關系符"=="誤用作賦值號"="。此時屏幕顯示:   Lvalue required in function <函數(shù)名>

  二、連接時的常見錯誤   1. 將Turbo C庫函數(shù)名寫錯。這種情況下在連接時將會認為此函數(shù)是用戶自定義函數(shù)。此時屏幕顯示:   Undefined symbol '<函數(shù)名>' in <程序名>    
      2. 多個文件連接時, 沒有在"Project/Project name中指定項目文件 (.PRJ文件), 此時出現(xiàn)找不到函數(shù)的錯誤。   3. 子函數(shù)在說明和定義時類型不一致。   4. 程序調用的子函數(shù)沒有定義。   三、運行時的常見錯誤   1. 路徑名錯誤。在MS-DOS中, 斜杠(/)表示一個目錄名; 而在Turbo C 中斜杠是個某個字符串的一個轉義字符, 這樣, 在用Turbo C 字符串給出一個路徑名時應考慮"/"的轉義的作用。例如, 有這樣一條語句:   file=fopen("c:/new/tbc.dat", "rb");   目的是打開C盤中NEW目錄中的TBC.DAT文件, 但做不到。這里"/"后面緊接的分別"n"及"t", "/n"及"/t"將被分別編譯為換行及tab字符, DOS將認為它是不正確的文件名而拒絕接受, 因為文件名中不能和換行或tab字符。正確的寫法應為:   file=fopen("c://new//tbc.dat", "rb");   2. 格式化輸入輸出時, 規(guī)定的類型與變量本身的類型不一致。例如:   float l;   printf("%c", l);   3. scanf()函數(shù)中將變量地址寫成變量。例如:   int l;   scanf("%d", l);   4. 循環(huán)語句中, 循環(huán)控制變量在每次循環(huán)未進行修改, 使循環(huán)成為無限循環(huán)。   5. switch語句中沒有使用break語句。   6. 將賦值號"="誤用作關系符"=="。   7. 多層條件語句的if和else不配對。   8. 用動態(tài)內存分配函數(shù)malloc()或calloc()分配的內存區(qū)使用完之后, 未用free()函數(shù)釋放, 會導致函數(shù)前幾次調用正常, 而后面調用時發(fā)生死機現(xiàn)象,不能返回
操作系統(tǒng)。其原因是因為沒用空間可供分配, 而占用了操作系統(tǒng)在內存中的某些空間。   9. 使用了動態(tài)分配內存不成功的指針, 造成系統(tǒng)破壞。   10. 在對文件操作時, 沒有在使用完及時關閉打開的文件。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 宜良县| 新昌县| 周至县| 靖远县| 南涧| 宁安市| 苏州市| 民勤县| 绥棱县| 普安县| 乐清市| 会同县| 文化| 赣州市| 恩平市| 宾川县| 房产| 磐安县| 克拉玛依市| 和平区| 德庆县| 密云县| 永春县| 琼结县| 高唐县| 西城区| 上虞市| 永川市| 长海县| 云霄县| 姜堰市| 九龙坡区| 平南县| 旬邑县| 绩溪县| 喀喇沁旗| 绥江县| 福贡县| 六安市| 长泰县| 济南市|