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

下載本文檔

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

文檔簡介

數(shù)據(jù)運(yùn)算符語句函數(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)算符語句函數(shù)程序文件從變量的作用域和生存期來考慮內(nèi)部變量和外部變量內(nèi)部變量:即局部變量,只能被所在的函數(shù)訪問

外部變量:即全局變量,程序中的所有函數(shù)均可訪問。作用域:指從變量的使用范圍(空間角度)來考慮:生存期:從變量值存在的時(shí)間角度考慮:內(nèi)部變量一般具有動態(tài)的生存期,即:內(nèi)部變量通常是在程序運(yùn)行期間根據(jù)需要?jiǎng)討B(tài)分配內(nèi)存空間,隨著函數(shù)的調(diào)用完成,內(nèi)部變量也會被釋放。外部變量一般具有靜態(tài)(全局)的生存期,即:外部變量在程序運(yùn)行期間分配固定的存儲空間,直到程序結(jié)束才會釋放。幾點(diǎn)說明: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)為其分配各自的存儲空間,它們互不相干。如:(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語言函數(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語言變量的存儲類型決定了該變量的作用域和生存期。6.6變量的存儲類型在叫法上是這樣的,例如:

autointx;稱變量x為自動存儲類型的變量,簡稱自動變量。

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

C語言有四種存儲類型,即:

auto自動型。

extern外部型或全局型。

static靜態(tài)型。

register寄存器型。自動型變量的定義格式

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

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

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

doublex,y;//外部變量。

example(){

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

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

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

intx,y;example(){y=x+1;...}intx,y;main(){...}//變量x,y在一個(gè)源文件中間定義。//外部變量xy,在其定義之前的函數(shù)中使用它,應(yīng)該用extern進(jìn)行說明。說明時(shí)類型名可以省略,即externx,y;注意:變量的聲明和定義是不同的。聲明是指出變量的特征(長度、類型等),并不分配存儲空間,而定義要分配存儲空間。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中對變量x,y用externintx,y進(jìn)行說明。有了這個(gè)說明后,filename2.c中的各函數(shù)都可以使用外部變量x,y。3)在含有多個(gè)文件的程序中,一個(gè)源文件中定義的外部變量,可以在另一個(gè)源文件中引用,但必須用extern進(jìn)行說明。說明的方法如下:例:

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對寄存器中數(shù)據(jù)的讀寫操作速度要遠(yuǎn)遠(yuǎn)快于對內(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)識符;靜態(tài)變量分內(nèi)部靜態(tài)變量和外部靜態(tài)變量兩種。作用域(局部):局限在函數(shù)內(nèi),在函數(shù)之外不能使用.生存期(全局):

它的生存期是整個(gè)程序的執(zhí)行過程,內(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í),會自動賦初值0。因此,也可以寫成:staticfloatz;

內(nèi)部靜態(tài)變量的性質(zhì):可見:靜態(tài)類型延長了內(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ù)隱藏起來的一種手段,使得外部文件不能訪問它們,也使不同源文件的同名外部變量不會沖突。作用域:是定義它的源文件。生存期:是程序的整個(gè)執(zhí)行過程。外部靜態(tài)變量在運(yùn)行時(shí),所分配的存儲空間在整個(gè)程序執(zhí)行過程中都?xì)w該變量所有,直到程序執(zhí)行結(jié)束時(shí)才釋放。不同源文件中外部靜態(tài)變量可以同名,各文件的外部靜態(tài)變量有其自己的存儲空間,同名變量不會沖突。外部靜態(tài)變量的性質(zhì)可見:靜態(tài)類型限制了外部變量作用域的延伸。*6.7函數(shù)的存儲類型——內(nèi)部函數(shù)和外部函數(shù)(自學(xué))對于函數(shù)來說,由于函數(shù)的定義總是在其它函數(shù)之外,所以,從本質(zhì)上講函數(shù)的存儲類型都是外部的,具有全局的生存期。但函數(shù)也可以通過static和extern的使用來限制或擴(kuò)充其作用域。靜態(tài)函數(shù)、外部函數(shù)的使用場合:

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

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

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

extern[數(shù)據(jù)類型標(biāo)識符]函數(shù)名();靜態(tài)函數(shù)局限于它所在的源文件,即對它所在源文件中的各函數(shù)是可見的,而對別的源文件中的函數(shù)是不可見的(即不能引用)。所以不同源文件中的內(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ì)就是將原來的問題分解為新的問題,而解決新問題時(shí)又用到了原有問題的解法。按照這一原則分解下去,每次出現(xiàn)的新問題都是原有問題的簡化的子問題,而最終分解出來的問題,是一個(gè)已知解的問題。這就是有限的遞歸調(diào)用。只有有限的遞歸調(diào)用才是有意義的,無限的遞回調(diào)用永遠(yuǎn)得不到解,沒有實(shí)際意義。漢諾塔問題 假設(shè)三個(gè)塔,第一個(gè)塔上有從小到大堆積的一疊金屬片,一次從一個(gè)塔搬運(yùn)一片到另一個(gè)塔,只能從塔頂搬運(yùn),不允許大的金屬片壓在小的金屬片上,求解將金屬片全部搬運(yùn)到第三個(gè)塔上的過程及搬運(yùn)次數(shù)遞歸解決遞歸形式:hannoi(int

n,int

a,int

b,intc)

n:片數(shù)

a:起點(diǎn)塔號,b:中間塔號,c:目標(biā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語言是由一個(gè)或多個(gè)函數(shù)組成,一定有一個(gè)主函數(shù)。每個(gè)函數(shù)都是相互獨(dú)立、功能單一的模塊。因此,C語言是一種模塊化程序設(shè)計(jì)語言。函數(shù)有用戶自定義函數(shù)和標(biāo)準(zhǔn)庫函數(shù)。標(biāo)準(zhǔn)庫函數(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ù)的目的是使其對其它源文件不可見。(3)程序調(diào)用函數(shù)的執(zhí)行過程。(7)C語言變量的存儲類型。(5)函數(shù)間的通訊方式。(6)函數(shù)間傳遞數(shù)組的方法。*(4)函數(shù)的遞歸調(diào)用。第9周上機(jī):程序設(shè)計(jì)綜合應(yīng)用練習(xí)

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論