




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第第5章章 函函 數(shù)數(shù)主要內(nèi)容主要內(nèi)容計算圓柱體積計算圓柱體積數(shù)字金字塔數(shù)字金字塔復(fù)數(shù)運算復(fù)數(shù)運算 本章要點本章要點為什么要用函數(shù)為什么要用函數(shù)怎樣定義怎樣定義函數(shù)函數(shù)、怎樣、怎樣調(diào)用調(diào)用函數(shù)函數(shù)定義函數(shù)與聲明函數(shù)有何定義函數(shù)與聲明函數(shù)有何區(qū)別區(qū)別函數(shù)的參數(shù)如何確定、參數(shù)如何傳遞函數(shù)的參數(shù)如何確定、參數(shù)如何傳遞簡單變量作為函數(shù)的參數(shù)時的參數(shù)傳遞簡單變量作為函數(shù)的參數(shù)時的參數(shù)傳遞變量的作用范圍變量的作用范圍- -全局與局部變量全局與局部變量靜態(tài)變量的特點靜態(tài)變量的特點例例5-1:輸入高和半徑,計算圓柱體體積:輸入高和半徑,計算圓柱體體積n要求:要求:調(diào)用調(diào)用cylinder ()函數(shù)函數(shù)計算圓柱
2、體的體積。計算圓柱體的體積。#include void main( ) double h, r, v; double cylinder (double r, double h); /函數(shù)聲明函數(shù)聲明 scanf (%lf%lf, &r , &h );v = cylinder (r , h );printf (體積體積 = %.3fn, v);double cylinder (double r, double h ) double volume;volume = 3.1415926 * r * r * h; return volume; /* 返回結(jié)果返回結(jié)果 */double
3、cylinder (double r, double h ) double volume;result = 3.1415926 * r * r * h; /* 計算體積計算體積 */return volume; /* 返回結(jié)果返回結(jié)果 */n自定義函數(shù)自定義函數(shù)n函數(shù)定義函數(shù)定義n形式參數(shù)說明形式參數(shù)說明類型類型 函數(shù)名函數(shù)名( ( 形式參數(shù)說明形式參數(shù)說明 ) ) 函數(shù)體函數(shù)體 類型類型 變量變量1 ,1 ,類型類型 變量變量22注意:注意:不能不能寫為寫為:double cylinder(double r, h )類型若缺省,類型若缺省,默認(rèn)為默認(rèn)為int型型n說明說明q若函數(shù)類型若函數(shù)類
4、型不為不為void,則須用,則須用return返回結(jié)果返回結(jié)果(一個值一個值)q若若return(表達(dá)式表達(dá)式)中結(jié)果與函數(shù)類型不同,則系統(tǒng)自動中結(jié)果與函數(shù)類型不同,則系統(tǒng)自動將結(jié)果將結(jié)果按函數(shù)類型按函數(shù)類型進(jìn)行轉(zhuǎn)換。進(jìn)行轉(zhuǎn)換。n函數(shù)調(diào)用函數(shù)調(diào)用q函數(shù)名函數(shù)名(實參列表實參列表)n說明說明q實參應(yīng)具有確定的值,可為實參應(yīng)具有確定的值,可為常量常量、變量變量或或表達(dá)式表達(dá)式。q實參實參個數(shù)個數(shù)、類型類型和和順序順序須與函數(shù)的形參說明保持。須與函數(shù)的形參說明保持。問題:計算圓柱體積問題:計算圓柱體積 printf( (max=%d,max(a,b); ; c=max(a, b)*10; m=max
5、( a, max( b, c);.#include double cylinder (double r, double h) double volume; result=3.14*r*r*h; return volume;void main( ) double r, h, v; printf(r,h:); scanf(%lf,%lf,&r, &h); v = cylinder (r, h); printf(體積=%.3lfn, v); rhv函數(shù)調(diào)用的內(nèi)部機制函數(shù)調(diào)用的內(nèi)部機制n實例演示:實例演示:rhvolume12126.286.28 n給被調(diào)用函數(shù)的給被調(diào)用函數(shù)的形參變量
6、形參變量和函數(shù)中定義的局部變量和函數(shù)中定義的局部變量分配內(nèi)存空間分配內(nèi)存空間;n將將實參值實參值按照對應(yīng)的順序關(guān)系按照對應(yīng)的順序關(guān)系賦給形參變量賦給形參變量;n被調(diào)用函數(shù)開始執(zhí)行;被調(diào)用函數(shù)開始執(zhí)行;n被調(diào)用函數(shù)被調(diào)用函數(shù)返回運算結(jié)果返回運算結(jié)果;n被調(diào)用函數(shù)的被調(diào)用函數(shù)的形參變量形參變量和其中定義的和其中定義的局部變量局部變量所占所占內(nèi)存內(nèi)存空間被釋放空間被釋放(回收回收)。函數(shù)調(diào)用的內(nèi)部機制函數(shù)調(diào)用的內(nèi)部機制n函數(shù)函數(shù)調(diào)用的執(zhí)行軌跡調(diào)用的執(zhí)行軌跡q沿函數(shù)調(diào)用方向深入執(zhí)行,調(diào)用結(jié)束后沿函數(shù)調(diào)用方向深入執(zhí)行,調(diào)用結(jié)束后“原路原路”返回。返回。q例如:例如:void main( ) A( );
7、void A( ) B( ); 函數(shù)調(diào)用的內(nèi)部機制函數(shù)調(diào)用的內(nèi)部機制void B( ) 結(jié)束結(jié)束例題:使用素數(shù)判斷函數(shù)求從例題:使用素數(shù)判斷函數(shù)求從100開始的前開始的前100個素數(shù)。個素數(shù)。#include stdio.h#include math.hint isprime(int n) /判斷整數(shù)判斷整數(shù)n是否為素數(shù)?是否為素數(shù)? int i,flag=1; /是則返回是則返回1,否則返回否則返回0 if(n2) ; else for(i=2; ; i+)if( n%i=0) flag=0; break; ; void main() int n=100,count=0; while(cou
8、nt100) if( isprime(n) /若若n為素數(shù)為素數(shù) count+;printf(第第%d個素數(shù):個素數(shù):%dn,count,n); n+; flag=0i=sqrt(n)return flagn函數(shù)原型聲明的作用函數(shù)原型聲明的作用qC語言要求函數(shù):語言要求函數(shù):先定義、后使用先定義、后使用;q通知編譯器被調(diào)用函數(shù)的基本信息,以便編譯器能通知編譯器被調(diào)用函數(shù)的基本信息,以便編譯器能進(jìn)行進(jìn)行函數(shù)調(diào)用的合法性檢查函數(shù)調(diào)用的合法性檢查。被調(diào)用函數(shù)的原型聲明被調(diào)用函數(shù)的原型聲明n函數(shù)函數(shù)原型聲明原型聲明的一般形式的一般形式q類型名類型名 函數(shù)名函數(shù)名(形式參數(shù)列表形式參數(shù)列表) ;n函數(shù)原
9、型聲明的位置函數(shù)原型聲明的位置q函數(shù)被調(diào)用之前。函數(shù)被調(diào)用之前。如:如:int IsPrime(int x); 第第5章章 函函 數(shù)數(shù)主要內(nèi)容主要內(nèi)容計算圓柱體積計算圓柱體積數(shù)字金字塔數(shù)字金字塔復(fù)數(shù)運算復(fù)數(shù)運算 例例5-5:數(shù)字金字塔:數(shù)字金字塔n輸出如圖所示的數(shù)字金字塔輸出如圖所示的數(shù)字金字塔。n要求:設(shè)計要求:設(shè)計pyramid (int n) : 顯示顯示n行行 數(shù)字金字塔數(shù)字金字塔n程序程序#include int main( ) int n; void pyramid (int n ); /函數(shù)聲明函數(shù)聲明 printf(請輸入金字塔的行數(shù)請輸入金字塔的行數(shù)(1-9):); scan
10、f (%d, &n );pyramid( n ); /調(diào)用調(diào)用pyramid()函數(shù)函數(shù)return 0; 1 2 2 3 3 3 4 4 4 4 5 5 5 5 5 n分析分析q每次只能顯示每次只能顯示1行,要顯示行,要顯示n行,故使行,故使用循環(huán)用循環(huán)(i=1; i=n; i+)來實現(xiàn),來實現(xiàn),i 表示表示行號。行號。q第第 i 行的內(nèi)容由行的內(nèi)容由空格空格和和數(shù)字?jǐn)?shù)字符號組成,符號組成,其中空格其中空格: 個,字符:個,字符: 個。個。q由于每次只能顯示一個字符(空格或由于每次只能顯示一個字符(空格或數(shù)字),所以數(shù)字),所以空格空格和和數(shù)字?jǐn)?shù)字的顯示也需的顯示也需要分別使用循環(huán)來
11、實現(xiàn)。要分別使用循環(huán)來實現(xiàn)。q每行結(jié)束時需要顯示一個每行結(jié)束時需要顯示一個 。問題:數(shù)字金字塔問題:數(shù)字金字塔 1 2 2 3 3 3 4 4 4 4 5 5 5 5 5 n - ii換行符換行符void pyramid( int n) n程序程序(續(xù)續(xù))int i, j; for( i=1 ;i=n ; i+ ) /顯示顯示n行行 問題:數(shù)字金字塔問題:數(shù)字金字塔for( j=1; j= n-i; j+) /顯示空格顯示空格 printf( );for( j=1; j= i; j+) /顯示數(shù)字顯示數(shù)字 printf(%d , );printf(n); /行尾顯示換行行尾顯示換行i不返回值的
12、函數(shù)不需要不返回值的函數(shù)不需要return語句。語句。函數(shù)與模塊化程序設(shè)計函數(shù)與模塊化程序設(shè)計n對于復(fù)雜系統(tǒng)的設(shè)計,人們常自頂向下將一個大的對于復(fù)雜系統(tǒng)的設(shè)計,人們常自頂向下將一個大的程序按功能分割成多個較小的程序按功能分割成多個較小的功能模塊功能模塊,每個功能每個功能模塊又包含模塊又包含1 1到多個函數(shù)到多個函數(shù)。mainabcfghdei模塊模塊1 1模塊模塊3 3模塊模塊2 2n模塊化設(shè)計時須遵循模塊獨立性原則模塊化設(shè)計時須遵循模塊獨立性原則q模塊之間通過參數(shù)傳遞信息,模塊內(nèi)模塊之間通過參數(shù)傳遞信息,模塊內(nèi)慎用全局變量慎用全局變量。q每個模塊只有每個模塊只有一個入口一個入口和和一個出口一
13、個出口。第第5章章 函函 數(shù)數(shù)主要內(nèi)容主要內(nèi)容計算圓柱體積計算圓柱體積數(shù)字金字塔數(shù)字金字塔復(fù)數(shù)運算復(fù)數(shù)運算 問題:復(fù)數(shù)運算問題:復(fù)數(shù)運算n要求:要求:分別輸入分別輸入2個復(fù)數(shù)的實部與虛部,用函數(shù)個復(fù)數(shù)的實部與虛部,用函數(shù) 實現(xiàn)計算實現(xiàn)計算2個復(fù)數(shù)之和與之積。個復(fù)數(shù)之和與之積。n分析分析q若若2個復(fù)數(shù)分別為:個復(fù)數(shù)分別為:c1=x1+y1i i , c2=x2+y2i i,q則有:則有:c1+c2 = (x1+x2) + (y1+y2)i ic1*c2 = (x1*x2-y1*y2) + (x1*y2+x2*y1)i i #include float result_r, result_i ; /
14、全局變量,用于保存函數(shù)結(jié)果全局變量,用于保存函數(shù)結(jié)果void complex_add( float r1, float i1, float r2, float i2);void complex_prod( float r1, float i1, float r2, float i2);void main( ) float real1, imag1, real2, imag2; /局部變量局部變量 printf(輸入復(fù)數(shù)輸入復(fù)數(shù)1:); scanf(%f,%f, &real1, &imag1 ); printf(輸入復(fù)數(shù)輸入復(fù)數(shù)2:); scanf(%f,%f, &rea
15、l2, &imag2 ); complex_add(real1, imag1, real2, imag2); /復(fù)數(shù)加法復(fù)數(shù)加法 printf(和值和值=%f+%f i,result_r, result_i); complex_prod(real1, imag1, real2, imag2);/復(fù)數(shù)乘法復(fù)數(shù)乘法 printf(乘積乘積=%f+%f i,result_r, result_i);n程序:程序:問題:復(fù)數(shù)運算問題:復(fù)數(shù)運算void complex_add( float r1, float i1, float r2, float i2) result_r = r1 + r2;
16、result_i = i1 + i2;void complex_prod( float r1, float i1, float r2, float i2) result_r = r1 * r2 i1 * i2; result_i = r1 + i2 + r2 * i1;n程序程序(續(xù)續(xù))問題:復(fù)數(shù)運算問題:復(fù)數(shù)運算n函數(shù)函數(shù)只能返回一個值只能返回一個值,若函數(shù)結(jié)果不止一個,則可,若函數(shù)結(jié)果不止一個,則可使用使用全局變量全局變量保存其結(jié)果,從而能在保存其結(jié)果,從而能在被調(diào)用函數(shù)之被調(diào)用函數(shù)之外外通過全局變量獲得之前的運算結(jié)果。通過全局變量獲得之前的運算結(jié)果。局部變量與全局變量局部變量與全局變量n
17、局部變量局部變量q函數(shù)函數(shù)內(nèi)部內(nèi)部定義的變量(包括函數(shù)定義的變量(包括函數(shù)形式參數(shù)形式參數(shù))。)。q局部變量的有效使用范圍只限于其所在的局部變量的有效使用范圍只限于其所在的函數(shù)內(nèi)函數(shù)內(nèi)。q一個函數(shù)一個函數(shù)不能直接訪問不能直接訪問另一函數(shù)內(nèi)的局部變量,只能另一函數(shù)內(nèi)的局部變量,只能通過函數(shù)調(diào)用時的通過函數(shù)調(diào)用時的參數(shù)傳遞參數(shù)傳遞實現(xiàn)函數(shù)之間數(shù)據(jù)的實現(xiàn)函數(shù)之間數(shù)據(jù)的單向單向交流交流( 主調(diào)用函數(shù)主調(diào)用函數(shù)-被調(diào)用函數(shù)被調(diào)用函數(shù) )。q使用局部變量可避免各函數(shù)之間變量的相互干擾,即:使用局部變量可避免各函數(shù)之間變量的相互干擾,即:不同函數(shù)內(nèi)的同名局部變量不同函數(shù)內(nèi)的同名局部變量分別代表不同的對象。分
18、別代表不同的對象。qC語言允許在復(fù)合語句內(nèi)定義僅在該語言允許在復(fù)合語句內(nèi)定義僅在該復(fù)合語句內(nèi)有效復(fù)合語句內(nèi)有效的局部變量。的局部變量。n全局變量全局變量q定義于函數(shù)外定義于函數(shù)外而不屬于任何函數(shù)的變量。而不屬于任何函數(shù)的變量。q全局全局變量變量的有效范圍:的有效范圍:定義的位置開始定義的位置開始一直到其所在一直到其所在的的文件結(jié)束處文件結(jié)束處。q函數(shù)內(nèi)的函數(shù)內(nèi)的局部變量局部變量可以與函數(shù)外定義的可以與函數(shù)外定義的全局變量同名全局變量同名,但它們分別代表不同的對象,但它們分別代表不同的對象,函數(shù)內(nèi)只有局部變量有函數(shù)內(nèi)只有局部變量有效效。q全局變量一般用于表示全局變量一般用于表示多個函數(shù)可共享多個
19、函數(shù)可共享的某一數(shù)據(jù)對的某一數(shù)據(jù)對象,程序設(shè)計中要避免濫用全局變量。象,程序設(shè)計中要避免濫用全局變量。局部變量與全局變量局部變量與全局變量n功能:先輸入操作類型功能:先輸入操作類型(1收入,收入,2支出,支出,0結(jié)束結(jié)束),再,再輸入操作金額,計算現(xiàn)金剩余額,經(jīng)多次操作直到輸入操作金額,計算現(xiàn)金剩余額,經(jīng)多次操作直到輸入操作為輸入操作為0結(jié)束。結(jié)束。n要求:定義并調(diào)用函數(shù),其中現(xiàn)金收入與現(xiàn)金支出要求:定義并調(diào)用函數(shù),其中現(xiàn)金收入與現(xiàn)金支出分別用分別用不同函數(shù)實現(xiàn)不同函數(shù)實現(xiàn)。n分析:分析:q設(shè)變量設(shè)變量cash保存現(xiàn)金余額值。保存現(xiàn)金余額值。q由于由于cash被主函數(shù)、現(xiàn)金收入與現(xiàn)金支出函數(shù)被
20、主函數(shù)、現(xiàn)金收入與現(xiàn)金支出函數(shù)共用共用,且其在不同函數(shù)中代表著同一個數(shù)據(jù)對象,因此令其且其在不同函數(shù)中代表著同一個數(shù)據(jù)對象,因此令其為為全局變量全局變量。 例題:用函數(shù)實現(xiàn)財務(wù)記賬例題:用函數(shù)實現(xiàn)財務(wù)記賬n程序程序例題:用函數(shù)實現(xiàn)財務(wù)記賬例題:用函數(shù)實現(xiàn)財務(wù)記賬#include float cash; /定義全局變量,保存現(xiàn)金余額定義全局變量,保存現(xiàn)金余額void income(float num) /收入記賬函數(shù)收入記賬函數(shù) cash = cash + num; /改變?nèi)肿兞扛淖內(nèi)肿兞縞ash void expend(float num) /現(xiàn)金支出函數(shù)現(xiàn)金支出函數(shù) cash = cas
21、h - num; / 改變?nèi)肿兞扛淖內(nèi)肿兞縞ashvoid main(void) int choice; float value; cash = 0; /初始金額初始金額=0 printf(0-end, 1-income, 2-expend:); scanf(%d, &choice); / 輸入操作類型輸入操作類型n程序程序(續(xù)續(xù))例例5-8:用函數(shù)實現(xiàn)財務(wù)記賬:用函數(shù)實現(xiàn)財務(wù)記賬while (choice != 0) if (choice = 1 | choice = 2) printf(value:); /輸入操作現(xiàn)金額輸入操作現(xiàn)金額 scanf(%f, &value)
22、; if (choice = 1) income(value); /調(diào)用函數(shù)收入記賬調(diào)用函數(shù)收入記賬 else expend(value); /調(diào)用函數(shù)支出記賬調(diào)用函數(shù)支出記賬 printf(current cash:%.2fn, cash); printf(0-end, 1-income, 2-expend:); scanf(%d, &choice); 變量的生命周期和靜態(tài)局部變量變量的生命周期和靜態(tài)局部變量n變量的生命周期變量的生命周期q變量從定義開始分配存儲單元,到運行結(jié)束存儲單元變量從定義開始分配存儲單元,到運行結(jié)束存儲單元被回收的整個過程。被回收的整個過程。n說明說明q函數(shù)函數(shù)只有在被調(diào)用時,其只有在被調(diào)用時,其局部變量局部變量(含形參含形參)才被分配才被分配存儲單元,調(diào)用結(jié)束時釋放存儲單元,調(diào)用結(jié)束時釋放(收回收回)存儲單元。存儲單元。qmain()函數(shù)函數(shù)中的中的局部變量局部變量從從main()函數(shù)開始執(zhí)行時分函數(shù)開始執(zhí)行時分配存儲單元,直到配存儲單元,直到main()函函數(shù)執(zhí)行結(jié)束才釋放。數(shù)執(zhí)行結(jié)束才釋放。q全局變量全局變量與具體與具體函數(shù)無關(guān)函數(shù)無關(guān),它們在,它們在程序執(zhí)行時程序執(zhí)行時就分配就分配存儲單元,直到整個程序執(zhí)行結(jié)束才釋
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 聽力職業(yè)病免責(zé)協(xié)議書
- 賠償和解協(xié)議書
- 結(jié)婚忠義協(xié)議書
- 卡丁車安全免責(zé)協(xié)議書
- 聘請隊長協(xié)議書
- 道路借管協(xié)議書
- 村集體資產(chǎn)處置協(xié)議書
- 自愿給地協(xié)議書
- 學(xué)生未返校安全協(xié)議書
- 租賃電鍍協(xié)議書
- 河南省南陽市2023-2024學(xué)年高二下學(xué)期期終質(zhì)量評估+物理試卷答案
- 食品安全與質(zhì)量檢測技能大賽考試題庫400題(含答案)
- 2024年浙江省嘉興市初三中考三??茖W(xué)試卷試題(含答案詳解)
- 核心素養(yǎng)-空間觀念
- 吉林省長春市2024年中考語文真題試卷【附真題答案】
- DZ/T 0462.3-2023 礦產(chǎn)資源“三率”指標(biāo)要求 第3部分:鐵、錳、鉻、釩、鈦(正式版)
- 梧州喜得寶礦業(yè)有限公司廣西梧州市金山頂金銀礦礦山地質(zhì)環(huán)境保護(hù)與土地復(fù)墾方案
- 2024年職業(yè)衛(wèi)生技術(shù)人員評價方向考試題庫附答案
- 安全管理之肉制品安全及防控措施
- 綠色算力基礎(chǔ)設(shè)施的能源與算力協(xié)同優(yōu)化
- 中小學(xué)學(xué)生規(guī)范漢字書寫比賽硬筆格式
評論
0/150
提交評論