




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
C程序設(shè)計函數(shù)2
主要內(nèi)容概述函數(shù)的定義函數(shù)參數(shù)(變量、數(shù)組)和函數(shù)的值函數(shù)的調(diào)用函數(shù)的嵌套調(diào)用和遞歸調(diào)用局部變量和全局變量以及變量的存儲類別38.1概述C程序的結(jié)構(gòu)如圖所示一個C程序包含若干個函數(shù)組成每個函數(shù)有且僅有一個main函數(shù),其他函數(shù)都是子函數(shù)子函數(shù)可以相互調(diào)用,但主函數(shù)main不能被調(diào)用一個C原程序可由一個或多個文件構(gòu)成,一個原程序文件是一個編譯單位4說明:C程序的執(zhí)行從main函數(shù)開始調(diào)用其他函數(shù)后仍回到main函數(shù),程序在main函數(shù)結(jié)束時結(jié)束所有子函數(shù)都是平行的,任何子函數(shù)都不屬于其他函數(shù)從用戶的定義,函數(shù)可分為:標(biāo)準(zhǔn)函數(shù),即庫函數(shù)自定義函數(shù)從函數(shù)的形式分:有參函數(shù)無參函數(shù)58.1函數(shù)定義函數(shù)定義的一般形式intmax(intx,inty)
{intz;
if(x>y)z=x;
elsez=y;
return(z);
}6函數(shù)的定義函數(shù)類型規(guī)定該函數(shù)返回值的類型函數(shù)返回值可以是除數(shù)組外的任何合法的數(shù)據(jù)類型,如int、long、float、char、指針、結(jié)構(gòu)體等系統(tǒng)默認(rèn)的類型是整類型如果未指定類型,則返回值為整型可用void表示如果函數(shù)沒有返回值
函數(shù)類型函數(shù)名(形參表說明)
{/*函數(shù)體*/
說明語句執(zhí)行語句
[return;函數(shù)返回值]
}7函數(shù)的定義函數(shù)名是用戶自定義的標(biāo)識符是函數(shù)定義中唯一不可省略的部分需符合命名規(guī)則的標(biāo)識符用在程序中標(biāo)識函數(shù),并用該標(biāo)識符調(diào)用函數(shù)一個好的函數(shù)名應(yīng)該能夠反映該函數(shù)的模塊的功能函數(shù)名本身代表數(shù)值代表了該函數(shù)的入口地址8函數(shù)的定義形參表(也稱“形式參數(shù)”)形參表是用逗號分隔的一組變量說明作用是指出每一個形參的類型和形參的名稱包括形參的類型和形參標(biāo)識符當(dāng)調(diào)用函數(shù)時,接受來自主調(diào)函數(shù)的數(shù)據(jù),確定各參數(shù)的值
函數(shù)類型函數(shù)名(形參表說明)
{/*函數(shù)體*/
說明語句執(zhí)行語句
[return;函數(shù)返回值]
}9函數(shù)的定義函數(shù)體用{}括起來的部分是函數(shù)的主體函數(shù)體是一段體現(xiàn)函數(shù)功能的程序函數(shù)內(nèi)部應(yīng)有自己的說明語句和執(zhí)行語句形式參數(shù)表中經(jīng)過說明的變量可以在函數(shù)體內(nèi)直接使用但函數(shù)內(nèi)定義的變量不可以與形參同名提示函數(shù)體部分可以沒有,空函數(shù),但是每個函數(shù)體外面的一對{}不能省略任何情況下不允許一個函數(shù)內(nèi)部定義另外一個函數(shù)(函數(shù)不能嵌套定義)
函數(shù)類型函數(shù)名(形參表說明)
{/*函數(shù)體*/
說明語句執(zhí)行語句
[return;函數(shù)返回值]
}10函數(shù)的定義函數(shù)返回值函數(shù)調(diào)用后函數(shù)體計算執(zhí)行的結(jié)果稱為函數(shù)的返回值通過返回語句結(jié)束函數(shù),并將計算結(jié)果帶回主調(diào)函數(shù)函數(shù)返回值類型函數(shù)定義時的類型就是函數(shù)返回值的類型C語言要求函數(shù)定義的類型應(yīng)當(dāng)與返回語句中表達(dá)式的類型保持一致當(dāng)兩者不一致時,系統(tǒng)自動進(jìn)行轉(zhuǎn)換,將函數(shù)返回語句中表達(dá)式的類型轉(zhuǎn)換為函數(shù)定義時的類型提示函數(shù)的類型決定著返回值的類型系統(tǒng)進(jìn)行自動的轉(zhuǎn)換會造成程序的不清晰、可讀性差等
函數(shù)類型函數(shù)名(形參表說明)
{/*函數(shù)體*/
說明語句執(zhí)行語句
[return函數(shù)返回值;]
}11函數(shù)的定義返回語句格式
函數(shù)類型函數(shù)名(形參表說明)
{/*函數(shù)體*/
說明語句執(zhí)行語句
[return;函數(shù)返回值]
}return表達(dá)式;/*return(2*3)表示函數(shù)返回值為6
*/
return(表達(dá)式);/*return2*3表示函數(shù)返回值為6
*/
return;/*沒有返回值*/12函數(shù)的定義一個函數(shù)體內(nèi)可以有多個返回語句,不論執(zhí)行到哪一個,函數(shù)都結(jié)束,回到主調(diào)函數(shù)對帶有返回值的函數(shù),在調(diào)用時,可以將其作為同類型的一個變量一樣使用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語言規(guī)定,可以定義無類型(void類型)函數(shù),同時函數(shù)體可以省略使用return語句,如果使用也只能使用return;(不能帶任何參數(shù))14函數(shù)的定義空類型說明沒有返回值C++語言規(guī)定,一個函數(shù)可以沒有返回值,函數(shù)類型應(yīng)明確定義為void(空)類型對于void(空)類型函數(shù),系統(tǒng)保證不使函數(shù)帶有任何值同時也禁止在調(diào)用函數(shù)中使用被調(diào)函數(shù)的值15函數(shù)的定義空類型格式說明void類型的函數(shù)不是調(diào)用函數(shù)之后不再返回,而是調(diào)用函數(shù)在返回時沒有返回值void類型的函數(shù)與有返回值類型的函數(shù)在定義過程中沒有區(qū)別,只是在調(diào)用時不同void類型的函數(shù)不能將函數(shù)調(diào)用放在表達(dá)式之中,只能在語句中單獨(dú)調(diào)用void類型的函數(shù)一般用于完成一些規(guī)定的操作void函數(shù)名(形參表)
{……}168.3函數(shù)參數(shù)和函數(shù)的值一個C程序由若干個函數(shù)組成,各函數(shù)調(diào)用時經(jīng)常需要傳遞一些數(shù)據(jù)。即調(diào)用函數(shù)把數(shù)據(jù)傳遞給被調(diào)用函數(shù),經(jīng)被調(diào)函數(shù)處理后,得到一個確定的結(jié)果,在返回調(diào)用函數(shù)時,把這結(jié)果帶回調(diào)用函數(shù)各函數(shù)間信息的往來是由參數(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ù)定義內(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說明:函數(shù)定義時,必須說明形參的類型。形參只能是變量或數(shù)組,不能是常量或表達(dá)式函數(shù)被調(diào)用前,形參不占內(nèi)存;函數(shù)調(diào)用結(jié)束后,形參所占內(nèi)存也將被收回。實參可以是常量、變量或表達(dá)式實參和形參的類型必須要一致。字符型和整型可以相互匹配C語言中實參對形參的數(shù)據(jù)傳遞是“值傳遞”,即單向傳遞。僅由參數(shù)對應(yīng)的位置確定,與名字無關(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讀程序,寫出運(yùn)行結(jié)果208.4函數(shù)的調(diào)用函數(shù)調(diào)用的一般形式函數(shù)名(實參表)說明:如果調(diào)用無參函數(shù),實參表可以忽略,但括號不能省實參和形參的個數(shù)一般相等實參和形參的類型一一對應(yīng),必要時使用類型轉(zhuǎn)換在不同的C語言編譯系統(tǒng)中,實參的計算順序不同。微機(jī)上一般是從右到左,為避免由此引起的混亂,一般應(yīng)在函數(shù)調(diào)用前計算出實參的值21函數(shù)的調(diào)用方式:函數(shù)語句函數(shù)表達(dá)式22函數(shù)調(diào)用函數(shù)調(diào)用方式函數(shù)語句作為程序中的一條語句調(diào)用被調(diào)函數(shù)調(diào)用格式:
函數(shù)名(實參表);說明通常只完成一種操作,不帶回返回值常用于調(diào)用一個可以忽略返回值或沒有返回值的函數(shù)只要求函數(shù)完成一定的操作23函數(shù)調(diào)用函數(shù)調(diào)用方式函數(shù)表達(dá)式函數(shù)調(diào)用出現(xiàn)在一個表達(dá)式中,這個表達(dá)式稱為函數(shù)表達(dá)式將函數(shù)的調(diào)用結(jié)果作運(yùn)算符的運(yùn)算分量格式
變量名=函數(shù)表達(dá)式;說明這種方式用于調(diào)用帶有返回值的函數(shù)要求函數(shù)必須帶回一個確定的值參與表達(dá)式的運(yùn)算24函數(shù)調(diào)用的執(zhí)行過程按照從右到左的順序,計算實參中各表達(dá)式的值;按照位置,將實參意義傳遞給形參執(zhí)行被調(diào)用函數(shù)當(dāng)遇到return語句時,計算表達(dá)式的值,并返回主調(diào)函數(shù)25函數(shù)原形的說明在程序中調(diào)用函數(shù)需滿足以下條件:被調(diào)函數(shù)必須存在,且遵循“先定義后使用”的原則如果被調(diào)函數(shù)在主調(diào)函數(shù)之后(位置),可以先給出原形說明函數(shù)原形說明的形式函數(shù)類型函數(shù)名(形參類型);例:求最大值函數(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)用指在一個函數(shù)的函數(shù)體中又調(diào)用了其他函數(shù)函數(shù)的執(zhí)行過程main(){…num1();
…}num1(){…num2();
…}num2(){
…
}27函數(shù)嵌套調(diào)用嵌套過程例:編寫程序輸出20以內(nèi)的全部素數(shù),并計算20以內(nèi)全部素數(shù)之積與全部素數(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)供三個函數(shù)調(diào)用,因此在文件開始處作聲明。add(int)與mul(int)只被main函數(shù)調(diào)用,只需在main函數(shù)中聲明。mul函數(shù)值用int會超出取值范圍,所以用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)用一個函數(shù)時又直接或間接的調(diào)用了函數(shù)本身直接遞歸調(diào)用間接遞歸調(diào)用31main(){…num1();
…}num1(){…num1();
…
}直接遞歸過程:間接遞歸過程:main(){…num1();
…}num1(){…num2();
…}num2(){…num1();
…}函數(shù)的遞歸調(diào)用32兩種遞歸都無法結(jié)束,因此應(yīng)含有某種條件控制遞歸調(diào)用結(jié)束33函數(shù)的遞歸調(diào)用遞歸問題的求解方法編寫遞歸程序的前提找出正確的遞歸算法這是編寫遞歸程序的基礎(chǔ)確定算法的遞歸結(jié)束條件這是決定遞歸程序能否正常結(jié)束的關(guān)鍵34例:用遞歸法求階乘n!(n>0)35函數(shù)的遞歸調(diào)用提示當(dāng)一個問題蘊(yùn)含了遞歸關(guān)系且結(jié)構(gòu)比較復(fù)雜時,采用遞歸調(diào)用的程序設(shè)計技巧可以使程序變得簡潔,增加了程序的可讀性遞歸調(diào)用本身是以犧牲存儲空間為基礎(chǔ)的因為每一次遞歸調(diào)用都要保存相關(guān)的參數(shù)和變量遞歸本身也不會加快執(zhí)行速度相反,由于反復(fù)調(diào)用函數(shù),還會或多或少地增加時間開銷遞歸調(diào)用能使代碼緊湊,并能夠很容易地解決一些用非遞歸算法很難解決的問題所有的遞歸問題都一定可以用非遞歸的算法實現(xiàn)368.7數(shù)組作為函數(shù)的參數(shù)數(shù)組元素作為函數(shù)的實參與變量作為實參一樣——值傳遞例8-9:求10個任意整數(shù)中的最大數(shù)372.一維數(shù)組與函數(shù)參數(shù)若參數(shù)的形參是數(shù)組,則對應(yīng)的實參必須是數(shù)組名說明:實參數(shù)組與形參數(shù)組的類型必須一致用數(shù)組名做參數(shù)時,傳遞的是數(shù)組的首地址,因此,形參數(shù)組也可以不指定大小。但須另外設(shè)置一個參數(shù),傳遞數(shù)組元素的個數(shù)38數(shù)組做函數(shù)參數(shù)時,形參數(shù)組和實參數(shù)組共享同一內(nèi)存單元如果形參數(shù)組的值被改變,實參數(shù)組的元素的值也就被改變了例8-10用比較法排序393.多維數(shù)組和函數(shù)參數(shù)多維數(shù)組可以作為函數(shù)的參數(shù)如果形參是多維數(shù)組,可以省略第一維的大小,但不能省略其他維的大小例子8-11.有一個3*4的矩陣,求其元素的最大值40418.8局部變量和全局變量局部變量下列變量是局部變量在一個函數(shù)內(nèi)部定義的變量函數(shù)的形式參數(shù)在某個復(fù)合語句中定義的變量42說明:局部變量只在自己的作用域范圍內(nèi)有效如果局部變量的有效范圍有重疊,則有效范圍小的優(yōu)先43全局變量在函數(shù)之外定義的變量(外部變量)稱為局部變量全局變量開始的范圍是從定義變量的位置開始到源文件結(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. 本站所有資源如無特殊說明,都需要本地電腦安裝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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中班拓印畫活動方案
- 中班春種活動方案
- 中班環(huán)境教育活動方案
- 中班線上活動下午活動方案
- 中班認(rèn)識觀察活動方案
- 中班陽光活動方案
- 中秋中餐活動方案
- 中秋健康講座活動方案
- 中秋創(chuàng)意課堂活動方案
- 中秋扎花活動方案
- 汽車行業(yè)焊接車間工位縮寫
- DB61-T 5068-2023 鋼橋面改性聚氨酯混凝土鋪裝應(yīng)用技術(shù)規(guī)程
- 基于水凝膠模板原位合成磷酸鈣類骨組織修復(fù)材料及表征
- 畜牧獸醫(yī)畢業(yè)論文名字
- 中國聯(lián)通5G毫米波技術(shù)白皮書
- 醫(yī)療人文關(guān)懷
- 系統(tǒng)規(guī)劃與管理師-輔助記憶口訣
- 預(yù)防接種異常反應(yīng)監(jiān)測與處理
- 輸液發(fā)熱反應(yīng)的護(hù)理流程圖
- 2023-2024學(xué)年四川省阿壩州小學(xué)語文四年級期末深度自測試卷詳細(xì)參考答案解析
- 8D報告樣板(設(shè)備故障的8D報告)
評論
0/150
提交評論