語言所有課件及上級練習(xí)第5章-函數(shù)與宏定義_第1頁
語言所有課件及上級練習(xí)第5章-函數(shù)與宏定義_第2頁
語言所有課件及上級練習(xí)第5章-函數(shù)與宏定義_第3頁
語言所有課件及上級練習(xí)第5章-函數(shù)與宏定義_第4頁
語言所有課件及上級練習(xí)第5章-函數(shù)與宏定義_第5頁
已閱讀5頁,還剩38頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

5.1函數(shù)的定義、聲明和調(diào)用C

語言程序設(shè)計(jì)

庫函數(shù)函數(shù)的定義和返回值函數(shù)的調(diào)用函數(shù)的聲明調(diào)用函數(shù)和被調(diào)用函數(shù)之間的數(shù)據(jù)傳遞本節(jié)小結(jié)練習(xí)作業(yè)主要內(nèi)容:①程序結(jié)構(gòu)清晰,可讀性好。②減少重復(fù)編碼的工作量。③可多人共同編制一個(gè)大程序,縮短程序設(shè)計(jì)周期,提高程序設(shè)計(jì)和調(diào)試的效率。使用函數(shù)的好處……C程序源程序文件n函數(shù)1函數(shù)m……源程序文件1函數(shù)1函數(shù)n函數(shù)概述函數(shù)概念函數(shù):在C語言里,函數(shù)指的是實(shí)現(xiàn)一個(gè)特定功能的程序模塊。它相當(dāng)于其他語言中的子程序。一個(gè)C語言程序可由一個(gè)主函數(shù)和若干個(gè)函數(shù)構(gòu)成,其中主函數(shù)是不可缺省的。C程序總是從main函數(shù)開始執(zhí)行,而不管將其寫在前面、中間或最后。在調(diào)用完其它函數(shù)后返回到main函數(shù)。main函數(shù)是系統(tǒng)定義的。函數(shù)概念每個(gè)C程序由主函數(shù)調(diào)用其他函數(shù)(main函數(shù)式不能被調(diào)用的),其他函數(shù)之間也可以相互調(diào)用。在程序設(shè)計(jì)中,常將一些常用的功能模塊編寫成函數(shù),放在函數(shù)庫中供公共選用。所有函數(shù)都是平行定義的(即不可以嵌套定義),但可以嵌套調(diào)用。1.從用戶角度看,C語言函數(shù)分為兩種:庫函數(shù): 是系統(tǒng)提供的已設(shè)計(jì)好的函數(shù),只要指定了要調(diào)用函數(shù)所在的庫文件,就可以直接調(diào)用了。用戶自定義函數(shù): 是用戶自己編寫的用來解決具體問題的函數(shù)。2.從函數(shù)的形式看,函數(shù)分為兩類:無參函數(shù):不需要向函數(shù)傳遞參數(shù)。有參函數(shù):需要向函數(shù)傳遞必要的參數(shù)。本章將要詳細(xì)介紹的是用戶自定義函數(shù)。C語言提供了豐富的庫函數(shù),可直接調(diào)用這些函數(shù),不必重新自己編寫。調(diào)用庫函數(shù)時(shí),要有include命令行如:#include“stdio.h”#include<math.h>(注意:命令行后無”;”)對庫函數(shù)的一般調(diào)用形式:函數(shù)名(參數(shù)表)

一、庫函數(shù)下列#include命令中,正確的是(A)。A.#include"math.h"B.#include[math.h]C.#include(math.h)D.#include{math.h}課堂小測試常用的輸入輸出函數(shù):頭文件stdio.hprintf(“格式控制”,輸出表列);按“格式控制”中的格式說明符依次輸出“輸出表列”中的各項(xiàng),普通字符原樣輸出。scanf(“格式控制”,地址表列);按“格式控制”中規(guī)定的格式,在鍵盤上輸入各地址表列的數(shù)據(jù),在輸入數(shù)據(jù)時(shí)普通字符要原樣輸入。putchar(ch);把ch的值輸出到顯示器上,這里的ch可以是字符型或整型變量或常量,也可以是一個(gè)轉(zhuǎn)義字符。getchar();從鍵盤輸入一個(gè)字符。該函數(shù)沒有參數(shù),但括號不能省略。gets(str);接收從鍵盤輸入的一個(gè)字符串,存放在字符數(shù)組中。返回值是字符數(shù)組的起始地址。puts(s);在屏幕上輸出字符串s。該函數(shù)沒有返回值。常用的字符串函數(shù):頭文件string.h字符串連接函數(shù)strcat()字符串復(fù)制函數(shù)strcpy()字符串比較函數(shù)strcmp()求字符串長度函數(shù)strlen()把字符串中的所有字母都變成小寫函數(shù)strlwr()把字符串中的所有字母都變成大寫函數(shù)strupr()

常用的數(shù)學(xué)函數(shù):頭文件math.h調(diào)用庫函數(shù)的兩種形式:出現(xiàn)在表達(dá)式中:作為獨(dú)立的語句:例:求y=x5+1.3,可以調(diào)用pow函數(shù)來實(shí)現(xiàn)y=pow(x,5)+1.3printf(”******\n”);使用庫函數(shù)應(yīng)注意:1、函數(shù)功能2、函數(shù)參數(shù)的數(shù)目和順序,及各參數(shù)意義和類型3、函數(shù)返回值意義和類型4、需要使用的包含文件函數(shù)返回值的類型名

函數(shù)名(形參類型說明表){ 聲明部分 語句部分}1、函數(shù)定義一般格式:合法標(biāo)識符函數(shù)體例有參函數(shù)

intmax(intx,inty){intz;z=x>y?x:y;return(z);}例有參函數(shù)

intmax(intx,y){intz;z=x>y?x:y;return(z);}例空函數(shù)

dummy(){}函數(shù)體為空例無參函數(shù)無返回值

voidprintstar(){printf(“**********\n”);}二、函數(shù)的定義與返回值缺省int型無返回值void類型名形式參數(shù)1,類型名形式參數(shù)2……注意:函數(shù)名和形式參數(shù)都是用戶命名的標(biāo)識符。在同一程序中,函數(shù)名必須唯一。同一函數(shù)中,形式參數(shù)名必須唯一,但可以和其他函數(shù)的變量同名。不能在函數(shù)的內(nèi)部定義函數(shù)函數(shù)沒有返回值時(shí)函數(shù)為void類型,不寫返回類型時(shí)默認(rèn)為int型。定義的函數(shù)可以沒有形參,函數(shù)體也可以沒有任何操作,但函數(shù)名后的()不能省。如果一個(gè)函數(shù)沒有返回值,那么該函數(shù)的類型是()A. intB.floatC.charD.void課堂小測試函數(shù)的返回值是通過return語句返回的功能:終止函數(shù)的運(yùn)行,返回調(diào)用該函數(shù)的地方,若有返回值,將返回值帶回。return語句格式:return表達(dá)式;

return(表達(dá)式);

return;2、函數(shù)的返回值

#include<stdio.h>

intsum_100();

//函數(shù)聲明

voidmain(){ints1;

s1

=sum_100();

//函數(shù)調(diào)用

printf(“1+2+……+100=%d\n",s1);}

int

sum_100()

//函數(shù)定義(首部)

{ints=0,i;for(i=1;i<=100;i++) s=s+i;

returns;

//返回值給主調(diào)函數(shù)

}【例1】函數(shù)有返回值下面程序的輸出結(jié)果是(B

)。

#include<stdio.h>intnum=10;func(){intnum=4;return++num;}voidmain(){printf("%d\n",func());}A. 4

B. 5C. 10D. 11課堂小測試說明:return語句中不含表達(dá)式時(shí),作用只是返回到調(diào)用函數(shù)函數(shù)可以沒有return語句,程序一直進(jìn)行到最后的“}”然后返回到調(diào)用函數(shù)。一個(gè)函數(shù)內(nèi),可以在多處出現(xiàn)return語句,在函數(shù)體的不同部位退出函數(shù),但無論有多少,return只能執(zhí)行一次return語句中的表達(dá)式類型應(yīng)和函數(shù)的類型一致,如不一致,系統(tǒng)自動將表達(dá)式類型轉(zhuǎn)換。#include<stdio.h>voidprintStar();//函數(shù)聲明voidmain(){

printStar();//函數(shù)調(diào)用}voidprintStar()//函數(shù)定義{

intstar;for(star=1;star<=5;star++) printf("*");}輸出:*****【例2】函數(shù)無返回值給出以下程序運(yùn)行后的輸出結(jié)果(57

)inta,b;voidfun(){a=100;b=200;}main(){inta=5,b=7;fun();printf(“%d%d\n”,a,b);}課堂小測試函數(shù)名(實(shí)在參數(shù)表)函數(shù)調(diào)用的一般形式:三、函數(shù)的調(diào)用

函數(shù)語句:例printstar();函數(shù)表達(dá)式:例m=add(3.0,4.0);if(y=0,i=1;i<=5;i++)y=add(y,i);if(add(x,y)>0)……函數(shù)參數(shù):例printf(“%d”,max(a,b));m=max(a,max(b,c));形式參數(shù):定義函數(shù)時(shí)函數(shù)名后面括號中的變量名實(shí)際參數(shù):調(diào)用函數(shù)時(shí)函數(shù)名后面括號中的表達(dá)式c=max(a,b);

(main函數(shù))

max(intx,inty){intz;z=x>y?x:y;return(z);}main(){inta,b,c;scanf("%d%d",&a,&b);c=max(a,b);printf("Maxis%d",c);}max(intx,inty){intz;z=x>y?x:y;return(z);}形參實(shí)參函數(shù)的形式參數(shù)與實(shí)際參數(shù)【例3】比較兩個(gè)數(shù),并輸出大者①當(dāng)函數(shù)被調(diào)用時(shí)才給形參分配內(nèi)存單元。調(diào)用結(jié)束,所占內(nèi)存被釋放。所以這種變量只在函數(shù)體內(nèi)部起作用②實(shí)參可以是常量、變量或表達(dá)式,但要求它們有確定的值。③實(shí)參與形參類型要一致,字符型與整型可以兼容,若形參與實(shí)參類型不一致,自動按賦值兼容的規(guī)則轉(zhuǎn)換④實(shí)參與形參的個(gè)數(shù)必須相等。在函數(shù)調(diào)用時(shí),實(shí)參的值賦給與之相對應(yīng)的形參。關(guān)于形參和實(shí)參的說明:在C語言中,實(shí)參向?qū)π螀⒌臄?shù)據(jù)傳遞是“值傳遞”,單向傳遞,只由實(shí)參傳給形參,而不能由形參傳回來給實(shí)參。在內(nèi)存中,實(shí)參單元與形參單元是不同的單元。在調(diào)用函數(shù)時(shí),給形參分配存儲單元,并將實(shí)參對應(yīng)的值傳遞給形參,調(diào)用結(jié)束后,形參單元被釋放,實(shí)參單元仍保留并維持原值。因此,在執(zhí)行一個(gè)被調(diào)用函數(shù)時(shí),形參的值如果發(fā)生改變,并不會改變主調(diào)函數(shù)的實(shí)參的值。例如,若在執(zhí)行函數(shù)過程中x和y的值變?yōu)椋保昂停保担岷停馊詾椋埠停?。以下程序的運(yùn)行結(jié)果是(B

)。

func(inta,intb){intc;c=(a>b)?(a-b):(a+b);return(c);}main(){intx=7,y=3;printf("%d\n",func(x,y));}A.3B.4C.7D.10課堂小測試關(guān)于函數(shù)調(diào)用的要求:調(diào)用函數(shù)時(shí),函數(shù)名必須與所調(diào)用的函數(shù)名字完全一致。函數(shù)必須先定義后調(diào)用(函數(shù)的返回值類型為int或char時(shí)除外):如

doubleadd(doublea,doubleb){……}main(){doubley,p,q;……y=add(p,q);……}四、函數(shù)的聲明當(dāng)把函數(shù)(返回值是非int和char類型)的定義放在調(diào)用之后時(shí),要在調(diào)用之前對函數(shù)進(jìn)行說明(函數(shù)原型說明)。函數(shù)聲明的一般形式函數(shù)類型函數(shù)名(參數(shù)類型1,參數(shù)類型2,…)函數(shù)類型函數(shù)名(參數(shù)類型1

參數(shù)名1,…)如:doubleadd(double,double);doubleadd(doublep,doubleq);聲明:函數(shù)聲明可以是一條獨(dú)立的聲明語句,也可以在普通變量的聲明中,如:doubleadd(double,double);doublex,y,add(double,double);聲明:(續(xù))函數(shù)類型必須與函數(shù)返回值相同。函數(shù)聲明與函數(shù)定義不同,函數(shù)聲明是告訴編譯系統(tǒng)函數(shù)類型、參數(shù)個(gè)數(shù)及類型,以便進(jìn)行有效的類型檢驗(yàn)。以下正確的函數(shù)原型聲明語句是(A

)A.voidfun(intx);B.floatfun(voidy);C.doublefun(x);D.int(charch);課堂小測試下列情況下,可不作函數(shù)聲明若函數(shù)返值是char或int型,系統(tǒng)自動按int型處理被調(diào)用函數(shù)定義出現(xiàn)在主調(diào)函數(shù)之前函數(shù)聲明的位置1.在函數(shù)內(nèi)部:只能在本函數(shù)內(nèi)調(diào)用函數(shù)2.在函數(shù)外部:從聲明開始后所有的位置都可調(diào)用函數(shù)main(){floata,b;intc;scanf("%f,%f",&a,&b);c=max(a,b);printf("Maxis%d\n",c);}max(floatx,floaty){floatz;z=x>y?x:y;return(z);}int型函數(shù)可不作函數(shù)聲明floatadd(floatx,floaty){floatz;z=x+y;return(z);}main(){floata,b,c;scanf("%f,%f",&a,&b);c=add(a,b);printf("sumis%f",c);}被調(diào)函數(shù)出現(xiàn)在主調(diào)函數(shù)之前,不必函數(shù)聲明

#include<stdio.h>main(){floatadd(float,float);floata,b,c;scanf("%f,%f",&a,&b);c=add(a,b);printf("sumis%f",c);}floatadd(floatx,floaty){floatz;z=x+y;return(z);}【例4】函數(shù)聲明舉例五、調(diào)用函數(shù)和被調(diào)用函數(shù)之間的數(shù)據(jù)傳遞三種方式:

1.實(shí)參形參2.return語句把函數(shù)值返回調(diào)用函數(shù)。

3.通過全局變量(不提倡使用)【例5】判斷執(zhí)行結(jié)果#include<stdio.h>voidtry(int,int,int);

/外部函數(shù)聲明main(){intx=2,y=3,z=0;printf(“(1)x=%dy=%dz=%d\n”,x,y,z);

try(x,y,z);printf(“(4)x=%dy=%dz=%d\n”,x,y,z);}voidtry(intx,inty,intz){printf(“(2)x=%dy=%dz=%d\n”,x,y,z);z=x+y;x=x*x;y=y*y;printf(“(3)x=%dy=%dz=%d\n”,x,y,z);}程序的運(yùn)行結(jié)果:(1)x=2y=3z=0(2)x=2y=3z=0(3)x=4y=9z=5(4)x=2y=3z=0【例6】判斷執(zhí)行結(jié)果#include<stdio.h>voidswap(int,int);

main(){intx=10,y=20;printf(“(1)x=%dy=%d\n”,x,y);

swap(x,y);printf(“(4)x=%dy=%d\n”,x,y);}voidswap(inta,intb){intt;printf(“(2)a=%db=%d\n”,a,b);t=a;a=b;b=t;printf(“(3)a=%db=%d\n”,a,b);}程序的運(yùn)行結(jié)果:(1)x=1

溫馨提示

  • 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

提交評論