




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、Chap 5 函數(shù) 5.1 計(jì)算圓柱體積5.2 使用函數(shù)編寫程序5.3 變量與函數(shù)1本章要點(diǎn)怎樣定義函數(shù)?如何調(diào)用函數(shù)?如何聲明函數(shù)?什么是函數(shù)的參數(shù)?在函數(shù)調(diào)用時(shí),參數(shù)是如何傳遞的?在使用函數(shù)的過程中,要注意哪些問題?怎樣確定函數(shù)的參數(shù)?如何使用局部變量和全局變量?什么是靜態(tài)變量?25.1 計(jì)算圓柱體積5.1.1 程序解析5.1.2 函數(shù)的定義5.1.3 函數(shù)的調(diào)用35.1.1 程序解析計(jì)算圓柱體積 例5-1 輸入圓柱體的高和半徑,求圓柱體積,volume=*r2*h。要求定義和調(diào)用函數(shù)cylinder (r, h )計(jì)算圓柱體的體積。 4例5-1源程序/* 計(jì)算圓柱體積 */#includ
2、e int main( void ) double height, radius, volume;double cylinder (double r, double h); /* 函數(shù)聲明*/printf (Enter radius and height: );scanf (%lf%lf, &radius, &height); /* 調(diào)用函數(shù),返回值賦給volume */volume = cylinder (radius, height );printf (Volume = %.3fn, volume);return 0;5例5-1源程序/* 定義求圓柱體積的函數(shù) */double cylin
3、der (double r, double h)double result;result =3.1415926 * r * r * h; /* 計(jì)算體積 */return result; /* 返回結(jié)果 */Enter radius and height: 3.0 10Volume = 282.74365.1.2 函數(shù)的定義 函數(shù)是指完成一個(gè)特定工作的獨(dú)立程序模塊。庫函數(shù):由C語言系統(tǒng)提供定義如scanf()、printf()等函數(shù)自定義函數(shù):需要用戶自己定義如計(jì)算圓柱體體積函數(shù)cylinder()main()也是一個(gè)函數(shù),C程序由一個(gè)main()或多個(gè)函數(shù)構(gòu)成。程序中一旦調(diào)用了某個(gè)函數(shù),該函
4、數(shù)就會完成一些特定的工作,然后返回到調(diào)用它的地方。函數(shù)經(jīng)過運(yùn)算,得到一個(gè)明確的運(yùn)算結(jié)果,并需要回送該結(jié)果。例如,函數(shù)cylinder()返回圓柱的體積。函數(shù)完成一系列操作步驟,不需要回送任何運(yùn)算結(jié)果。71返回運(yùn)算結(jié)果的函數(shù)定義函數(shù)類型 函數(shù)名(形參表)/* 函數(shù)首部 */ /* 函數(shù)體 */ 函數(shù)實(shí)現(xiàn)過程 return 表達(dá)式;把函數(shù)運(yùn)算的結(jié)果回送給主函數(shù)只能返回一個(gè)值函數(shù)返回值的類型沒有分號double cylinder (double r, double h) double result; result = 3.1415926 * r * r * h; return result;8形參類
5、型1 參數(shù)1 ,類型2 參數(shù)2 ,類型n 參數(shù)n參數(shù)之間用逗號分隔,每個(gè)參數(shù)前面的類型都必須分別寫明函數(shù)類型 函數(shù)名(形參表) 函數(shù)實(shí)現(xiàn)過程 return 表達(dá)式;不能寫成 double r, hdouble cylinder (double r, double h) double result; result =3.1415926 * r * r * h; return result;9double cylinder (double r, double h) /* 函數(shù)首部 */* 函數(shù)體,寫在一對大括號內(nèi) */ double result;result =3.1415926 * r * r
6、 * h; /* 計(jì)算圓柱體積 */return result; /* 返回運(yùn)算結(jié)果*/分析函數(shù)的定義函數(shù)類型函數(shù)名形參表與函數(shù)類型一致102不返回運(yùn)算結(jié)果的函數(shù)定義void 函數(shù)名(參數(shù)表) /* 函數(shù)首部 */ /* 函數(shù)體 */ 函數(shù)實(shí)現(xiàn)過程 return; /* 可以省略return */這類函數(shù)通常用于屏幕輸出等表示不返回結(jié)果不能省略否則函數(shù)類型被默認(rèn)定義為int11例5-2 輸出5之內(nèi)的數(shù)字金字塔。/* 輸出數(shù)字金字塔 */#include int main (void) void pyramid (int n);/* 函數(shù)聲明 */pyramid(5);/* 調(diào)用函數(shù),輸出數(shù)字金
7、字塔 */return 0;void pyramid (int n) /* 函數(shù)定義 */int i, j;for (i = 1; i = n; i+)/* 需要輸出的行數(shù) */ for (j = 1; j = n-i; j+) /* 輸出每行左邊的空格 */printf( ); for (j = 1; j = i; j+) /* 輸出每行的數(shù)字 */ printf( %d , i); /* 每個(gè)數(shù)字的前后各有一個(gè)空格 */ putchar (n); 12 2 3 3 3 4 4 4 45 5 5 5 5 125.1.3 函數(shù)的調(diào)用定義一個(gè)函數(shù)后,就可以在程序中調(diào)用這個(gè)函數(shù)。調(diào)用標(biāo)準(zhǔn)庫函數(shù)時(shí),
8、在程序的最前面用#include命令包含相應(yīng)的頭文件。調(diào)用自定義函數(shù)時(shí),程序中必須有與調(diào)用函數(shù)相對應(yīng)的函數(shù)定義。131函數(shù)調(diào)用的形式和過程使用返回值:volume = cylinder (radius, height );printf(“%f n” , cylinder (radius, height );完成操作:pyramid(5);常用于void類型函數(shù)的調(diào)用常用于返回結(jié)果的函數(shù)的調(diào)用常量、變量、表達(dá)式函數(shù)名(實(shí)參表)14函數(shù)調(diào)用的過程計(jì)算機(jī)在執(zhí)行程序時(shí),從主函數(shù)main開始執(zhí)行,如果遇到某個(gè)函數(shù)調(diào)用,主函數(shù)被暫停執(zhí)行,轉(zhuǎn)而執(zhí)行相應(yīng)的函數(shù),該函數(shù)執(zhí)行完后,將返回主函數(shù),然后再從原先暫停的
9、位置繼續(xù)執(zhí)行。函數(shù)遇return或最后的大括號,返回主函數(shù)15分析函數(shù)調(diào)用的過程#include int main( void ) double height, radius, volume;double cylinder (double r, double h); printf (Enter radius and height: );scanf (%lf%lf, &radius, &height);volume = cylinder (radius, height );printf (Volume = %.3fn, volume);return 0;double cylinder (doub
10、le r, double h)double result;result =3.1415926 * r * r * h; return result; 調(diào)用函數(shù)實(shí)參形參執(zhí)行函數(shù)中的語句返回調(diào)用它的地方162參數(shù)傳遞函數(shù)定義時(shí)的參數(shù)被稱為形式參數(shù)(簡稱形參)double cylinder (double r, double h);函數(shù)調(diào)用時(shí)的參數(shù)被稱為實(shí)際參數(shù)(簡稱實(shí)參)volume = cylinder (radius, height);實(shí)參形參在參數(shù)傳遞過程中,實(shí)參把值復(fù)制給形參。形參和實(shí)參一一對應(yīng):數(shù)量一致,類型一致,順序一致形參:變量,用于接受實(shí)參傳遞過來的值實(shí)參:常量、變量或表達(dá)式單向傳
11、遞173函數(shù)結(jié)果返回函數(shù)返回的兩種情況完成確定的運(yùn)算,有一個(gè)運(yùn)算結(jié)果返回給主調(diào)函數(shù)。完成指定工作,沒有確定的運(yùn)算結(jié)果需返回給主調(diào)函數(shù)(函數(shù)類型void)。函數(shù)結(jié)果返回的形式:return 表達(dá)式;return (表達(dá)式);18【例5-3】定義判斷奇偶數(shù)的函數(shù)even (n)定義一個(gè)判斷奇偶數(shù)的函數(shù)even (n),當(dāng)n為偶數(shù)時(shí)返回1,否則返回0。/* 判斷奇偶數(shù)的函數(shù) */int even (int n)/* 函數(shù)首部 */if(n%2 = 0) /* 判別奇偶數(shù) */return 1;/* 偶數(shù)返回1 */elsereturn 0;/* 奇數(shù)返回0 */如何調(diào)用該函數(shù)?194函數(shù)原型聲明函數(shù)
12、類型 函數(shù)名(參數(shù)表);double cylinder (double r, double h);void pyramid (int n);函數(shù)必須先定義后調(diào)用,將主調(diào)函數(shù)放在被調(diào)函數(shù)的后面,就像變量先定義后使用一樣。如果自定義函數(shù)在主調(diào)函數(shù)的后面,就需要在函數(shù)調(diào)用前,加上函數(shù)原型聲明。函數(shù)聲明:說明函數(shù)的類型和參數(shù)的情況,以保證程序編譯時(shí)能判斷對該函數(shù)的調(diào)用是否正確。只寫函數(shù)定義中的第1行(函數(shù)首部),并以分號結(jié)束。205.2 使用函數(shù)編寫程序例5-4 輸入精度e,使用格里高利公式求的近似值,精確到最后一項(xiàng)的絕對值小于e。要求定義和調(diào)用函數(shù) funpi(e) 求的近似值。21例5-4 源程序
13、/* 用格里高利公式計(jì)算的近似值,精度為e */#include #include int main (void) double e, pi; double funpi (double e); printf (Enter e:); scanf (%lf, &e); pi = funpi (e); printf (pi = %fn, pi);return 0;double funpi (double e) int denominator, flag; double item, sum; flag = 1; denominator = 1; item = 1.0; sum = 0; while (
14、fabs (item) = e) item = flag * 1.0 / denominator; sum = sum + item; flag = -flag; denominator = denominator + 2; return sum * 4;Enter e: 0.0001pi = 3.141822例5-5 判斷素?cái)?shù)的函數(shù)例5-5 求100以內(nèi)的全部素?cái)?shù),每行輸出10個(gè)。素?cái)?shù)就是只能被1和自身整除的正整數(shù),1不是素?cái)?shù),2是素?cái)?shù)。要求定義和調(diào)用函數(shù)prime (m)判斷m是否為素?cái)?shù),當(dāng)m為素?cái)?shù)時(shí)返回1,否則返回0。算法描述:對2100之間的每個(gè)數(shù)進(jìn)行判斷,若是素?cái)?shù),則輸出該數(shù)。for
15、(m = 2; m = 100; m+) if (m是素?cái)?shù)) printf(%d , m); prime(m) != 023例5-5 源程序#include #include int main(void) int count, m; int prime (int m); count = 0; for(m = 2; m = 100; m+) if ( prime(m) != 0 ) printf(%6d, m ); count+; if (count %10 = 0) printf (n); printf (n);int prime (int m) int i, n; if ( m = 1 )
16、return 0; n = sqrt (m); for( i = 2; i = n; i+) if (m % i = 0) return 0; return 1; 245.3 變量與函數(shù)5.3.1 局部變量和全局變量5.3.2 變量生命周期和靜態(tài)局部變量255.3.1 局部變量和全局變量局部變量在函數(shù)內(nèi)定義的變量(包括形參)作用范圍:本函數(shù)內(nèi)部定義在復(fù)合語句內(nèi)的變量作用范圍:復(fù)合語句內(nèi)部全局變量在函數(shù)以外定義的變量,不從屬于任一函數(shù)。作用范圍:從定義處到源文件結(jié)束(包括各函數(shù))26例5-6 在復(fù)合語句中定義局部變量。#include int main (void) int a; a = 1;
17、/* 復(fù)合語句開始 */ int b = 2; b = a + b; a = a + b; /* 復(fù)合語句結(jié)束 */ printf (%d , a ); return 0;b:小范圍內(nèi)的臨時(shí)變量 427例5-7 全局變量定義#include stdio.hint x; /* 定義全局變量x */int f( ) int x = 4; /* x為局部變量 */ return x;int main(void) int a = 1; x = a; /* 對全局變量 x 賦值 */ a = f( ); /* a的值為4 */ int b = 2; b = a + b; /* b的值為4 */ x =
18、x + b; /* 全局變量運(yùn)算 */ printf(%d %d , a, x); return 0;4, 7若局部變量與全局變量同名,局部變量優(yōu)先28變量作用范圍示例int x=1;void main( ) int a=2; . int b=3; . f( ); .int t=4 ;void f( ) int x=5, b=6; .int a=7; x=? a=? b=?b=? x=5 b=6 t=4 a沒定義 x=? b=? t=? a=?29自動變量(auto): 普通的局部變量int x, y; auto int x, y;char c1; auto char c1;函數(shù)調(diào)用時(shí),定義變量,分配存儲單元。函數(shù)調(diào)用結(jié)束,收回存儲單元。全局變量:從程序執(zhí)行開始,到程序的結(jié)束,存儲單元始終保持。變量生命周期變量從定義開始分配存儲單元,到運(yùn)行結(jié)束存儲單元被回收的整個(gè)過程。5.3.2 變量生命周期和靜態(tài)局部變量30
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 制定倉庫員工激勵(lì)機(jī)制的策略計(jì)劃
- 應(yīng)用程序的監(jiān)控與評估測試試題及答案
- 2024年湖南省農(nóng)業(yè)農(nóng)村廳下屬事業(yè)單位真題
- 馬鞍山市重點(diǎn)中學(xué)2025屆八年級數(shù)學(xué)第二學(xué)期期末統(tǒng)考模擬試題含解析
- 2024年臨沂市技師學(xué)院招聘筆試真題
- 2024年廣西農(nóng)牧工程學(xué)校招聘教師筆試真題
- 2024年贛州市中醫(yī)院招聘工作人員筆試真題
- 計(jì)算機(jī)視覺在醫(yī)療中的應(yīng)用試題及答案
- 2025屆湖北省武漢市六中學(xué)數(shù)學(xué)七下期末質(zhì)量跟蹤監(jiān)視試題含解析
- 軟件水平考試中的創(chuàng)新思維考察與試題及答案
- DZ∕T 0033-2020 固體礦產(chǎn)地質(zhì)勘查報(bào)告編寫規(guī)范(正式版)
- 部編版二年級道德與法治下冊第14課《學(xué)習(xí)有方法》精美課件
- 2024年紀(jì)檢監(jiān)察綜合業(yè)務(wù)知識題庫及參考答案【完整版】
- 浙江省寧波市鎮(zhèn)海區(qū)人教PEP版2022年小學(xué)畢業(yè)考試英語試卷【含答案】
- 21 《楊氏之子》課件
- 中班語言《傘》課件
- 阿替普酶在心腦血管疾病中的應(yīng)用
- MOOC 數(shù)字電子技術(shù)基礎(chǔ)-華中科技大學(xué) 中國大學(xué)慕課答案
- 營區(qū)物業(yè)服務(wù)營區(qū)物業(yè)服務(wù)保密措施
- 國測省測四年級勞動質(zhì)量檢測試卷
- 屋面防水修繕工程技術(shù)標(biāo)樣本
評論
0/150
提交評論