文庫(kù)發(fā)布:函數(shù)_第1頁(yè)
文庫(kù)發(fā)布:函數(shù)_第2頁(yè)
文庫(kù)發(fā)布:函數(shù)_第3頁(yè)
文庫(kù)發(fā)布:函數(shù)_第4頁(yè)
文庫(kù)發(fā)布:函數(shù)_第5頁(yè)
已閱讀5頁(yè),還剩22頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

數(shù)據(jù)運(yùn)算符語(yǔ)句函數(shù)程序變量是程序中最活躍的元素,因?yàn)樗淼氖歉鞣N類型的數(shù)據(jù)。變量在程序中所處的位置內(nèi)部變量:在某個(gè)函數(shù)內(nèi)部定義的變量,(包括自定義函數(shù)的參數(shù))外部變量:在所有函數(shù)外部定義的變量foaltResult;//外部變量main(){floatx,y;//內(nèi)部變量

printf(“Enterxandy:”);

scanf(“%f%f”,&x,&y);plus(x,y);

printf(“\nx+y=%f”,Result);}plus(floatx,floaty);{

Result=x+y;}數(shù)據(jù)運(yùn)算符語(yǔ)句函數(shù)程序文件從變量的作用域和生存期來(lái)考慮內(nèi)部變量和外部變量?jī)?nèi)部變量:即局部變量,只能被所在的函數(shù)訪問(wèn)

外部變量:即全局變量,程序中的所有函數(shù)均可訪問(wèn)。作用域:指從變量的使用范圍(空間角度)來(lái)考慮:生存期:從變量值存在的時(shí)間角度考慮:內(nèi)部變量一般具有動(dòng)態(tài)的生存期,即:內(nèi)部變量通常是在程序運(yùn)行期間根據(jù)需要?jiǎng)討B(tài)分配內(nèi)存空間,隨著函數(shù)的調(diào)用完成,內(nèi)部變量也會(huì)被釋放。外部變量一般具有靜態(tài)(全局)的生存期,即:外部變量在程序運(yùn)行期間分配固定的存儲(chǔ)空間,直到程序結(jié)束才會(huì)釋放。幾點(diǎn)說(shuō)明:other(){intk=100;

intx=200;inty=300;

printf(“other\n”);

printf(“k=%dx=%dy=%d\n",k,x,y);}maink=1x=10y=20otherk=100x=200y=300maink=1x=10y=20main(){intk=1;intx=10;inty=20;

printf("\nmain\n");

printf(“k=%dx=%dy=%d\n",k,x,y);other();

printf(“main\n”);

printf(“k=%dx=%dy=%d\n",k,x,y);}(1)不同的函數(shù)內(nèi)部定義的變量可以重名(如本例中的k、x、y),它們的名字雖然相同,但它們是相互獨(dú)立的,系統(tǒng)為其分配各自的存儲(chǔ)空間,它們互不相干。如:(2)可以利用全局變量傳遞數(shù)據(jù)foaltResult;main(){floatx,y;

printf(“Enterxandy:”);

scanf(“%f%f”,&x,&y);plus(x,y);

printf(“\nx+y=%f”,Result);}plus(floatx,floaty);{

Result=x+y;}Result用它存放變量x和變量y之和。plus函數(shù)中的變量x、y是局部變量,僅在函數(shù)體內(nèi)有效。result是全局變量,其值在全局范圍有效,起到了在主函數(shù)和子函數(shù)間通信的作用。

C語(yǔ)言函數(shù)間數(shù)據(jù)的傳遞有如下方法:

參數(shù)傳遞方式(傳值和傳址)

函數(shù)返回值:

全局變量:(特別:函數(shù)需要多個(gè)返回值時(shí))

文件建議有節(jié)制的使用全局變量?。?)當(dāng)局部變量與全局變量同名時(shí),局部(內(nèi)部)變量將屏蔽全局(外部)變量

如:mainx=1y=2z=3otherx=100y=200z=0intx=0,y=0,z=0;other(){intx=100,y=200;

printf("other\n");

printf("x=%dy=%dz=%d\n",x,y,z);}main(){intx=1,y=2,z=3;

printf("\nmain\n");

printf("x=%dy=%dz=%d\n",x,y,z);other();}//x、y、z外部變量。//x、y內(nèi)部變量。//x、y、z內(nèi)部變量。

C語(yǔ)言變量的存儲(chǔ)類型決定了該變量的作用域和生存期。6.6變量的存儲(chǔ)類型在叫法上是這樣的,例如:

autointx;稱變量x為自動(dòng)存儲(chǔ)類型的變量,簡(jiǎn)稱自動(dòng)變量。

staticfloaty;稱變量y為靜態(tài)存儲(chǔ)類型的變量,簡(jiǎn)稱靜態(tài)變量

C語(yǔ)言有四種存儲(chǔ)類型,即:

auto自動(dòng)型。

extern外部型或全局型。

static靜態(tài)型。

register寄存器型。自動(dòng)型變量的定義格式

[auto]數(shù)據(jù)類型標(biāo)識(shí)符變量名; 其中,auto可以省略。性質(zhì):

1、其作用范圍限于函數(shù)所在的花括號(hào)“{}”內(nèi)。

2、其生存期是在執(zhí)行所屬的函數(shù)這段時(shí)間區(qū)間。 程序?yàn)槠浞峙涞拇鎯?chǔ)空間,一旦出了其作用域,其存儲(chǔ)空間就釋放1、自動(dòng)型變量(auto型)自動(dòng)型變量就是在函數(shù)內(nèi)部定義的變量,也就是局部變量。自動(dòng)型變量是局部的動(dòng)態(tài)變量。例如:

doublex,y;//外部變量。

example(){

inta,b;//內(nèi)部變量(自動(dòng)變量或局部變量)

charc;doublez;...}2、外部型變量外部型變量就是在函數(shù)之外定義的變量。作用域:是整個(gè)程序。生存期:是全局的。是整個(gè)程序的執(zhí)行過(guò)程。

外部型變量的性質(zhì):外部型變量是全局的靜態(tài)變量intx,y,z;fun1(){...z=x+y;}fun2(){...z=x-y;}main(){...z=x/y;}1)如果外部變量是在源文件中各個(gè)函數(shù)之前定義,則該源文件中的各函數(shù)都可以使用它,不需額外說(shuō)明。幾點(diǎn)注意:extern

intx,y;example(){y=x+1;...}intx,y;main(){...}//變量x,y在一個(gè)源文件中間定義。//外部變量xy,在其定義之前的函數(shù)中使用它,應(yīng)該用extern進(jìn)行說(shuō)明。說(shuō)明時(shí)類型名可以省略,即externx,y;注意:變量的聲明和定義是不同的。聲明是指出變量的特征(長(zhǎng)度、類型等),并不分配存儲(chǔ)空間,而定義要分配存儲(chǔ)空間。2)如果外部變量是在一個(gè)源文件中間定義,則在其定義之前的函數(shù)中使用它時(shí),應(yīng)該用extern進(jìn)行聲明,聲明可以在函數(shù)之外,也可以在函數(shù)之內(nèi)進(jìn)行,其格式為:extern

intx,y;f1(){y=x*x+1;....}f2(){...

printf(%d%d”,x,y);...}intx,y;main(){...}fun(){...}filename1.cfilename2.c//定義外部變量x,y。//x,y是文件filename1.c中定義的變量。在文件filename2.c中使用變量x,y,在引用前必須在文件filename2.c中對(duì)變量x,y用externintx,y進(jìn)行說(shuō)明。有了這個(gè)說(shuō)明后,filename2.c中的各函數(shù)都可以使用外部變量x,y。3)在含有多個(gè)文件的程序中,一個(gè)源文件中定義的外部變量,可以在另一個(gè)源文件中引用,但必須用extern進(jìn)行說(shuō)明。說(shuō)明的方法如下:例:

main(){register

inti,sum;for(i=1,sum=0;i<=100;i++)sum=sum+i;

printf(“sum=%d”,sum);}優(yōu)點(diǎn):數(shù)據(jù)操作速度快。CPU對(duì)寄存器中數(shù)據(jù)的讀寫操作速度要遠(yuǎn)遠(yuǎn)快于對(duì)內(nèi)存中數(shù)據(jù)的讀寫操作速度。

3、寄存器型變量(register型)

寄存器變量是把變量的數(shù)據(jù)存放在計(jì)算機(jī)CPU的寄存器中的變量。(1)內(nèi)部靜態(tài)變量:即在函數(shù)內(nèi)部定義的靜態(tài)變量。例如:staticcharbuf[1024];staticintm,p;4、靜態(tài)型變量(static型)

static類型的變量將具有靜態(tài)(全局)的生存期。

定義格式static數(shù)據(jù)類型標(biāo)識(shí)符;靜態(tài)變量分內(nèi)部靜態(tài)變量和外部靜態(tài)變量?jī)煞N。作用域(局部):局限在函數(shù)內(nèi),在函數(shù)之外不能使用.生存期(全局):

它的生存期是整個(gè)程序的執(zhí)行過(guò)程,內(nèi)部靜態(tài)變量的數(shù)據(jù)在函數(shù)的調(diào)用結(jié)束時(shí)并不消失,下次調(diào)用時(shí)可繼續(xù)使用原保留值。例如:

floatadd(floatx,floaty){staticfloatz=0;z=z+x+y;return(z);}main(){floats,x=2,y=3;s=add(x,y);s=add(x,y);}//變量

z在函數(shù)結(jié)束時(shí),并不釋放,保留原值。//S=5//S=10//static型變量在程序編譯時(shí),會(huì)自動(dòng)賦初值0。因此,也可以寫成:staticfloatz;

內(nèi)部靜態(tài)變量的性質(zhì):可見(jiàn):靜態(tài)類型延長(zhǎng)了內(nèi)部變量的生存期。例如:static

inti,j;example(){intn,m;staticfloatx,y;..}//i,j是外部靜態(tài)變量。//x,y是內(nèi)部靜態(tài)變量。(2)外部靜態(tài)變量外部靜態(tài)變量在函數(shù)外部定義。file1staticintx,y;main(){...}fun(){...}file2staticintx,y;fun1(){...}fun2(){...}文件file1和文件file2中的同名外部靜態(tài)變量x,y互不干擾。外部靜態(tài)變量提供了把數(shù)據(jù)隱藏起來(lái)的一種手段,使得外部文件不能訪問(wèn)它們,也使不同源文件的同名外部變量不會(huì)沖突。作用域:是定義它的源文件。生存期:是程序的整個(gè)執(zhí)行過(guò)程。外部靜態(tài)變量在運(yùn)行時(shí),所分配的存儲(chǔ)空間在整個(gè)程序執(zhí)行過(guò)程中都?xì)w該變量所有,直到程序執(zhí)行結(jié)束時(shí)才釋放。不同源文件中外部靜態(tài)變量可以同名,各文件的外部靜態(tài)變量有其自己的存儲(chǔ)空間,同名變量不會(huì)沖突。外部靜態(tài)變量的性質(zhì)可見(jiàn):靜態(tài)類型限制了外部變量作用域的延伸。*6.7函數(shù)的存儲(chǔ)類型——內(nèi)部函數(shù)和外部函數(shù)(自學(xué))對(duì)于函數(shù)來(lái)說(shuō),由于函數(shù)的定義總是在其它函數(shù)之外,所以,從本質(zhì)上講函數(shù)的存儲(chǔ)類型都是外部的,具有全局的生存期。但函數(shù)也可以通過(guò)static和extern的使用來(lái)限制或擴(kuò)充其作用域。靜態(tài)函數(shù)、外部函數(shù)的使用場(chǎng)合:

靜態(tài)函數(shù)說(shuō)明格式:

static[數(shù)據(jù)類型標(biāo)識(shí)符]函數(shù)名();

外部函數(shù)說(shuō)明格式:一個(gè)函數(shù)若在別的源文件中引用它,需加如下說(shuō)明:

extern[數(shù)據(jù)類型標(biāo)識(shí)符]函數(shù)名();靜態(tài)函數(shù)局限于它所在的源文件,即對(duì)它所在源文件中的各函數(shù)是可見(jiàn)的,而對(duì)別的源文件中的函數(shù)是不可見(jiàn)的(即不能引用)。所以不同源文件中的內(nèi)部函數(shù)可重名。外部函數(shù)的作用域是整個(gè)程序,因此在該作用域內(nèi)的任何其它函數(shù)都可引用。*6.8函數(shù)的遞歸調(diào)用P171函數(shù)直接或間接地調(diào)用自身稱為遞歸調(diào)用。例:計(jì)算n!intFN(intn){ if(n<=1) return1; returnn*FN(n-1);}

main(){intn;floaty;

printf("inputainteagernumber:\n");

scanf("%d",&n);ifn<0printf(“DataError!”)y=FN(n);

printf("%d!=%ld\n",n,y);

getch();} n!=n*(n-1)!以計(jì)算3!為例,調(diào)用a=FN(3);a=FN(3);n為3if(n<=1)return1;returnn*FN(n-1);n為2if(n<=1)return1;returnn*FN(n-1);n為1if(n<=1)return1;returnn*FN(n-1);返回1返回2(2*1)返回6(3*2)遞歸三要素:遞歸形式:FN(n)遞歸規(guī)則:n*(n-1)!遞歸終結(jié)條件:n=1intFN(intn){ if(n<=1) return1;

return

n*FN(n-1);}遞歸調(diào)用的實(shí)質(zhì)就是將原來(lái)的問(wèn)題分解為新的問(wèn)題,而解決新問(wèn)題時(shí)又用到了原有問(wèn)題的解法。按照這一原則分解下去,每次出現(xiàn)的新問(wèn)題都是原有問(wèn)題的簡(jiǎn)化的子問(wèn)題,而最終分解出來(lái)的問(wèn)題,是一個(gè)已知解的問(wèn)題。這就是有限的遞歸調(diào)用。只有有限的遞歸調(diào)用才是有意義的,無(wú)限的遞回調(diào)用永遠(yuǎn)得不到解,沒(méi)有實(shí)際意義。漢諾塔問(wèn)題 假設(shè)三個(gè)塔,第一個(gè)塔上有從小到大堆積的一疊金屬片,一次從一個(gè)塔搬運(yùn)一片到另一個(gè)塔,只能從塔頂搬運(yùn),不允許大的金屬片壓在小的金屬片上,求解將金屬片全部搬運(yùn)到第三個(gè)塔上的過(guò)程及搬運(yùn)次數(shù)遞歸解決遞歸形式:hannoi(int

n,int

a,int

b,intc)

n:片數(shù)

a:起點(diǎn)塔號(hào),b:中間塔號(hào),c:目標(biāo)塔號(hào)遞歸規(guī)則:

先將n-1片搬運(yùn)到中間塔上;

將最后一片搬運(yùn)到目標(biāo)塔上;

將n-1片從中間塔上搬運(yùn)到目標(biāo)塔上;遞歸終結(jié)條件:

當(dāng)n=1時(shí),直接搬運(yùn);程序代碼#include<stdio.h>voidhanoi(int

n,int

a,int

b,intc){ if(n==1){

printf("Movechip%dfromtower%dtotower%d\n",n,a,c); } else {

hanoi(n-1,a,c,b);

printf("Movechip%dfromtower%dtotower%d\n",n,a,c);

hanoi(n-1,b,a,c); }}main(){

intn;

printf(“HanoiProblem:\nPleaseinputthenumberofdiskes:");

scanf("%d",&n);

hanoi(n,1,2,3); return0;}(1)C語(yǔ)言是由一個(gè)或多個(gè)函數(shù)組成,一定有一個(gè)主函數(shù)。每個(gè)函數(shù)都是相互獨(dú)立、功能單一的模塊。因此,C語(yǔ)言是一種模塊化程序設(shè)計(jì)語(yǔ)言。函數(shù)有用戶自定義函數(shù)和標(biāo)準(zhǔn)庫(kù)函數(shù)。標(biāo)準(zhǔn)庫(kù)函數(shù)由系統(tǒng)提供。函數(shù)小結(jié)(2)函數(shù)的定義格式(參數(shù))、引用和返回值。*(8)函數(shù)有外部函數(shù)和靜態(tài)函數(shù)。外部函數(shù)的作用范圍是整個(gè)程序。靜態(tài)函數(shù)的作用范圍是其定義所在的源文件,即局部于源文件,因此也稱其為內(nèi)部函數(shù)。定義內(nèi)部函數(shù)的目的是使其對(duì)其它源文件不可見(jiàn)。(3)程序調(diào)用函數(shù)的執(zhí)行過(guò)程。(7)C語(yǔ)言變量的存儲(chǔ)類型。(5)函數(shù)間的通訊方式。(6)函數(shù)間傳遞數(shù)組的方法。*(4)函數(shù)的遞歸調(diào)用。第9周上機(jī):程序設(shè)計(jì)綜合應(yīng)用練習(xí)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論