




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
C程序設(shè)計(jì)函數(shù)2
主要內(nèi)容概述函數(shù)的定義函數(shù)參數(shù)(變量、數(shù)組)和函數(shù)的值函數(shù)的調(diào)用函數(shù)的嵌套調(diào)用和遞歸調(diào)用局部變量和全局變量以及變量的存儲(chǔ)類(lèi)別38.1概述C程序的結(jié)構(gòu)如圖所示一個(gè)C程序包含若干個(gè)函數(shù)組成每個(gè)函數(shù)有且僅有一個(gè)main函數(shù),其他函數(shù)都是子函數(shù)子函數(shù)可以相互調(diào)用,但主函數(shù)main不能被調(diào)用一個(gè)C原程序可由一個(gè)或多個(gè)文件構(gòu)成,一個(gè)原程序文件是一個(gè)編譯單位4說(shuō)明:C程序的執(zhí)行從main函數(shù)開(kāi)始調(diào)用其他函數(shù)后仍回到main函數(shù),程序在main函數(shù)結(jié)束時(shí)結(jié)束所有子函數(shù)都是平行的,任何子函數(shù)都不屬于其他函數(shù)從用戶(hù)的定義,函數(shù)可分為:標(biāo)準(zhǔn)函數(shù),即庫(kù)函數(shù)自定義函數(shù)從函數(shù)的形式分:有參函數(shù)無(wú)參函數(shù)58.1函數(shù)定義函數(shù)定義的一般形式intmax(intx,inty)
{intz;
if(x>y)z=x;
elsez=y;
return(z);
}6函數(shù)的定義函數(shù)類(lèi)型規(guī)定該函數(shù)返回值的類(lèi)型函數(shù)返回值可以是除數(shù)組外的任何合法的數(shù)據(jù)類(lèi)型,如int、long、float、char、指針、結(jié)構(gòu)體等系統(tǒng)默認(rèn)的類(lèi)型是整類(lèi)型如果未指定類(lèi)型,則返回值為整型可用void表示如果函數(shù)沒(méi)有返回值
函數(shù)類(lèi)型函數(shù)名(形參表說(shuō)明)
{/*函數(shù)體*/
說(shuō)明語(yǔ)句執(zhí)行語(yǔ)句
[return;函數(shù)返回值]
}7函數(shù)的定義函數(shù)名是用戶(hù)自定義的標(biāo)識(shí)符是函數(shù)定義中唯一不可省略的部分需符合命名規(guī)則的標(biāo)識(shí)符用在程序中標(biāo)識(shí)函數(shù),并用該標(biāo)識(shí)符調(diào)用函數(shù)一個(gè)好的函數(shù)名應(yīng)該能夠反映該函數(shù)的模塊的功能函數(shù)名本身代表數(shù)值代表了該函數(shù)的入口地址8函數(shù)的定義形參表(也稱(chēng)“形式參數(shù)”)形參表是用逗號(hào)分隔的一組變量說(shuō)明作用是指出每一個(gè)形參的類(lèi)型和形參的名稱(chēng)包括形參的類(lèi)型和形參標(biāo)識(shí)符當(dāng)調(diào)用函數(shù)時(shí),接受來(lái)自主調(diào)函數(shù)的數(shù)據(jù),確定各參數(shù)的值
函數(shù)類(lèi)型函數(shù)名(形參表說(shuō)明)
{/*函數(shù)體*/
說(shuō)明語(yǔ)句執(zhí)行語(yǔ)句
[return;函數(shù)返回值]
}9函數(shù)的定義函數(shù)體用{}括起來(lái)的部分是函數(shù)的主體函數(shù)體是一段體現(xiàn)函數(shù)功能的程序函數(shù)內(nèi)部應(yīng)有自己的說(shuō)明語(yǔ)句和執(zhí)行語(yǔ)句形式參數(shù)表中經(jīng)過(guò)說(shuō)明的變量可以在函數(shù)體內(nèi)直接使用但函數(shù)內(nèi)定義的變量不可以與形參同名提示函數(shù)體部分可以沒(méi)有,空函數(shù),但是每個(gè)函數(shù)體外面的一對(duì){}不能省略任何情況下不允許一個(gè)函數(shù)內(nèi)部定義另外一個(gè)函數(shù)(函數(shù)不能嵌套定義)
函數(shù)類(lèi)型函數(shù)名(形參表說(shuō)明)
{/*函數(shù)體*/
說(shuō)明語(yǔ)句執(zhí)行語(yǔ)句
[return;函數(shù)返回值]
}10函數(shù)的定義函數(shù)返回值函數(shù)調(diào)用后函數(shù)體計(jì)算執(zhí)行的結(jié)果稱(chēng)為函數(shù)的返回值通過(guò)返回語(yǔ)句結(jié)束函數(shù),并將計(jì)算結(jié)果帶回主調(diào)函數(shù)函數(shù)返回值類(lèi)型函數(shù)定義時(shí)的類(lèi)型就是函數(shù)返回值的類(lèi)型C語(yǔ)言要求函數(shù)定義的類(lèi)型應(yīng)當(dāng)與返回語(yǔ)句中表達(dá)式的類(lèi)型保持一致當(dāng)兩者不一致時(shí),系統(tǒng)自動(dòng)進(jìn)行轉(zhuǎn)換,將函數(shù)返回語(yǔ)句中表達(dá)式的類(lèi)型轉(zhuǎn)換為函數(shù)定義時(shí)的類(lèi)型提示函數(shù)的類(lèi)型決定著返回值的類(lèi)型系統(tǒng)進(jìn)行自動(dòng)的轉(zhuǎn)換會(huì)造成程序的不清晰、可讀性差等
函數(shù)類(lèi)型函數(shù)名(形參表說(shuō)明)
{/*函數(shù)體*/
說(shuō)明語(yǔ)句執(zhí)行語(yǔ)句
[return函數(shù)返回值;]
}11函數(shù)的定義返回語(yǔ)句格式
函數(shù)類(lèi)型函數(shù)名(形參表說(shuō)明)
{/*函數(shù)體*/
說(shuō)明語(yǔ)句執(zhí)行語(yǔ)句
[return;函數(shù)返回值]
}return表達(dá)式;/*return(2*3)表示函數(shù)返回值為6
*/
return(表達(dá)式);/*return2*3表示函數(shù)返回值為6
*/
return;/*沒(méi)有返回值*/12函數(shù)的定義一個(gè)函數(shù)體內(nèi)可以有多個(gè)返回語(yǔ)句,不論執(zhí)行到哪一個(gè),函數(shù)都結(jié)束,回到主調(diào)函數(shù)對(duì)帶有返回值的函數(shù),在調(diào)用時(shí),可以將其作為同類(lèi)型的一個(gè)變量一樣使用sign(intx)
{if(x>0)return(1);if(x==0)return(0);
if(x<0)renturn(-1);
}inta,b,c,max;
max=max(c,max(a,b));13函數(shù)的定義為了保證函數(shù)不返回任何值,C語(yǔ)言規(guī)定,可以定義無(wú)類(lèi)型(void類(lèi)型)函數(shù),同時(shí)函數(shù)體可以省略使用return語(yǔ)句,如果使用也只能使用return;(不能帶任何參數(shù))14函數(shù)的定義空類(lèi)型說(shuō)明沒(méi)有返回值C++語(yǔ)言規(guī)定,一個(gè)函數(shù)可以沒(méi)有返回值,函數(shù)類(lèi)型應(yīng)明確定義為void(空)類(lèi)型對(duì)于void(空)類(lèi)型函數(shù),系統(tǒng)保證不使函數(shù)帶有任何值同時(shí)也禁止在調(diào)用函數(shù)中使用被調(diào)函數(shù)的值15函數(shù)的定義空類(lèi)型格式說(shuō)明void類(lèi)型的函數(shù)不是調(diào)用函數(shù)之后不再返回,而是調(diào)用函數(shù)在返回時(shí)沒(méi)有返回值void類(lèi)型的函數(shù)與有返回值類(lèi)型的函數(shù)在定義過(guò)程中沒(méi)有區(qū)別,只是在調(diào)用時(shí)不同void類(lèi)型的函數(shù)不能將函數(shù)調(diào)用放在表達(dá)式之中,只能在語(yǔ)句中單獨(dú)調(diào)用void類(lèi)型的函數(shù)一般用于完成一些規(guī)定的操作void函數(shù)名(形參表)
{……}168.3函數(shù)參數(shù)和函數(shù)的值一個(gè)C程序由若干個(gè)函數(shù)組成,各函數(shù)調(diào)用時(shí)經(jīng)常需要傳遞一些數(shù)據(jù)。即調(diào)用函數(shù)把數(shù)據(jù)傳遞給被調(diào)用函數(shù),經(jīng)被調(diào)函數(shù)處理后,得到一個(gè)確定的結(jié)果,在返回調(diào)用函數(shù)時(shí),把這結(jié)果帶回調(diào)用函數(shù)各函數(shù)間信息的往來(lái)是由參數(shù)傳遞和返回語(yǔ)句實(shí)現(xiàn)的例:求最大值函數(shù)#include<iostream>intmax(intx,inty){intz;
if(x>y)z=x;
elsez=y;
return(z);}
voidmain(){inta,b,c;
scanf(“%d%d”,&a,&b);
c=max(a,b);
printf(“%d”,c);}17函數(shù)參數(shù):用于函數(shù)間數(shù)據(jù)的傳遞形式參數(shù):定義函數(shù)時(shí)使用的參數(shù)實(shí)際參數(shù):引用函數(shù)時(shí)使用的參數(shù)形式參數(shù)只能在函數(shù)定義內(nèi)部使用#include<iostream>intmax(intx,inty){intz;
if(x>y)z=x;
elsez=y;
return(z);}
voidmain(){inta,b,c;
scanf(“%d%d”,&a,&b);
c=max(a,b);printf(“%d”,c);}18說(shuō)明:函數(shù)定義時(shí),必須說(shuō)明形參的類(lèi)型。形參只能是變量或數(shù)組,不能是常量或表達(dá)式函數(shù)被調(diào)用前,形參不占內(nèi)存;函數(shù)調(diào)用結(jié)束后,形參所占內(nèi)存也將被收回。實(shí)參可以是常量、變量或表達(dá)式實(shí)參和形參的類(lèi)型必須要一致。字符型和整型可以相互匹配C語(yǔ)言中實(shí)參對(duì)形參的數(shù)據(jù)傳遞是“值傳遞”,即單向傳遞。僅由參數(shù)對(duì)應(yīng)的位置確定,與名字無(wú)關(guān)#include<iostream>intmax(intx,inty){intz;
if(x>y)z=x;
elsez=y;
return(z);}
voidmain(){inta,b,c;
scanf(“%d%d”,&a,&b);
c=max(a,b);
printf(“%d”,c);}19讀程序,寫(xiě)出運(yùn)行結(jié)果208.4函數(shù)的調(diào)用函數(shù)調(diào)用的一般形式函數(shù)名(實(shí)參表)說(shuō)明:如果調(diào)用無(wú)參函數(shù),實(shí)參表可以忽略,但括號(hào)不能省實(shí)參和形參的個(gè)數(shù)一般相等實(shí)參和形參的類(lèi)型一一對(duì)應(yīng),必要時(shí)使用類(lèi)型轉(zhuǎn)換在不同的C語(yǔ)言編譯系統(tǒng)中,實(shí)參的計(jì)算順序不同。微機(jī)上一般是從右到左,為避免由此引起的混亂,一般應(yīng)在函數(shù)調(diào)用前計(jì)算出實(shí)參的值21函數(shù)的調(diào)用方式:函數(shù)語(yǔ)句函數(shù)表達(dá)式22函數(shù)調(diào)用函數(shù)調(diào)用方式函數(shù)語(yǔ)句作為程序中的一條語(yǔ)句調(diào)用被調(diào)函數(shù)調(diào)用格式:
函數(shù)名(實(shí)參表);說(shuō)明通常只完成一種操作,不帶回返回值常用于調(diào)用一個(gè)可以忽略返回值或沒(méi)有返回值的函數(shù)只要求函數(shù)完成一定的操作23函數(shù)調(diào)用函數(shù)調(diào)用方式函數(shù)表達(dá)式函數(shù)調(diào)用出現(xiàn)在一個(gè)表達(dá)式中,這個(gè)表達(dá)式稱(chēng)為函數(shù)表達(dá)式將函數(shù)的調(diào)用結(jié)果作運(yùn)算符的運(yùn)算分量格式
變量名=函數(shù)表達(dá)式;說(shuō)明這種方式用于調(diào)用帶有返回值的函數(shù)要求函數(shù)必須帶回一個(gè)確定的值參與表達(dá)式的運(yùn)算24函數(shù)調(diào)用的執(zhí)行過(guò)程按照從右到左的順序,計(jì)算實(shí)參中各表達(dá)式的值;按照位置,將實(shí)參意義傳遞給形參執(zhí)行被調(diào)用函數(shù)當(dāng)遇到return語(yǔ)句時(shí),計(jì)算表達(dá)式的值,并返回主調(diào)函數(shù)25函數(shù)原形的說(shuō)明在程序中調(diào)用函數(shù)需滿(mǎn)足以下條件:被調(diào)函數(shù)必須存在,且遵循“先定義后使用”的原則如果被調(diào)函數(shù)在主調(diào)函數(shù)之后(位置),可以先給出原形說(shuō)明函數(shù)原形說(shuō)明的形式函數(shù)類(lèi)型函數(shù)名(形參類(lèi)型);例:求最大值函數(shù)#include<stdio.h>voidmain(){intn1,n2,a;
intmax(intx,inty);scanf(“%d%d”,&x,&y);
a=max(n1,n2);
printf(“%d”,a);}intmax(intx,inty){intz;
if(x>y)z=x;
elsez=y;
return(z);}268.5函數(shù)的嵌套調(diào)用嵌套調(diào)用指在一個(gè)函數(shù)的函數(shù)體中又調(diào)用了其他函數(shù)函數(shù)的執(zhí)行過(guò)程main(){…num1();
…}num1(){…num2();
…}num2(){
…
}27函數(shù)嵌套調(diào)用嵌套過(guò)程例:編寫(xiě)程序輸出20以?xún)?nèi)的全部素?cái)?shù),并計(jì)算20以?xún)?nèi)全部素?cái)?shù)之積與全部素?cái)?shù)之和的商28#include<stdio.h>#include<math.h>intisprime(int);
main()
{inti,a,s;
floatb,c;
intadd(int);
floatmul(int);
for(i=0;i<=20;i++){s=isprime(i);
if(s)printf(“%d\n”,i);}
a=add(20);
b=mul(20);
c=b/a;
printf(“%f\n”,c);}函數(shù)intisprime(int)供三個(gè)函數(shù)調(diào)用,因此在文件開(kāi)始處作聲明。add(int)與mul(int)只被main函數(shù)調(diào)用,只需在main函數(shù)中聲明。mul函數(shù)值用int會(huì)超出取值范圍,所以用float型。函數(shù)嵌套調(diào)用29intadd(intn){inti,s,sum=0;
for(i=2;i<=n;;i++){s=isprime(i);
if(s)sum+=i;}
return(sum);}intmul(intn){inti,s;
floatt=1.0;
for(i=2;i<=n;i++){s=isprime(i);
if(s)t*=i;}
returnt;}intisprime(intm){
inti;
for(i=2;i<=sqrt(m);i++)
if(m%i==0)return(0);
return(1);}函數(shù)嵌套調(diào)用308.6函數(shù)的遞歸調(diào)用遞歸調(diào)用是指在調(diào)用一個(gè)函數(shù)時(shí)又直接或間接的調(diào)用了函數(shù)本身直接遞歸調(diào)用間接遞歸調(diào)用31main(){…num1();
…}num1(){…num1();
…
}直接遞歸過(guò)程:間接遞歸過(guò)程:main(){…num1();
…}num1(){…num2();
…}num2(){…num1();
…}函數(shù)的遞歸調(diào)用32兩種遞歸都無(wú)法結(jié)束,因此應(yīng)含有某種條件控制遞歸調(diào)用結(jié)束33函數(shù)的遞歸調(diào)用遞歸問(wèn)題的求解方法編寫(xiě)遞歸程序的前提找出正確的遞歸算法這是編寫(xiě)遞歸程序的基礎(chǔ)確定算法的遞歸結(jié)束條件這是決定遞歸程序能否正常結(jié)束的關(guān)鍵34例:用遞歸法求階乘n!(n>0)35函數(shù)的遞歸調(diào)用提示當(dāng)一個(gè)問(wèn)題蘊(yùn)含了遞歸關(guān)系且結(jié)構(gòu)比較復(fù)雜時(shí),采用遞歸調(diào)用的程序設(shè)計(jì)技巧可以使程序變得簡(jiǎn)潔,增加了程序的可讀性遞歸調(diào)用本身是以犧牲存儲(chǔ)空間為基礎(chǔ)的因?yàn)槊恳淮芜f歸調(diào)用都要保存相關(guān)的參數(shù)和變量遞歸本身也不會(huì)加快執(zhí)行速度相反,由于反復(fù)調(diào)用函數(shù),還會(huì)或多或少地增加時(shí)間開(kāi)銷(xiāo)遞歸調(diào)用能使代碼緊湊,并能夠很容易地解決一些用非遞歸算法很難解決的問(wèn)題所有的遞歸問(wèn)題都一定可以用非遞歸的算法實(shí)現(xiàn)368.7數(shù)組作為函數(shù)的參數(shù)數(shù)組元素作為函數(shù)的實(shí)參與變量作為實(shí)參一樣——值傳遞例8-9:求10個(gè)任意整數(shù)中的最大數(shù)372.一維數(shù)組與函數(shù)參數(shù)若參數(shù)的形參是數(shù)組,則對(duì)應(yīng)的實(shí)參必須是數(shù)組名說(shuō)明:實(shí)參數(shù)組與形參數(shù)組的類(lèi)型必須一致用數(shù)組名做參數(shù)時(shí),傳遞的是數(shù)組的首地址,因此,形參數(shù)組也可以不指定大小。但須另外設(shè)置一個(gè)參數(shù),傳遞數(shù)組元素的個(gè)數(shù)38數(shù)組做函數(shù)參數(shù)時(shí),形參數(shù)組和實(shí)參數(shù)組共享同一內(nèi)存單元如果形參數(shù)組的值被改變,實(shí)參數(shù)組的元素的值也就被改變了例8-10用比較法排序393.多維數(shù)組和函數(shù)參數(shù)多維數(shù)組可以作為函數(shù)的參數(shù)如果形參是多維數(shù)組,可以省略第一維的大小,但不能省略其他維的大小例子8-11.有一個(gè)3*4的矩陣,求其元素的最大值40418.8局部變量和全局變量局部變量下列變量是局部變量在一個(gè)函數(shù)內(nèi)部定義的變量函數(shù)的形式參數(shù)在某個(gè)復(fù)合語(yǔ)句中定義的變量42說(shuō)明:局部變量只在自己的作用域范圍內(nèi)有效如果局部變量的有效范圍有重疊,則有效范圍小的優(yōu)先43全局變量在函數(shù)之外定義的變量(外部變量)稱(chēng)為局部變量全局變量開(kāi)始的范圍是從定義變量的位置開(kāi)始到源文件結(jié)束intp=1,q=1;/*定義全局變量p,q*/floatf1(a)/*定義函數(shù)f1*/inta;{intb,c;…}charc1,c2;/*定義外部變量c1,c2*/charf2(intx,inty)/*定義函數(shù)f2*/{inti,j;…
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 公共政策傳達(dá)的有效性和挑戰(zhàn)題目及答案
- 軟件設(shè)計(jì)師考試的常見(jiàn)問(wèn)題與試題及答案解答
- 軟件設(shè)計(jì)師考試復(fù)習(xí)日程安排試題及答案
- 2024年寧夏水利科學(xué)研究院招聘事業(yè)單位筆試真題
- 深化西方國(guó)家對(duì)外交政策的書(shū)寫(xiě)與評(píng)價(jià)試題及答案
- 2025年多式聯(lián)運(yùn)信息平臺(tái)在物流行業(yè)協(xié)同創(chuàng)新中的應(yīng)用與發(fā)展報(bào)告
- 敏捷項(xiàng)目管理的2025年試題及答案
- 2025年工業(yè)互聯(lián)網(wǎng)平臺(tái)同態(tài)加密技術(shù)與網(wǎng)絡(luò)安全風(fēng)險(xiǎn)評(píng)估融合前景報(bào)告
- 2025年CCS在船舶制造業(yè)中的應(yīng)用案例報(bào)告
- 2025年城市更新視角下歷史文化街區(qū)保護(hù)與旅游開(kāi)發(fā)策略研究報(bào)告
- 2024年海南三亞事業(yè)單位招聘考試真題答案解析
- 互聯(lián)網(wǎng)公司民事起訴狀模板
- 數(shù)據(jù)安全及隱私保護(hù)協(xié)議
- 科目一急救考試題及答案
- 2025閩教版英語(yǔ)三年級(jí)下冊(cè)單詞表
- 兩人合伙開(kāi)燒烤店協(xié)議
- 《石油煉制過(guò)程中的常減壓蒸餾技術(shù)》教學(xué)課件
- (2025春新版本)部編版七年級(jí)語(yǔ)文下冊(cè)全冊(cè)教案
- GB/T 18282.1-2025醫(yī)療保健產(chǎn)品滅菌化學(xué)指示物第1部分:通則
- 華為質(zhì)量管理手冊(cè)
- 拆除臨時(shí)用電施工方案
評(píng)論
0/150
提交評(píng)論