




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第六章
函數(shù)HarbinEngineeringUniversity1實(shí)例例1:計(jì)算三個(gè)數(shù)m,n,k的最大公約數(shù)。計(jì)算過程:(1)計(jì)算m,n的最大公約數(shù)r1,(2)計(jì)算r1,k的最大公約數(shù)r.
問題:計(jì)算最大公約數(shù)的過程重復(fù)兩次。例2:計(jì)算組合數(shù)c
計(jì)算過程:(1)分別計(jì)算m!,n!,(m-n)!
(2)m!/(n!*(m-n)!)
問題:計(jì)算階乘的過程重復(fù)三次。解決方法:重復(fù)的過程編成函數(shù),需要時(shí)調(diào)用。2高效程序的編寫方法3逐步分解分而治之結(jié)構(gòu)化程序設(shè)計(jì)強(qiáng)調(diào)層次性函數(shù)函數(shù)的概念什么是函數(shù)?有獨(dú)立功能的程序段。函數(shù)的結(jié)構(gòu)
函數(shù)首部
函數(shù)體intgac(inta,intb){intr;r=a%b;while(r!=0){a=b;b=r;r=a%b;}returnb;}函數(shù)首部函數(shù)體
函數(shù)首部:
函數(shù)值類型函數(shù)名函數(shù)參數(shù)4函數(shù)的概念為什么使用函數(shù)?實(shí)現(xiàn)結(jié)構(gòu)化程序設(shè)計(jì)提高程序的編寫效率C程序的結(jié)構(gòu)
一個(gè)主函數(shù)若干個(gè)其它函數(shù)由主函數(shù)調(diào)用其他函數(shù)其他函數(shù)可以互相調(diào)用程序從主函數(shù)開始執(zhí)行5函數(shù)的概念#include<stdio.h>voidmain(){voidprintstar();
voidprint_message();printstar();
print_message();
printstar();
}voidprintstar(){printf(“**********\n");}voidprint_message(){printf("Howdoyoudo!\n");}運(yùn)行結(jié)果:**********Howdoyoudo!**********6函數(shù)的概念函數(shù)的種類
庫函數(shù)
printf()
自定函數(shù)printstar()
主調(diào)函數(shù)main()
被調(diào)函數(shù)printstar()#include<stdio.h>voidmain(){voidprintstar();
voidprint_message();printstar();
print_message();
printstar();
}voidprintstar(){printf(“**********\n");}voidprint_message(){printf("Howdoyoudo!\n");}7函數(shù)的概念無參函數(shù)有參函數(shù)
voidpadd(inta,intb){printf("%d",a+b);}intadd(inta,intb){intc;c=a+b;
returnc;}有返回值函數(shù)無返回值函數(shù)voidprintstar(
){printf("******\n");}voidpstar(intn){intifor(i=1;i<=n;i++)printf("*");printf("\n");}8函數(shù)的定義一般形式
類型標(biāo)識(shí)符函數(shù)名(參數(shù)列表)
{聲明部分執(zhí)行部分}說明類型標(biāo)識(shí)符:函數(shù)返回值(函數(shù)值)的類型函數(shù)名:函數(shù)的標(biāo)識(shí),用以區(qū)分于其它函數(shù)。參數(shù)列表:與主調(diào)函數(shù)之間傳遞的數(shù)據(jù)。
聲明部分:聲明函數(shù)中用到的其它數(shù)據(jù)。
執(zhí)行部分:完成函數(shù)功能的語句。9函數(shù)定義—函數(shù)參數(shù)參數(shù)的作用從主調(diào)函數(shù)向被調(diào)函數(shù)傳遞數(shù)據(jù)。什么時(shí)候需要參數(shù)
什么樣的數(shù)據(jù)作為參數(shù)
完成函數(shù)指定功能時(shí)所需的原始數(shù)據(jù)參數(shù)怎樣說明
參數(shù)類型1
參數(shù)名1,參數(shù)類型2
參數(shù)名2,......如:計(jì)算兩個(gè)自然數(shù)a和b的最大公約數(shù)。
a和b的值。如:計(jì)算兩個(gè)自然數(shù)a和b的最大公約數(shù)。
inta,intb10函數(shù)定義—返回值(函數(shù)值)函數(shù)值的作用從被調(diào)函數(shù)向主調(diào)函數(shù)傳遞數(shù)據(jù)什么時(shí)候需要函數(shù)值需要向主調(diào)函數(shù)反饋數(shù)據(jù)如何實(shí)現(xiàn)返回值
return表達(dá)式(return(表達(dá)式))return語句的執(zhí)行過程求解表達(dá)式的值;將值傳遞給主調(diào)函數(shù);結(jié)束函數(shù)的執(zhí)行。11函數(shù)定義—無參、無返回值函數(shù)
實(shí)例:打印輸出如下圖形****************分析功能確定,不需從主調(diào)函數(shù)傳遞數(shù)據(jù)
無參無需向主調(diào)函數(shù)傳遞數(shù)據(jù)
無返回值
voidphoto(){inti,j;for(i=1;i<=4;i++){for(j=1;j<i;j++)printf("");for(j=1;j<=7-2*(i-1);
j++)printf("*");printf("\n");}}12函數(shù)定義—無參、無返回值函數(shù)一般形式
類型標(biāo)識(shí)符函數(shù)名(參數(shù)列表)
{聲明部分執(zhí)行部分}一般形式
void函數(shù)名()
{聲明部分執(zhí)行部分}voidphoto(){inti,j;for(i=1;i<=4;i++){for(j=1;j<i;j++)printf("");for(j=1;j<=7-2*(i-1);j++)printf("*");printf("\n");}}13函數(shù)定義—有參、無返回值函數(shù)實(shí)例:打印若干連續(xù)的星號(hào)。*****…*分析星號(hào)的數(shù)量需從主調(diào)函數(shù)傳遞;
有參數(shù)打印輸出,無需向主調(diào)函數(shù)傳遞數(shù)據(jù);
無返回值。voidpstar(intn){inti;for(i=1;i<=n;i++)printf("*");printf("\n");}14函數(shù)定義—有參、無返回值函數(shù)一般形式
類型標(biāo)識(shí)符函數(shù)名(參數(shù)列表)
{聲明部分執(zhí)行部分}一般形式
void函數(shù)名(類型名參數(shù)名…)
{聲明部分執(zhí)行部分}voidpstar(intn){inti;for(i=1;i<=n;i++)printf("*");printf("\n");}15函數(shù)定義—無參、有返回值函數(shù)實(shí)例:計(jì)算5!值分析初始值確定,不需從主調(diào)函數(shù)傳遞數(shù)據(jù);
無參數(shù)功能是計(jì)算,需要向主調(diào)函數(shù)傳遞數(shù)據(jù);
有返回值intfun(){inti,s=1;for(i=1;i<=5;i++)s=s*i;returns;}16函數(shù)定義—無參、有返回值函數(shù)intfun(){inti,s=1;for(i=1;i<=5;i++)s=s*i;
returns;}一般形式
類型標(biāo)識(shí)符函數(shù)名(參數(shù)列表)
{聲明部分執(zhí)行部分}一般形式
類型名
函數(shù)名()
{聲明部分執(zhí)行部分}17函數(shù)定義—有參、有返回值函數(shù)實(shí)例:求兩個(gè)自然數(shù)的最大公約數(shù)。分析
計(jì)算所需的數(shù)據(jù)需從主調(diào)函數(shù)傳遞數(shù)據(jù);有參數(shù),兩個(gè),整型計(jì)算數(shù)值,需向主調(diào)函數(shù)傳遞數(shù)據(jù);有返回值,整型intgac(inta,intb){intr;r=a%b;while(r!=0){a=b;
b=r;
r=a%b;}returnb;}18函數(shù)定義—有參、有返回值函數(shù)intgac(inta,intb){intr;r=a%b;while(r!=0){a=b;
b=r;
r=a%b;}
returnb;}一般形式
類型標(biāo)識(shí)符函數(shù)名(參數(shù)列表)
{聲明部分執(zhí)行部分}一般形式類型名函數(shù)名(類型名參數(shù)名…)
{聲明部分執(zhí)行部分}19函數(shù)定義函數(shù)定義的格式類型標(biāo)示符函數(shù)名(形式參數(shù)表)
{函數(shù)體}例:int
sqare(intn)
{returnn*n;}參數(shù)有參函數(shù)各參數(shù)用逗號(hào)分隔,與變量說明方法相似無參函數(shù)“形式參數(shù)表”可以為空,也可用void返回值有返回值函數(shù)1、“類型標(biāo)示符”說明返回值的類型,為int時(shí)可以省略,但不提倡2、“函數(shù)體”中必須有:return表達(dá)式;3、函數(shù)的返回值應(yīng)與“類型標(biāo)示符”的說明一致,
兼容的轉(zhuǎn)換,不兼容的發(fā)生編譯錯(cuò)誤無返回值函數(shù)1、“類型標(biāo)示符”必須為void2、“函數(shù)體”中可以有:return;
也可不用2021函數(shù)間數(shù)據(jù)的傳遞方法形式參數(shù):定義函數(shù)時(shí)函數(shù)名后面括號(hào)中的變量名。實(shí)際參數(shù):調(diào)用函數(shù)時(shí)函數(shù)名后面括號(hào)中的表達(dá)式大多數(shù)情況下,主調(diào)函數(shù)和被調(diào)用函數(shù)之間有數(shù)據(jù)傳遞的關(guān)系。在不同的函數(shù)之間傳遞數(shù)據(jù),可以使用的方法:參數(shù):通過形式參數(shù)和實(shí)際參數(shù)返回值:用return語句返回計(jì)算結(jié)果全局變量:外部變量22調(diào)用函數(shù)時(shí)的數(shù)據(jù)傳遞#include<stdio.h>intmax(intx,inty)/*定義有參函數(shù)max*/{ intz; z=x>y?x:y; returnz;}voidmain(){ inta,b,c; scanf("%d,%d",&a,&b); c=max(a,b); printf("Maxis%d",c);}23調(diào)用函數(shù)時(shí)的數(shù)據(jù)傳遞#include<stdio.h>voidmain(){ intmax(intx,inty);/*對(duì)max函數(shù)的聲明*/ inta,b,c; scanf("%d,%d",&a,&b); c=max(a,b); printf("Maxis%d",c);}intmax(intx,inty)/*定義有參函數(shù)max*/{ intz; z=x>y?x:y; returnz;}函數(shù)的返回值通過return語句獲得函數(shù)中可有多個(gè)return語句注意返回值的類型函數(shù)返回值類型和return不一致怎么辦?以函數(shù)返回值類型為準(zhǔn)(轉(zhuǎn)換)函數(shù)沒有return也會(huì)有返回值但沒有意義不返回值就明確用void2425關(guān)于形參與實(shí)參的說明在定義函數(shù)中指定的形參,在未出現(xiàn)函數(shù)調(diào)用時(shí),不占內(nèi)存中的存儲(chǔ)單元。只有在發(fā)生函數(shù)調(diào)用時(shí),函數(shù)中的形參才被分配內(nèi)存單元。在調(diào)用結(jié)束后,形參所占的內(nèi)存單元也被釋放。實(shí)參可以是常量、變量或表達(dá)式,如:
max(3,a+b);
但要求它們有確定的值。在調(diào)用時(shí)將實(shí)參的值賦給形參。在被定義的函數(shù)中,必須指定形參的類型。實(shí)參與形參的類型應(yīng)相同或賦值兼容。26關(guān)于形參與實(shí)參的說明在C語言中,實(shí)參向?qū)π螀⒌臄?shù)據(jù)傳遞是“值傳遞”,單向傳遞,只由實(shí)參傳給形參,而不能由形參傳回來給實(shí)參。在內(nèi)存中,實(shí)參單元與形參單元是不同的單元。函數(shù)調(diào)用#include<stdio.h>voidmain(){floatadd(floatx,floaty);floata,b,c;
scanf(“%f,%f“,&a,&b);
c=add(a,b);printf(“sumis%f\n“,c);}floatadd(floatx,floaty)
{floatz;z=x+y;
return(z);}
27函數(shù)調(diào)用1.調(diào)用函數(shù)應(yīng)具備的條件
(1)被調(diào)用函數(shù)必須是已經(jīng)存在的庫函數(shù)或自定義函數(shù)。
(2)調(diào)用庫函數(shù)時(shí),應(yīng)在本程序文件開始,用#include使用命令將調(diào)用的庫函數(shù)信息包含到本程序文件中。
(3)調(diào)用自定義函數(shù),自定義函數(shù)與主調(diào)函數(shù)在同一文件中,應(yīng)主調(diào)函數(shù)的聲明部分對(duì)被調(diào)用函數(shù)作聲明。28函數(shù)調(diào)用—函數(shù)聲明及原型2.函數(shù)聲明作用:把被調(diào)用函數(shù)的名字、類型、形參的類型及數(shù)量順序通知編譯系統(tǒng),以便在調(diào)用該函數(shù)時(shí)進(jìn)行對(duì)照、檢查。聲明方式:使用函數(shù)原型。3.函數(shù)原型(1)形式:
函數(shù)類型函數(shù)名(參數(shù)類型1,參數(shù)類型2,...);
函數(shù)類型函數(shù)名(參數(shù)類型1參數(shù)名1,floatadd(float,float);floatadd(floatx,floaty);如果被調(diào)函數(shù)在出現(xiàn)在主調(diào)函數(shù)之前,可不必聲明。29函數(shù)調(diào)用—一般形式1.形式
函數(shù)名
(實(shí)參列表
)2.說明(1)實(shí)參常量:add(2,4)變量:add(x,y)表達(dá)式:add(x+2,y+1)(2)無參函數(shù)調(diào)用函數(shù)名()#include<stdio.h>voidmain(){floatadd(floatx,floaty);
floata,b,c;
scanf(“%f,%f”,&a,&b);
c=add(a,b);printf(“sumis%f\n“,c);}floatadd(floatx,floaty)
{floatz;z=x+y;
return(z);}
30函數(shù)調(diào)用—一般形式(3)實(shí)參與形參的對(duì)應(yīng)
數(shù)量順序類型(4)數(shù)據(jù)傳遞實(shí)參必須有確定值;將實(shí)參值傳遞給形參。#include<stdio.h>voidmain(){floatadd(floatx,floaty);
floata,b,c;
scanf(“%f,%f”,&a,&b);
c=sub(a,b);printf(“sumis%f\n”,c);}floatsub(floatx,floaty)
{floatz;z=x-y;
return(z);}
31函數(shù)調(diào)用—一般過程多函數(shù)程序的執(zhí)行過程1)從主函數(shù)開始執(zhí)行2)執(zhí)行函數(shù)調(diào)用時(shí)計(jì)算實(shí)參值;形實(shí)結(jié)合:給形參分配空間,將實(shí)參值存儲(chǔ)其中3)執(zhí)行被函數(shù)4)被調(diào)函數(shù)執(zhí)行結(jié)束時(shí),返回主調(diào)函數(shù);5)繼續(xù)執(zhí)行主調(diào)函數(shù)32函數(shù)調(diào)用—一般過程main()fun()返回①②④⑥⑦計(jì)算實(shí)參形實(shí)結(jié)合③返回到調(diào)用位置⑤調(diào)fun()結(jié)束33函數(shù)調(diào)用—一般過程實(shí)參求值順序自左至右自右至左如果按自左至右順序求實(shí)參的值,則函數(shù)調(diào)用相當(dāng)于f(2,2)。如果按自右至左順序求實(shí)參的值,則函數(shù)調(diào)用相當(dāng)于f(3,2)
。
對(duì)于函數(shù)調(diào)用inti=2,p;p=f(i,i++);34函數(shù)調(diào)用—一般過程#include<iostream.h>voidSwap(inta,intb){ intt; t=a; a=b; b=t;}voidmain(){ intx=5,y=10;
Swap(x,y); printf(“x=%d,y=%d”,x,y);}x5y10a
b
510t5105x=5y=10結(jié)論:實(shí)參向形參的數(shù)據(jù)傳遞是:
單向值傳遞35函數(shù)的調(diào)用—調(diào)用的方式1.函數(shù)語句把函數(shù)調(diào)用作為一個(gè)語句。如printstar(),這時(shí)不要求函數(shù)帶回值,只要求函數(shù)完成一定的操作。
要求:無返回值函數(shù)2.函數(shù)表達(dá)式函數(shù)出現(xiàn)在一個(gè)表達(dá)式中,這種表達(dá)式稱為函數(shù)表達(dá)式。
要求:有返回值函數(shù)。36函數(shù)的調(diào)用—嵌套調(diào)用嵌套調(diào)用函數(shù):在調(diào)用一個(gè)函數(shù)的過程中,又調(diào)用另一個(gè)函數(shù)。37函數(shù)的調(diào)用—嵌套調(diào)用例:輸入兩個(gè)整數(shù),求平方和。函數(shù)1:求一個(gè)數(shù)的平方。參數(shù):一個(gè)a。返回值:a2函數(shù)2:求兩個(gè)數(shù)的平方和。參數(shù):2個(gè)過程:調(diào)用函數(shù)1,求每個(gè)的平方值;返回值:兩個(gè)數(shù)的平方和。主函數(shù):讀入兩個(gè)數(shù),調(diào)用函數(shù)2,輸出兩個(gè)數(shù)的平方和。38函數(shù)的調(diào)用—嵌套調(diào)用#include<stdio.h>voidmain(){inta,b,c;intfun2(intx,inty);scanf(“%d%d”,&a,&b);c=fun2(a,b);printf(“%d",c);}intfun2(intx,inty){intfun1(intm);intc;c=fun1(x)+fun1(y);returnc;}intfun1(intm){return(m*m);}39函數(shù)的調(diào)用—遞歸調(diào)用函數(shù)的遞歸調(diào)用:在調(diào)用一個(gè)函數(shù)的過程中又出現(xiàn)直接或間接地調(diào)用該函數(shù)本身。例:求n!分析:計(jì)算n!的公式如下:intfun(intn){if(n<0)return-1;elseif(n==0)return1;elsereturnn*fun(n-1);}40函數(shù)的調(diào)用—遞歸調(diào)用遞歸過程的兩個(gè)階段:求4!遞推:
4!=4×3!→3!=3×2!
→
2!=2×1!
→1!=1×0!
→0!=1未知已知回歸:4!=4×3!=24←3!=3×2!=6←2!=2×1!=2←1!=1×0!=1←0!=1未知已知41函數(shù)的調(diào)用—遞歸調(diào)用例
:有5個(gè)人坐在一起,問第5個(gè)人多少歲?
他說比第4個(gè)人大2歲。問第4個(gè)人歲數(shù),他說比第3個(gè)人大2歲問第3個(gè)人,說比第2個(gè)人大2歲問第2個(gè)人,說比第1個(gè)人大2歲問第1個(gè)人,他說是10歲。請(qǐng)問第5個(gè)人多大?42可以用一個(gè)函數(shù)來描述上述遞歸過程:intage(intn)/*求年齡的遞歸函數(shù)*/{ intc;/*c用作存放函數(shù)的返回值的變量*/ if(n==1)c=10; elsec=age(n-1)+2; returnc;}用一個(gè)主函數(shù)調(diào)用age函數(shù),求得第5人的年齡。#include<stdio.h>voidmain(){ printf("%d",age(5));}遞歸形式遞歸終止條件修改遞歸條件函數(shù)的調(diào)用—遞歸調(diào)用可用遞歸求解的問題的特點(diǎn)
1)分支結(jié)構(gòu);
2)至少一個(gè)分支的值為確定值;
3)其它分支的求解過程與原問題相同,只是規(guī)模縮小。44Hanoi(漢諾)塔問題古代有一個(gè)梵塔,塔內(nèi)有3個(gè)座A、B、C,開始時(shí)A座上有64個(gè)盤子,盤子大小不等,大的在下,小的在上。有一個(gè)老和尚想把這64個(gè)盤子從A座移到C座,但每次只允許移動(dòng)一個(gè)盤,且在移動(dòng)過程中在3個(gè)座上都始終保持大盤在下,小盤在上。在移動(dòng)過程中可以利用B座,要求編程序打印出移動(dòng)的步驟。Hanoi(漢諾)塔問題將n個(gè)盤子從A座移到C座可以分解為以下3個(gè)步驟:(1)將A上n-1個(gè)盤借助C座先移到B座上。(2)把A座上剩下的一個(gè)盤移到C座上。(3)將n-1個(gè)盤從B座借助于A座移到C座上。(1)將A上n-1個(gè)盤借助C座先移到B座上ABC(1)將A上n-1個(gè)盤借助C座先移到B座上ABC(1)將A上n-1個(gè)盤借助C座先移到B座上ABC(1)將A上n-1個(gè)盤借助C座先移到B座上ABC(1)將A上n-1個(gè)盤借助C座先移到B座上ABC(2)把A座剩下的一個(gè)盤移到C座上ABC(2)把A座剩下的一個(gè)盤移到C座上ABC(3)將n-1個(gè)盤從B座借助于A座移到C座上ABC(3)將n-1個(gè)盤從B座借助于A座移到C座上ABC(3)將n-1個(gè)盤從B座借助于A座移到C座上ABC(3)將n-1個(gè)盤從B座借助于A座移到C座上ABC(3)將n-1個(gè)盤從B座借助于A座移到C座上ABCHanoi塔問題的解法分析步驟分類:(1)將n-1個(gè)盤從一個(gè)座移到另一個(gè)座上(n>1)。(2)將1個(gè)盤從一個(gè)座上移到另一座上。對(duì)應(yīng)程序:(1)voidhanoi(intn,charone,chartwo,charthree) /*將n個(gè)盤從one座借助two座,移到three座*/(2)voidmove(charx,chary)/*將盤子從x座移到y(tǒng)座*/Hanoi塔的C語言程序voidmove(charx,chary)/*將盤子從x座移到y(tǒng)座*/{ printf("%c-->%c\n",x,y);}voidhanoi(intn,charone,chartwo,charthree)/*將n個(gè)盤從one座借助two座,移到three座*/{ if(n==1)move(one,three);else{ hanoi(n-1,one,three,two); move(one,three); hanoi(n-1,two,one,three); }}Hanoi塔的C語言程序#include<stdio.h>voidmain(){ intm; printf("inputthenumberofdiskes:"); scanf("%d",&m); printf("Thesteptomoveing%ddiskes:\n",m); hanoi(m,'A','B','C');}全局變量和局部變量#include<stdio.h>inta,b;voidfun(){a=100;b=200;}voidmain(){inta=5,b=7;fun();printf("%d%d\n",a,b);}分析程序運(yùn)行結(jié)果全局變量局部變量62全局變量和局部變量局部變量在函數(shù)(復(fù)合語句)內(nèi)部定義的變量。全局變量在函數(shù)外部定義的變量。兩種變量的區(qū)別作用域不同(作用域:變量可以被使用的范圍)
全局變量:定義點(diǎn)至源程序文件結(jié)束。局部變量:定義點(diǎn)至本函數(shù)(復(fù)合語句)結(jié)束63全局變量和局部變量#include"stdio.h"voidmain(){inta,b;scanf("%d%d",&a,&b);if(a<b){intt;t=a;a=b;b=t;}printf("%d,%d\n",a,b);}#include<stdio.h>
inta,b;voidfun(){a=100;b=200;}voidmain(){inta=5,b=7;fun();printf("%d%d\n",a,b);}64全局變量和局部變量#include<iostream.h>intx=5,y=10;voidSwap(){ intt; t=x; x=y; y=t;}voidmain(){ Swap(); printf(“x=%d,y=%d”,x,y);}分析程序運(yùn)行結(jié)果65全局變量和局部變量關(guān)于局部變量(1)主函數(shù)中定義的變量(m,n)也只在主函數(shù)中有效,主函數(shù)不能使用其他函數(shù)中定義的變量。(4)不同函數(shù)中可以使用相同名字的變量,它們代表不同的對(duì)象,互不干擾。(2)形式參數(shù)也是局部變量。(3)在一個(gè)函數(shù)內(nèi)部,可以在復(fù)合語句中定義變量,這些變量只在本復(fù)合語句中有效,。66全局變量和局部變量關(guān)于全局變量全局變量可以在函數(shù)之間定義
作用域從聲明點(diǎn)開始至源文件尾結(jié)束(4)在不必要時(shí)不要使用全局變量:(2)全局變量可以與局部變量同名
作用域重疊時(shí),局部變量可見。(3)使用全局變量可以在不同的函數(shù)中傳遞數(shù)據(jù)。(5)全局變量定義時(shí),若不初始化,值為0.67重新認(rèn)識(shí)一下變量的定義變量定義格式:
[存儲(chǔ)類型]數(shù)據(jù)類型變量表;變量的存儲(chǔ)類型auto -----自動(dòng)型register-----寄存器型static ------靜態(tài)型extern-----外部型變量的存儲(chǔ)類別變量的存儲(chǔ)方式靜態(tài)存儲(chǔ)方式:在程序運(yùn)行期間由系統(tǒng)分配固定的存儲(chǔ)空間。
如:全局變量動(dòng)態(tài)存儲(chǔ)方式:在程序運(yùn)行期間根據(jù)需要進(jìn)行動(dòng)態(tài)的分配存儲(chǔ)空間。如:形式參數(shù)程序存儲(chǔ)空間的組成:程序區(qū):存儲(chǔ)程序靜態(tài)存儲(chǔ)區(qū):存儲(chǔ)靜態(tài)變量動(dòng)態(tài)存儲(chǔ)區(qū):存儲(chǔ)動(dòng)態(tài)變量69變量的存儲(chǔ)類別局部變量的存儲(chǔ)類別靜態(tài)局部變量:
使用static定義的變量
在靜態(tài)存儲(chǔ)區(qū)分配空間。自動(dòng)變量:
未用static定義的變量在動(dòng)態(tài)存儲(chǔ)區(qū)分配空間。寄存器變量:#include<stdio.h>intf(inta){autointb=0;
staticintc=3;b=b+1;c=c+1;return(a+b+c);}voidmain(){inta=2,i;for(i=0;i<3;i++)printf("%d",f(a));}70變量的存儲(chǔ)類別#include<stdio.h>voidmain(){
intfac(intn);inti;
for(i=1;i<=5;i++)
printf(“%d\n”,fac(i));}intfac(intn){
staticintf=1;
f=f*n;
return(f);
}分析程序運(yùn)行結(jié)果71變量的存儲(chǔ)類別關(guān)于靜態(tài)局部變量對(duì)靜態(tài)局部變量是在編譯時(shí)賦初值的,即只賦初值一次。如定義靜態(tài)局部變量時(shí)不賦初值,編譯時(shí)自動(dòng)賦初值0(或空格)。靜態(tài)局部變量在函數(shù)調(diào)用結(jié)束后仍然存在,但其他函數(shù)不能引用它的。72變量的存儲(chǔ)類別全局變量的存儲(chǔ)類別外部變量:
用extern聲明的全局變量。
用于擴(kuò)展全局變量的使用域靜態(tài)外部變量:用static聲明的全局變量。
用于限制全局變量的使用域#include<stdio.h>voidmain(){intmax(int,int);intc;
externA,B;c=max(A,B);printf("%d\n",c);}
intA=13,B=-8;
intmax(intx,inty){intz;z=x>y?x:y;return(z);}73在多個(gè)文件的程序中聲明外部變量文件file1.c中的內(nèi)容為:/*定義外部變量*/inta;intb;文件file2.c中的內(nèi)容為:#include<stdio.h>#include<stdlib.h>#include"file1.c"intmain(){ externa,b;a=1,b=2;printf("%d,%d\n",a,b);system("pause");}用static聲明外部變
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國(guó)工業(yè)制造RFID行業(yè)市場(chǎng)動(dòng)態(tài)分析、發(fā)展方向及投資前景分析報(bào)告
- 農(nóng)業(yè)氣候風(fēng)險(xiǎn)防控與應(yīng)對(duì)機(jī)制
- 低空經(jīng)濟(jì)飛行器管理與運(yùn)營(yíng)方案
- 大氣污染防治策略與路徑
- 初級(jí)社會(huì)工作實(shí)務(wù)-初級(jí)社會(huì)工作者考試《社會(huì)工作實(shí)務(wù)》點(diǎn)睛提分卷2
- 2018-2019學(xué)年高中一輪復(fù)習(xí)英語講義選修六Module4Music
- 員工績(jī)效工資獎(jiǎng)金發(fā)放方案
- 鴨腺病毒3型基因組序列分析及致病性研究
- 九年級(jí)數(shù)學(xué)上冊(cè)專題訓(xùn)練八平面圖形的運(yùn)動(dòng)及不規(guī)則圖形面積問題課時(shí)精講新版新人教版
- 中介轉(zhuǎn)讓店鋪合同范例
- 2024年高等教育法學(xué)類自考-00227公司法歷年考試高頻考點(diǎn)試題附帶答案
- 《乳腺癌的防治》課件
- 個(gè)人所得稅個(gè)人所得稅
- 孤獨(dú)癥兒童早期干預(yù)操作手冊(cè)
- (完整文本版)河南2016定額計(jì)算規(guī)則
- 《小貓的九個(gè)命》
- 大班健康《愛是什么》課件
- 特種作業(yè)(鍋爐工)安全培訓(xùn)
- 鋼梁現(xiàn)場(chǎng)安裝檢驗(yàn)批質(zhì)量檢驗(yàn)記錄
- 學(xué)歷(學(xué)位)更改呈報(bào)審批表
- (完整word版)中醫(yī)病證診斷療效標(biāo)準(zhǔn)
評(píng)論
0/150
提交評(píng)論