




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
C語(yǔ)言程序設(shè)計(jì)_第六章_函數(shù)6.1引例引例:編程實(shí)現(xiàn)如圖結(jié)果。26.1引例【分析】從圖中看到,三角形星號(hào)圖形出現(xiàn)了三次能否僅編寫(xiě)一段程序代碼,要輸出星號(hào)圖形時(shí)就使用該段代碼?C語(yǔ)言提供了這樣的功能,以函數(shù)的組織形式編寫(xiě)代碼,當(dāng)使用時(shí)就調(diào)用此函數(shù)。36.1引例【知識(shí)點(diǎn)】1.模塊化程序設(shè)計(jì)。2.函數(shù)。46.2C語(yǔ)言函數(shù)的基本概念C語(yǔ)言中,一段有獨(dú)立功能,又能夠多次使用且具有獨(dú)立名稱與一定的輸入、輸出的代碼,稱為C語(yǔ)言的函數(shù)。函數(shù)是C語(yǔ)言程序的基本組成單元一個(gè)C程序由一個(gè)main()和若干其它函數(shù)構(gòu)成。程序的執(zhí)行總是從主函數(shù)開(kāi)始,到主函數(shù)結(jié)束。56.2.1函數(shù)的定義函數(shù)定義的一般形式:
<類型說(shuō)明><函數(shù)名>(<形參列表>)
{
函數(shù)體
}
第一行稱為函數(shù)首部,是由函數(shù)的數(shù)據(jù)類型、函數(shù)名和形參列表組成大括號(hào)括起來(lái)的若干語(yǔ)句是函數(shù)體,由完成某一功能的C語(yǔ)句組成66.2.1函數(shù)的定義在使用一個(gè)函數(shù)前,必須先對(duì)其進(jìn)行定義程序中如果調(diào)用了某個(gè)函數(shù),該函數(shù)就會(huì)在完成特定工作后,返回到調(diào)用它的地方按照返回結(jié)果不同有如下兩種情況函數(shù)經(jīng)過(guò)一系列運(yùn)算,得出一個(gè)運(yùn)算結(jié)果,并需要返回運(yùn)算結(jié)果函數(shù)只是完成一系列操作步驟,不需要返回任何結(jié)果。76.2.1函數(shù)的定義【例6-1】利用函數(shù)實(shí)現(xiàn)從鍵盤(pán)輸入兩個(gè)數(shù),輸出最大值。1、返回結(jié)果的函數(shù)定義8大家學(xué)習(xí)辛苦了,還是要堅(jiān)持繼續(xù)保持安靜9#include<stdio.h>intmax(intx,inty)/*返回結(jié)果的函數(shù)定義*/{intz;z=x>y?x:y;/*z為x與y中最大的值*/printf("max()函數(shù)中找出了兩數(shù)的最大值。\n");return(z);}intmain(void){inta,b,c;printf("請(qǐng)輸入數(shù)值a和b的值:\n");scanf("%d,%d",&a,&b);printf("main()函數(shù)中輸入a和b的值,下面調(diào)用max()函數(shù)\n");c=max(a,b);printf("main()函數(shù)中輸出a、b中的最大值是%d。\n",c);return0;}106.2.1函數(shù)的定義返回結(jié)果的函數(shù)定義形式為:返回值類型標(biāo)識(shí)符函數(shù)名(形參列表){ 變量聲明 語(yǔ)句部分 }116.2.1函數(shù)的定義void函數(shù)名(形參表){函數(shù)體;}2、不返回結(jié)果的函數(shù)定義126.2.1函數(shù)的定義為了明確表示不需要函數(shù)返回值,用void定義函數(shù)為“無(wú)類型”。函數(shù)體中可以出現(xiàn)return語(yǔ)句,也可以省略。void類型的函數(shù)雖然不直接返回一個(gè)值,但它的作用通常可以實(shí)現(xiàn)屏幕輸出等功能。2、不返回結(jié)果的函數(shù)定義136.2.1函數(shù)的定義【例6-2】編寫(xiě)函數(shù)實(shí)現(xiàn)打印五行十個(gè)星號(hào)?!痉治觥恐髡{(diào)函數(shù)輸入星號(hào)的行數(shù)及每行星號(hào)數(shù),并調(diào)用打印星號(hào)函數(shù);建立printstar(intm,intn)函數(shù)實(shí)現(xiàn)打印星號(hào)的功能,將星號(hào)直接屏幕輸出。2、不返回結(jié)果的函數(shù)定義14#include<stdio.h>intmain(void){voidprintstar(intm,intn);inta,b;printf("請(qǐng)輸入要打印星號(hào)的行數(shù)和每行的星號(hào)數(shù):\n");scanf("%d,%d",&a,&b);printf("主調(diào)函數(shù),下面要調(diào)用printstar()函數(shù)。\n");printstar(a,b);/*調(diào)用printstar()函數(shù)*/printf("返回到主調(diào)函數(shù)。\n");return0;}voidprintstar(intm,intn)/*printstar()函數(shù)的定義,不返回結(jié)果的定義*/{inti,j;printf("被調(diào)函數(shù)printstar(),要打印五行十個(gè)星號(hào)。\n");for(i=1;i<=m;i++){ for(j=1;j<=n;j++) printf("*");
printf("\n"); }}15【說(shuō)明】①函數(shù)定義的第一行是函數(shù)首部,后面不能加分號(hào)。②函數(shù)首部的類型標(biāo)識(shí)符是指函數(shù)類型。如果省略函數(shù)的類型標(biāo)識(shí)符,則默認(rèn)的數(shù)據(jù)類型為int型。③函數(shù)名必須是有效的標(biāo)識(shí)符。④形參列表中給出函數(shù)所有形參的名稱和類型。各個(gè)形參之間用逗號(hào)分隔,每個(gè)形參前面的類型必須分別寫(xiě)明。⑤函數(shù)體寫(xiě)在一對(duì)大括號(hào)中,包括變量聲明和語(yǔ)句部分。166.2.2函數(shù)返回值和函數(shù)類型從函數(shù)返回值的類型來(lái)看,有兩種類型:有確定的運(yùn)算結(jié)果返回給主調(diào)函數(shù)沒(méi)有確定的運(yùn)算結(jié)果返回給主調(diào)函數(shù)1、函數(shù)返回值176.2.2函數(shù)返回值和函數(shù)類型函數(shù)結(jié)果返回形式:
return返回值表達(dá)式;上述語(yǔ)句也可表示成:
return(返回值表達(dá)式);return語(yǔ)句的功能有兩個(gè):一是結(jié)束子函數(shù)的運(yùn)行;二是先求解表達(dá)式的值,然后返回調(diào)用函數(shù),并將“返回值表達(dá)式”的值帶給調(diào)用函數(shù)。1、函數(shù)返回值186.2.2函數(shù)返回值和函數(shù)類型【例6-4】利用函數(shù)調(diào)用實(shí)現(xiàn)兩個(gè)數(shù)相加?!痉治觥烤帉?xiě)sum()實(shí)現(xiàn)加法操作,并返回兩數(shù)相加值;在main()函數(shù)中,實(shí)現(xiàn)兩數(shù)的輸入,調(diào)用加法函數(shù),輸出結(jié)果等。1、函數(shù)返回值19#include<stdio.h>intsum(intx,inty);//函數(shù)原型聲明intmain(){ ints; s=sum(8,6);//調(diào)用子函數(shù)實(shí)現(xiàn)兩個(gè)數(shù)相加
printf("sum=%d\n",s);}intsum(intx,inty){intz;z=x+y;return(z);//返回兩數(shù)相加的結(jié)果}20【說(shuō)明】①函數(shù)的返回值是通過(guò)return語(yǔ)句獲得的。當(dāng)不需返回函數(shù)值時(shí),可省去return語(yǔ)句;②return語(yǔ)句的后面可以是變量,也可以是表達(dá)式。③在函數(shù)中如果有多個(gè)return語(yǔ)句,每次調(diào)用函數(shù)時(shí),必定只執(zhí)行其中一個(gè)return語(yǔ)句。21【例6-5】將1~100之間所有3的倍數(shù)的數(shù)相加。22#include<stdio.h>intmain(void){inttrip(intn);inti,s; intflag; s=0; for(i=3;i<100;i++) { flag=trip(i);if(flag==1) s=s+i;} printf("1~100之間所有3的倍數(shù)的數(shù)之和為:%d",s);return0;}inttrip(intn){if(n%3==0)return1;elsereturn0;}236.2.2函數(shù)返回值和函數(shù)類型如果在順序結(jié)構(gòu)的程序中出現(xiàn)多個(gè)return語(yǔ)句,則遇到第一個(gè)return語(yǔ)句就會(huì)結(jié)束當(dāng)前函數(shù)的運(yùn)行而返回主調(diào)函數(shù),其它return語(yǔ)句不再運(yùn)行。1、函數(shù)返回值246.3函數(shù)調(diào)用在程序中,通過(guò)對(duì)函數(shù)的調(diào)用來(lái)執(zhí)行函數(shù)體。一個(gè)函數(shù)可以被其它函數(shù)多次調(diào)用,每次調(diào)用時(shí)可以處理不同的數(shù)據(jù),因此函數(shù)是對(duì)不同數(shù)據(jù)進(jìn)行相同處理的一般程序形式。256.3.1函數(shù)調(diào)用的一般形式和過(guò)程函數(shù)調(diào)用的一般形式為: 函數(shù)名(實(shí)參表)或表示為: 函數(shù)名(實(shí)參1,實(shí)參2,...,實(shí)參n)實(shí)參可以是常量、變量和表達(dá)式。26【例6-6】通過(guò)函數(shù)調(diào)用實(shí)現(xiàn)輸出n之內(nèi)的數(shù)字金字塔,閱讀程序代碼理解函數(shù)調(diào)用的一般形式?!痉治觥拷⒑瘮?shù)pyramid(intn)實(shí)現(xiàn)打印數(shù)字金字塔的功能,因此該函數(shù)定義成void類型。在主函數(shù)中,通過(guò)調(diào)用pyramid(m)函數(shù)實(shí)現(xiàn)金字塔的打印。其中括號(hào)中的m是實(shí)參,將實(shí)參傳遞到函數(shù)定義的形參中,即將m的值傳遞給n。27#include<stdio.h>voidpyramid(intn)//被調(diào)函數(shù)的定義{inti,j;for(i=1;i<=n;i++){ for(j=1;j<=n-i;j++) printf(""); for(j=1;j<=i;j++) printf("%d",i); printf("\n");}}intmain(void)//主調(diào)函數(shù){intm; printf("請(qǐng)輸入金字塔行數(shù)m的數(shù)值:"); scanf("%d",&m);
pyramid(m);//調(diào)用函數(shù)pyramid() printf("\n");return0;}286.3.1函數(shù)調(diào)用的一般形式和過(guò)程所有的C程序都是從main()函數(shù)開(kāi)始執(zhí)行,無(wú)論main()函數(shù)的位置在哪里。如果main()函數(shù)執(zhí)行過(guò)程中遇到某個(gè)函數(shù)a()的調(diào)用,則main()函數(shù)被暫停執(zhí)行,轉(zhuǎn)而執(zhí)行相應(yīng)的被調(diào)函數(shù)a()。當(dāng)被調(diào)函數(shù)執(zhí)行完后,將返回main()函數(shù),從原來(lái)暫停的位置繼續(xù)執(zhí)行3、函數(shù)調(diào)用過(guò)程29【例6-7】引例求解。編寫(xiě)C語(yǔ)言程序?qū)崿F(xiàn)打印三個(gè)正三角,第一個(gè)是三行,第二個(gè)是四行,第三個(gè)五行,要求其運(yùn)行結(jié)果如圖所示。30【分析】圖中要求輸出的三個(gè)正三角星號(hào)的程序代碼是重復(fù)的,不同之處僅僅是輸出的行數(shù)不同,因此可將輸出正三角作為被調(diào)函數(shù)的功能。而被調(diào)函數(shù)的參數(shù)可設(shè)成正三角形的行數(shù)?!纠?-7】引例求解。編寫(xiě)C語(yǔ)言程序?qū)崿F(xiàn)打印三個(gè)正三角,第一個(gè)是三行,第二個(gè)是四行,第三個(gè)五行,要求其運(yùn)行結(jié)果如圖所示。31#include<stdio.h>intmain(void){voidprintstar(intm);//被調(diào)函數(shù)聲明
printstar(3);printf("函數(shù)是C語(yǔ)言程序的基本單位\n");printstar(4);printf("程序設(shè)計(jì)時(shí)程序員總是將復(fù)雜問(wèn)題分解\n");printstar(5); printf("將小程序拼接起來(lái)能解決大而復(fù)雜的問(wèn)題\n");return0;}voidprintstar(intm)//被調(diào)函數(shù)定義{inti,j,k; for(i=1;i<=m;i++){ for(k=1;k<=10-i;k++) printf(""); for(j=1;j<=2*i-1;j++) printf("*"); printf("\n"); }}326.3.2函數(shù)調(diào)用的參數(shù)傳遞在函數(shù)的定義和調(diào)用過(guò)程中會(huì)用到函數(shù)的參數(shù),函數(shù)的參數(shù)有兩種:形式參數(shù)和實(shí)際參數(shù),分別簡(jiǎn)稱為形參和實(shí)參。336.3.2函數(shù)調(diào)用的參數(shù)傳遞1、形參與實(shí)參的區(qū)別形式參數(shù)又稱為形參,它用來(lái)說(shuō)明某函數(shù)在被調(diào)用時(shí),需要傳給該函數(shù)多少個(gè)變量,以及變量的類型。因此“形參表”是一種形式上的定義,通過(guò)這些“符號(hào)”,調(diào)用函數(shù)就知道應(yīng)該給函數(shù)傳遞什么樣的數(shù)據(jù)。實(shí)際參數(shù)又稱為實(shí)參,它是調(diào)用函數(shù)向被調(diào)用函數(shù)提供的一些具體信息(數(shù)據(jù)),可以是常量、變量或表達(dá)式,它必須有具體的值。34主調(diào)函數(shù)對(duì)某函數(shù)調(diào)用時(shí),必須按順序?qū)?shí)參準(zhǔn)確地傳遞給形參,被調(diào)函數(shù)通過(guò)形參接收相應(yīng)的數(shù)據(jù),執(zhí)行函數(shù)體。主調(diào)函數(shù)函數(shù)名(實(shí)參1,實(shí)參2,...,實(shí)參n)
被調(diào)用函數(shù)函數(shù)名(形參1,形參2,...,形參n)1、形參與實(shí)參的區(qū)別35【例6-8】從程序中分析實(shí)參和形參的作用。#include<stdio.h> intmax(intx,inty)
;intmain(void){//主調(diào)函數(shù)inta,b,c;scanf("%d,%d",&a,&b);c=max(a,b);//調(diào)用max()函數(shù)
printf("Maxis%d",c);return0;}intmax(intx,inty){//被調(diào)函數(shù)定義intz;x=x+8;y=y+12;z=x>y?x:y;return(z);}36調(diào)用函數(shù)main()函數(shù)c=max(a,b)
被調(diào)用函數(shù)intmax(intx,inty)函數(shù)體intz;x=x+8;y=y+12;z=x>y?x:y;return(z);37【說(shuō)明】①形參是單個(gè)的變量名,實(shí)參可以是常量、變量或表達(dá)式,如:
c=max(a,b+2);無(wú)論實(shí)參是常量、變量或表達(dá)式,它們都有確定的值,在進(jìn)行函數(shù)調(diào)用時(shí),把這些值傳送給形參。因此,應(yīng)預(yù)先用賦值、輸入等辦法使實(shí)參獲得確定的值。②實(shí)參與形參之間的個(gè)數(shù)及類型必須一一對(duì)應(yīng)。③形參只有被調(diào)用時(shí),才分配內(nèi)存單元,有確定的值;調(diào)用結(jié)束時(shí)就釋放所分配的內(nèi)存單元,形參只有在被調(diào)用函數(shù)內(nèi)有效。④在用戶自定義函數(shù)中,形參必須指定數(shù)據(jù)類型。形參的類型聲明可以放在函數(shù)名后的括號(hào)中,如本例中
intmax(intx,inty);也可以放在函數(shù)的頭部與函數(shù)體之間。例如:
intmax(x,y)
intx,y;{…}38【例6-9】?jī)勺兞繑?shù)值的交換。通過(guò)該例題源程序代碼分析實(shí)參和形參之間的相互影響。#include<stdio.h>intmain(void){voidsx,inty);
inta,b; printf("Pleaseinputaandb:"); scanf("%d%d",&a,&b); printf("交換前a和b的值:a=%d,b=%d\n",a,b); s);printf("交換后a和b的值:a=%d,b=%d\n",a,b);return0;}voidsx,inty){inttemp;temp=x; x=y;y=temp; printf("在函數(shù)swap()中:x=%d,y=%d\n",x,y);}39【分析】從運(yùn)行結(jié)果看主函數(shù)中a,b的值在調(diào)用swap()函數(shù)后并沒(méi)有交換,而在swap()函數(shù)中x,y的值交換了。原因是實(shí)參a,b和形參x,y分別占用不同的內(nèi)存單元,在swap()函數(shù)中,形參x和y的值互換了,只是在x和y的內(nèi)存單元的值互換了,但對(duì)a和b內(nèi)存單元中的值不產(chǎn)生影響,如圖6-11所示。當(dāng)swap()函數(shù)執(zhí)行結(jié)束后就釋放x和y的內(nèi)存單元,而其中x和y交換后的數(shù)值也隨之釋放了。因此返回主函數(shù)main()后輸出的a和b的值沒(méi)有交換。5a5x19b19y調(diào)用前5a19x19b5y調(diào)用后406.3.3函數(shù)原型說(shuō)明如果自定義函數(shù)被放在主調(diào)函數(shù)的后面,則需要在函數(shù)調(diào)用前,加上函數(shù)原型說(shuō)明。在C語(yǔ)言中,函數(shù)原型說(shuō)明也稱為“函數(shù)聲明”,利用它說(shuō)明函數(shù)的類型和參數(shù)情況,在程序編譯階段對(duì)調(diào)用函數(shù)的合法性進(jìn)行全面檢查。函數(shù)原型說(shuō)明的一般格式:
<函數(shù)類型標(biāo)識(shí)符><函數(shù)名>(<形參列表));函數(shù)原型說(shuō)明語(yǔ)句最后的分號(hào)不能省略,其作用是表示該語(yǔ)句是進(jìn)行函數(shù)聲明而不是函數(shù)定義。416.5變量與函數(shù)變量的作用域:有效作用范圍。在這個(gè)范圍內(nèi)變量是有效的,超出這個(gè)范圍,為變量分配的存儲(chǔ)空間被釋放,在范圍外引用變量是非法的,會(huì)產(chǎn)生錯(cuò)誤。C語(yǔ)言中所有的變量都有自己的作用域。變量定義的位置不同,其作用域也不同。426.5.1內(nèi)部變量和外部變量1、內(nèi)部變量在一個(gè)函數(shù)內(nèi)部定義的變量是內(nèi)部變量,它只在該函數(shù)范圍內(nèi)有效。只有在包含變量定義的函數(shù)內(nèi)部才能使用被定義的變量,在此函數(shù)之外就不能使用這些變量了。所以內(nèi)部變量也稱為“局部變量”。43voidfloatf1(inta){intb,c;…….}voidcharf2(intx,inty){inti,j;……}intmain(void){
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025河北秦皇島城市發(fā)展投資控股集團(tuán)有限公司選聘子公司職業(yè)經(jīng)理人1人考前自測(cè)高頻考點(diǎn)模擬試題及答案詳解(名師系列)
- 2025年合肥廬江縣繡溪城市服務(wù)有限公司招聘2人考前自測(cè)高頻考點(diǎn)模擬試題及完整答案詳解
- 會(huì)議強(qiáng)調(diào)假期管理制度
- 從化十周年活動(dòng)策劃方案
- 企業(yè)家培訓(xùn)咨詢方案
- 2025年幼兒?jiǎn)⒚伤季S題庫(kù)及答案
- 接力賽演講稿
- 質(zhì)檢員面試模擬考試題及答案
- 2025廣東工業(yè)大學(xué)招聘事業(yè)編制工作人員23人模擬試卷及一套答案詳解
- 小學(xué)太極考研真題及答案
- 文學(xué)名著紅樓夢(mèng)故事解讀
- 乒乓球比賽裁判員學(xué)習(xí)用(教學(xué))
- 非口服藥物的吸收(生物藥劑學(xué)與藥物動(dòng)力學(xué)課件)
- 《中外美術(shù)史》課件
- 七年級(jí)語(yǔ)文上冊(cè)課外閱讀之《朝花夕拾》讀書(shū)分享課件
- 節(jié)目組勞務(wù)合同模板
- 鍋爐培訓(xùn)課件
- 青島 二年級(jí) 數(shù)學(xué) 上冊(cè) 第4單元《8的乘法口訣》教學(xué)課件
- 廣東省東莞市五校2024-2025學(xué)年高一上學(xué)期第一次聯(lián)考數(shù)學(xué)試題(無(wú)答案)
- 中華人民共和國(guó)標(biāo)準(zhǔn)設(shè)計(jì)施工總承包招標(biāo)文件(2012年版)
- PVC-地面中水泥基自流平找平層的施工作業(yè)指導(dǎo)書(shū)
評(píng)論
0/150
提交評(píng)論