版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、C程序設(shè)計6.1庫函數(shù)6.2函數(shù)定義和說明6.3函數(shù)調(diào)用6.4函數(shù)參數(shù)6.5函數(shù)的嵌套調(diào)用和遞歸調(diào)用6.6變量的存儲類型6.7內(nèi)部函數(shù)、外部函數(shù)6.8編譯預(yù)處理命令第6章 函數(shù)與編譯預(yù)處理函數(shù)的調(diào)用函數(shù)的嵌套調(diào)用函數(shù)的遞歸調(diào)用局部變量和全局變量變量的存儲類別編譯預(yù)處理命令本章重點第6章 函數(shù)與編譯預(yù)處理第6章 函數(shù)與編譯預(yù)處理常用方法:#includevoid main()printf(“Hello world”);例:在屏幕上打印 Hello world#includevoid main()void print_message();print_message();void print_mes
2、sage()printf(“Hello world”);第6章 函數(shù)與編譯預(yù)處理1、一個較大的程序分成幾個功能較為單一的子程序模塊,用函數(shù)完成每個子程序的作用。2、一個C程序由一個主函數(shù)和若干個其它函數(shù)構(gòu)成。3、由主函數(shù)調(diào)用其它函數(shù),其他函數(shù)也可以相互調(diào)用。4、同一函數(shù)可以被一個或多個函數(shù)調(diào)用任意次。第6章 函數(shù)與編譯預(yù)處理函數(shù)常識1、功能模塊:求解較小問題的算法和程序稱作“功能模塊”, 各功能模塊可以先單獨設(shè)計,然后將求解所有子問題的模塊組合成求解原問題的程序。 2、一個解決大問題的程序,可以分解成多個解決小問題的模塊,這就是“自頂向下”的模塊化程序設(shè)計方法。3、用一個或多個函數(shù)來實現(xiàn)這些功
3、能模塊。第6章 函數(shù)與編譯預(yù)處理函數(shù)常識4、一個原程序文件由一個或多個函數(shù)組成。一個源程序文件是一個編譯單位,即以源文件為單位進(jìn)行編譯,而不是以函數(shù)為單位進(jìn)行編譯。5、程序的執(zhí)行從main函數(shù)開始,在main函數(shù)中結(jié)束整個程序的運(yùn)行。main函數(shù)是系統(tǒng)定義的。6、所有的函數(shù)都是平行的,不能嵌套定義,但可以互相調(diào)用,但不能調(diào)用main 函數(shù)。第6章 函數(shù)與編譯預(yù)處理函數(shù):完成相對獨立功能的程序. 標(biāo)準(zhǔn)函數(shù):由系統(tǒng)提供的庫函數(shù),不必從使用角度分定義直接引用,如fabs()等。 用戶自定義函數(shù):用以解決用戶專門需要。 無參函數(shù):如printsar();從函數(shù)形式分 有參函數(shù):如 sin(x), sq
4、rt(x); 不傳遞數(shù)據(jù) 主調(diào)函數(shù)被調(diào)用函數(shù) 傳遞數(shù)據(jù) 6.1 庫函數(shù)1、定義在不同的頭文件中2、用戶使用時,必須用#include“頭文件”把相應(yīng)的頭文件包含到程序中來。例:數(shù)學(xué)庫函數(shù)調(diào)用舉例#include#includemain() double a, b;scanf (“%lf “,&a); b = sin (a); printf( “%6.4lf”, b);6.1 庫函數(shù) 注意: include命令必須以#開頭,文件名用一對雙引號“ ”或一對尖括號括起來,二者的區(qū)別是:用表示編譯時只按系統(tǒng)標(biāo)準(zhǔn)方式檢索文件目錄,而用“ math.h”形式,則編譯系統(tǒng)先從目標(biāo)文件所在的子目錄中找math
5、.h文件,若找不到再按尖括號包圍時的辦法重新搜索一次。include是命令,不是語句,結(jié)尾沒有分號。6.2 函數(shù)的定義和說明無參函數(shù)定義的一般形式:類型標(biāo)識符函數(shù)名()聲明部分語句部分void print_message( )printf(“Hello world”);#include void printstar() printf(“*n”); 例:輸出圖案 * Very Good!* main() void printstar(); 函數(shù)定義和功能實現(xiàn)函數(shù)調(diào)用函數(shù)名();方法printstar();printf(“ Very Good!”);printstar();有參函數(shù)定義的一般形式:
6、6.2 函數(shù)的定義和說明類型標(biāo)識符函數(shù)名(形式參數(shù)表列)聲明部分語句部分int max(int x,int y)int z; if(xy) z=x;else z=y; return (z);6.2 函數(shù)的定義和說明空函數(shù)類型說明符函數(shù)名()例:void dummy()6.2 函數(shù)的定義和說明注意:(1)函數(shù)名和形式參數(shù)都是用戶命名的標(biāo)識符。在同一程序中,函數(shù)名必須唯一;形式參數(shù)只要在同一函數(shù)中唯一即可,可以與其它函數(shù)中的變量同名。(2)語言規(guī)定,不能在一個函數(shù)的內(nèi)部再定義函數(shù)。(3)對函數(shù)類型的說明,必須與return語句中返回值表達(dá)式的類型一致。如果不一致,則以函數(shù)類型為準(zhǔn),由系統(tǒng)自動進(jìn)行轉(zhuǎn)
7、換。如果缺省函數(shù)類型,則系統(tǒng)一律按int類型處理。(4)帶參數(shù)的形式參數(shù)表中類型和變量必須成對出現(xiàn),如下面的定義是錯誤的: double add(double x,y)6.2 函數(shù)的定義和說明函數(shù)的返回值 在函數(shù)定義的語句部分,常常有個return返回語句,函數(shù)的返回值也就是return語句中的表達(dá)式的值。函數(shù)類型應(yīng)與return語句中的表達(dá)式類型一致。 return 語句的格式: return(表達(dá)式);或 return 表達(dá)式; 或 return; 功能:1、把return后面“表達(dá)式”的值帶給調(diào)用 函數(shù); 2、把控制轉(zhuǎn)向調(diào)用函數(shù);#includemain( )c=max(a,b);pri
8、ntf(“Max is %d”,c);int max(int x,int y)int z;z=xy?x:y;return(z);沒有返回值的函數(shù)就沒有return語句6.2 函數(shù)的定義和說明6.2 函數(shù)的定義和說明(1) 聲明為void型的函數(shù)中不能包括帶值的return 語句;主函數(shù)體內(nèi)不能出現(xiàn)return語句。(2)當(dāng)函數(shù)沒有return語句時,以結(jié)束函數(shù)的大括號 作為返回點。但這時并不表明函數(shù)沒有返回值,這時的返回值是系統(tǒng)給的不確定值。(3)除了空值函數(shù)以外的所有函數(shù)都返回一個值,那么我們是不是非得去使用這個返回值呢?答案是否定的。如果沒有用它賦值,那它就被丟棄了。(4)在同一函數(shù)內(nèi),可
9、用根據(jù)需要在多處出現(xiàn)return語句,但函數(shù)第一次遇到return時就立即停止執(zhí)行,并返回到主調(diào)函數(shù) 注意:練習(xí):1、定義一個打印三行星的函數(shù)。2、定義一個函數(shù)求兩個數(shù)的和。3、定義一個函數(shù)判斷一個數(shù)的奇偶性。4、輸入一個年份,用函數(shù)判斷是否是閏年。6.2 函數(shù)的定義和說明函數(shù)說明和函數(shù)原型6.2 函數(shù)的定義和說明在一個函數(shù)中調(diào)用另一個函數(shù),即被調(diào)用函數(shù)。需具備以下條件:(1)被調(diào)用的函數(shù)必須是已存在的函數(shù)。(2)如果使用庫函數(shù),應(yīng)用#include命令將相關(guān)的庫函數(shù)”包含”到本文件中來。(3)如果使用用戶自定義函數(shù),而該函數(shù)在調(diào)用它的函數(shù)(即主調(diào)函數(shù))后面,應(yīng)在主調(diào)函數(shù)中對被調(diào)函數(shù)作聲明。#
10、includemain()float add(float x,float y);float a,b,c;scanf(“%f %f”,&a,&b);c=add(a,b);printf(“sum is %fn”,c);float add(float x,float y)float z;z=x+y;return(z);函數(shù)的聲明函數(shù)的調(diào)用函數(shù)的定義函數(shù)的聲明:把函數(shù)的名字、函數(shù)類型以及形參的類型、個數(shù)和順序通知編譯系統(tǒng),以便在調(diào)用該函數(shù)時系統(tǒng)按此進(jìn)行對照檢查。float add(float x,float y)float z;z=x+y;return(z);函數(shù)的定義和聲明區(qū)別float add(f
11、loat x,float y);函數(shù)的定義:對函數(shù)功能的確定。包括指定函數(shù)名、函數(shù)值類型、形參及其類型、函數(shù)體等,它是一個完整的,獨立的函數(shù)單位。說明1.如果被調(diào)用函數(shù)的定義出現(xiàn)在主調(diào)函數(shù)之前,可以不必加以聲明。2.如果已在文件的開頭,已對本文件中所調(diào)用的函數(shù)進(jìn)行了聲明,則在各函數(shù)中不必對其所調(diào)用的函數(shù)再作聲明。3.聲明的時候可以省略形參的變量名。6.2 函數(shù)的定義和說明 用函數(shù)原型聲明函數(shù)練習(xí):把下面的題補(bǔ)充完整,在主函數(shù)中調(diào)用。1、定義一個打印三行星的函數(shù)。2、定義一個函數(shù)求兩個數(shù)的和。3、定義一個函數(shù)判斷一個數(shù)的奇偶性。6.2 函數(shù)的定義和說明6.3 函數(shù)的調(diào)用一、函數(shù)調(diào)用的一般形式:函
12、數(shù)名(實參表列);void printstar( ) printf(“*n”);如果調(diào)用無參函數(shù),則“實參表列”可省略,但括號不能省略,如printstar( )printstar( );6.3 函數(shù)的調(diào)用6.3 函數(shù)的調(diào)用如果實參表列包含多個實參,則各參數(shù)間用逗號間隔,如max(2,3)c=max(a,b);int max(int x,int y)int z;z=xy?x:y;return(z);6.3 函數(shù)的調(diào)用1.函數(shù)語句把函數(shù)調(diào)用作為一個語句,如printstar();2.函數(shù)表達(dá)式函數(shù)出現(xiàn)在表達(dá)式中,如:c=2*max(a,b);3.函數(shù)參數(shù)函數(shù)調(diào)用作為一個函數(shù)的實參,如: m=ma
13、x(a,max(b,c);6.4 函數(shù)的參數(shù)一、形式參數(shù)和實際參數(shù):在定義函數(shù)時,函數(shù)名后面括號中的變量名為“形式參數(shù)”(簡稱“形參”)在主調(diào)函數(shù)中調(diào)用一個函數(shù)時,函數(shù)名后面括號中的參數(shù)稱為“實際參數(shù)”(簡稱“實參”)#includemain()int max(int x,int y);/*對max函數(shù)的聲明*/int a,b,c;scanf(“%d%d”,&a,&b);c=max(a,b);/*a,b作為實參*/printf(“Max is %d”,c);int max(int x,int y)/*定義有參函數(shù)max*/*x,y作為形參*/int z;z=xy?x:y;return(z);程
14、序結(jié)果:7,8 Max is 8 關(guān)于形參與實參的說明:1、在定義函數(shù)中指定的形參,在未出現(xiàn)函數(shù)調(diào)用時,不占內(nèi)存。調(diào)用結(jié)束后,所占的內(nèi)存被釋放。#includemain( )int max(int x,int y);int a,b,c;scanf(“%d%d”,&a,&b);c=max(a,b);printf(“Max is %d”,c);int max(int x,int y) xyint z;z=xy?x:y;return(z);2、實參可以是常量,變量或表達(dá)式。c=max(a,b);int max(int x,int y)int z;z=xy?x:y;return(z);c=max(3,
15、4);c=max(a+3,b*4);6.4 函數(shù)的參數(shù)3、被定義的函數(shù)必須指定形參的類型。int max(int x,int y)int z;z=xy?x:y;return(z);4、實參與形參的類型應(yīng)相同或賦值兼容。c=max( a , b );6.4 函數(shù)的參數(shù)6.4 函數(shù)的參數(shù)5、實參向形參的數(shù)據(jù)傳遞是“值傳遞”,單向傳遞,只由實參傳給形參。c=change(a,b);void change(int x,int y)int t;t=x ; x=y ; y=z;2a3b2x3y326.5函數(shù)的嵌套調(diào)用 C語言中的嵌套調(diào)用函數(shù)main函數(shù)a函數(shù)b函數(shù)調(diào)用a函數(shù)調(diào)用b函數(shù)結(jié)束6.5函數(shù)的嵌套調(diào)
16、用#includemain()int f(int ,int);int x=36,y=16,z;z=f(x,y);printf(%d,z);int f(int a,int b)int ff(int);int m,n,k;m=ff(a);n=ff(b);if(m%2=0) k=m;else k=n;return k;int ff(int d)return(d*3);6.5函數(shù)的嵌套調(diào)用函數(shù)的嵌套注意事項:C語言不能嵌套定義函數(shù),但可以嵌套調(diào)用函數(shù)被調(diào)用函數(shù)的定義位置在調(diào)用它的函數(shù)之前,不必對該函數(shù)進(jìn)行聲明。程序從main函數(shù)開始執(zhí)行6.5函數(shù)的遞歸調(diào)用 定義:在調(diào)用一個函數(shù)的過程中,又出現(xiàn)直接或間
17、接地調(diào)用該函數(shù)本身,稱為函數(shù)的遞歸調(diào)用直接調(diào)用間接調(diào)用6.5函數(shù)的遞歸調(diào)用用遞歸法求n! 問題分析:假設(shè)n=55!=5X4!4!=4X3!3!=3X2!2!=2X1!可用下面的公式來表示: 1 (n=0,1)n!= n*(n-1)! (n1)6.5函數(shù)的遞歸調(diào)用形參x接收實參n的值是否x=0|x=1?fac(x-1)遞歸調(diào)用自身輸出結(jié)果n和smain函數(shù)fac函數(shù)f=1f=fac(x-1)*xreturn(f)求n!,調(diào)用fac函數(shù)開始輸入ns=fac(n)結(jié)束6.5函數(shù)的遞歸調(diào)用float fac(int n); /* 函數(shù)聲明 */#include main() int n; float
18、y; printf(請輸入一個整數(shù):); scanf(%d,&n); y=fac(n); printf(%d!=%10.0f,n,y); 源程序如下:float fac(int n) /* 定義計算n!的函數(shù) */ float f; if (n=0|n=1) f=1; else f=fac(n-1)*n; return(f); 運(yùn)行結(jié)果:請輸入一個整數(shù): 1010!= 36288006.5函數(shù)的遞歸調(diào)用例: 有5個人,第5個人說他比第4個人大2歲,第4個人說他比第3個人大2歲,第3個人說他比第2個人大2歲,第2個人說他比第1個人大2歲,第1個人說他10歲。求第5個人多少歲?分析: 10 (n=
19、1)age(n)= age(n-1)+2 (n1)6.5函數(shù)的遞歸調(diào)用程序如下:結(jié)果:18#includemain()int age(int);printf(%d,age(5);int age(int n)int c;if(n=1)c=10;else c=age(n-1)+2;return c;6.6變量的存儲類型 從變量的作用域(即從空間)全局變量局部變量從變量值存在的時間(即生存期)靜態(tài)存儲方式動態(tài)存儲方式6.6變量的存儲類型變量的作用域 變量的作用域是指變量的作用范圍,在C語言中分為在全局有效、局部有效和復(fù)合語句內(nèi)有效三種。 語言中所有的變量都有自己的作用域。變量說明的位置不同,其作用域
20、也不同,據(jù)此可將語言中的變量分為局部變量(內(nèi)部變量)和全局變量(外部變量)。6.6變量的存儲類型局部變量定義:在一個函數(shù)內(nèi)部定義的變量是內(nèi)部變量作用范圍:只在本函數(shù)內(nèi)有效,在此函數(shù)以外不能使用這些變量。6.6變量的存儲類型char f2(int x,int y) /* 函數(shù)f2 */ int i,j; float f1(int a) /* 函數(shù)f1 */ int b,c; a、b、c有效x、y、i、j有效m、n有效void main() /* 主函數(shù) */ int m,n; 6.6變量的存儲類型 局部變量主函數(shù)中定義的變量只在主函數(shù)中有效。主函數(shù)不能使用其他函數(shù)中定義的變量。不同函數(shù)中可使用相
21、同名字的變量。形式參數(shù)也是局部變量。在一個函數(shù)內(nèi)部,可在復(fù)合語句中定義變量,這些變量只在本復(fù)合語句中有效,這種復(fù)合語句也稱“分程序”或“程序塊”。說明6.6變量的存儲類型全局變量定義:在函數(shù)之外定義的變量稱為“外部變量”。(或稱“全局變量”或“全程變量”)。有效范圍:從定義變量的位置開始到本源文件結(jié)束。6.6變量的存儲類型int p=1,q=5;/* 全局變量 */float f1(int a)int b,c;char c1,c2; /* 全局變量 */char f2(int x,int y) int i,j;void main() int m,n; 全局變量c1、c2的作用范圍全局變量p、q的作用范圍例:#include int a=3,b=5; /* a、b為全局變量 */ void main() int max(int a,int b);/*函數(shù)聲明,a、b為形參名*/ int a=8; /* a為局部變量 */ printf(%dn,max(a,b); int max(int a,int b) /*a、b為形參局部變量*/ int c; c=ab?a:b; return(c); 6.6變量的存儲類型
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國節(jié)能5號銅瓦數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國耳插數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國硬脂醇數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國電泳活扳手?jǐn)?shù)據(jù)監(jiān)測研究報告
- 二零二五年度房屋租賃合同補(bǔ)充協(xié)議3篇
- 二零二五版智慧家居項目營銷策劃合作協(xié)議3篇
- 二零二五年度夫妻財產(chǎn)分割協(xié)議起訴離婚程序規(guī)范指引3篇
- 二零二五版生態(tài)循環(huán)農(nóng)業(yè)養(yǎng)殖委托合同3篇
- 二零二五年度商鋪租賃合同范本個人商鋪租賃專用3篇
- 旅行社承包經(jīng)營合同
- 2025-2030年中國陶瓷電容器行業(yè)運(yùn)營狀況與發(fā)展前景分析報告
- 2025年山西國際能源集團(tuán)限公司所屬企業(yè)招聘43人高頻重點提升(共500題)附帶答案詳解
- 二零二五年倉儲配送中心物業(yè)管理與優(yōu)化升級合同3篇
- 2025屆廈門高三1月質(zhì)檢期末聯(lián)考數(shù)學(xué)答案
- 音樂作品錄制許可
- 江蘇省無錫市2023-2024學(xué)年高三上學(xué)期期終教學(xué)質(zhì)量調(diào)研測試語文試題(解析版)
- 拉薩市2025屆高三第一次聯(lián)考(一模)英語試卷(含答案解析)
- 中科大光學(xué)講義08光的偏振
- 黑布林英語閱讀《小婦人》-中英伴讀
- 小學(xué)美術(shù)-《神奇的肥皂粉》教學(xué)設(shè)計學(xué)情分析教材分析課后反思
- WINCC滿足FDA規(guī)范配置說明分解
評論
0/150
提交評論