c語言程序設(shè)計詳細(xì)教程.ppt_第1頁
c語言程序設(shè)計詳細(xì)教程.ppt_第2頁
c語言程序設(shè)計詳細(xì)教程.ppt_第3頁
c語言程序設(shè)計詳細(xì)教程.ppt_第4頁
c語言程序設(shè)計詳細(xì)教程.ppt_第5頁
已閱讀5頁,還剩36頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1C語言概述 河南理工大學(xué) C語言程序設(shè)計 編寫組 重點 難點 本章重點 C語言的特點C語言程序的基本結(jié)構(gòu)算法及其描述方法結(jié)構(gòu)化程序設(shè)計方法本章難點 C語言與其他高級語言的區(qū)別算法的流程圖 N S圖描述方法 內(nèi)容提要 1 1C語言的發(fā)展及特點1 1 1C語言的發(fā)展1 1 2C語言的特點1 2C語言程序的基本結(jié)構(gòu)1 3算法及其描述1 3 1算法的概念1 3 2算法的描述方法1 4程序設(shè)計方法1 4 1程序設(shè)計的一般步驟1 4 2結(jié)構(gòu)化程序設(shè)計方法 1 1C語言的發(fā)展及特點 1 1 1C語言的發(fā)展在C語言誕生以前 系統(tǒng)軟件主要是用匯編語言編寫的 由于匯編語言程序依賴于計算機(jī)硬件 所以其可讀性和可移植性都很差 而一般的高級語言又難以實現(xiàn)對計算機(jī)硬件的直接操作 這正是匯編語言的優(yōu)勢 于是人們盼望能有一種兼有匯編語言和高級語言特性的新語言 C語言就是在這種背景下于20世紀(jì)70年代初問世的 當(dāng)時主要是用于UNIX系統(tǒng)的開發(fā) 1978年由美國電話電報公司 AT T 貝爾實驗室正式發(fā)表了C語言 同時由B W Kernighan和D M Ritchit合著了著名的 TheCProgrammingLanguage 一書 通常簡稱為 K R 也有人稱之為 K R 標(biāo)準(zhǔn) 美國國家標(biāo)準(zhǔn)化協(xié)會ANSI AmericanNationalStandardsInstitute 在此基礎(chǔ)上制定了一個C語言標(biāo)準(zhǔn) 于1983年發(fā)表 通常稱之為ANSIC 在微機(jī)上使用的C編譯系統(tǒng)主要有MicrosoftC TurboC QuickC BorlandC等 它們不僅實現(xiàn)了ANSIC標(biāo)準(zhǔn) 而且還各自作了一些擴(kuò)充 使之更加方便 完美 如今C 又成為了高級語言的主流 C 是面向?qū)ο蟮某绦蛟O(shè)計語言 但它的基礎(chǔ)是C語言 且二者在很多方面是兼容的 因此 掌握了C語言 再去學(xué)習(xí)C 就會達(dá)到事半功倍的效果 本書敘述以ANSIC為基礎(chǔ) C語言上機(jī)實驗時用的是TurboC2 0 C 可使用BorlandC 3 1 1 1 2C語言的特點 1 與自然語言比較 2 與其他程序設(shè)計語言比較1 C語言簡潔 緊湊 使用方便 靈活 ANSIC一共只有32個關(guān)鍵字 見附錄 如int long float if while do等 9種控制語句 程序書寫自由 主要用小寫字母表示 壓縮了一切不必要的成分 2 運算符豐富 共有34種運算符 見附錄 C語言把括號 賦值 逗號等都作為運算符處理 從而使C語言的運算類型極為豐富 可以方便地實現(xiàn)其他高級語言難以實現(xiàn)的功能 3 數(shù)據(jù)結(jié)構(gòu)類型豐富 具有現(xiàn)代語言的各種數(shù)據(jù)結(jié)構(gòu) C語言的數(shù)據(jù)類型有整型 實型 字符型 數(shù)組類型 指針類型 結(jié)構(gòu)體類型 共用體類型等 能實現(xiàn)各種復(fù)雜數(shù)據(jù)結(jié)構(gòu) 如鏈表 樹 棧等 的運算 尤其是指針類型數(shù)據(jù) 使用起來更為靈活 多樣 4 具有結(jié)構(gòu)化的控制語句 用函數(shù)作為程序的基本單位 便于實現(xiàn)程序的模塊化 C語言是良好的結(jié)構(gòu)化語言 符合現(xiàn)代編程風(fēng)格的要求 5 語法限制不太嚴(yán)格 程序設(shè)計自由度大 如對數(shù)組下標(biāo)越界不做檢查 對變量的類型使用比較靈活 如整型數(shù)據(jù)與字符型數(shù)據(jù)可以通用 6 C語言允許直接訪問物理地址 能進(jìn)行位 bit 操作 能實現(xiàn)匯編語言的大部分功能 可以直接對硬件進(jìn)行操作 因此有人把它稱為中級語言 7 生成目標(biāo)代碼質(zhì)量高 程序執(zhí)行效率高 可達(dá)到匯編語言程序的80 8 與匯編語言相比 用C語言寫的程序可移植性好 C強(qiáng)調(diào)靈活性 使程序設(shè)計人員能有較大的自由度 以適應(yīng)寬廣的應(yīng)用面 限制 與 靈活 是一對矛盾 限制嚴(yán)格 就失去靈活性 而強(qiáng)調(diào)靈活 就必然增加了出錯的可能性 1 2C語言程序的基本結(jié)構(gòu) 所謂程序 就是一系列遵循一定規(guī)則和思想并能正確完成指定工作的代碼 使用C語言編寫的程序稱為C語言源程序 簡稱C語言程序或C程序 例1 1求兩個整數(shù)之和 main 函數(shù)首部 inta b sum 定義整型變量a b sum printf Pleaseinputtwointegers n 輸出提示信息 增強(qiáng)交互性 scanf d d 輸出a b sum 程序運行情況如下 Pleaseinputtwointegers 6 8 表示空格 表示按Enter鍵 6 8 14 例1 2求兩個整數(shù)中的較大者 include 編譯預(yù)處理 main 主函數(shù)首部 intx y z 定義整型變量x y z intmax inta intb 聲明函數(shù)max printf Pleaseinputtwointegers n 輸出提示信息 scanf d d 把結(jié)果返回主調(diào)函數(shù) 程序運行情況如下 Pleaseinputtwointegers 6 8 Themaximumnumberis8 C程序的基本結(jié)構(gòu) 1 C程序可由一個或多個函數(shù)構(gòu)成 函數(shù)是C程序的基本單位 2 C程序必須有一個且只能有一個main函數(shù) 即主函數(shù) 3 一個C程序總是從主函數(shù)開始執(zhí)行 而不論主函數(shù)在整個程序中位置如何 主函數(shù)執(zhí)行完了 整個程序也就執(zhí)行完了 4 C程序中可以有編譯預(yù)處理命令 如include命令 5 每一個語句都必須以分號結(jié)尾 但編譯預(yù)處理命令 函數(shù)首部 即函數(shù)的起始行 和花括號 之后不能加分號 6 C語言本身沒有輸入輸出語句 輸入輸出功能是用輸入輸出庫函數(shù)來實現(xiàn)的 7 和 為注釋符 二者之間的部分為注釋 C程序的書寫規(guī)則 1 一個聲明或一條語句占一行 當(dāng)然C程序允許一行寫多條語句 也允許一條語句寫在多行上 且無需續(xù)行符 2 用 括起來的部分 通常表示程序的某一層次結(jié)構(gòu) 一般與該結(jié)構(gòu)語句的第一個字母對齊 最好單獨占一行 3 低一層次的語句或聲明可比高一層次的語句或聲明縮進(jìn)若干格后書寫 以便看起來更加清晰 增加程序的可讀性 在編程時應(yīng)力求遵循這些規(guī)則 以養(yǎng)成良好的編程風(fēng)格 1 3算法及其描述 1 3 1算法的概念 1 算法 程序的靈魂一個程序應(yīng)包括如下兩種描述 1 對數(shù)據(jù)的描述 在程序中要指定數(shù)據(jù)的類型和數(shù)據(jù)之間的組織形式 即數(shù)據(jù)結(jié)構(gòu) 在C語言中 系統(tǒng)提供的數(shù)據(jù)結(jié)構(gòu)是以數(shù)據(jù)類型的形式出現(xiàn)的 2 對數(shù)據(jù)處理的描述 即計算機(jī)算法 廣義地說 為解決一個問題而采取的方法和步驟 就稱為 算法 它是程序的靈魂 因此 著名計算機(jī)科學(xué)家沃思 NikiklausWirth 提出一個公式 程序 數(shù)據(jù)結(jié)構(gòu) 算法 實際上 一個程序除了數(shù)據(jù)結(jié)構(gòu)和算法外 還必須使用一種計算機(jī)語言 并在必要的環(huán)境支持下 采用合適的程序設(shè)計方法來設(shè)計 因此 程序可以更完整地表達(dá)為 程序 算法 數(shù)據(jù)結(jié)構(gòu) 程序設(shè)計方法 語言工具和環(huán)境算法是靈魂 數(shù)據(jù)結(jié)構(gòu)是加工對象 語言是工具 編程需要采用合適的方法 2 算法的分類計算機(jī)算法可分為兩大類 數(shù)值算法和非數(shù)值算法 3 算法的特性一個算法應(yīng)該具有以下特性 1 有窮性2 確定性3 有零個或多個輸入4 有一個或多個輸出5 有效性 1 3 2算法的描述方法 自然語言傳統(tǒng)流程圖N S流程圖偽代碼計算機(jī)語言等 例1 3求的值 1 用自然語言描述算法步驟1 預(yù)設(shè)sign為1 sign代表項的符號 第一項為正 值為1 步驟2 累加和sum置初值1步驟3 將之后要加的分母用deno表示 賦初值2 即下一步加的是第二項 步驟4 將sign乘以 1后再賦給sign 實現(xiàn)正負(fù)交替 步驟5 用當(dāng)前符號sign與當(dāng)前基項 1 deno 相乘得到當(dāng)前項term步驟6 將當(dāng)前項term與累加和sum相加得新的累加和sum步驟7 分母deno加1 得下一項分母deno步驟8 若分母deno 100返回步驟4 否則輸出sum 算法結(jié)束 用自然語言描述算法的特點 通俗易懂 但文字冗長 容易出現(xiàn) 歧義性 此外 用自然語言描述包含分支和循環(huán)的算法 很不方便 因此 除了很簡單的問題以外 一般不用自然語言描述算法 2 用流程圖描述算法 流程圖是用一些圖框表示各種操作的算法描述方法 用圖形描述算法 直觀形象 易于理解 ANSI規(guī)定了一些常用的流程圖符號 如圖1 1所示 三種基本結(jié)構(gòu) 1 順序結(jié)構(gòu) 2 選擇結(jié)構(gòu) 3 循環(huán)結(jié)構(gòu) 當(dāng)型直到型 例1 3的流程圖 對于順序 分支和循環(huán)這三種基本結(jié)構(gòu) 有以下共同特點 1 雖然結(jié)構(gòu)內(nèi)部的某些基本框并不是也不可能是單入口和單出口 比如選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)中的判斷框有兩個出口 但整個結(jié)構(gòu)只有一個入口和一個出口 2 結(jié)構(gòu)內(nèi)的每一部分都有機(jī)會被執(zhí)行到 也就是說 對每一個基本框來說 都應(yīng)當(dāng)有一條從入口到出口的路徑通過它 3 結(jié)構(gòu)內(nèi)不存在 死循環(huán) 無終止的循環(huán) 在有限時間內(nèi)必能結(jié)束執(zhí)行過程 已經(jīng)證明 由以上三種基本結(jié)構(gòu)順序組成的算法結(jié)構(gòu) 可以解決任何復(fù)雜的問題 由這三種基本結(jié)構(gòu)所構(gòu)成的算法屬于 結(jié)構(gòu)化 的算法 這種設(shè)計方法也稱為結(jié)構(gòu)化程序設(shè)計方法 主要有以下三個要求 1 結(jié)構(gòu)化程序的控制結(jié)構(gòu)只能由順序 分支和循環(huán)三種基本結(jié)構(gòu)構(gòu)成 當(dāng)然也可以由這三種基本結(jié)構(gòu)進(jìn)行組合形成新的結(jié)構(gòu) 但必須要滿足基本結(jié)構(gòu)所要求的三個條件 2 整個程序是由許多個這三種結(jié)構(gòu)的程序塊串聯(lián)起來的 因為這三種結(jié)構(gòu)都只有一個入口和一個出口 所以是可以把它們串聯(lián)起來的 3 整個程序只有一個入口和出口 結(jié)構(gòu)化的流程圖描述算法的特點 用這種結(jié)構(gòu)化的流程圖描述算法直觀形象 比較清楚地顯示出各個框之間的邏輯關(guān)系 但是這種流程圖占用篇幅較多 尤其當(dāng)算法比較復(fù)雜時 畫流程圖既費時又不方便 3 用N S流程圖描述算法 1973年美國學(xué)者I Nassi和B Shneiderman提出了一種新的流程圖形式 在這種流程圖中 完全去掉了帶箭頭的流程線 全部算法寫在一個矩形框內(nèi) 在該框內(nèi)還可以包含其他的從屬于它的框 或者說 由一些基本的框組成一個大的框 這種流程圖稱為N S結(jié)構(gòu)化流程圖 適用于結(jié)構(gòu)化程序設(shè)計 而且所用篇幅較少 因而很受歡迎 1 順序結(jié)構(gòu) 2 選擇結(jié)構(gòu) 3 循環(huán)結(jié)構(gòu) 例1 3的N S圖 N S圖描述算法的特點 用傳統(tǒng)的流程圖和N S圖描述算法 直觀易懂但畫起來比較費事 4 用偽代碼描述算法 偽代碼 pseudocode 是用介于自然語言和計算機(jī)語言之間的文字和符號來描述算法 它不用圖形符號 因此書寫方便 格式緊湊 也比較好懂 便于向計算機(jī)語言描述的算法 即程序 過渡 例1 3的算法可以用偽代碼描述如下 BEGIN 算法開始 1 sum2 deno1 signwhiledeno 100 1 sign signsign 1 deno termsum term sumdeno 1 deno printsumEND 算法結(jié)束 偽代碼描述算法的特點 偽代碼書寫格式比較自由 容易表達(dá)出設(shè)計者的思想 同時 用偽代碼很容易寫出結(jié)構(gòu)化的算法 并且寫出的算法也很容易修改 但是用偽代碼描述算法不如流程圖直觀 可能會出現(xiàn)邏輯上的錯誤 例如循環(huán)或選擇結(jié)構(gòu)的范圍搞錯等 5 用計算機(jī)語言描述算法 要完成一件工作 包括設(shè)計算法和實現(xiàn)算法兩個部分 我們的任務(wù)是用計算機(jī)解題 也就是要用計算機(jī)實現(xiàn)算法 計算機(jī)是無法識別自然語言 流程圖和偽代碼的 只有用計算機(jī)語言編寫的程序才能被計算機(jī)執(zhí)行 當(dāng)然還要編譯成二進(jìn)制目標(biāo)程序 因此 在用流程圖或偽代碼描述出一個算法后 還要將它轉(zhuǎn)換成計算機(jī)語言程序 例1 3的算法可以用C語言描述如下 main intsign 1 floatdeno 2 0 sum 1 0 term while deno 100 sign sign term sign deno sum sum term deno deno 1 printf Thesumis f n sum 程序運行結(jié)果為 Thesumis0 688172 1 4程序設(shè)計方法 1 4 1程序設(shè)計的一般步驟 1 分析問題并確定數(shù)據(jù)結(jié)構(gòu) 2 算法設(shè)計 3 編寫程序 4 上機(jī)調(diào)試 5 整理寫出文檔資料 1 4 2結(jié)構(gòu)化程序設(shè)計方法 1 自頂向下 逐步細(xì)化 2 模塊化設(shè)計 3 結(jié)構(gòu)化編碼 本章內(nèi)容十分重要 是學(xué)習(xí)后面各章的基礎(chǔ) 學(xué)習(xí)程序設(shè)計的目的不只是學(xué)習(xí)一種特定的語言 而是學(xué)習(xí)程序設(shè)計的一般方

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論