版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
C語言程序設(shè)計(jì)第七章函數(shù)第七章函數(shù)第7章函數(shù)
7.1函數(shù)定義和函數(shù)調(diào)用
7.2函數(shù)的嵌套調(diào)用和遞歸調(diào)用
7.3局部變量和全局變量
7.4變量的存儲類別
7.5內(nèi)部函數(shù)和外部函數(shù)函數(shù)概述程序設(shè)計(jì)有兩大最高級的藝術(shù)算法設(shè)計(jì)藝術(shù)結(jié)構(gòu)設(shè)計(jì)藝術(shù)函數(shù)(function)是結(jié)構(gòu)設(shè)計(jì)的最基本單位“一個程序應(yīng)該是輕靈自由的,它的子過程就象串在一根線上的珍珠?!薄狦eoffreyJames的《編程之道》函數(shù)是C語言的基本組成單元。每個函數(shù)用來完成某一特定的功能。把單一功能做成函數(shù)的方式,有利于軟件的復(fù)用。第七章函數(shù)函數(shù)概述C程序的函數(shù)有兩種:標(biāo)準(zhǔn)庫函數(shù):由系統(tǒng)提供,如:sqrt(x),exp(x)。自定義函數(shù):用戶自定義函數(shù)第七章函數(shù)7.1函數(shù)定義和函數(shù)的調(diào)用
返回值類型
函數(shù)名
(參數(shù)表)
{
函數(shù)體
return表達(dá)式;
}返回值類型與return語句配合
如果不需要返回值,則應(yīng)該用void
定義返回值類型。當(dāng)函數(shù)執(zhí)行到return語句時,就中止函數(shù)的執(zhí)行,返回到調(diào)用它的地方。函數(shù)內(nèi)部可以定義只能自己使用的變量,稱內(nèi)部變量。參數(shù)表里的變量也是內(nèi)部變量第七章函數(shù)函數(shù)名命名Windows風(fēng)格函數(shù)名命名用大寫字母開頭的單詞組合而成變量名形式“名詞”或者“形容詞+名詞”如變量名OldValue與NewValue等函數(shù)名形式“動詞”或者“動詞+名詞”(動賓詞組)如函數(shù)名GetMax()等第七章函數(shù)對函數(shù)接口加以注釋說明/*函數(shù)功能:實(shí)現(xiàn)××××功能
函數(shù)參數(shù):參數(shù)1,表示×××××
參數(shù)2,表示×××××
函數(shù)返回值:×××××*/
返回值類型函數(shù)名
(參數(shù)表){
函數(shù)體
return表達(dá)式;}第七章函數(shù)【例7.1a】計(jì)算兩個整數(shù)的平均數(shù)/*
函數(shù)功能:計(jì)算平均數(shù)
函數(shù)入口參數(shù):整型x,存儲第一個運(yùn)算數(shù)整型y,存儲第二個運(yùn)算數(shù)
函數(shù)返回值:平均數(shù)*/intAverage(intx,inty){ intresult; result=(x+y)/2;
returnresult;}第七章函數(shù)函數(shù)調(diào)用(call)單向值傳遞調(diào)用函數(shù)時,必須提供所有的參數(shù)提供的參數(shù)個數(shù)、類型、順序與定義時相同有返回值時放到一個數(shù)值表達(dá)式中,如c=max(a,b);
作為另一個函數(shù)調(diào)用的參數(shù),如
c=max(max(a,b),c);printf("%d\n",max(a,b));無返回值時函數(shù)調(diào)用表達(dá)式,如display(a,b);第七章函數(shù)【例7.1b】
使用了Average函數(shù)的main()
#include<stdio.h>intAverage(intx,inty){
intresult; result=(x+y)/2;
returnresult;}main(){
inta=12;
intb=24;
intave; ave=Average(a,b); printf("Averageof%dand%dis%d.\n",a,b,ave);}intAverage(intx,inty){intresult;result=(x+y)/2;returnresult;}main(){inta=12;intb=24;intave;ave=Average(a,b);
printf(……);}數(shù)據(jù)傳遞執(zhí)行順序第七章函數(shù)函數(shù)原型(prototype)調(diào)用一個函數(shù)之前,先要對其返回值類型、函數(shù)名和參數(shù)進(jìn)行聲明(declare)
不對函數(shù)進(jìn)行聲明是非常危險的聲明時不要省略參數(shù)以及返回值的類型第七章函數(shù)#include<stdio.h>intAverage(intx,inty){ intresult; result=(x+y)/2; returnresult;}main(){ inta=12; intb=24; intave=Average(a,b); printf("Averageof%dand%dis%d.\n",a,b,ave);}【例7.1】第七章函數(shù)#include<stdio.h>int
Average(intx,inty);/*聲明Average()函數(shù)*/main(){
inta=12;
intb=24;
intave=Average(a,b);
printf("Averageof%dand%dis%d.\n",a,b,ave);}intAverage(intx,inty)/*計(jì)算兩個整數(shù)的平均數(shù)*/{
intresult; result=(x+y)/2;
returnresult;}【例7.1】第七章函數(shù)7.2.1函數(shù)的嵌套調(diào)用
在被調(diào)函數(shù)中,又調(diào)用了函數(shù)----嵌套調(diào)用7.2函數(shù)的嵌套調(diào)用和遞歸調(diào)用
main(){……...}a函數(shù){……}b函數(shù){………}①③④⑤⑥⑦②第七章函數(shù)【例7.7】
編寫程序,輸入n,m,求組合數(shù)#include<stdio.h>voidmain(){intm,n;longcmn(int,int);
scanf("%d%d",&m,&n);printf("cmn=%ld\n",cmn(m,n));}longJc(intn){inti;longt=1;for(i=1;i<=n;i++)t*=i;return(t);}longcmn(intm,intn){return(Jc(m)/(Jc(n)*Jc(m-n)));}第七章函數(shù)7.2.2函數(shù)的遞歸調(diào)用
當(dāng)一個函數(shù)直接或間接的調(diào)用它自身時,稱為函數(shù)的遞歸調(diào)用。前者稱為直接遞歸,后者稱為間接遞歸第七章函數(shù)7.7.2函數(shù)的遞歸調(diào)用遞歸方法:兩步:遞推、回歸。例如:求4!4!=4*3!→3!=3*2!→2!=2*1!→1!=1*0!→0!=14!=4*6←3!=3*2←2!=2*1←1!=1*1←0!=1第七章函數(shù)【例7.8】
用遞歸計(jì)算n!#include<stdio.h>longJc(intn){longf;
if(n==1||n==0)f=1;elsef=n*Jc(n-1);returnf;}voidmain(){longy;intn;scanf("%d",&n);y=Jc(n);printf("%d!=%ld",n,y);}main函數(shù)y=Jc(3)jc函數(shù)f=3*Jc(2)jc函數(shù)f=2*Jc(1)jc函數(shù)f=1return1jc函數(shù)f=2*Jc(1)return2jc函數(shù)f=3*Jc(2)return6第七章函數(shù)【例7.9】
把十進(jìn)制整數(shù)按相反的順序?qū)⒏魑粩?shù)字打印出來。如:print(123456);輸出:654321#include<stdio.h>voidprint(longn){if(n==0)return;
else
{printf("%d",n%10);
print(n/10);
return;
}}voidmain(){longn;scanf("%ld",&n);
print(n);}運(yùn)行結(jié)果如下:
123456↙654321第七章函數(shù)7.3局部變量和全局變量變量的分類作用域:變量的有效范圍(空間)局部變量全局變量生存期:變量存在的時間(時間)靜態(tài)變量:從程序開始執(zhí)行到程序結(jié)束動態(tài)變量:從包含該變量定義的函數(shù)開始執(zhí)行至函數(shù)執(zhí)行結(jié)束第七章函數(shù)7.3.1局部變量(內(nèi)部變量)定義:在函數(shù)內(nèi)定義的變量。作用域:在本函數(shù)內(nèi)有效。
說明:(1)main函數(shù)中定義的變量只在
main函數(shù)中有效。(2)形參屬于局部變量。(3)不同函數(shù)中同名變量,占不同內(nèi)存單元。(4)在復(fù)合語句中定義的變量,只在本復(fù)合語句中有效。7.3局部變量和全局變量voidmain(){inta,b,c;a=1;b=2;
c=a+b;
{intc;
c=a-b;printf("%d\n",c);
}printf("%d\n",c);}輸出:-13第七章函數(shù)7.3.2全局變量(外部變量)定義:在函數(shù)外部定義的變量。作用域:從定義的位置到本文件結(jié)束。7.3局部變量和全局變量x,i,ja,b,c,dm,nc1,c2a1,a2inta1=1,a2=5;
floatf1(floatx){inti,j;......}charc1,c2;charf2(inta,intb){intc,d;......}voidmain(){intm,n;......}第七章函數(shù)注意:
(1)設(shè)置全局變量的作用是增加了函數(shù)間數(shù)據(jù)傳遞的通道。(2)全局變量定義時未初始化,系統(tǒng)為其賦初值0。(3)若全局變量與局部變量同名,則在局部變量的作用范圍內(nèi),同名的全局變量不起作用。7.3局部變量和全局變量【例7.10】編寫函數(shù)求兩個數(shù)的和與積。#include<stdio.h>floatadd,mult;voidfunc(floatx,floaty){add=x+y;
mult=x*y;}voidmain(){floata,b;scanf("%f%f",&a,&b);func(a,b);printf("%.2f%.2f\n",add,mult);}運(yùn)行情況如下:38↙11.0024.00第七章函數(shù)注意:
(4)當(dāng)全局變量定義在后,引用在前時,應(yīng)在引用它的函數(shù)中用extern
對此全局變量進(jìn)行聲明(說明)。7.3局部變量和全局變量【例7.11】用extern聲明外部變量,擴(kuò)展它在程序文件中的作用域#include<stdio.h>intmax(intx,inty){intz;z=x>y?x:y;return(z);}voidmain(){
externA,B;
printf("%d",max(A,B));}intA=8,B=2;第七章函數(shù)
(5)當(dāng)一個程序由多個源文件組成時,如果想在一個文件中引用另一個文件中的已定義的外部變量,要用extern對該變量進(jìn)行聲明。文件a1.c中的內(nèi)容為:#include<stdio.h>inta;
main(){intpower(int);intd,m;printf("enteranumberanditspower:\n");scanf("%d,%d",&a,&m);d=power(m);printf("%d**%d=%d",a,m,d);}文件a2.c中的內(nèi)容為:externa;
intpower(intn){inti,y=1;for(i=1;i<=n;i++)y*=a;return(y);}【例7.12】用extern將外部變量的作用域擴(kuò)展到其他文件。第七章函數(shù)intx=1,y=2;voidsub(inty){
x++;y++;printf(“(1)x=%d,y=%d\n”,x,y);}voidmain(){intx=5;sub(x);printf(“(2)x=%d,y=%d\n”,x,y);}練習(xí):程序結(jié)果(1)x=2,y=6(2)x=5,y=2第七章函數(shù)#include<stdio.h>intm=10,n=100;voidde(){intn=100;
n-=20;
m-=2;}main(){intn=80;
for(;n>=60;){de();
n=n-20;
printf(“%d\n”,n+m);}}de()函數(shù)中局部變量n的作用域main()中局部變量n的作用域全局變量m,n的作用域運(yùn)行結(jié)果:6846全局變量可以與局部變量同名。在局部變量的作用范圍內(nèi),全局變量不起作用。第七章函數(shù)7.4變量的存儲類型變量的屬性:intx;
數(shù)據(jù)類型:如int,float等。
存儲類型:是指數(shù)據(jù)在內(nèi)存中的存儲方式。分兩大類:靜態(tài)存儲類動態(tài)存儲類用戶內(nèi)存空間靜態(tài)存儲區(qū)動態(tài)存儲區(qū)程序區(qū)具體包括四種:自動的(auto),靜態(tài)的(static),寄存器的(register),外部的(extern)。變量定義的形式:存儲類型標(biāo)識符類型標(biāo)識符變量名;例如:autointx;或intx;第七章函數(shù)7.4變量的存儲類型auto自動變量——動態(tài)存儲區(qū)
register寄存器變量——CPU中的寄存器
extern外部變量——靜態(tài)存儲區(qū)
static靜態(tài)變量——靜態(tài)存儲區(qū)存儲類型程序區(qū)靜態(tài)存儲區(qū)動態(tài)存儲區(qū)形參、自動變量、函數(shù)調(diào)用的現(xiàn)場等全局變量、靜態(tài)變量存放數(shù)據(jù)第七章函數(shù)7.4變量的存儲類型局部變量的存儲方式(三種)自動變量靜態(tài)局部變量寄存器變量第七章函數(shù)1、自動變量(auto)
“自動”體現(xiàn)在進(jìn)入語句塊時自動申請內(nèi)存,退出時自動釋放內(nèi)存對它們分配和釋放存儲空間的工作由編譯系統(tǒng)自動處理,故稱其為自動變量標(biāo)準(zhǔn)定義格式
auto類型名變量名;動態(tài)局部變量缺省的存儲類型不初始化時,值是不確定的例如:intf(inta)/*形參a為自動變量,auto省略*/{autointb,c=3;/*定義b,c為自動變量*/……}第七章函數(shù)2、靜態(tài)局部變量
有時希望函數(shù)中局部變量的值在函數(shù)調(diào)用結(jié)束后不消失(以后一直存在,并總是保持它的最新值,即具有記憶性。)即不釋放存儲單元。此時可指定該變量為“靜態(tài)局部變量”,用關(guān)鍵字“static”說明。靜態(tài)局部變量系統(tǒng)自動初始化為0。存放在靜態(tài)存儲區(qū)中第七章函數(shù)2、靜態(tài)局部變量有時希望函數(shù)中局部變量的值在函數(shù)調(diào)用結(jié)束后不消失(以后一直存在,并總是保持它的最新值,即具有記憶性。)即不釋放存儲單元。此時可指定該變量為“靜態(tài)局部變量”,用關(guān)鍵字“static”說明。靜態(tài)局部變量系統(tǒng)自動初始化為0。存放在靜態(tài)存儲區(qū)中
靜態(tài)變量和全局變量都是靜態(tài)存儲類型
自動初始化為0
從靜態(tài)存儲區(qū)分配,生存期為整個程序運(yùn)行期間但作用域不同第七章函數(shù)【例7.13】考察靜態(tài)局部變量的值#include<stdio.h>intfunc(inta){intb=0;
staticintc
=
1;
b
=
b
+
1;
c
=
c
+
1;return(
a
+
b
+
c
);}voidmain(){inta=2,i;for(i=0;i<3;i++)printf("%d",func(a));}分析:i=0時:
a:2b:0
c:1b:1
c:2a+b+c=2+1+2=5;運(yùn)行結(jié)果:567分析:i=1時:
a:2b:0
c:2b:1
c:3a+b+c=2+1+3=6;第七章函數(shù)3、寄存器變量(register)對頻繁使用的變量,為減少存取變量花費(fèi)的時間,C語言允許將局部變量的值存放在CPU運(yùn)算器的寄存器中,稱為“寄存器變量”,用關(guān)鍵字“register”說明。說明:寄存器變量的類型一般只限于整型、字符型或指向整型、字符型的指針,且只用于局部變量和形參。因此,全局寄存器變量是非法的。不能定義任意多個寄存器變量,因?yàn)橐粋€計(jì)算機(jī)系統(tǒng)中寄存器的數(shù)目是有限的。不能取寄存器變量的地址第七章函數(shù)7.5內(nèi)部函數(shù)和外部函數(shù)1.
內(nèi)部函數(shù)
內(nèi)部函數(shù)只能被本文件中的其他函數(shù)所調(diào)用。
在定義函數(shù)時,在前面加static
即:
static
類型標(biāo)識符函數(shù)名(形參表)例如:
staticfloatfun(floatx,floaty){……}第七章函數(shù)7.5內(nèi)部函數(shù)和外部函數(shù)2.外部函數(shù)(1)在定義函數(shù)時,在前面加上extern,則表示該函數(shù)為外部函數(shù),可供其他文件調(diào)用。如
externfloatfun(floatx,floaty){……}
或
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 小區(qū)居民健康需求的電子產(chǎn)品解決方案
- Module 4 Unit 3 Story time(說課稿)-2023-2024學(xué)年牛津上海版(試用本)英語二年級下冊
- 8 我們受特殊保護(hù)《我們是未成年人》(說課稿)-部編版道德與法治六年級上冊
- 9 種豆子 說課稿-2023-2024學(xué)年科學(xué)二年級下冊冀人版
- Unit3 Fascinating Parks Listening and Talking 說課稿-2024-2025學(xué)年高中英語人教版(2019)選擇性必修第一冊
- Unit 8 Let's celebrate!Period 1 Welcome to the unit 說課稿2024-2025學(xué)年牛津譯林版英語七年級上冊
- Unit 7 Days and Months Lesson 2 Winter in Harbin 說課稿2024-2025學(xué)年冀教版(2024)七年級英語上冊
- 《衣服的學(xué)問:3 我的扎染作品》說課稿-2023-2024學(xué)年三年級下冊綜合實(shí)踐活動滬科黔科版
- 二零二五年度大型工廠專用除塵器配件批發(fā)合同2篇
- 個性化2024版知識產(chǎn)權(quán)保密協(xié)議樣本一
- 制造樣品生產(chǎn)作業(yè)指導(dǎo)書
- 服務(wù)經(jīng)營培訓(xùn)課件ppt 老客戶經(jīng)營綜合版
- MT/T 199-1996煤礦用液壓鉆車通用技術(shù)條件
- GB/T 6144-1985合成切削液
- GB/T 10357.1-2013家具力學(xué)性能試驗(yàn)第1部分:桌類強(qiáng)度和耐久性
- 第三方在線糾紛解決機(jī)制(ODR)述評,國際商法論文
- 公寓de全人物攻略本為個人愛好而制成如需轉(zhuǎn)載注明信息
- 第5章-群體-團(tuán)隊(duì)溝通-管理溝通
- 腎臟病飲食依從行為量表(RABQ)附有答案
- 深基坑-安全教育課件
- 園林施工管理大型園林集團(tuán)南部區(qū)域養(yǎng)護(hù)標(biāo)準(zhǔn)圖例
評論
0/150
提交評論