C語(yǔ)言程序設(shè)計(jì) 課件 任務(wù)3.1 函數(shù)的應(yīng)用_第1頁(yè)
C語(yǔ)言程序設(shè)計(jì) 課件 任務(wù)3.1 函數(shù)的應(yīng)用_第2頁(yè)
C語(yǔ)言程序設(shè)計(jì) 課件 任務(wù)3.1 函數(shù)的應(yīng)用_第3頁(yè)
C語(yǔ)言程序設(shè)計(jì) 課件 任務(wù)3.1 函數(shù)的應(yīng)用_第4頁(yè)
C語(yǔ)言程序設(shè)計(jì) 課件 任務(wù)3.1 函數(shù)的應(yīng)用_第5頁(yè)
已閱讀5頁(yè),還剩30頁(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)介

高級(jí)語(yǔ)言程序設(shè)計(jì)模塊三編程初級(jí)應(yīng)用任務(wù)3.1函數(shù)的應(yīng)用C語(yǔ)言程序設(shè)計(jì)基礎(chǔ)與實(shí)踐課程組04技能點(diǎn)拓展03技能點(diǎn)詳解02技能點(diǎn)分析目錄CONTENTS任務(wù)3.1函數(shù)的應(yīng)用01問(wèn)題引入05技能點(diǎn)檢測(cè)一問(wèn)題引入一款游戲的開發(fā),需要公司各部門各司其職,通力合作。策劃部門負(fù)責(zé)主策劃,劇情,文案,系統(tǒng),版本等;美術(shù)部門負(fù)責(zé)場(chǎng)景,2D,3D,人物,原畫,平面,視頻等;程序部門負(fù)責(zé)主程序,客戶端,引擎等。同樣,一個(gè)較大規(guī)模程序的設(shè)計(jì)也需要化整為零,讓各部分完成相對(duì)獨(dú)立的功能,這些獨(dú)立的部分就是函數(shù)。那么如何編寫自定義函數(shù),如何調(diào)用它們呢?04技能點(diǎn)拓展03技能點(diǎn)詳解02技能點(diǎn)分析目錄CONTENTS01問(wèn)題引入05技能點(diǎn)檢測(cè)任務(wù)3.1函數(shù)的應(yīng)用二技能點(diǎn)分析1、了解函數(shù)的概念2、掌握函數(shù)的定義與調(diào)用3、能夠使用自定義函數(shù)去解決規(guī)模較大的問(wèn)題學(xué)習(xí)目標(biāo)1.什么是函數(shù)?為什么要使用函數(shù)?2.函數(shù)定義的一般格式是什么?3.什么是形參?什么是實(shí)參?4.函數(shù)調(diào)用的方法是什么?學(xué)期預(yù)習(xí)04技能點(diǎn)拓展03技能點(diǎn)詳解02技能點(diǎn)分析目錄CONTENTS01問(wèn)題引入05技能點(diǎn)檢測(cè)任務(wù)3.1函數(shù)的應(yīng)用三技能點(diǎn)詳解函數(shù)就是一段封裝好的,可以重復(fù)使用的代碼,它使得我們的程序更加模塊化,不需要編寫大量重復(fù)的代碼。函數(shù)可以提前保存起來(lái),并給它起一個(gè)獨(dú)一無(wú)二的名字,只要知道它的名字就能使用這段代碼。函數(shù)還可以接收數(shù)據(jù),并根據(jù)數(shù)據(jù)的不同做出不同的操作,最后再把處理結(jié)果反饋給我們。函數(shù)還有很多叫法,比如方法、子例程或程序,等等。三技能點(diǎn)詳解——1庫(kù)函數(shù)C語(yǔ)言在發(fā)布時(shí)已經(jīng)為我們封裝好了很多函數(shù),它們被分門別類地放到了不同的頭文件中(暫時(shí)先這樣認(rèn)為),使用函數(shù)時(shí)引入對(duì)應(yīng)的頭文件即可。這些函數(shù)都是專家編寫的,執(zhí)行效率極高,并且考慮到了各種邊界情況,各位讀者請(qǐng)放心使用。C語(yǔ)言自帶的函數(shù)稱為庫(kù)函數(shù)。庫(kù)(Library)是編程中的一個(gè)基本概念,可以簡(jiǎn)單地認(rèn)為它是一系列函數(shù)的集合,在磁盤上往往是一個(gè)文件夾。C語(yǔ)言自帶的庫(kù)稱為標(biāo)準(zhǔn)庫(kù),其他公司或個(gè)人開發(fā)的庫(kù)稱為第三方庫(kù)。C標(biāo)準(zhǔn)庫(kù)提供了大量的程序可以調(diào)用的內(nèi)置函數(shù)。例如,函數(shù)strcat()用來(lái)連接兩個(gè)字符串,函數(shù)memcpy()用來(lái)復(fù)制內(nèi)存到另一個(gè)位置。自己編寫的函數(shù)稱為自定義函數(shù),自定義函數(shù)和庫(kù)函數(shù)在編寫和使用方式上完全相同,只是由不同的機(jī)構(gòu)來(lái)編寫。三技能點(diǎn)詳解——2函數(shù)的定義函數(shù)是一組一起執(zhí)行一個(gè)任務(wù)的語(yǔ)句。每個(gè)C程序都至少有一個(gè)函數(shù),即主函數(shù)main(),所有簡(jiǎn)單的程序都可以定義其他額外的函數(shù)。C語(yǔ)言中的函數(shù)定義的一般形式如下:在C語(yǔ)言中,函數(shù)由一個(gè)函數(shù)頭和一個(gè)函數(shù)主體組成。下面列出一個(gè)函數(shù)的所有組成部分:函數(shù)類型:也即函數(shù)返回值類型,一個(gè)函數(shù)可以返回一個(gè)值。有些函數(shù)執(zhí)行所需的操作而不返回值,在這種情況下,函數(shù)類型是關(guān)鍵字void。函數(shù)名:是所定義函數(shù)的名稱,它可以是C語(yǔ)言中任何合法的標(biāo)識(shí)符。注意,在一個(gè)程序中函數(shù)名必須是唯一的,別的函數(shù)都是通過(guò)函數(shù)名來(lái)調(diào)用函數(shù)的。三技能點(diǎn)詳解——2函數(shù)的定義形式參數(shù)表:是由“<類型><參數(shù)名>”對(duì)組成的參數(shù)表,每對(duì)之間用逗號(hào)隔開。被調(diào)函數(shù)就是通過(guò)這些形參,接收從調(diào)用函數(shù)傳遞過(guò)來(lái)的數(shù)據(jù)。定義的函數(shù)可以有參數(shù),也可以沒(méi)有參數(shù),分別稱為有參函數(shù)和無(wú)參函數(shù)。不過(guò),即使是無(wú)參函數(shù),其后面的圓括號(hào)也不能省略。函數(shù)體:函數(shù)體由一對(duì)花括號(hào)“{}”括起,包含一組定義函數(shù)執(zhí)行任務(wù)的語(yǔ)句。以下是max()函數(shù)的源代碼。該函數(shù)有兩個(gè)參數(shù)num1和num2,會(huì)返回這兩個(gè)數(shù)中較大的那個(gè)數(shù):三技能點(diǎn)詳解——2函數(shù)的定義三技能點(diǎn)詳解——3函數(shù)聲明函數(shù)聲明會(huì)告訴編譯器函數(shù)名稱及如何調(diào)用函數(shù)。函數(shù)的實(shí)際主體可以單獨(dú)定義。函數(shù)聲明包括以下幾個(gè)部分:針對(duì)上面定義的函數(shù)max(),以下是函數(shù)聲明:intmax(intnum1,intnum2);在函數(shù)聲明中,參數(shù)的名稱并不重要,只有參數(shù)的類型是必需的,因此下面也是有效的聲明:intmax(int,int);當(dāng)您在一個(gè)源文件中定義函數(shù)且在另一個(gè)文件中調(diào)用函數(shù)時(shí),函數(shù)聲明是必需的。在這種情況下,您應(yīng)該在調(diào)用函數(shù)的文件頂部聲明函數(shù)。三技能點(diǎn)詳解——4函數(shù)的調(diào)用創(chuàng)建C函數(shù)時(shí),會(huì)定義函數(shù)做什么,然后通過(guò)調(diào)用函數(shù)來(lái)完成已定義的任務(wù)。當(dāng)調(diào)用有參函數(shù)時(shí),會(huì)發(fā)生參數(shù)值的傳遞,實(shí)參會(huì)把值傳遞給形參,被調(diào)函數(shù)接收了傳遞過(guò)來(lái)的實(shí)參后,就依據(jù)這些數(shù)據(jù)執(zhí)行自己函數(shù)體里的語(yǔ)句。執(zhí)行結(jié)束后,就把控制返回到調(diào)用者發(fā)出函數(shù)調(diào)用的地方,繼續(xù)它的執(zhí)行。根據(jù)一個(gè)函數(shù)是否由返回值,C語(yǔ)言將以兩種不同的方式對(duì)它們進(jìn)行調(diào)用。(1)沒(méi)有返回值的函數(shù),是以函數(shù)調(diào)用語(yǔ)句的方式進(jìn)行調(diào)用的,即:(2)有返回值的函數(shù),是以函數(shù)表達(dá)式的方式調(diào)用的,即:三技能點(diǎn)詳解——4函數(shù)的調(diào)用這兩種調(diào)用方式的區(qū)別是:前者是一個(gè)語(yǔ)句,以分號(hào)結(jié)尾;后者是一個(gè)表達(dá)式,凡是一個(gè)表達(dá)式能出現(xiàn)的地方,它都可以出現(xiàn)。比如出現(xiàn)在賦值語(yǔ)句的右邊;比如出現(xiàn)在一個(gè)算術(shù)表達(dá)式里參與計(jì)算等等。函數(shù)調(diào)用時(shí),在實(shí)際參數(shù)表中,必須列出與被調(diào)函數(shù)定義的形參個(gè)數(shù)相等、類型相符、次序相同的實(shí)參,各實(shí)參之間仍以逗號(hào)分隔。三技能點(diǎn)詳解——5函數(shù)調(diào)用中的參數(shù)傳遞(1)傳值方式向函數(shù)傳遞參數(shù)的傳值調(diào)用方法,調(diào)用者是把實(shí)參變量的值賦給被調(diào)用的形參變量的。由于實(shí)參變量和形參變量占用的是內(nèi)存中不同的存儲(chǔ)區(qū),被調(diào)函數(shù)對(duì)形參的加工,是在形參變量自己的存儲(chǔ)區(qū)里進(jìn)行,所以不會(huì)影響到實(shí)參變量。所以,這種數(shù)據(jù)傳遞的方式是單向的。(2)引用方式通過(guò)引用傳遞方式,形參為指向?qū)崊⒌闹羔?,?dāng)對(duì)形參的指向操作時(shí),就相當(dāng)于對(duì)實(shí)參本身進(jìn)行的操作。傳遞指針可以讓多個(gè)函數(shù)訪問(wèn)指針?biāo)玫膶?duì)象,而不用把對(duì)象聲明為全局可訪問(wèn)。三技能點(diǎn)詳解——5函數(shù)調(diào)用中的參數(shù)傳遞(3)參數(shù)為數(shù)組的傳遞方式如果您想要在函數(shù)中傳遞一個(gè)一維數(shù)組作為參數(shù),您可以用下面三種方式來(lái)聲明函數(shù)形式參數(shù),這三種聲明方式的結(jié)果是一樣的,因?yàn)槊糠N方式都會(huì)告訴編譯器將要接收一個(gè)整型指針。同樣地,您也可以傳遞一個(gè)多維數(shù)組作為形式參數(shù)。方式1:形式參數(shù)是一個(gè)已定義大小的數(shù)組:三技能點(diǎn)詳解——5函數(shù)調(diào)用中的參數(shù)傳遞方式2:形式參數(shù)是一個(gè)非固定長(zhǎng)度的數(shù)組:方式3:形式參數(shù)是一個(gè)指針:三技能點(diǎn)詳解——6函數(shù)的嵌套調(diào)用函數(shù)的嵌套調(diào)用是指當(dāng)前被調(diào)用的函數(shù)里又調(diào)用了另一個(gè)函數(shù),這就類似于在大盒子里裝小盒子,小盒子里可以再裝更小的盒子。如下所示:我們看到在主函數(shù)main()中調(diào)用了func2()函數(shù),而在func2()函數(shù)中又調(diào)用了func1()函數(shù),如此就構(gòu)成了函數(shù)的嵌套調(diào)用。案例3.1.1函數(shù)的調(diào)用在這個(gè)案例中,我們定義了一個(gè)max()函數(shù)用來(lái)實(shí)現(xiàn)求兩數(shù)中較大者,然后在主函數(shù)main()中對(duì)其進(jìn)行調(diào)用。/*****************************************內(nèi)容簡(jiǎn)述:通過(guò)調(diào)用max()函數(shù)求兩數(shù)中的較大者。*****************************************/#include

<stdio.h>intmax(intnum1,intnum2);//函數(shù)聲明intmain(){

inta=100;

int

b=200;intret;

ret=max(a,b);//調(diào)用max()函數(shù) printf("Maxvalueis:%d\n",ret);

return0;}intmax(intnum1,intnum2)//定義max()函數(shù)返回兩個(gè)數(shù)中較大的那個(gè)數(shù){

intresult;

if(num1>num2) result=num1;

elseresult=num2;

returnresult;}三技能點(diǎn)詳解——案例案例3.1.2

傳值方式參數(shù)傳遞在這個(gè)案例中,我們定義了一個(gè)swap()函數(shù)用來(lái)實(shí)現(xiàn)交換兩數(shù)值,swap()函數(shù)的參數(shù)是普通變量,然后在主函數(shù)main()中對(duì)其進(jìn)行調(diào)用。/*****************************************內(nèi)容簡(jiǎn)述:查看調(diào)用swap()函數(shù)是否能交換兩數(shù)值。****************************************/#include

<stdio.h>voidswap(intx,inty);//函數(shù)聲明intmain(){

int

a=100;

intb=200;

printf("交換前,a的值:%d\n",a);printf("交換前,b的值:%d\n",b);swap(a,b);//調(diào)用swap()函數(shù)printf("交換后,a的值:%d\n",a);printf("交換后,b的值:%d\n",b);

return0;}

voidswap(intx,inty)//定義swap()函數(shù){

int

temp;temp=x;x=y;y=temp;}三技能點(diǎn)詳解——案例案例3.1.3引用方式參數(shù)傳遞在這個(gè)案例中,我們定義了一個(gè)swap()函數(shù)用來(lái)實(shí)現(xiàn)交換兩數(shù)值,swap()函數(shù)的參數(shù)是指針變量,然后在主函數(shù)main()中對(duì)其進(jìn)行調(diào)用。/*****************************************內(nèi)容簡(jiǎn)述:查看調(diào)用swap()函數(shù)是否能交換兩數(shù)值。*****************************************/#include

<stdio.h>voidswap(int*x,int*y);//函數(shù)聲明intmain(){

int

a=100;

intb=200;printf("交換前,a的值:%d\n",a);printf("交換前,b的值:%d\n",b);swap(&a,&b);//調(diào)用swap()函數(shù),&a為指向a的指針,&b為指向b的指針printf("交換后,a的值:%d\n",a);printf("交換后,b的值:%d\n",b);

return0;}voidswap(int*x,int*y)//函數(shù)定義{

int

temp;temp=*x;*x=*y;*y=temp;}三技能點(diǎn)詳解——案例案例3.1.4

參數(shù)為數(shù)組的傳遞方式在這個(gè)案例中,我們定義了一個(gè)getAverage()函數(shù)用來(lái)求5個(gè)整數(shù)的平均值,getAverage()函數(shù)的參數(shù)是數(shù)組,然后在主函數(shù)main()中對(duì)其進(jìn)行調(diào)用。/*******************************************************內(nèi)容簡(jiǎn)述:通過(guò)調(diào)用getAverage()函數(shù)實(shí)現(xiàn)求5個(gè)整數(shù)的平均值*******************************************************/#include

<stdio.h>

doublegetAverage(intarr[],intsize)//函數(shù)定義{

inti;

doubleavg;

doublesum=0;

for(i=0;i<size;++i) { sum+=arr[i]; } avg=sum/size;

returnavg;}

intmain(){

int

balance[5]={1000,2,3,17,50};

doubleavge;avge=getAverage(balance,5);//函數(shù)調(diào)用,傳遞一個(gè)指向數(shù)組的指針作為參數(shù)printf("平均值是:%f\n",avge);

return0;}三技能點(diǎn)詳解——案例案例3.1.5

函數(shù)的嵌套調(diào)用案例題目:求任意3個(gè)整數(shù)的方差,方差公式如下:/*******************************內(nèi)容簡(jiǎn)述:求任意3個(gè)整數(shù)的方差*******************************/#include

<stdio.h>#include

<math.h>floatavg(inta,intb,intc)//定義求平均值函數(shù)avg(){

floatm; m=(a+b+c)/3.0;

returnm;}floatvar(intd,inte,intf)//定義求方差函數(shù)var(){

floatave,vai;

ave=avg(d,e,f);//調(diào)用avg()函數(shù)求出平均值賦給avevai=(pow((ave-d),2)+pow((ave-e),2)+pow((ave-f),2))/3.0;//求出方差

returnvai;}

intmain(){

intx,y,z;

floatw; printf("請(qǐng)輸入3個(gè)整數(shù):"); scanf("%d,%d,%d",&x,&y,&z); w=var(x,y,z);//調(diào)用求方差函var() printf("方差是:%f\n",w);

return0;}三技能點(diǎn)詳解——案例04技能點(diǎn)拓展03技能點(diǎn)詳解02技能點(diǎn)分析目錄CONTENTS01問(wèn)題引入05技能點(diǎn)檢測(cè)任務(wù)3.1函數(shù)的應(yīng)用四技能點(diǎn)拓展——1作用域規(guī)則任何一種編程中,作用域是程序中定義的變量所存在的區(qū)域,超過(guò)該區(qū)域變量就不能被訪問(wèn)。C語(yǔ)言中有三個(gè)地方可以聲明變量:在函數(shù)或塊內(nèi)部的局部變量在所有函數(shù)外部的全局變量在形式參數(shù)的函數(shù)參數(shù)定義中讓我們來(lái)看看什么是局部變量、全局變量和形式參數(shù)。四技能點(diǎn)拓展——1作用域規(guī)則(1)局部變量在某個(gè)函數(shù)或塊的內(nèi)部聲明的變量稱為局部變量。它們只能被該函數(shù)或該代碼塊內(nèi)部的語(yǔ)句使用。局部變量在函數(shù)外部是不可知的。下面是使用局部變量的實(shí)例。在這里,所有的變量a、b和c是main()函數(shù)的局部變量。如下例所示:四技能點(diǎn)拓展——1作用域規(guī)則(2)全局變量全局變量是定義在函數(shù)外部,通常是在程序的頂部。全局變量在整個(gè)程序生命周期內(nèi)都是有效的,在任意的函數(shù)內(nèi)部能訪問(wèn)全局變量。全局變量可以被任何函數(shù)訪問(wèn)。也就是說(shuō),全局變量在聲明后整個(gè)程序中都是可用的。下面是使用全局變量和局部變量的實(shí)例:四技能點(diǎn)拓展——1作用域規(guī)則在程序中,局部變量和全局變量的名稱可以相同,但是在函數(shù)內(nèi),如果兩個(gè)名字相同,會(huì)使用局部變量值,全局變量不會(huì)被使用。下面是相關(guān)實(shí)例:運(yùn)行結(jié)果:四技能點(diǎn)拓展——2形式參數(shù)函數(shù)的形式參數(shù),被當(dāng)作該函數(shù)內(nèi)的局部變量,如果與全局變量同名它們會(huì)優(yōu)先使用。如下例所示:運(yùn)行結(jié)果:四技能點(diǎn)拓展——2形式參數(shù)全局變量與局部變量在內(nèi)存中的區(qū)別是全局變量保存在內(nèi)存的全局存儲(chǔ)區(qū)中,占用靜態(tài)的存儲(chǔ)單元;局部變量保存在棧中,只有在所在函數(shù)被調(diào)用時(shí)才動(dòng)態(tài)地為變量分配存儲(chǔ)單元。當(dāng)局部變量被定義時(shí),系統(tǒng)不會(huì)對(duì)其初始化,您必須自行對(duì)其初始化。定義全局變量時(shí),系統(tǒng)會(huì)自動(dòng)對(duì)其初始化,如下所示:正確地初始化變量是一個(gè)良好的編程習(xí)慣,否則有時(shí)候程序可能會(huì)產(chǎn)生意想不到的結(jié)果,因?yàn)槲闯跏蓟淖兞繒?huì)導(dǎo)致一些在內(nèi)存位置中已經(jīng)可用的垃圾值。04技能點(diǎn)拓展03技能點(diǎn)詳解02技能點(diǎn)分析目錄CONTENTS01問(wèn)題引入05技能點(diǎn)檢測(cè)任務(wù)3.1函數(shù)的應(yīng)用五技能點(diǎn)檢測(cè)1)以下函數(shù)定義正確的是:(

)。A)doublefun(int

溫馨提示

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