




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、Chap 5 函數(shù) 5.1 計算圓柱體積5.2 使用函數(shù)編寫程序5.3 變量與函數(shù)1本章要點怎樣定義函數(shù)?如何調(diào)用函數(shù)?如何聲明函數(shù)?什么是函數(shù)的參數(shù)?在函數(shù)調(diào)用時,參數(shù)是如何傳遞的?在使用函數(shù)的過程中,要注意哪些問題?怎樣確定函數(shù)的參數(shù)?如何使用局部變量和全局變量?什么是靜態(tài)變量?25.1 計算圓柱體積5.1.1 程序解析5.1.2 函數(shù)的定義5.1.3 函數(shù)的調(diào)用35.1.1 程序解析計算圓柱體積 例5-1 輸入圓柱體的高和半徑,求圓柱體積,volume=*r2*h。要求定義和調(diào)用函數(shù)cylinder (r, h )計算圓柱體的體積。 4例5-1源程序/* 計算圓柱體積 */#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; /* 計算體積 */return result; /* 返回結(jié)果 */Enter radius and height: 3.0 10Volume = 282.74365.1.2 函數(shù)的定義 函數(shù)是指完成一個特定工作的獨立程序模塊。庫函數(shù):由C語言系統(tǒng)提供定義如scanf()、printf()等函數(shù)自定義函數(shù):需要用戶自己定義如計算圓柱體體積函數(shù)cylinder()main()也是一個函數(shù),C程序由一個main()或多個函數(shù)構(gòu)成。程序中一旦調(diào)用了某個函數(shù),該函
4、數(shù)就會完成一些特定的工作,然后返回到調(diào)用它的地方。函數(shù)經(jīng)過運算,得到一個明確的運算結(jié)果,并需要回送該結(jié)果。例如,函數(shù)cylinder()返回圓柱的體積。函數(shù)完成一系列操作步驟,不需要回送任何運算結(jié)果。71返回運算結(jié)果的函數(shù)定義函數(shù)類型 函數(shù)名(形參表)/* 函數(shù)首部 */ /* 函數(shù)體 */ 函數(shù)實現(xiàn)過程 return 表達式;把函數(shù)運算的結(jié)果回送給主函數(shù)只能返回一個值函數(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ù)之間用逗號分隔,每個參數(shù)前面的類型都必須分別寫明函數(shù)類型 函數(shù)名(形參表) 函數(shù)實現(xiàn)過程 return 表達式;不能寫成 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; /* 計算圓柱體積 */return result; /* 返回運算結(jié)果*/分析函數(shù)的定義函數(shù)類型函數(shù)名形參表與函數(shù)類型一致102不返回運算結(jié)果的函數(shù)定義void 函數(shù)名(參數(shù)表) /* 函數(shù)首部 */ /* 函數(shù)體 */ 函數(shù)實現(xiàn)過程 return; /* 可以省略return */這類函數(shù)通常用于屏幕輸出等表示不返回結(jié)果不能省略否則函數(shù)類型被默認定義為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); /* 每個數(shù)字的前后各有一個空格 */ putchar (n); 12 2 3 3 3 4 4 4 45 5 5 5 5 125.1.3 函數(shù)的調(diào)用定義一個函數(shù)后,就可以在程序中調(diào)用這個函數(shù)。調(diào)用標(biāo)準(zhǔn)庫函數(shù)時,
8、在程序的最前面用#include命令包含相應(yīng)的頭文件。調(diào)用自定義函數(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)用常量、變量、表達式函數(shù)名(實參表)14函數(shù)調(diào)用的過程計算機在執(zhí)行程序時,從主函數(shù)main開始執(zhí)行,如果遇到某個函數(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ù)實參形參執(zhí)行函數(shù)中的語句返回調(diào)用它的地方162參數(shù)傳遞函數(shù)定義時的參數(shù)被稱為形式參數(shù)(簡稱形參)double cylinder (double r, double h);函數(shù)調(diào)用時的參數(shù)被稱為實際參數(shù)(簡稱實參)volume = cylinder (radius, height);實參形參在參數(shù)傳遞過程中,實參把值復(fù)制給形參。形參和實參一一對應(yīng):數(shù)量一致,類型一致,順序一致形參:變量,用于接受實參傳遞過來的值實參:常量、變量或表達式單向傳
11、遞173函數(shù)結(jié)果返回函數(shù)返回的兩種情況完成確定的運算,有一個運算結(jié)果返回給主調(diào)函數(shù)。完成指定工作,沒有確定的運算結(jié)果需返回給主調(diào)函數(shù)(函數(shù)類型void)。函數(shù)結(jié)果返回的形式:return 表達式;return (表達式);18【例5-3】定義判斷奇偶數(shù)的函數(shù)even (n)定義一個判斷奇偶數(shù)的函數(shù)even (n),當(dāng)n為偶數(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ù)的調(diào)用是否正確。只寫函數(shù)定義中的第1行(函數(shù)首部),并以分號結(jié)束。205.2 使用函數(shù)編寫程序例5-4 輸入精度e,使用格里高利公式求的近似值,精確到最后一項的絕對值小于e。要求定義和調(diào)用函數(shù) funpi(e) 求的近似值。21例5-4 源程序
13、/* 用格里高利公式計算的近似值,精度為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 判斷素數(shù)的函數(shù)例5-5 求100以內(nèi)的全部素數(shù),每行輸出10個。素數(shù)就是只能被1和自身整除的正整數(shù),1不是素數(shù),2是素數(shù)。要求定義和調(diào)用函數(shù)prime (m)判斷m是否為素數(shù),當(dāng)m為素數(shù)時返回1,否則返回0。算法描述:對2100之間的每個數(shù)進行判斷,若是素數(shù),則輸出該數(shù)。for
15、(m = 2; m = 100; m+) if (m是素數(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)的臨時變量 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; /* 全局變量運算 */ 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ù)調(diào)用結(jié)束,收回存儲單元。全局變量:從程序執(zhí)行開始,到程序的結(jié)束,存儲單元始終保持。變量生命周期變量從定義開始分配存儲單元,到運行結(jié)束存儲單元被回收的整個過程。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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度船舶內(nèi)部裝修改造合同
- 二零二五年度新型城鎮(zhèn)化項目保安勞務(wù)管理合同
- 二零二五年度土地使用權(quán)出讓合同主體變更及土地流轉(zhuǎn)市場建設(shè)協(xié)議
- 二零二五農(nóng)村土地流轉(zhuǎn)風(fēng)險評估及管理協(xié)議書
- 二零二五年度醫(yī)院急診科與120急救中心合作協(xié)議
- 二零二五年度工人與包工頭建筑勞務(wù)合作創(chuàng)新發(fā)展協(xié)議
- 2025年度科技創(chuàng)新企業(yè)借款居間服務(wù)合同協(xié)議書
- 二零二五年度國際黨支部交流合作框架協(xié)議
- 二零二五年度實習(xí)生實習(xí)成果轉(zhuǎn)化與知識產(chǎn)權(quán)協(xié)議
- 二零二五年度可再生能源供應(yīng)商合同保密協(xié)議與項目融資
- 絲綢之路上的民族學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 鐵路基礎(chǔ)知識題庫單選題100道及答案解析
- 四年級語文下冊第六單元【集體備課】(教材解讀+教學(xué)設(shè)計)
- 第二章 疾病概論課件
- 高壓發(fā)電機細分市場深度研究報告
- 新聞采訪與寫作課件第十五章其他報道樣式的寫作
- 小學(xué)語文單元整體作業(yè)設(shè)計案例(五年級下冊第六單元)
- 解讀 國家數(shù)據(jù)局首批20個“數(shù)據(jù)要素x”典型案例-31正式版-WN8
- 《跨境直播運營》課件-跨境直播的意義和要素
- 3 學(xué)會反思(教學(xué)設(shè)計)部編版道德與法治六年級下冊
- 第一單元 歌唱祖國-《 中華人民共和國國歌》課件 2023-2024學(xué)年人音版初中音樂七年級上冊
評論
0/150
提交評論