版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
關(guān)于函數(shù)與宏定義第1頁,講稿共47頁,2023年5月2日,星期三6.1函數(shù)的概念函數(shù)的分類:庫函數(shù)(標(biāo)準(zhǔn)函數(shù))子函數(shù)的三要素:
函數(shù)的調(diào)用函數(shù)的聲明函數(shù)的定義自定義函數(shù):①主函數(shù):main②子函數(shù)第2頁,講稿共47頁,2023年5月2日,星期三[返回值類型符]
函數(shù)名([形參說明表]){說明語句;可執(zhí)行語句;
return(表達(dá)式);}函數(shù)頭函數(shù)體函數(shù)返回值return(表達(dá)式);[返回值類型符]函數(shù)類型形參說明表要素1:函數(shù)的定義第3頁,講稿共47頁,2023年5月2日,星期三
每一個形參都要單獨定義數(shù)據(jù)類型。例:intabs_sum(intm,intn)
intabs_sum(intm,n)錯誤正確函數(shù)也可以沒有形參,此時最好標(biāo)記為void類型。例:floatfun(void){……}第4頁,講稿共47頁,2023年5月2日,星期三若函數(shù)無返回值,則用空類型void來定義函數(shù)的返回值。void
abs_sum(intm,intn){if(m<0)m=-m;if(n<0)n=-n;
printf(“Thesumis%d\n”,m+n);
return;
}第5頁,講稿共47頁,2023年5月2日,星期三若在函數(shù)的首部省略了函數(shù)返回值的類型名,則默認(rèn)函數(shù)返回值的類型為int類型。[int]abs_sum(intm,intn){if(m<0)m=-m;if(n<0)n=-n;
return(m+n);
}第6頁,講稿共47頁,2023年5月2日,星期三return語句
格式1:return(表達(dá)式);
return只能返回0或1個值,而不能返回多個值。intfun(inta,intb){intc;c=a+b;
return(a,b,c);}錯誤格式3:return;格式2:return表達(dá)式;等價函數(shù)類型為void時用,可以缺省第7頁,講稿共47頁,2023年5月2日,星期三函數(shù)體中可以有多個return語句,但只有一個
return語句被執(zhí)行到。intfun(inta){if(a<0)a=-a;returna;}intfun(inta){if(a>0)returna;elsereturn–a;}函數(shù)中沒有return語句,并不代表函數(shù)沒有return值,只是表示函數(shù)的返回值是一個不確定的數(shù)。第8頁,講稿共47頁,2023年5月2日,星期三函數(shù)無返回值時:函數(shù)名([實參表]);要素2:函數(shù)的調(diào)用函數(shù)有返回值時:變量名=函數(shù)名([實參表]);例6-1分析:P117main7-12abs_sumxyzmn719-1212第9頁,講稿共47頁,2023年5月2日,星期三例6-1:求任意兩個整數(shù)的絕對值的和。#include<stdio.h>intabs_sum(intm,intn);voidmain(){intx,y,z;scanf(“%d%d”,&x,&y);
z=abs_sum(x,y);printf(“|%d|+|%d|=%d\n”,x,y,z);}intabs_sum(intm,intn){if(m<0)m=-m;if(n<0)n=-n;return(m+n);}函數(shù)調(diào)用:實參函數(shù)定義:形參方法1:第10頁,講稿共47頁,2023年5月2日,星期三形參變量在接收到實參表傳過來的值時,會在內(nèi)存臨時開辟新的空間,以保存形參變量的值。當(dāng)函數(shù)執(zhí)行完畢時,這些臨時開辟的內(nèi)存空間空間會被釋放。形參的值在函數(shù)中不論是否發(fā)生變化,都不會影響到實參變量的值。實參與形參要求在個數(shù)、類型、次序上匹配。
實參/形參的名稱可以相同,也可以不同。第11頁,講稿共47頁,2023年5月2日,星期三方法2:#include<stdio.h>voidabs_sum(intx,inty);voidmain(){intx,y;scanf(“%d%d”,&x,&y);
abs_sum(x,y);}voidabs_sum(intx,inty){if(x<0)x=-x;if(y<0)y=-y;printf(“Thesumis%d\n”,x+y);}第12頁,講稿共47頁,2023年5月2日,星期三例6-2:求任意三個整數(shù)的絕對值的和。方法1:#include<stdio.h>intabs_sum(intm,intn);voidmain(){intx,y,z,sum;scanf(“%d%d%d”,&x,&y,&z);
sum=abs_sum(abs_sum(x,y),z);printf(“|%d|+|%d|+|%d|=%d\n”,x,y,z,sum);}intabs_sum(intm,intn){if(m<0)m=-m;if(n<0)n=-n;return(m+n);}函數(shù)調(diào)用:實參函數(shù)定義:形參第13頁,講稿共47頁,2023年5月2日,星期三方法2:#include<stdio.h>intabs_sum(intl,intm,intn);voidmain(){intx,y,z,sum;scanf(“%d%d%d”,&x,&y,&z);
sum=abs_sum(x,y,z);printf(“|%d|+|%d|+|%d|=%d\n”,x,y,z,sum);}intabs_sum(intl,intm,intn){if(l<0)l=-l;if(m<0)m=-m;if(n<0)n=-n;return(l+m+n);}第14頁,講稿共47頁,2023年5月2日,星期三例6-3:求任意兩數(shù)的乘積。#include<stdio.h>floatmul(floata,floatb);voidmain(){floatx,y,z;scanf(“%f%f”,&x,&y);
z=mul(x,y);
mul(x,y);printf(“(%f)*(%f)=%f\n”,x,y,mul(x,y));}floatmul(floata,floatb){returna*b;}函數(shù)調(diào)用1:有變量接收返回值函數(shù)調(diào)用2:無變量接收返回值函數(shù)調(diào)用3:直接輸出返回值第15頁,講稿共47頁,2023年5月2日,星期三在調(diào)用無參函數(shù)時,實參表列可以省略,但括號不能省略。#include<stdio.h>voidfun(void);voidmain(){fun();}voidfun(void){inta=1,b=2;printf(“(%d,%d)\n”,a+=3,b-=2);
}return;函數(shù)調(diào)用:實參可以省略函數(shù)定義:形參用void聲明第16頁,講稿共47頁,2023年5月2日,星期三#include<stdio.h>voida(void);voidb(void);voidc(void);voidmain(){……
a();b();c();……}voida(void){……}voidb(void){……}voidc(void){……}函數(shù)調(diào)用:實參可以省略函數(shù)定義:形參用void聲明例6-4:第17頁,講稿共47頁,2023年5月2日,星期三[返回值類型符]函數(shù)名([形參說明表]);例:intabs_sum(intm,intn);intabs_sum(int,int);第1個問題:寫法等價要素3:函數(shù)的聲明函數(shù)聲明在形式上與函數(shù)頭完全一致,只是在最后多了一個分號。第18頁,講稿共47頁,2023年5月2日,星期三第2個問題:缺省情況函數(shù)返回值類型為int型。被調(diào)函數(shù)的定義寫在前面,主調(diào)函數(shù)寫在后面。編寫程序時最好寫上函數(shù)聲明。#include<stdio.h>floatmul(floata,floatb){returna*b;}voidmain(){……}例6-3:第19頁,講稿共47頁,2023年5月2日,星期三第3個問題:作用目的是讓C語言的編譯程序檢查對函數(shù)的調(diào)用是否正確。例:#include<stdio.h>intabs_sum(intm,intn);voidmain(){intx,y,z,sum;scanf(“%d%d%d”,&x,&y,&z);
sum=abs_sum(x,y,z);printf(“Thesumis%d\n”,sum);}
intabs_sum(intm,intn){……}第20頁,講稿共47頁,2023年5月2日,星期三第4個問題:位置例:#include<stdio.h>
voidfun1(inta,intb);voidmain(){……}
voidfun1(inta,intb){……}
intfun2(floatx,floaty){…..}位置1:在所有函數(shù)的外部函數(shù)聲明函數(shù)fun1()可以被main()、fun2()調(diào)用。第21頁,講稿共47頁,2023年5月2日,星期三例:#include<stdio.h>voidmain(){voidfun1(inta,intb);……}
voidfun1(inta,intb){……}
intfun2(floatx,floaty){…..}位置2:在某一個函數(shù)的內(nèi)部函數(shù)聲明函數(shù)fun1()只能被main()調(diào)用。第22頁,講稿共47頁,2023年5月2日,星期三例:#include<stdio.h>voidmain(){……}
voidfun1(inta,intb){……}
voidfun1(inta,intb);
intfun2(floatx,floaty){…..}位置3:在某兩個函數(shù)之間函數(shù)聲明函數(shù)fun1()只能被fun2()調(diào)用。第23頁,講稿共47頁,2023年5月2日,星期三實參->形參,單向傳遞,值傳遞,虛實結(jié)合。實參/形參的名稱可以相同,也可以不同。
形參與實參各占一個獨立的存儲空間。在調(diào)用函數(shù)時,實參的值將傳送給對應(yīng)的形參,但形參的變化不會影響對應(yīng)的實參。在同一程序中,形參名只要在同一函數(shù)中唯一即可,可以與其他函數(shù)中的變量同名。
函數(shù)的傳值方式:第24頁,講稿共47頁,2023年5月2日,星期三例:#include<stdio.h>voidswap(inta,intb);voidmain(){intx=10,y=20;printf(“(1)x=%dy=%d\n”,x,y);
swap(x,y);printf(“(2)x=%dy=%d\n”,x,y);}
voidswap(inta,intb){intt;t=a;a=b;b=t;}main1020swapxyab10201020t第25頁,講稿共47頁,2023年5月2日,星期三intfun2(…){inta1,b1,c1;
return(c1);}intfun1(…){inta,b,c;intfun2(…);
c=fun2(a,b);
return(c);}voidmain(){ints,x,y;intfun1(…);
s=fun1(x,y);
}函數(shù)調(diào)用過程舉例:第26頁,講稿共47頁,2023年5月2日,星期三#include<stdio.h>intprime(intn){……}voidfactor(intn){……if((n%i==0)&&prime(i))……}voidmain(){……
factor(num);
}因子子函數(shù)素數(shù)子函數(shù)實驗指導(dǎo)書P181:求整數(shù)n的所有素數(shù)因子第27頁,講稿共47頁,2023年5月2日,星期三局部變量:在函數(shù)內(nèi)部或復(fù)合語句內(nèi)部定義的變量。6.2變量的作用域和存儲類型變量的作用域:①局部變量的有效范圍只限于本函數(shù)內(nèi)部,退出函數(shù),該變量自動失效。全局變量:在函數(shù)外部定義的變量。①全局變量的作用域是從該變量定義的位置開始,直到源文件結(jié)束。②在同一文件中的所有函數(shù)都可以引用全局變量。第28頁,講稿共47頁,2023年5月2日,星期三例1:#include<stdio.h>
voidmain()
{
intx=5;
printf(“xinmainis%d\n”,x);
{
intx=7;
printf(“xininneris%d\n”,x);
}printf(“xinmainis%d\n”,x);
}優(yōu)先級低優(yōu)先級高第29頁,講稿共47頁,2023年5月2日,星期三例2:#include<stdio.h>
voida(void);
voidb(void);voidc(void);
intx=1;
voidmain()
{
……}
voida(void)
{……}
voidb(void)
{
……}voidc(void){……}全局變量第30頁,講稿共47頁,2023年5月2日,星期三#include<stdio.h>inta=5,b=7;voidmain(){inta=4,b=5,c;c=plus(a,b);printf(“a+b=%d\n”,c);}plus(intx,inty){intz;z=x+y;return(z);}全局變量,優(yōu)先級低局部變量,優(yōu)先級高實驗六第三題:第31頁,講稿共47頁,2023年5月2日,星期三變量的存儲類型:auto型register型static型extern型內(nèi)存的動態(tài)存儲區(qū)CPU的寄存器內(nèi)存的靜態(tài)存儲區(qū)程序區(qū)靜態(tài)存儲區(qū)動態(tài)存儲區(qū)用戶區(qū)第32頁,講稿共47頁,2023年5月2日,星期三總結(jié)局部變量全局變量auto√×register(略)√×static√√extern(略)×√定義變量:[存儲類型]數(shù)據(jù)類型變量名;例:autofloata=2;
staticintx=50;第33頁,講稿共47頁,2023年5月2日,星期三情況1:auto型變量(動態(tài)的局部變量)局部變量的存儲類型默認(rèn)值為auto型。
auto型只用于定義局部變量。
auto型變量在進(jìn)入所在函數(shù)時才建立,退出該函數(shù)時撤銷。
未賦初值的auto變量其值不確定。例:inta,b=3;
autointa,b=3;等價第34頁,講稿共47頁,2023年5月2日,星期三情況2:static型變量(靜態(tài)的局部變量)在整個程序運行期間,static型變量占據(jù)著永久性的存儲單元。下次調(diào)用該函數(shù)時,該變量擁有最近一次退出該函數(shù)時的值,該值將被保留。
static型變量的初始化只執(zhí)行一次。
若定義時沒有賦初值,則系統(tǒng)會自動為其賦0值。雖然靜態(tài)局部變量在函數(shù)調(diào)用結(jié)束后仍然存在,但其他函數(shù)不能引用它。第35頁,講稿共47頁,2023年5月2日,星期三例1:#include<stdio.h>intfun(inta);voidmain(){inti,j=2;for(i=0;i<3;i++)printf(“%4d”,fun(j));}
intfun(inta){intb=0;
b++;c++;return(a+b+c);}staticintc=3;輸出結(jié)果:789staticintc;輸出結(jié)果:456第36頁,講稿共47頁,2023年5月2日,星期三#include<stdio.h>intd=1;f(intp){staticintd=5;d+=p;printf(“%d”,d);return(d);}voidmain(){inta=3;printf(“%d
”,f(a+f(d)));}輸出結(jié)果:61515實驗六第五題:注意空格第37頁,講稿共47頁,2023年5月2日,星期三源程序(.c)目標(biāo)程序(.obj)可執(zhí)行程序(.exe)結(jié)果編譯建立/鏈接運行編譯預(yù)處理所有編譯預(yù)處理都是以“#”號開頭,單占源程序中的一行,一般是放在源程序的首部。6.5預(yù)處理C語言提供3種編譯預(yù)處理命令:宏定義文件包含條件編譯第38頁,講稿共47頁,2023年5月2日,星期三6.5.1宏定義情況1:不帶參數(shù)的宏例:#definePI3.14格式:#define宏名字符串宏定義的作用是用宏名來代表一串字符串。宏名一般采用大寫字母。宏替換不進(jìn)行任何計算,也不進(jìn)行語法檢查。不能替換雙引號中與宏名相同的字符串。第39頁,講稿共47頁,2023年5月2日,星期三宏名的有效范圍是從定義命令之后,直到源程序文件結(jié)束,或遇到宏定義終止命令#undef為止。例:#include<stdio.h>
#defineG9.8
#definePI3.14159voidmain()
{……}#undefPIvoidf1(){……}voidf2(){……}第40頁,講稿共47頁,2023年5月2日,星期三#include<stdio.h>#defineS(a,b)a+bvoidmain(){intm=3,n=2,x=4,y=5,area1,area2;
area1=S(m,n);area2=5*S(x,y);printf(“area1=%d\narea2=%d\n”,area1,area2);}area1=m+n;area2=5*x+y;改成:#defineS(a,b)(a+b)情況2:帶參數(shù)的宏格式:#define宏名(參數(shù)表)字符串第41頁,講稿共47頁,2023年5月2日,星期三#include<stdio.h>#defineS(a,b)(a*b)voidmain(){intm=3,n=2,x=4,y=5,area1,area2;
area1=S(m,n);area2=S(x+1,y+2);printf(“area1=%d\narea2=%d\n”,are
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 貨運安全教育培訓(xùn)制度
- 財產(chǎn)調(diào)查制度
- 行政審批定崗定責(zé)制度
- 用工風(fēng)險培訓(xùn)課件內(nèi)容
- 2026江西省數(shù)字產(chǎn)業(yè)集團(tuán)有限公司中層管理崗位引才1人參考考試題庫附答案解析
- 2026青海海西州中國聯(lián)通德令哈市分公司招聘5人參考考試題庫附答案解析
- 2026北京大學(xué)新結(jié)構(gòu)經(jīng)濟(jì)學(xué)研究院招聘勞動合同制人員1人參考考試題庫附答案解析
- 2026廣西來賓市第一批“服務(wù)產(chǎn)業(yè)發(fā)展專項人才計劃”29人備考考試試題附答案解析
- 2026年度青島市市南區(qū)所屬事業(yè)單位公開招聘工作人員(25名)參考考試試題附答案解析
- 2026山東臨沂沂河新區(qū)部分事業(yè)單位招聘綜合類崗位工作人員3人備考考試試題附答案解析
- 湖北中煙2024年招聘考試真題(含答案解析)
- 2026年常州機(jī)電職業(yè)技術(shù)學(xué)院單招綜合素質(zhì)考試題庫及答案1套
- 2026年稅務(wù)師執(zhí)業(yè)規(guī)范考試題目含答案
- 2026年江蘇農(nóng)林職業(yè)技術(shù)學(xué)院單招職業(yè)適應(yīng)性測試模擬測試卷必考題
- 廣東省廣州市八區(qū)聯(lián)考2024-2025學(xué)年高一上學(xué)期期末教學(xué)質(zhì)量監(jiān)測數(shù)學(xué)試卷(含答案)
- 選舉法知識課件
- 蒸汽管道安裝現(xiàn)場施工方案
- 2024年中考英語真題分類匯編-記敘文閱讀理解(含答案)
- 2026年開封職業(yè)學(xué)院單招職業(yè)傾向性測試題庫及完整答案詳解1套
- 雨課堂學(xué)堂在線學(xué)堂云《美國社會與文化(浙理)》單元測試考核答案
- 藥企產(chǎn)品經(jīng)理工作全解析
評論
0/150
提交評論