大學(xué)計(jì)算機(jī)C語(yǔ)言函數(shù)(1-函數(shù)的定義和使用)市公開(kāi)課一等獎(jiǎng)省賽課獲獎(jiǎng)?wù)n件_第1頁(yè)
大學(xué)計(jì)算機(jī)C語(yǔ)言函數(shù)(1-函數(shù)的定義和使用)市公開(kāi)課一等獎(jiǎng)省賽課獲獎(jiǎng)?wù)n件_第2頁(yè)
大學(xué)計(jì)算機(jī)C語(yǔ)言函數(shù)(1-函數(shù)的定義和使用)市公開(kāi)課一等獎(jiǎng)省賽課獲獎(jiǎng)?wù)n件_第3頁(yè)
大學(xué)計(jì)算機(jī)C語(yǔ)言函數(shù)(1-函數(shù)的定義和使用)市公開(kāi)課一等獎(jiǎng)省賽課獲獎(jiǎng)?wù)n件_第4頁(yè)
大學(xué)計(jì)算機(jī)C語(yǔ)言函數(shù)(1-函數(shù)的定義和使用)市公開(kāi)課一等獎(jiǎng)省賽課獲獎(jiǎng)?wù)n件_第5頁(yè)
已閱讀5頁(yè),還剩23頁(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)介

第5章函數(shù)5.1程序設(shè)計(jì)藝術(shù)

5.2函數(shù)定義和使用5.3數(shù)組作函數(shù)參數(shù)5.4變量作用域5.5變量存放類別5.6預(yù)處理指令第1頁(yè)一、函數(shù)概念

函數(shù)是形式上獨(dú)立、功效上完整程序段(塊)。在C程序設(shè)計(jì)中常將一些慣用功效模塊編寫成函數(shù)。函數(shù)能夠完成特定計(jì)算或操作處理功效。C程序由函數(shù)組成;函數(shù)在形式上是平行,不允許嵌套定義;C程序只執(zhí)行主函數(shù),子函數(shù)必須經(jīng)過(guò)主函數(shù)或其它子函數(shù)調(diào)用才能被執(zhí)行;子函數(shù)不能調(diào)用主函數(shù)。實(shí)質(zhì)上,設(shè)計(jì)程序就是設(shè)計(jì)函數(shù)。5.1程序設(shè)計(jì)藝術(shù)

(略)5.2函數(shù)定義和使用第2頁(yè)二、函數(shù)分類(一)從用戶角度分1.標(biāo)準(zhǔn)函數(shù),即庫(kù)函數(shù)

ANSIC預(yù)先定義用戶可直接使用函數(shù);使用庫(kù)函數(shù)時(shí),必須用#include把該函數(shù)所在頭文件包含進(jìn)來(lái)。2.用戶自定義函數(shù)

是用戶為了處理各種應(yīng)用問(wèn)題而自行設(shè)計(jì)函數(shù)。用戶自定義函數(shù)必須先定義后使用!(二)從形式上分1.無(wú)參函數(shù):

即無(wú)形式參數(shù)函數(shù)。如:getchar()2.有參函數(shù)

即帶有形式參數(shù)函數(shù)如:putchar(ch)、sqrt(x)…第3頁(yè)三、函數(shù)定義1、

無(wú)參函數(shù)定義函數(shù)返回值類型函數(shù)名(void){

函數(shù)體}其中:函數(shù)返回值類型表示函數(shù)返回結(jié)果值類型,函數(shù)只能有一個(gè)返回值,若函數(shù)無(wú)返回值即用void申明;返回函數(shù)值需使用:return變量|表示式;

函數(shù)名由用戶按標(biāo)識(shí)符命名規(guī)則自行給定,但不能與標(biāo)準(zhǔn)函數(shù)同名;

圓括號(hào)中關(guān)鍵字void表示函數(shù)無(wú)形式參數(shù);

函數(shù)體是由實(shí)現(xiàn)函數(shù)功效必需語(yǔ)句組成。第4頁(yè)例1:無(wú)參函數(shù)定義。#include<stdio.h>voidPrintMessage(void){ printf("\t*******************\n"); printf("\tProgrammingisfun.\n"); printf("\t*******************\n");}intmain(void){ PrintMessage(); PrintMessage(); PrintMessage(); return0;}第5頁(yè)函數(shù)返回值類型函數(shù)名(數(shù)據(jù)類型參數(shù)1,數(shù)據(jù)類型參數(shù)2,…)

{

函數(shù)體}說(shuō)明:

函數(shù)返回值類型、函數(shù)名、函數(shù)體含義與無(wú)參函數(shù)相同;形式參數(shù)格式如:數(shù)據(jù)類型形式參數(shù)1

形式參數(shù)(簡(jiǎn)稱形參)必須單個(gè)獨(dú)立定義,形參是用來(lái)接收函數(shù)被調(diào)用時(shí)對(duì)應(yīng)實(shí)際參數(shù)傳遞值或地址,所以形參只能是變量,形參存放空間是函數(shù)被調(diào)用時(shí)暫時(shí)分配動(dòng)態(tài)空間、用完即釋放(不能永久存放數(shù)據(jù))。2、有參函數(shù)定義第6頁(yè)intAverage(intx,inty){

intresult; result=(x+y)/2;

returnresult;}函數(shù)首部函數(shù)體例2:定義有參函數(shù)計(jì)算兩個(gè)整數(shù)平均。第7頁(yè)#include<stdio.h>intAverage(intx,inty){

intresult; result=(x+y)/2;

returnresult;}intmain(void){

inta1=12,b1=36,a2=24,b2=46,a3=5,b3=25;

intave1,ave2,ave3;;

ave1=Average(a1,b1);

ave2=Average(a2,b2); ave3=Average(a3,b3);

printf("Averageof%dand%dis%d.\n",a1,b1,ave1); printf("Averageof%dand%dis%d.\n",a2,b2,ave2); printf("Averageof%dand%dis%d.\n",a3,b3,ave3);

return0;}形參為整形變量x和y變量a1和b1為實(shí)際參數(shù)第8頁(yè)1、函數(shù)調(diào)用普通形式:

函數(shù)名(實(shí)在參數(shù)表)其中:

形參(形式參數(shù))定義函數(shù)時(shí)在函數(shù)名后括號(hào)中申明參數(shù);實(shí)參(實(shí)際參數(shù))在主調(diào)函數(shù)中調(diào)用函數(shù)時(shí)函數(shù)名后面括號(hào)中參數(shù)(或表示式);

調(diào)用函數(shù)時(shí)實(shí)參個(gè)數(shù)、次序、類型必須與形參一一對(duì)應(yīng)(賦值相容);實(shí)參可是常量、變量、函數(shù)或表示式;

函數(shù)調(diào)用時(shí)實(shí)參和形參是采取單向值傳遞形式即將實(shí)參數(shù)值或地址單向傳給對(duì)應(yīng)形參。四、函數(shù)調(diào)用第9頁(yè)有返回值時(shí)(即函數(shù)功效為某種計(jì)算功效)

返回值=函數(shù)名(實(shí)參表列);比如:以賦值語(yǔ)句形式調(diào)用函數(shù)如c=max(a,b);比如:作為另一個(gè)函數(shù)參數(shù)形式調(diào)用函數(shù)如

c=max(max(a,b),c); printf("%d\n",max(a,b));無(wú)返回值時(shí)(即函數(shù)功效是完成某種操作或處理)比如:以表示式語(yǔ)句形式調(diào)用函數(shù)如

display(a,b);

函數(shù)名(實(shí)參表列);2、詳細(xì)調(diào)用形式第10頁(yè)了解函數(shù)調(diào)用

參數(shù)傳遞intmain(void){

inta=12;

intb=24;

intave; ave=Average(a,b);

printf("Averageof%dand%dis%d.\n",a,b,ave); return0;}#include<stdio.h>

intAverage(intx,inty){intresult;result=(x+y)/2;returnresult;}第11頁(yè)例3:定義求n!函數(shù),然后調(diào)用該函數(shù)求sum=1!+2!+3!+…m!值。#include<stdio.h>doubleFac(intn){inti;doublep=1.0;for(i=1;i<n;i++){p*=i;}returnp;}

第12頁(yè)intmain(void){inti,m;doublesum=0;printf(“Pleaseinputmdata:”);scanf(“%d”,&m);

for(i=1;i<=m;i++){sum+=Fac(i);}

printf(“Sum=%.0f\n”,sum);

return0;}第13頁(yè)#include<stdio.h>intmax(intx,inty){ intz;

if(x>y) { z=x; } else { z=y; } return(z);}intmain(void){ inta=45,b=78,c=99,d,e;

d=max(a,b); printf("max1=%d\n",d); printf("max2=%d\n",max(a,b));

e=c-max(a,b); printf("e=%d\n",e); printf("max3=%d\n",max(max(a,b),c)); return0;}例4:函數(shù)定義與調(diào)用max1=78max2=78e=21max3=99該程序輸出是什么?第14頁(yè)例5:定義求素?cái)?shù)函數(shù),然后調(diào)用該函數(shù)求100到200之間全部素?cái)?shù)。#include<stdio.h>#include<math.h>intPrim(intx){inti,j,k;k=(int)sqrt(i);for(j=2;j<=k;j++){if(i%j==0){break;}}

第15頁(yè)if(j>=k+1){return1;}else{return0;}}intmain(void){inti;for(i=100;i<=200;i++){if(Prim(i)){printf(“%d,”,i);}}return0;}

第16頁(yè)五、函數(shù)原型申明(prototype)1、為何要申明函數(shù)原型?

函數(shù)應(yīng)該先定義,然后才能調(diào)用。不過(guò),假如函數(shù)調(diào)用出現(xiàn)在函數(shù)定義之前,就必須對(duì)被向前調(diào)用函數(shù)進(jìn)行函數(shù)原型申明,不然就會(huì)出現(xiàn)函數(shù)調(diào)用錯(cuò)誤。2、申明格式:

函數(shù)類型

函數(shù)名(類型名1形參數(shù)1,…);或

函數(shù)類型

函數(shù)名(類型名1,類型名2,…);注意:假如函數(shù)嚴(yán)格遵照先定義后調(diào)用標(biāo)準(zhǔn)就無(wú)需進(jìn)行函數(shù)原型申明。第17頁(yè)例6:函數(shù)原型申明(先調(diào)用后定義函數(shù))#include<stdio.h>doubleFac(intn);intmain(void){…f1=Fac(m);…}doubleFac(intn){….}函數(shù)Fac原型申明先調(diào)用函數(shù)Fac函數(shù)Fac定義出現(xiàn)在調(diào)用之后第18頁(yè)#include<stdio.h>intAverage(intx,inty){

intresult; result=(x+y)/2;

returnresult;}intmain(void){

inta=12;

intb=24;

intave=Average(a,b);

printf("Averageof%dand%dis%d.\n",a,b,ave);

return0;}函數(shù)定義函數(shù)調(diào)用例7:以下函數(shù)為先定義后調(diào)用,不用申明原型第19頁(yè)#include<stdio.h>int

Average(intx,inty);/*申明Average()函數(shù)*/

intmain(void){inta=12;intb=24;intave=Average(a,b); printf("Averageof%dand%dis%d.\n",a,b,ave);return0;}intAverage(intx,inty){

intresult; result=(x+y)/2;

returnresult;}例8:函數(shù)原型申明(先調(diào)用后定義)第20頁(yè)intmain(){……a();…return0;}a

函數(shù){b();…return;}b函數(shù){……return;}①③④⑤⑥⑦②六、函數(shù)嵌套調(diào)用

在調(diào)用一個(gè)函數(shù)過(guò)程中,又調(diào)用其它函數(shù),稱為函數(shù)嵌套調(diào)用。

以下為函數(shù)調(diào)用與調(diào)用返回過(guò)程:第21頁(yè)例9:函數(shù)嵌套調(diào)用#include<stdio.h>floatb(floatm){ floatn; n=m*10; return(n);}floatadd(floatx,floaty){ floatz; z=b(x)+y; return(z);}intmain(void){ floata=1.2,b=3.4,c; c=add(a,b); printf(“c=%f\n”,c);return0;}b函數(shù)main調(diào)用add函數(shù)調(diào)用b函數(shù)add函數(shù)結(jié)束第22頁(yè)七、函數(shù)遞歸調(diào)用

在調(diào)用一個(gè)函數(shù)過(guò)程中,出現(xiàn)直接或間接地調(diào)用該函數(shù)本身,稱為函數(shù)遞歸調(diào)用。intf(intx){ inty,z; z=f(y); return(2*z);}f函數(shù)調(diào)用f函數(shù)f1函數(shù)調(diào)用f2函數(shù)f2函數(shù)調(diào)用f1函數(shù)第23頁(yè)例10:函數(shù)遞歸調(diào)用有3個(gè)人坐在一起,問(wèn)第3個(gè)人多少歲?他說(shuō)比第2個(gè)人大2歲。問(wèn)第2個(gè)人多少歲?他說(shuō)比第1個(gè)人大2歲。最終問(wèn)第1個(gè)人,他說(shuō)是10歲。請(qǐng)問(wèn)第3個(gè)人多大?分析:age(3)=age(2)+2;age(2)=age(1)+2;age(1)=10;歸納:n=1age(n)=10n>1age(n)=age(n-1)+2第24頁(yè)程序以下:#include<stdio.h>intage(intn){intc;if(n==1){c=10;}elseif(n>1){c=age(n-1)+2;}returnc;}intmain(void)

{printf(“%d”,age(3));return0;}程序執(zhí)行過(guò)程以下:intmain(void)

{printf(“%d”,age(3));}intage(3){intc;c=age(2)+2;returnc;}intage(2){intc;c=age(1)+2;returnc;}intage(1){intc;c=10;returnc;}第25頁(yè)課堂習(xí)題

#include<stdio.h>

voidfunc1(inti);

voidfunc2(inti);

charst[]="hello,friend!";

voidfunc1(inti)

{ printf("%c",st[i]);

if(i<3) { i+=2; func2(i); }

}voidfunc2(inti)

{printf("%c",st[i]);

if(i<3){ i+=2; func1(i);}

溫馨提示

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