《《c語言學(xué)習(xí)》PPT課件》由會(huì)員分享,可在線閱讀,更多相關(guān)《《c語言學(xué)習(xí)》PPT課件(27頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、第一章 C 語 言 概 述,1.1 C語言的發(fā)展簡(jiǎn)史與特色 1.2 簡(jiǎn)單的C程序介紹 1.3 用C語言解決實(shí)際問題的步驟,1.1 C語言的發(fā)展簡(jiǎn)史與特色,1.1.1 C語言發(fā)展簡(jiǎn)史,C語言是目前世界上最廣泛使用的通用計(jì)算機(jī)語言。用它既可編寫計(jì)算機(jī)系統(tǒng)軟件,也可編寫各種應(yīng)用軟件,所以在數(shù)百種計(jì)算機(jī)語言中,C語言仍然是目前最流行、最受歡迎的計(jì)算機(jī)語言。 現(xiàn)在, Windows已成為計(jì)算機(jī)的主要操作系統(tǒng), 相應(yīng)的基于Windows的程序開發(fā)多采用C++,它雖是一種面向?qū)ο蟮恼Z言, 但其核心內(nèi)容仍是標(biāo)準(zhǔn)C。,1.1.2 C語言的特色,1. C與其它語言的比較,1) C與匯編語言比較 C語言允許
2、對(duì)位、 字節(jié)和地址進(jìn)行操作(指針), 這三者是計(jì)算機(jī)最基本的工作單元,在編制系統(tǒng)程序時(shí)要經(jīng)常用到, 所以它適用于寫系統(tǒng)程序。由于匯編語言是非結(jié)構(gòu)化語言, 含有大量的跳轉(zhuǎn)、子程序調(diào)用以及變址, 這種結(jié)構(gòu)的缺陷使得匯編語言程序難以讀懂,難以維護(hù),也不能移植。而C語言的結(jié)構(gòu)化、 模塊化克服了匯編程序難讀、難維護(hù)的缺點(diǎn)。 C語言又具有匯編語言的功能,目標(biāo)代碼長(zhǎng)度也差不多, 效率幾乎與匯編相近, 且具有很好的可移植性。,2) C與其它高級(jí)語言比較 C有豐富的運(yùn)算符,達(dá)34種,其中有很多運(yùn)算符對(duì)應(yīng)于常用的機(jī)器指令,比如++等可直接編譯成機(jī)器代碼,使用起來簡(jiǎn)單精練。 C有多樣化的表達(dá)式類型; C
3、的數(shù)據(jù)類型豐富,具有現(xiàn)代語言的各種數(shù)據(jù)結(jié)構(gòu)。 C的數(shù)據(jù)類型有:整型,實(shí)型,字符型,數(shù)組,指針,結(jié)構(gòu)體,共用體等。 C的輸入輸出使用的是數(shù)據(jù)流 C程序生成的機(jī)器代碼質(zhì)量高, 內(nèi)存占用少, 運(yùn)行速度快, 程序執(zhí)行效率高。,2. C是結(jié)構(gòu)化語言 C語言是以函數(shù)為模塊來編寫源程序的, 所以C程序是模塊化的。 C語言具有結(jié)構(gòu)化的控制語句,如ifelse語句,switch語句, while語句, dowhile語句,for語句等。 因此是結(jié)構(gòu)化的理想語言, 符合現(xiàn)代編程風(fēng)格的要求。 結(jié)構(gòu)化語言的一個(gè)顯著特點(diǎn)是代碼和數(shù)據(jù)的分隔化, 即代碼和數(shù)據(jù)分開存貯, 互相隔離; 程序的各個(gè)部分除
4、了必要的信息交流外, 彼此互不影響, 相互隔離。,3. C是編程者的語言 C語言的其它主要優(yōu)點(diǎn)如下: C語言簡(jiǎn)潔、 緊湊, 使用方便靈活; 一共只有32個(gè)關(guān)鍵字(27個(gè)來自kerninghan和Ritchie的標(biāo)準(zhǔn),5個(gè)由ANSI標(biāo)準(zhǔn)委員會(huì)增補(bǔ)), 9種控制語句, 它們構(gòu)成了C語言的全部指令;程序書寫形式自由, 壓縮了一切不必要的成分。 C語言很少限制、很少缺陷、模塊結(jié)構(gòu)、彼此獨(dú)立的函數(shù)和一些十分緊湊的關(guān)鍵字,使得C語言能達(dá)到接近匯編語言的高效率和廣泛的應(yīng)用范圍,所以在許多情況下它是編程者首選的計(jì)算機(jī)語言。,4. C的“缺點(diǎn)”,語法限制不嚴(yán)格 2) 程序設(shè)計(jì)自由度大,,1.2 簡(jiǎn)單
5、的C程序介紹,例 1.1 打印一個(gè)語句。 程序: main( ) printf(A simple c program.n); 經(jīng)編譯后運(yùn)行結(jié)果如下: A simple c program.,例 1.2 求兩數(shù)中的小者。 程序: main( ) /* 主函數(shù) */ int a , b, c; /* 定義變量 */ scanf(%d, %d, return(z); /* 返回z值*/ ,經(jīng)編譯后運(yùn)行如下: 14, 4 min=4 再次運(yùn)行: 6, 29 min=6 本程序包括兩個(gè)函數(shù): 主函數(shù)main和子函數(shù)min。,通過上述兩個(gè)例子, 我們可以看到: (1)
6、C程序是由函數(shù)構(gòu)成的。 (2) 一個(gè)函數(shù)由兩部分組成: 函數(shù)的首部和函數(shù)體。 (3) main函數(shù)通常位于程序之首, 實(shí)際上它位于程序的開頭、 最后及函數(shù)與函數(shù)之間均是合法的, 但不管在什么位置,一個(gè)C程序總是從main函數(shù)開始執(zhí)行的。 (4) C程序書寫格式自由, 一行內(nèi)可以寫幾個(gè)語句, 一個(gè)語句可以分寫在多行上。 (5) C語言本身沒有輸入輸出語句。 (6) 可以用/* */對(duì)C程序中的任何部分作注釋, 它可增加程序的可讀性。,,1.3 用C語言解決實(shí)際問題的步驟,1.3.1 一個(gè)實(shí)例的求解過程,1. 問題提出 計(jì)算y=f(x)曲線, x軸(y=0), x=
7、a, x=b四條曲線所圍成的面積。 參看圖1.1。,圖 1.1 計(jì)算面積,2. 分析問題 用戶需求: 計(jì)算四條曲線所圍的面積。 已知條件: 四條曲線(即x=a, x=b, y=0, y=f(x))。 需要進(jìn)行的處理: 計(jì)算面積, 注意誤差和精度。 需要用到的軟、硬件環(huán)境:用C語言編程,在個(gè)人微機(jī)上運(yùn)行,使用Turbo C編譯系統(tǒng)。 進(jìn)行可行性分析: 用數(shù)值計(jì)算方法完全能夠?qū)崿F(xiàn)。 經(jīng)過分析, 我們已做到心中有數(shù)。,3. 確定處理方案 根據(jù)實(shí)際問題選用適當(dāng)?shù)臄?shù)學(xué)模型(本例屬科學(xué)計(jì)算)。根據(jù)高等數(shù)學(xué)中學(xué)到的知識(shí),我們提出的數(shù)學(xué)模型是 ,也就是在a, b區(qū)間內(nèi)求f
8、(x)函數(shù)的定積分。,4. 根據(jù)處理方案確定操作步驟,圖 1.2 矩形法求積分,在圖1.2中畫陰影線的小面積有 4 條邊, 第一條長(zhǎng)度f(c), 第二條長(zhǎng)度f(d), 第三條長(zhǎng)度d-c,而第四條線我們采用近似的辦法: 以第一條線高度作x軸的平行線得y=f(c),則小矩形面積為(d-c)f(c);或以第二條線高度作x軸平行線得y=f(d),則小矩形面積為(d-c)f(d)。 然后將各小塊面積累加起來。以上過程歸納起來就得出了近似公式,最后得到一個(gè)操作步驟, 也就是算法,如下所示:,(1) 讀a, b和n(分成n塊)。 (2) 求高h(yuǎn)=(b-a)/n。 (3) s=0,面積的初始值為0。
9、 (4) i=1,先計(jì)算第一個(gè)小面積。 (5) s=s+h*f(a+i*h),用后點(diǎn)計(jì)算;或s=s+h*f(a+(i-1)*h), 用前點(diǎn)計(jì)算, 小面積累加起來。 (6) i=i+1, 取下一個(gè)小面積。 (7) 如i<=n轉(zhuǎn)(5), 否則打印s。,5. 根據(jù)操作步驟編寫源程序 程序:,main( ) float a, b, h, s; float f(float); int i, n; scanf(%f, %f, %d, printf(a=%f, b=%f, n=%d, s=%fn, a, b, n, s); ,6. 輸入程序并上機(jī)調(diào)試 上機(jī)輸入源程序并調(diào)試,直到改正了所有
10、的編譯錯(cuò)誤和運(yùn)行錯(cuò)誤。 在調(diào)試過程中應(yīng)該精心選擇典型數(shù)據(jù)進(jìn)行測(cè)試。 本例當(dāng)計(jì)算有誤差或精度不足時(shí)可加大分塊數(shù)量,或采用其它計(jì)算方法:如改為梯形法或拋物線法(即辛普生法)等。要避免因調(diào)試數(shù)據(jù)不能反映實(shí)際數(shù)據(jù)的特征而引起的計(jì)算偏差和運(yùn)行錯(cuò)誤。,7. 整理分析計(jì)算結(jié)果,圖 1.3 用計(jì)算機(jī)處理一個(gè)實(shí)際問題,1.3.2 算法,1. 什么是算法 為解決一個(gè)問題而采取的方法和步驟,就稱為“算法”。對(duì)同一個(gè)問題,可以有不同的解題方法和步驟,也就有不同的算法。例如求 可采用矩形法,梯形法,辛普生法(即拋物線法)等。為了有效地解題,不僅需要保證算法正確,還要考慮算法的質(zhì)量,選擇較好的算法,或進(jìn)行算法的優(yōu)化。,
11、2. 算法的特點(diǎn) 一個(gè)算法, 必須具有以下特點(diǎn): (1) 僅有有限的操作步驟, 即“有窮性”(無死循環(huán))。 (2) 算法的每一個(gè)步驟應(yīng)當(dāng)是確定的, 即無“二義性”。 (3) 有適當(dāng)?shù)妮斎耄?即有確定的條件。 (4) 有輸出結(jié)果。 沒有輸出的算法是無意義的。 (5) 算法中的每一個(gè)步驟都應(yīng)當(dāng)有效執(zhí)行(無死語句)。,3. 算法的重要性 掌握最基本的、常用的算法是很重要的,算法設(shè)計(jì)是整個(gè)程序設(shè)計(jì)的核心。著名計(jì)算機(jī)科學(xué)家沃思(Wirth)曾提出一個(gè)公式: 程序=算法+數(shù)據(jù)結(jié)構(gòu)。對(duì)初學(xué)者而言,數(shù)據(jù)結(jié)構(gòu)即是語言提供的各種數(shù)據(jù)類型,無大難點(diǎn)。這樣編程的任務(wù)主要是考慮算法問題,當(dāng)然還要學(xué)會(huì)基本的語句和語法。
12、,4. 算法的表示方法,用自然語言表示 2) 用傳統(tǒng)流程圖表示,圖 1.4 傳統(tǒng)流程圖常用符號(hào),例 1.3 求 , 用傳統(tǒng)流程圖表示,見圖1.5。,圖 1.5 矩形法求積分,3) 用N-S流程圖表示,例 1.4 求 ,用N-S結(jié)構(gòu)化流程圖表示,見圖1.6。,圖 1.6 矩形法求積分,4) 用偽代碼表示,例 1.5 求 , 用偽代碼來表示。 開始(BEGIN) 輸入(Input) a, b, n (b-a)/nh 0s 1i 當(dāng)(while) i<=n 執(zhí)行(do) s+h*f(a+(i-1)*h)s i+1i 循環(huán)到此結(jié)束(End do) 輸出(Print) a, b, n, s 算法結(jié)束(END),,,,,