版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、Chap 5 函數(shù),5.1 計算圓柱體積5.2 使用函數(shù)編寫程序5.3 變量與函數(shù),本章要點,怎樣定義函數(shù)?如何調(diào)用函數(shù)?如何聲明函數(shù)?什么是函數(shù)的參數(shù)?在函數(shù)調(diào)用時,參數(shù)是如何傳遞的?在使用函數(shù)的過程中,要注意哪些問題?怎樣確定函數(shù)的參數(shù)?如何使用局部變量和全局變量?什么是靜態(tài)變量?,5.1 計算圓柱體積,5.1.1 程序解析5.1.2 函數(shù)的定義5.1.3 函數(shù)的調(diào)用,5.1.1 程序解析-計算圓柱
2、體積,例5-1 輸入圓柱體的高和半徑,求圓柱體積,volume=π*r2*h。要求定義和調(diào)用函數(shù)cylinder (r, h )計算圓柱體的體積。,例5-1源程序,/* 計算圓柱體積 */#include int main( void ){ double height, radius, volume;double cylinder (double r, double h); /* 函數(shù)聲明*/
3、printf ("Enter radius and height: ");scanf ("%lf%lf", &radius, &height); /* 調(diào)用函數(shù),返回值賦給volume */volume = cylinder (radius, height );printf ("Volume = %.3f\n", volume);
4、return 0;},例5-1源程序,/* 定義求圓柱體積的函數(shù) */double cylinder (double r, double h){double result;result =3.1415926 * r * r * h; /* 計算體積 */return result; /* 返回結(jié)果 */},Enter radius and height: 3.0 10Volume
5、= 282.743,5.1.2 函數(shù)的定義,函數(shù)是指完成一個特定工作的獨立程序模塊。庫函數(shù):由C語言系統(tǒng)提供定義如scanf()、printf()等函數(shù)自定義函數(shù):需要用戶自己定義如計算圓柱體體積函數(shù)cylinder()main()也是一個函數(shù),C程序由一個main()或多個函數(shù)構(gòu)成。程序中一旦調(diào)用了某個函數(shù),該函數(shù)就會完成一些特定的工作,然后返回到調(diào)用它的地方。函數(shù)經(jīng)過運算,得到一個明確的運算結(jié)果,并需要回送該結(jié)果。例
6、如,函數(shù)cylinder()返回圓柱的體積。函數(shù)完成一系列操作步驟,不需要回送任何運算結(jié)果。,1.返回運算結(jié)果的函數(shù)定義,函數(shù)類型 函數(shù)名(形參表)/* 函數(shù)首部 */{ /* 函數(shù)體 */ 函數(shù)實現(xiàn)過程 return 表達式;},,,把函數(shù)運算的結(jié)果回送給主函數(shù),只能返回一個值,,函數(shù)返回值的類型,沒有分號,double c
7、ylinder (double r, double h){ double result; result = 3.1415926 * r * r * h; return result;},,形參,類型1 參數(shù)1 ,類型2 參數(shù)2 ,……,類型n 參數(shù)n參數(shù)之間用逗號分隔,每個參數(shù)前面的類型都必須分別寫明,函數(shù)類型 函數(shù)名(形參表){ 函數(shù)實現(xiàn)過程 return 表達式;},不能寫成 do
8、uble r, h,double cylinder (double r, double h){ double result; result =3.1415926 * r * r * h; return result;},,,double cylinder (double r, double h) /* 函數(shù)首部 */{/* 函數(shù)體,寫在一對大括號內(nèi) */ double resu
9、lt;result =3.1415926 * r * r * h; /* 計算圓柱體積 */return result; /* 返回運算結(jié)果*/},分析函數(shù)的定義,,函數(shù)類型,,,函數(shù)名,形參表,與函數(shù)類型一致,,2.不返回運算結(jié)果的函數(shù)定義,void 函數(shù)名(參數(shù)表) /* 函數(shù)首部 */{ /* 函數(shù)體 */
10、函數(shù)實現(xiàn)過程 return; /* 可以省略return */},這類函數(shù)通常用于屏幕輸出等,,表示不返回結(jié)果,不能省略否則函數(shù)類型被默認(rèn)定義為int,,例5-2 輸出5之內(nèi)的數(shù)字金字塔。,/* 輸出數(shù)字金字塔 */#include int main (void){ void pyramid (int n);/* 函數(shù)聲明 */pyramid(5);/* 調(diào)用函數(shù),輸出數(shù)
11、字金字塔 */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(" "); f
12、or (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,5.1.3 函數(shù)的調(diào)用,定義一個函數(shù)后,就可以在程
13、序中調(diào)用這個函數(shù)。調(diào)用標(biāo)準(zhǔn)庫函數(shù)時,在程序的最前面用#include命令包含相應(yīng)的頭文件。調(diào)用自定義函數(shù)時,程序中必須有與調(diào)用函數(shù)相對應(yīng)的函數(shù)定義。,1.函數(shù)調(diào)用的形式和過程,使用返回值:volume = cylinder (radius, height );printf(“%f \n” , cylinder (radius, height ));完成操作:pyramid(5);,常用于void類型函數(shù)的調(diào)用,常用于返回結(jié)
14、果的函數(shù)的調(diào)用,,常量、變量、表達式,函數(shù)名(實參表),函數(shù)調(diào)用的過程,計算機在執(zhí)行程序時,從主函數(shù)main開始執(zhí)行,如果遇到某個函數(shù)調(diào)用,主函數(shù)被暫停執(zhí)行,轉(zhuǎn)而執(zhí)行相應(yīng)的函數(shù),該函數(shù)執(zhí)行完后,將返回主函數(shù),然后再從原先暫停的位置繼續(xù)執(zhí)行。函數(shù)遇return或最后的大括號,返回主函數(shù),分析函數(shù)調(diào)用的過程,#include int main( void ){ double height, radius, volume;
15、double cylinder (double r, double h); printf ("Enter radius and height: ");scanf ("%lf%lf", &radius, &height);volume = cylinder (radius, height );printf ("Volume = %.3f\n&qu
16、ot;, volume);return 0;}double cylinder (double r, double h){double result;result =3.1415926 * r * r * h; return result; },調(diào)用函數(shù),,,實參?形參,執(zhí)行函數(shù)中的語句,返回調(diào)用它的地方,,2.參數(shù)傳遞,函數(shù)定義時的參數(shù)被稱為
17、形式參數(shù)(簡稱形參)double cylinder (double r, double h);函數(shù)調(diào)用時的參數(shù)被稱為實際參數(shù)(簡稱實參)volume = cylinder (radius, height);實參?形參在參數(shù)傳遞過程中,實參把值復(fù)制給形參。形參和實參一一對應(yīng):數(shù)量一致,類型一致,順序一致形參:變量,用于接受實參傳遞過來的值實參:常量、變量或表達式,單向傳遞,3.函數(shù)結(jié)果返回,函數(shù)返回的兩種情況完成確定的
18、運算,有一個運算結(jié)果返回給主調(diào)函數(shù)。完成指定工作,沒有確定的運算結(jié)果需返回給主調(diào)函數(shù)(函數(shù)類型void)。函數(shù)結(jié)果返回的形式:return 表達式;return (表達式);,【例5-3】定義判斷奇偶數(shù)的函數(shù)even (n),定義一個判斷奇偶數(shù)的函數(shù)even (n),當(dāng)n為偶數(shù)時返回1,否則返回0。/* 判斷奇偶數(shù)的函數(shù) */int even (int n)/* 函數(shù)首部 */{if
19、(n%2 == 0) /* 判別奇偶數(shù) */return 1;/* 偶數(shù)返回1 */elsereturn 0;/* 奇數(shù)返回0 */},如何調(diào)用該函數(shù)?,4.函數(shù)原型聲明,函數(shù)類型 函數(shù)名(參數(shù)表);double cylinder (double r, double h);void pyramid (int n);函數(shù)必須先定義后調(diào)用,將主調(diào)函數(shù)放在被調(diào)函數(shù)的后面,就像變量先定義后使用一樣。如果
20、自定義函數(shù)在主調(diào)函數(shù)的后面,就需要在函數(shù)調(diào)用前,加上函數(shù)原型聲明。函數(shù)聲明:說明函數(shù)的類型和參數(shù)的情況,以保證程序編譯時能判斷對該函數(shù)的調(diào)用是否正確。,只寫函數(shù)定義中的第1行(函數(shù)首部),并以分號結(jié)束。,5.2 使用函數(shù)編寫程序,例5-4 輸入精度e,使用格里高利公式求π的近似值,精確到最后一項的絕對值小于e。要求定義和調(diào)用函數(shù) funpi(e) 求π的近似值。,,例5-4 源程序,/* 用格里高利公式計算π的近似值,精度為e */
21、#include #include int main (void){ double e, pi; double funpi (double e); printf ("Enter e:"); scanf ("%lf", &e); pi = funpi (e); printf ("pi = %f\n", pi);retu
22、rn 0;},double funpi (double e) { int denominator, flag; double item, sum; flag = 1; denominator = 1; item = 1.0; sum = 0; while (fabs (item) >= e){ item = flag * 1.0 / de
23、nominator; sum = sum + item; flag = -flag; denominator = denominator + 2; } return sum * 4;},Enter e: 0.0001pi = 3.1418,例5-5 判斷素數(shù)的函數(shù),例5-5 求100以內(nèi)的全部素數(shù),每行輸出10個。素數(shù)就是只能被1和自身整除的正整數(shù)
24、,1不是素數(shù),2是素數(shù)。要求定義和調(diào)用函數(shù)prime (m)判斷m是否為素數(shù),當(dāng)m為素數(shù)時返回1,否則返回0。算法描述:對2~100之間的每個數(shù)進行判斷,若是素數(shù),則輸出該數(shù)。for(m = 2; m <= 100; m++) if (m是素數(shù)) printf("%d ", m);,prime(m) != 0,例5-5 源程序,#include #include int
25、 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++;
26、 if (count %10 == 0) printf ("\n"); } } printf ("\n");},int prime (int m){ int i, n; if ( m == 1 ) return 0; n = sqrt (m); for( i = 2; i <= n; i
27、++) if (m % i == 0){ return 0; } return 1; },5.3 變量與函數(shù),5.3.1 局部變量和全局變量5.3.2 變量生命周期和靜態(tài)局部變量,5.3.1 局部變量和全局變量,局部變量在函數(shù)內(nèi)定義的變量(包括形參)作用范圍:本函數(shù)內(nèi)部定義在復(fù)合語句內(nèi)的變量作用范圍:復(fù)合語句內(nèi)部全局變量在函數(shù)以外定義的變量,不
28、從屬于任一函數(shù)。作用范圍:從定義處到源文件結(jié)束(包括各函數(shù)),例5-6 在復(fù)合語句中定義局部變量。,#include int main (void){ int a; a = 1; { /* 復(fù)合語句開始 */ int b = 2; b = a + b; a = a + b;}
29、 /* 復(fù)合語句結(jié)束 */ printf ("%d " , a ); return 0;},b:小范圍內(nèi)的臨時變量,,,4,例5-7 全局變量定義,#include "stdio.h"int x; /* 定義全局變量x */int f( ){ int x = 4; /* x為局部變量 */ return
30、x;}int main(void){ int a = 1; x = a; /* 對全局變量 x 賦值 */ a = f( ); /* a的值為4 */ { int b = 2; b = a + b; /* b的值為4 */ x = x + b; /* 全局變量運算 */ }
31、printf("%d %d" , a, x); return 0;},4, 7,若局部變量與全局變量同名,局部變量優(yōu)先,,,,,變量作用范圍示例,int x=1;void main( ){ int a=2; …….. { int b=3; ….. } f( ); ………..}int t=4 ;voi
32、d f( ){ int x=5, b=6; …….}int a=7;,x=? a=? b=?,b=?,x=5 b=6 t=4 a沒定義,,,,,,,x=? b=? t=? a=?,自動變量(auto): 普通的局部變量int x, y; ?? auto int x, y;char c1; ?? auto char c1;函數(shù)調(diào)用時,定義變量,分配存儲單元。函數(shù)調(diào)用結(jié)束,收回存儲單元。全局變量:
33、從程序執(zhí)行開始,到程序的結(jié)束,存儲單元始終保持。變量生命周期變量從定義開始分配存儲單元,到運行結(jié)束存儲單元被回收的整個過程。,5.3.2 變量生命周期和靜態(tài)局部變量,存儲類型:動態(tài)存儲:自動變量靜態(tài)存儲:全局變量、靜態(tài)局部變量用戶存儲空間,存儲區(qū),static 類型名 變量表作用范圍:局部變量生命周期:全局變量,靜態(tài)局部變量,例5-9 靜態(tài)局部變量示例,#include void fun (int k);int
34、 main (void){ int k; for (k = 1; k <= 3; k++) fun (k); return 0;} void fun(int k){ static int a; printf ("%d, ", a); a += k ; },0,1,3,,靜態(tài)變量會記住前一次調(diào)用時留下來的值,靜態(tài)變量的初值為0,
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- chap2_用c語言編寫程序1-3 - 浙江大學(xué)計算機輔助 …
- chap2_用c語言編寫程序1-3
- imagebasedrendering-浙江大學(xué)計算機輔助設(shè)計與圖形學(xué)
- image based rendering - 浙江大學(xué)計算機輔助設(shè)計與圖形學(xué)
- 計算機輔助設(shè)計
- 中文模板-浙江大學(xué)計算機輔助設(shè)計與圖形學(xué)國家重
- 計算機輔助設(shè)計與制造
- 計算機輔助設(shè)計試題
- 淺談計算機輔助設(shè)計
- 餐盒計算機輔助設(shè)計
- 沒有幻燈片標(biāo)題-浙江大學(xué)計算機輔助設(shè)計與圖形學(xué)國家
- 計算機輔助設(shè)計實習(xí)報告
- 計算機輔助設(shè)計有答案
- 計算機輔助設(shè)計譯文.docx
- 計算機輔助設(shè)計開題報告
- 計算機輔助設(shè)計論文要求
- 計算機輔助設(shè)計譯文.docx
- 06藝-計算機輔助設(shè)計(1)大綱
- 計算機輔助設(shè)計譯文.docx
- 屏蔽電機計算機輔助設(shè)計
評論
0/150
提交評論