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