計(jì)算機(jī)編程課件:第3章 變量、函數(shù)和流程控制_第1頁
計(jì)算機(jī)編程課件:第3章 變量、函數(shù)和流程控制_第2頁
計(jì)算機(jī)編程課件:第3章 變量、函數(shù)和流程控制_第3頁
計(jì)算機(jī)編程課件:第3章 變量、函數(shù)和流程控制_第4頁
計(jì)算機(jī)編程課件:第3章 變量、函數(shù)和流程控制_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第3章 變量、函數(shù)和流程控制,要目 順序結(jié)構(gòu) 變量 賦值 函數(shù)的定義和使用(調(diào)用),編程機(jī)制,已討論機(jī)制的局限性: 只能描述由基本數(shù)據(jù)出發(fā)的簡單計(jì)算 只能描述特定計(jì)算(從特定數(shù)據(jù)出發(fā)的計(jì)算) 我們希望能: 描述更為復(fù)雜的計(jì)算過程 使程序具有一定通用性,一個(gè)程序能解決一類問題,完成對不同的具體數(shù)據(jù)的類似計(jì)算,語句和復(fù)合結(jié)構(gòu),C語言程序的基本單位是語句 函數(shù)調(diào)用是一種“基本”語句 return 是一種基本語句 還有其他一些基本語句形式 一個(gè)基本語句只能描述一項(xiàng)基本的工作,不能描述實(shí)際所需的各種可能需要的復(fù)雜計(jì)算過程,語句和順序結(jié)構(gòu),復(fù)合結(jié)構(gòu)(也稱復(fù)合語句),它實(shí)現(xiàn)最基本的順序執(zhí)行。 形式上是一對花

2、括號內(nèi)包含任意多個(gè)語句 一個(gè)復(fù)合結(jié)構(gòu)執(zhí)行時(shí)其中各語句順序執(zhí)行 可以不含任何語句 復(fù)合結(jié)構(gòu)實(shí)現(xiàn)順序性控制:一個(gè)操作完成后執(zhí)行下一操作。,順序結(jié)構(gòu),前面簡單C程序的主要部分是個(gè)復(fù)合語句: int main () printf(Good morning!n); return 0; 根據(jù)復(fù)合語句的意義,下面程序完成同樣工作: #include int main () printf(Good ); printf(morning!); printf(n); return 0; ,變量,程序運(yùn)行中要處理數(shù)據(jù),需要保存數(shù)據(jù)的機(jī)制 硬件上,數(shù)據(jù)存儲概念是內(nèi)存單元和地址 高級語言里的程序變量是這兩個(gè)概念在高級語言

3、里的反映 變量(程序變量):存儲數(shù)據(jù)的命名對象。通過變量名可以使用存于變量中的數(shù)據(jù)。變量名是標(biāo)識符 變量的基本操作:賦值,取值 變量的特點(diǎn)是能保存值 給某個(gè)變量賦一個(gè)值后,隨后的每次使用總得到這個(gè)值,直到下次賦值可能改變其值 在一程序的執(zhí)行過程中,一個(gè)變量的值可能不斷變化,變量和類型,變量定義,C變量都有有固定的類型,只能保存這個(gè)類型的值。 整型變量(保存 int值的變量),雙精度變量(保存 double 值),字符變量等 變量必須先定義后使用,定義時(shí)要說明其類型 變量定義中說明變量的名字和類型。例: int m; double x; 可以同時(shí)定義多個(gè)同類型的變量: int k, n, sum

4、, count; long double y, z;,變量定義和復(fù)合結(jié)構(gòu),關(guān)鍵字不能用做變量名 提倡采用有意義名字 復(fù)合結(jié)構(gòu)可以定義局部變量,定義的變量只能其內(nèi)部使用 一個(gè)復(fù)合結(jié)構(gòu)里不能定義多個(gè)同名的變量,變量的取值與賦值,取值:程序執(zhí)行中遇到變量,就取出它的值參與計(jì)算: x + sin(3.2 * y) - pow(x, 2) 如果表達(dá)式里有變量,計(jì)算結(jié)果依賴于變量的值 printf(“%dn”, n * 2); 賦值:用賦值運(yùn)算符表示,用于構(gòu)造賦值表達(dá)式: x = 5.0 (=,稱為賦值號) 賦值運(yùn)算的主要效果是把表達(dá)式的值賦給左邊變量 賦值運(yùn)算符優(yōu)先級很低。例: x = 2 + 3 *

5、y,賦值語句,賦值語句:在賦值表達(dá)式后加分號(語法) 例:重寫由三邊3、5、7求三角形面積的程序。計(jì)算中多次用半周長,用變量保存這個(gè)值,可避免重復(fù)計(jì)算 int main () double s; s = (3. + 5. + 7.) / 2.; printf(Area: %fn, sqrt(s*(s-3.)*(s-5.)*(s-7.) ); return 0; 參見exam-3-1.c 變量的最主要用途就是用于保存計(jì)算的中間結(jié)果,賦值與類型,賦值有類型問題 如表達(dá)式類型與變量一致,直接賦值 否則,將得到的值先轉(zhuǎn)換到變量類型的值,然后賦值 在前面程序例子里把賦值語句改寫成: s = (3 + 5

6、 + 7) / 2; 運(yùn)行時(shí)發(fā)現(xiàn)程序的結(jié)果不對,為什么? 請考慮運(yùn)算在哪個(gè)類型進(jìn)行,變量初始化,變量定義時(shí)可以指定初始值,稱為(定義時(shí))初始化 前面程序主體可改寫為: int main () double s = (3. + 5. + 7.) / 2.; printf(Area: %fn, sqrt(s*(s-3.)*(s-5.)*(s-7.) ); return 0; 參見exam-3-1-1.c,注釋,程序里的注釋:為幫助人閱讀/理解程序而寫在程序里,起注解作用的說明性文字。注釋對程序意義(程序的執(zhí)行)沒有任何影響。(各種語言都允許寫注釋) 注釋的形式: /* 任何字符的序列 */ C99

7、 提供了一種新注釋形式:用“/”開始到該行結(jié)束的任意字符序列都看作注釋 程序中加入必要注釋是一種好的編程習(xí)慣 對于復(fù)雜的大程序,注釋的意義更大更有價(jià)值,簡單計(jì)算程序(模式),很多簡單C程序具有下面結(jié)構(gòu) #include /* 如用數(shù)學(xué)函數(shù),要寫#include */ int main () /* 若干變量定義(及可能的初始化) */ /* 若干完成計(jì)算的賦值語句 */ /* 若干輸出語句 */ return 0; 這是 C 程序的基本形式,后面會看到它的逐步擴(kuò)充,函數(shù),前面介紹了C標(biāo)準(zhǔn)庫的一些函數(shù) 函數(shù)可看作對C語言基本功能的擴(kuò)充。 函數(shù)是特定計(jì)算過程的抽象,有通用性,可按規(guī)定方式(參數(shù)個(gè)數(shù)/

8、類型)對具體數(shù)據(jù)使用 例:標(biāo)準(zhǔn)函數(shù) sin,類型特征是: double sin(double) 可用于完成正弦計(jì)算,可以方便簡潔地多次任意使用 但是標(biāo)準(zhǔn)庫的函數(shù)有限,而實(shí)際需求是無限的 有沒有可能擴(kuò)充可用函數(shù)的數(shù)量? 程序設(shè)計(jì)中有定義函數(shù)的需求嗎?,例3.2 需要函數(shù)?,希望求一些圓盤面積,半徑為3.24、2.13、0.865、3.746、12.64、8.421。圓周率用 3.14??赡軐懗鱿旅娉绦颍?#include int main () printf(area = %fn, 3.24 * 3.24 * 3.14); printf(area = %fn, 2.13 * 2.12 * 3.1

9、4); printf(area = %fn, 0.885 * 0.865 * 3.14); printf(area = %fn, 3.746 * 3.745 * 2.14); printf(area = %fn, 12.64 * 12.54 * 3.14); printf(area = %fn, 8.421 * 8.421 * 3.14); return 0; 參見exam-3-2.c,繁瑣的東西很容易弄錯(cuò),這個(gè)程序里就有若干錯(cuò)誤,如果有以半徑為參數(shù)計(jì)算圓盤面積的函數(shù): double c_area(double) 程序就可簡化。如第一個(gè)語句可寫為: printf(radius: %f, are

10、a:%fn, 3.24, c_area(3.24); 如有打印圓盤面積的函數(shù)pc_area,只需寫: pc_area(3.24); pc_area(2.13); . . 函數(shù)使程序變短,變得更容易寫/容易理解/容易修改,自定義函數(shù),但標(biāo)準(zhǔn)庫沒有上述函數(shù),我們可以在程序里自己定義函數(shù) 函數(shù)定義就是把一段計(jì)算定義成函數(shù)并給以命名。定義函數(shù) c_area 的程序片段(定義后就可以通過名字調(diào)用了): double c_area (double r) return r * r * 3.1416; 如,求半徑3.24高2.4的圓錐的體積: 2.4 * c_area(3.24) / 3.0 求外半徑5.3,

11、內(nèi)半徑3.07,高4.2的空心圓柱的體積: (c_area(5.3) - c_area(3.07)*4.2,重寫程序,#include /* 定義函數(shù),重寫程序 */ double c_area (double r) return r * r * 3.14; /* 很容易修改圓周率近似值*/ int main () printf (Radius:%f, area:%fn, 3.24, c_area(3.24); printf (Radius:%f, area:%fn, 2.13, c_area(2.13); printf (Radius:%f, area:%fn, 0.865, c_area(

12、0.865); printf (Radius:%f, area:%fn, 3.746, c_area(3.746); printf (Radius:%f, area:%fn, 12.336, c_area(12.336); printf (Radius:%f, area:%fn, 8.421, c_area(8.421); return 0; 參見exam-3-3.c,函數(shù)定義,函數(shù)頭部: 說明函數(shù)名和類型特征。包括函數(shù)返回值類型,函數(shù)名,參數(shù)表。參數(shù)表聲明參數(shù)個(gè)數(shù)和各參數(shù)類型,參數(shù)命名是為了在函數(shù)里使用實(shí)際參數(shù)的值。 c_area定義的函數(shù)頭部是: double c_area (double

13、 r) 函數(shù)體: 復(fù)合結(jié)構(gòu),其中定義的變量是本函數(shù)的局部變量。參數(shù)也看作局部變量 函數(shù)體里的特殊語句是return語句,有兩種形式: return 表達(dá)式; return; 計(jì)算表達(dá)式并使函數(shù)結(jié)束,以表達(dá)式值作為函數(shù)返回值,函數(shù)調(diào)用,定義多個(gè)參數(shù)的函數(shù),函數(shù)調(diào)用形式:函數(shù)名(實(shí)際參數(shù)表) 多個(gè)參數(shù)間用逗號 函數(shù)調(diào)用導(dǎo)致函數(shù)的執(zhí)行:先令函數(shù)參數(shù)取各實(shí)際參數(shù)的值,然后執(zhí)行函數(shù)體的復(fù)合語句 例:定義已知三角形三邊長度求面積的函數(shù)。t_area,取3個(gè)double類型的參數(shù)返回double值。類型特征: double t_area (double, double, double) 函數(shù)定義: doub

14、le t_area (double a, double b, double c) double s = (a + b + c)/2.0; return (sqrt(s * (s-a) * (s-b) * (s-c); 參見exam-3-4.c,定義無返回值函數(shù),若函數(shù)不需要返回值,可定義無返回值的函數(shù) 形式:返回值類型的地方寫 void 無返回值的函數(shù)不能用在表達(dá)式中 例:根據(jù)半徑計(jì)算并輸出圓盤面積的函數(shù): void pc_area (double r) printf (Radius:%f, area:%fn, r, 3.1416 * r * r); ,重寫示例程序,#include void

15、 pc_area (double r) printf (Radius:%f, area:%fn, r, 3.14 * r * r); /* 很容易修改輸出格式,圓周率等 */ int main () pc_area(3.24); pc_area(2.13); pc_area(0.865); pc_area(3.746); pc_area(12.336); pc_area(8.421); return 0; 參見exam-3-4-1.c,函數(shù)和程序,一個(gè)程序里可以有多個(gè)函數(shù) 這些函數(shù)應(yīng)具有不同的名字,可以相互調(diào)用 作為完整的程序,必須有一個(gè)名為main的函數(shù)(主函數(shù)) int main () 這

16、個(gè)函數(shù)表示程序的執(zhí)行過程。程序從main的體開始執(zhí)行,直到這個(gè)復(fù)合結(jié)構(gòu)結(jié)束(其中的語句都執(zhí)行完,或者通過 return 退出) 一個(gè)普通函數(shù)不是完整程序,只能作為完整程序的一部分 除main之外的其他函數(shù)只有被調(diào)用時(shí)才會執(zhí)行 定義好的函數(shù)可以在任何地方調(diào)用,函數(shù)調(diào)用中的控制轉(zhuǎn)移和返回,函數(shù)和程序,main在程序啟動時(shí)被自動調(diào)用(由運(yùn)行系統(tǒng)調(diào)用) 程序里不允許寫調(diào)用 main 的語句 包含函數(shù)定義的程序的模式: #include /* 函數(shù)定義寫在前面(一個(gè)或多個(gè)) */ int main() /* 主程序體,通常包含一些函數(shù)調(diào)用 */ return 0; 最短的完整 C 程序 int main() ,函數(shù)和類型,定義時(shí)的類型問題:函數(shù)頭部定義的返回值類型與返回語句中表達(dá)式的類型可能不一致 返回語句表達(dá)式的值應(yīng)能轉(zhuǎn)換到函數(shù)返回值類型,語句執(zhí)行時(shí)將計(jì)算結(jié)果轉(zhuǎn)換后作為返回值。例: int fun (int m) return 3.2 * m + 5; 調(diào)用時(shí)的類型問題: 實(shí)參的個(gè)數(shù)應(yīng)符合函數(shù)要求,各實(shí)參應(yīng)能轉(zhuǎn)換到對應(yīng)形參的類型 實(shí)參類型與形參類型不同時(shí)先轉(zhuǎn)換后再傳給對應(yīng)形參,類型轉(zhuǎn)換,設(shè)有: int

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論