2023學(xué)年完整公開(kāi)課版C語(yǔ)言第七課_第1頁(yè)
2023學(xué)年完整公開(kāi)課版C語(yǔ)言第七課_第2頁(yè)
2023學(xué)年完整公開(kāi)課版C語(yǔ)言第七課_第3頁(yè)
2023學(xué)年完整公開(kāi)課版C語(yǔ)言第七課_第4頁(yè)
2023學(xué)年完整公開(kāi)課版C語(yǔ)言第七課_第5頁(yè)
已閱讀5頁(yè),還剩6頁(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)介

第7章函數(shù)7.1函數(shù)的定義與調(diào)用

(1)無(wú)參函數(shù)的一般形式

函數(shù)類型函數(shù)名(void){說(shuō)明語(yǔ)句部分;可執(zhí)行語(yǔ)句部分;

}注意:在舊標(biāo)準(zhǔn)中,函數(shù)可以缺省參數(shù)表。但在新標(biāo)準(zhǔn)中,函數(shù)不可缺省參數(shù)表;如果不需要參數(shù),則用“void”表示,主函數(shù)main()例外。(2)有參函數(shù)的一般形式函數(shù)類型函數(shù)名(數(shù)據(jù)類型參數(shù)[,數(shù)據(jù)類型參數(shù)2……]){說(shuō)明語(yǔ)句部分;可執(zhí)行語(yǔ)句部分;

}有參函數(shù)比無(wú)參函數(shù)多了一個(gè)參數(shù)表。調(diào)用有參函數(shù)時(shí),調(diào)用函數(shù)將賦予這些參數(shù)實(shí)際的值。為了與調(diào)用函數(shù)提供的實(shí)際參數(shù)區(qū)別開(kāi),將函數(shù)定義中的參數(shù)表稱為形式參數(shù)表,簡(jiǎn)稱形參表。[案例7.1]定義一個(gè)函數(shù),用于求兩個(gè)數(shù)中的大數(shù)。/*功能:定義一個(gè)求較大數(shù)的函數(shù)并在主函數(shù)中調(diào)用*/intmax(intn1,intn2) /*定義一個(gè)函數(shù)max()*/{return(n1>n2?n1:n2);

}main(){intmax(intn1,intn2); /*函數(shù)說(shuō)明*/intnum1,num2;

printf("inputtwonumbers:\n");

scanf("%d%d",&num1,&num2);printf("max=%d\n",max(num1,num2));getch(); /*使程序暫停,按任一鍵繼續(xù)*/}(1)函數(shù)定義不允許嵌套。在C語(yǔ)言中,所有函數(shù)(包括主函數(shù)main())都是平行的。一個(gè)函數(shù)的定義,可以放在程序中的任意位置,主函數(shù)main()之前或之后。但在一個(gè)函數(shù)的函數(shù)體內(nèi),不能再定義另一個(gè)函數(shù),即不能嵌套定義。(2)空函數(shù)──既無(wú)參數(shù)、函數(shù)體又為空的函數(shù)。其一般形式為:[函數(shù)類型]函數(shù)名(void){}7.2函數(shù)的嵌套調(diào)用和遞歸調(diào)用1.函數(shù)的嵌套調(diào)用

函數(shù)的嵌套調(diào)用是指,在執(zhí)行被調(diào)用函數(shù)時(shí),被調(diào)用函數(shù)又調(diào)用了其它函數(shù)。這與其它語(yǔ)言的子程序嵌套調(diào)用的情形是類似的,其關(guān)系可表示如圖7-1[案例7.4]計(jì)算s=1k+2k+3k+……+Nk

/*功能:函數(shù)的嵌套調(diào)用*/#defineK4#defineN5longf1(intn,intk) /*計(jì)算n的k次方*/{longpower=n;inti;for(i=1;i<k;i++)power*=n;returnpower;}longf2(intn,intk) /*計(jì)算1到n的k次方之累加和*/{longsum=0;inti;for(i=1;i<=n;i++)sum+=f1(i,k);returnsum;}main(){printf("Sumof%dpowersofintegersfrom1to%d=",K,N);printf("%d\n",f2(N,K));getch();}2.函數(shù)的遞歸調(diào)用函數(shù)的遞歸調(diào)用是指,一個(gè)函數(shù)在它的函數(shù)體內(nèi),直接或間接地調(diào)用它自身。C語(yǔ)言允許函數(shù)的遞歸調(diào)用。在遞歸調(diào)用中,調(diào)用函數(shù)又是被調(diào)用函數(shù),執(zhí)行遞歸函數(shù)將反復(fù)調(diào)用其自身。每調(diào)用一次就進(jìn)入新的一層。[案例7.5]用遞歸法計(jì)算n!。/*功能:通過(guò)函數(shù)的遞歸調(diào)用計(jì)算階乘*/longpower(intn){longf;if(n>1)f=power(n-1)*n;elsef=1;return(f);}main(){intn;longy;printf("inputainteagernumber:\n");scanf("%d",&n);y=power(n);printf("%d!=%ld\n",n,y);getch();} 為了防止遞歸調(diào)用無(wú)終止地進(jìn)行,必須在函數(shù)內(nèi)有終止遞歸調(diào)用的手段。常用的辦法是加條件判斷,滿足某種條件后就不再作遞歸調(diào)用,然后逐層返回。7.3數(shù)組作為函數(shù)參數(shù)數(shù)組用作函數(shù)參數(shù)有兩種形式:一種是把數(shù)組元素(又稱下標(biāo)變量)作為實(shí)參使用;另一種是把數(shù)組名作為函數(shù)的形參和實(shí)參使用。

1數(shù)組元素作為函數(shù)參數(shù)[案例7.6]寫(xiě)一函數(shù),統(tǒng)計(jì)字符串中字母的個(gè)數(shù)。/*功能:數(shù)組元素作為函數(shù)實(shí)參*/intisalp(charc){if(c>='a'&&c<='z'||c>='A'&&c<='Z')return(1);elsereturn(0);}main(){inti,num=0;

charstr[255]; printf("Inputastring:"); gets(str); for(i=0;str[i]!='\0';i++) if(isalp(str[i]))num++; puts(str); printf("num=%d\n",num); getch();1)用數(shù)組元素作實(shí)參時(shí),只要數(shù)組類型和函數(shù)的形參類型一致即可,并不要求函數(shù)的形參也是下標(biāo)變量。換句話說(shuō),對(duì)數(shù)組元素的處理是按普通變量對(duì)待的。(2)在普通變量或下標(biāo)變量作函數(shù)參數(shù)時(shí),形參變量和實(shí)參變量是由編譯系統(tǒng)分配的兩個(gè)不同的內(nèi)存單元。在函數(shù)調(diào)用時(shí)發(fā)生的值傳送,是把實(shí)參變量的值賦予形參變量。7.4內(nèi)部變量與外部變量

C語(yǔ)言中所有的變量都有自己的作用域。變量說(shuō)明的位置不同,其作用域也不同,據(jù)此將C語(yǔ)言中的變量分為內(nèi)部變量和外部變量。1.內(nèi)部變量在一個(gè)函數(shù)內(nèi)部說(shuō)明的變量是內(nèi)部變量,它只在該函數(shù)范圍內(nèi)有效。也就是說(shuō),只有在包含變量說(shuō)明的函數(shù)內(nèi)部,才能使用被說(shuō)明的變量,在此函數(shù)之外就不能使用這些變量了。所以內(nèi)部變量也稱“局部變量”。例如:intf1(inta)/*函數(shù)f1*/{intb,c;

……} /*a,b,c作用域:僅限于函數(shù)f1()中*/

intf2(intx)/*函數(shù)f2*/{inty,z;

……} /*x,y,z作用域:僅限于函數(shù)f2()中*/main(){intm,n;

……} /*m,n作用域:僅限于函數(shù)main()中*/說(shuō)明以下幾點(diǎn):1.主函數(shù)main()中定義的內(nèi)部變量,也只能在主函數(shù)中使用,其它函數(shù)不能使用。同時(shí),主函數(shù)中也不能使用其它函數(shù)中定義的內(nèi)部變量。因?yàn)橹骱瘮?shù)也是一個(gè)函數(shù),與其它函數(shù)是平行關(guān)系。這一點(diǎn)是與其它語(yǔ)言不同的,應(yīng)予以注意。2.形參變量也是內(nèi)部變量,屬于被調(diào)用函數(shù);實(shí)參變量,則是調(diào)用函數(shù)的內(nèi)部變量。3.允許在不同的函數(shù)中使用相同的變量名,它們代表不同的對(duì)象,分配不同的單元,互不干擾,也不會(huì)發(fā)生混淆。4.在復(fù)合語(yǔ)句中也可定義變量,其作用域只在復(fù)合語(yǔ)句范圍內(nèi)。2.外部變量:在函數(shù)外部定義的變量稱為外部變量。以此類推,在函數(shù)外部定義的數(shù)組就稱為外部數(shù)組。外部變量不屬于任何一個(gè)函數(shù),其作用域是:從外部變量的定義位置開(kāi)始,到本文件結(jié)束為止。外部變量可被作用域內(nèi)的所有函數(shù)直接引用,所以外部變量又稱全局變量。

[案例7.9]輸入長(zhǎng)方體的長(zhǎng)(l)、寬(w)、高(h),求長(zhǎng)方體體積及正、側(cè)、頂三個(gè)面的面積。/*功能:利用全局變量計(jì)算長(zhǎng)方體的體積及三個(gè)面的面積*/ints1,s2,s3;intvs(inta,intb,intc){intv; v=a*b*c;s1=a*b;s2=b*c;s3=a*c; returnv;}main(){intv,l,w,h;clrscr();printf("\ninputlength,widthandheight:");scanf("%d%d%d",&l,&w,&h);v=vs(l,w,h);printf("v=%ds1=%ds2=%ds3=%d\n",v,s1,s2,s3);getch();} 對(duì)于全局變量還有以下幾點(diǎn)說(shuō)明:(1)外部變量可加強(qiáng)函數(shù)模塊之間的數(shù)據(jù)聯(lián)系,但又使這些函數(shù)依賴這些外部變量,因而使得這些函數(shù)的獨(dú)立性降低。從模塊化程序設(shè)計(jì)的觀點(diǎn)來(lái)看這是不利的,因此不是非用不可時(shí),不要使用外部變量。(2)在同一源文件中,允許外部變量和內(nèi)部變量同名。在內(nèi)部變量的作用域內(nèi),外部變量將被屏蔽而不起作用。(3)外部變量的作用域是從定義點(diǎn)到本文件結(jié)束。如果定義點(diǎn)之前的函數(shù)需要引用這些外部變量時(shí),需要在函數(shù)內(nèi)對(duì)被引用的外部變量進(jìn)行說(shuō)明。外部變量說(shuō)明的一般形式為:extern數(shù)據(jù)類型外部變量[,外部變量2……];注意:外部變量的定義和外部變量的說(shuō)明是兩回事。外部變量的定義,必須在所有的函數(shù)之外,且只能定義一次。而外部變量的說(shuō)明,出現(xiàn)在要使用該外部變量的函數(shù)內(nèi),而且可以出現(xiàn)多次。[案例7.10]外部變量的定義與說(shuō)明。intvs(intxl,intxw){externintxh;/*外部變量xh的說(shuō)明*/intv;

v=xl*xw*xh;/*直接使用外部變量xh的值*/returnv;

}main(){externintxw,xh;/*外部變量的說(shuō)明*/intxl=5;/*內(nèi)部變量的定義*/printf("xl=%d,xw=%d,xh=%d\nv=%d",xl,xw,xh,vs(xl,xw));

}intxl=3,xw=4,xh=5;/*外部變量xl、xw、xh的定義*/上機(jī)實(shí)踐,體驗(yàn)函數(shù)調(diào)用求兩個(gè)數(shù)中的最小數(shù)。/*功能:定義一個(gè)求較大數(shù)的函數(shù)并在主函數(shù)中調(diào)用*/intmin(intn1,intn2) /*定義一個(gè)函數(shù)max()*/{return(n1<n

溫馨提示

  • 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)論