C語言程序設計-第3版-第8章-函數(shù)_第1頁
C語言程序設計-第3版-第8章-函數(shù)_第2頁
C語言程序設計-第3版-第8章-函數(shù)_第3頁
C語言程序設計-第3版-第8章-函數(shù)_第4頁
C語言程序設計-第3版-第8章-函數(shù)_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

C語言程序設計第8章函數(shù)第1講:簡單函數(shù)介紹1.函數(shù)的概述提綱2.函數(shù)的定義3.函數(shù)的調(diào)用1.函數(shù)的概述說明分類C語言程序設計注意說明:(1)C源程序是由函數(shù)組成的且只有一個主函數(shù)main()。(2)主函數(shù)可以調(diào)用其它函數(shù),而不允許被其它函數(shù)調(diào)用。(3)程序由主函數(shù)開始執(zhí)行,并且由主函數(shù)結束。源程序主函數(shù)自定義函數(shù)2自定義函數(shù)1…調(diào)用(4)主函數(shù)可以放在程序的任意位置。1.函數(shù)的概述說明分類C語言程序設計庫函數(shù)和自定義函數(shù):(1)庫函數(shù)

C系統(tǒng)提供,用戶無須定義,只需在程序前包含有該函數(shù)原型的頭文件即可在程序中直接調(diào)用。

例如:printf、scanf、getchar、putchar、gets、puts等函數(shù),都需要加上頭文件#include"stdio.h"。求的值。運行結果語句編寫#include"stdio.h"#include"math.h"main(){}intx;doubley;scanf("%d",&x);y=sqrt(x);printf("%lf\n",y);

5↙頭文件math.h中包含了sqrt函數(shù),其功能就是開方。

2.236068

1.函數(shù)的概述說明分類C語言程序設計庫函數(shù)和自定義函數(shù):(2)自定義函數(shù)

由用戶按實際需要自己編寫的函數(shù),需要被調(diào)用才能實現(xiàn)其功能。求兩個整數(shù)之和。運行結果語句編寫intsum(intx,inty)//自定義函數(shù){

}main()//主函數(shù){}ints;s=sum(2,3);printf(“s=%d\n",s);

s=5returnx+y;2.函數(shù)的定義無返回值無參數(shù)無返回值有參數(shù)有返回值無參數(shù)有返回值有參數(shù)C語言程序設計一般形式:void函數(shù)名(){

函數(shù)體;}

注意說明:(1)其中void和函數(shù)名稱為函數(shù)頭。函數(shù)名后有一個空括號,其中無參數(shù),但括號不可少。(2){}中的內(nèi)容稱為函數(shù)體。(3)void代表函數(shù)無類型,即無返回值,不需要return。運行結果語句編寫voidHello()//自定義函數(shù){printf("Helloworld!\n");}main()//主函數(shù){}Hello();

Helloworld!2.函數(shù)的定義無返回值無參數(shù)無返回值有參數(shù)有返回值無參數(shù)有返回值有參數(shù)C語言程序設計一般形式:void函數(shù)名(形式參數(shù)表列){

函數(shù)體;}注意說明:(1)有參函數(shù)比無參函數(shù)多了一個內(nèi)容,即形式參數(shù)表列。(2)形式參數(shù)可以是各種類型的變量,參數(shù)之間用逗號間隔。(3)進行函數(shù)調(diào)用時,主調(diào)函數(shù)將傳遞給形式參數(shù)實際的值。運行結果語句編寫voidsum(inta,intb)//自定義函數(shù){ints;s=a+b;printf("s=%d\n",s);}main()//主函數(shù){}intx=2,y=3;sum(x,y);

s=52.函數(shù)的定義無返回值無參數(shù)無返回值有參數(shù)有返回值無參數(shù)有返回值有參數(shù)C語言程序設計一般形式:類型標識符函數(shù)名(){

函數(shù)體;return表達式;}注意說明:(1)函數(shù)的類型實際上是函數(shù)返回值的類型。(2)return語句的作用是把值作為函數(shù)的值返回給主調(diào)函數(shù)。(3)有返回值的函數(shù)中至少應有一個return語句。運行結果語句編寫intsum()//自定義函數(shù){inta,b,s;scanf("%d%d",&a,&b);s=a+b;returns;}main()//主函數(shù){}ints;s=sum();printf("s=%d\n",s);

23↙

s=52.函數(shù)的定義無返回值無參數(shù)無返回值有參數(shù)有返回值無參數(shù)有返回值有參數(shù)

C語言程序設計一般形式:類型標識符函數(shù)名(形式參數(shù)表列){

函數(shù)體;return表達式;}注意說明:(1)在C程序中,一個自定義函數(shù)的定義可以放在任意位置。(2)如果放在main之后,在調(diào)用之前,需要對它進行說明。例如:intsum(inta,intb);運行結果語句編寫intsum(inta,intb)//自定義函數(shù){ints;s=a+b;returns;}main()//主函數(shù){}intx,y,s;scanf("%d%d",&x,&y);s=sum(x,y);printf("s=%d\n",s);

23↙

s=53.函數(shù)的調(diào)用形參實參返回值調(diào)用方式C語言程序設計內(nèi)存注意說明:(1)形參變量只有在被調(diào)用時才分配內(nèi)存單元,在調(diào)用結束時,即刻釋放所分配的內(nèi)存單元。(2)實參可以是常量、變量、表達式等,在進行函數(shù)調(diào)用時,把具有確定的值傳送給形參。(3)函數(shù)調(diào)用中發(fā)生的數(shù)據(jù)傳送是單向的。x2y3實參形參ab23(4)實參和形參在數(shù)量、類型和順序上應嚴格一致。3.函數(shù)的調(diào)用形參實參返回值調(diào)用方式C語言程序設計return語句一般形式:return表達式;或者為:return(表達式);

注意說明:(1)在函數(shù)中允許有多個return語句,但每次調(diào)用只能有一個return語句被執(zhí)行。(2)函數(shù)返回值的類型和函數(shù)定義中函數(shù)的類型應保持一致。(3)不返回函數(shù)值的函數(shù),可以明確定義為“空類型”,類型說明符為“void”。3.函數(shù)的調(diào)用形參實參

返回值調(diào)用方式C語言程序設計函數(shù)調(diào)用的一般形式:函數(shù)名(實際參數(shù)表)實際參數(shù)表中的參數(shù)可以是常數(shù)、變量或表達式,各實參之間用逗號分隔。調(diào)用方式:(1)函數(shù)表達式:函數(shù)作為表達式中的一項出現(xiàn)在表達式中,這種方式要求函數(shù)有返回值。例如:s=sum(x,y);把sum的返回值賦予變量s。

(2)函數(shù)語句:函數(shù)調(diào)用的一般形式加上分號即構成函數(shù)語句,這種方式不要求函數(shù)有返回值。例如:sum(x,y);以函數(shù)語句的方式調(diào)用函數(shù)。(3)函數(shù)實參:函數(shù)作為另一個函數(shù)調(diào)用的實際參數(shù)出現(xiàn)。例如:printf("%d",sum(x,y));把sum調(diào)用的返回值作為printf函數(shù)的實參來使用的。C語言程序設計第8章函數(shù)第2講:特殊函數(shù)介紹1.函數(shù)的嵌套調(diào)用提綱2.函數(shù)的遞歸調(diào)用3.數(shù)組作為函數(shù)參數(shù)1.函數(shù)的嵌套調(diào)用調(diào)用過程應用實例C語言程序設計嵌套調(diào)用定義:main函數(shù)調(diào)用函數(shù)A

結束

C語言允許在被調(diào)函數(shù)中又調(diào)用其它函數(shù),即函數(shù)的嵌套調(diào)用。調(diào)用過程描述圖:函數(shù)A調(diào)用函數(shù)B

函數(shù)B1.函數(shù)的嵌套調(diào)用調(diào)用過程應用實例C語言程序設計利用函數(shù)嵌套實現(xiàn)程序設計,求1!+2!+…+5!算法設計:1、編寫求階乘的函數(shù)fact;2、編寫求和的函數(shù)sum,嵌套調(diào)用函數(shù)fact;3、編寫主函數(shù),其中調(diào)用函數(shù)sum;語句編寫intfact(intn)//求階乘函數(shù){intf=1,i;for(i=1;i<=n;i++)f=f*i;returnf;}int

sum(inth)//求和函數(shù){inti,s=0;for(i=1;i<=h;i++)s=s+fact(i);returns;}main()//主函數(shù){ints;

s=sum(5);printf("s=%d\n",s);}運行結果s=153調(diào)用fact(1)調(diào)用fact(4)調(diào)用fact(2)調(diào)用fact(5)調(diào)用fact(3)2.函數(shù)的遞歸調(diào)用調(diào)用過程應用實例C語言程序設計遞歸調(diào)用定義:s=5*fact(4)一個函數(shù)在它的函數(shù)體內(nèi)調(diào)用它自身稱為遞歸調(diào)用,這種函數(shù)稱為遞歸函數(shù)。

調(diào)用過程描述圖:4*fact(3)3*fact(2)2*fact(1)12*1=23*2=64*6=245*24=120調(diào)用過程應用實例C語言程序設計利用函數(shù)遞歸調(diào)用實現(xiàn)程序設計,求n!算法設計:1、編寫求階乘的函數(shù)fact;2、判斷n=1時,返回值1;3、判斷n≥2時,函數(shù)fact調(diào)用n*fact(n-1);語句編寫intfact(intn)//求階乘函數(shù){}if(n==1)return1;main()//主函數(shù){ints;s=fact(5);

printf("s=%d\n",s);}運行結果s=1202.函數(shù)的遞歸調(diào)用elsereturnn*fact(n-1);4、編寫主函數(shù)調(diào)用函數(shù)fact;3.數(shù)組作為函數(shù)參數(shù)C語言程序設計數(shù)組元素作函數(shù)實參:它作為函數(shù)實參使用與普通變量是完全相同的,在發(fā)生函數(shù)調(diào)用時,把作為實參的數(shù)組元素的值傳送給形參,實現(xiàn)單向的值傳送。例如:fun(a[1]);判別一個數(shù)組中各元素的值,若大于零則輸出該值,若小于等于零則輸出0值。語句編寫voidnzp(intv){if(v>0)printf("%d",v);elseprintf("%d",0);}main(){inta[5],i;printf("請輸入五個數(shù)據(jù):");for(i=0;i<5;i++){scanf("%d",&a[i]);nzp(a[i]);}}運行結果請輸入五個數(shù)據(jù):5-7-923↙數(shù)組元素數(shù)組名500233.數(shù)組作為函數(shù)參數(shù)C語言程序設計數(shù)組名作函數(shù)實參形式:函數(shù)定義時,形參應寫成如下的形式:

類型函數(shù)名稱(類型標識符數(shù)組名稱[])例如:voidfun(inta[])數(shù)組中存放了一名學生5門課程的成績,求平均成績。

語句編寫floataver(floata[]){inti;floatav,s=a[0];for(i=1;i<5;i++)s=s+a[i];av=s/5;returnav;}main(){floats[5],av;inti;printf("請輸入五門課的成績:");for(i=0;i<5;i++)scanf("%f",&s[i]);av=aver(s);printf("平均成績是:%5.2f\n",av);}運行結果請輸入五個數(shù)據(jù):8898768993↙數(shù)組元素數(shù)組名平均成績是:88.80函數(shù)調(diào)用時,實參應寫成如下的形式:

函數(shù)名稱(數(shù)組名稱)例如:fun(a)

C語言程序設計第8章函數(shù)第3講:變量存儲類別及內(nèi)外部函數(shù)1.局部變量和全局變量提綱2.動態(tài)變量和靜態(tài)變量3.變量的其他存儲類別4.內(nèi)部函數(shù)與外部函數(shù)1.局部變量和全局變量局部變量全局變量C語言程序設計定義:局部變量也稱為內(nèi)部變量。局部變量是在函數(shù)內(nèi)作定義說明的,其作用域僅限于函數(shù)內(nèi)。例如:intf1(inta){intb,c;……}intf2(intx){inty,z;……}main(){intm,n;……}函數(shù)f1:函數(shù)f2:主函數(shù)main:

C語言程序設計注意說明:(1)主函數(shù)中定義的變量也只能在主函數(shù)中使用,不能在其它函數(shù)中使用。

(2)形參變量是屬于被調(diào)函數(shù)的局部變量,實參變量是屬于主調(diào)函數(shù)的局部變量。

(3)允許在不同的函數(shù)中使用相同的變量名,它們代表不同的對象,分配不同的單元,互不干擾。運行結果語句編寫voidf(inta,intb){inti,j;i=a+2;j=b-1;printf("函數(shù)f中:a=%d,b=%d\n",a,b);printf("函數(shù)f中:i=%d,j=%d\n",i,j);}main(){inti=4,j=5;f(i,j);printf("主函數(shù)中:i=%d,j=%d\n",i,j);}函數(shù)f中:a=4,b=5函數(shù)f中:i=6,j=4主函數(shù)中:i=4,j=51.局部變量和全局變量局部變量全局變量1.局部變量和全局變量局部變量全局變量C語言程序設計定義:全局變量也稱為外部變量,它是在函數(shù)外部定義的變量,其作用域是整個源程序。例如:函數(shù)f1:函數(shù)f2:主函數(shù)main:

inta,b;voidf1(){……}floatx,y;intf2(){……}main(){……}1.局部變量和全局變量局部變量全局變量C語言程序設計輸入圓的半徑,求圓的周長和面積。

運行結果語句編寫floats;floatls(floatr){floatlen;

len=2*3.14*r;s=3.14*r*r;returnlen;}main(){floatc,r;printf("請輸入圓的半徑:");scanf("%f",&r);c=ls(r);printf("圓的周長為:%f\n",c);printf("圓的面積為:%f\n",s);}請輸入圓的半徑:5↙圓的周長為:31.400000圓的面積為:78.5000002.動態(tài)變量和靜態(tài)變量動態(tài)變量靜態(tài)變量C語言程序設計定義:變量前如不加以任何聲明或者專門聲明為auto存儲類別,稱為動態(tài)變量。f(inta){autointb,c=3;

……

}例題:說明:a是形參,屬于動態(tài)變量,b和c是函數(shù)中定義的變量,也屬于屬于動態(tài)變量,對c賦初值3。執(zhí)行完f函數(shù)后,自動釋放a,b,c所占的存儲單元。2.動態(tài)變量和靜態(tài)變量動態(tài)變量靜態(tài)變量C語言程序設計定義:變量的值在函數(shù)調(diào)用結束后保留原值,用關鍵字static進行聲明,稱為靜態(tài)變量。注意說明:(1)靜態(tài)變量屬于靜態(tài)存儲類別,在靜態(tài)存儲區(qū)內(nèi)分配存儲單元,在程序整個運行期間都不釋放。(2)靜態(tài)變量在編譯時賦初值,即只賦初值一次。語句編寫f(inta){autob=2;staticc=3;b=b+1;c=c+1;returna+b+c;}main(){inta=1,i;for(i=1;i<=2;i++)printf("第%d次調(diào)用后結果:%d\n",i,f(a));}變量存儲圖:實參a1b2c3調(diào)用f(1)形參a134運行結果第1次調(diào)用后結果:8調(diào)用f(2)5第2次調(diào)用后結果:93.變量的其他存儲類別register

externC語言程序設計寄存器變量定義:C語言允許將局部變量的值放在CPU中的寄存器中,這種變量叫“寄存器變量”,用關鍵字register作聲明。注意說明:(1)只有局部自動變量和形式參數(shù)可以作為寄存器變量。(2)一個計算機系統(tǒng)中的寄存器數(shù)目有限,不能定義任意多個寄存器變量。(3)局部靜態(tài)變量不能定義為寄存器變量。3.變量的其他存儲類別register

externC語言程序設計聲明外部變量定義:如果在定義點之前想引用某外部變量,則應該在引用之前用關鍵字extern作“外部變量聲明”。用extern聲明外部變量,擴展變量的作用域。語句編寫運行結果請輸入存款金額:800↙余額為:10800元voidsave(){intmoney;externamount;printf("請輸入存款金額:");scanf("%d",&money);amount=amount+money;}intamount=10000;main(){save();printf("余額為:%d元\n",amount);}如果沒有聲明語句externamount;那么在save函數(shù)中amount不會識別,系統(tǒng)報錯。4.內(nèi)部函數(shù)與外部函數(shù)內(nèi)部函數(shù)外部函數(shù)C語言程序設計定義:如果一個函數(shù)只能被本文件中其他函數(shù)所調(diào)用,它稱為內(nèi)部函數(shù)。內(nèi)部函數(shù)又稱靜態(tài)函數(shù)。格式:static

類型標識符函數(shù)名(形參表)static

int

fun(int

a,int

b)

例如:使用內(nèi)部函數(shù)解決兩個文件中存在重名函數(shù)問題。文件test0.c文件test.cstaticintsum(inta,intb,intc){ints;s=a+b+c;returns;}#include"stdio.h"intsum(inta,intb){ints;s=a+b;returns;}main(){intx,y,s;scanf("%d%d",&x,&y);s=sum(x,y);printf("s=%d\n",s);}4.內(nèi)部函數(shù)與外部函數(shù)內(nèi)部函數(shù)外部函數(shù)C語言程序設計定義:在定義函數(shù)時,如果在函數(shù)首部的最左端冠以關鍵字extern,則表示此函數(shù)是外部函數(shù)。格式:extern

類型標識符函數(shù)名(形參表)extern

int

fun

(int

a,

int

b)

例如:使用外部函數(shù)解決一個文件調(diào)用其他文件中函數(shù)問題。文件test0.c文件test.cexternintdiffer(inta,intb){intz;z=a-b;returnz;}#include"stdio.h"intsum(inta,intb){ints;s=a+b;returns;}main(){intx,y,s,z;scanf("%d%d",&x,&y);s=sum(x,y);printf("s=%d\n",s);z=differ(x,y);printf("z=%d\n",z);}注意說明:(1)外部函數(shù)可供其他文件調(diào)用。(2)在定義函數(shù)時省略extern,則隱含為外部函數(shù)。C語言程序設計第4講:常見編譯錯誤與調(diào)試第8章函數(shù)1.庫函數(shù)引用問題提綱2.函數(shù)聲明問題3.形參和實參問題1.庫函數(shù)引用問題解決辦法:C語言程序設計問題描述:使用庫函數(shù)時,沒有加相應的頭文件。在頭文件中添加#include"math.

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論