版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
C是模塊化程序設(shè)計語言C程序結(jié)構(gòu)C是函數(shù)式語言必須有且只能有一個名為main的主函數(shù)C程序的執(zhí)行總是從main函數(shù)開始,在main中結(jié)束函數(shù)不能嵌套定義,可以嵌套調(diào)用第七章函數(shù)7.1函數(shù)概念函數(shù):完成特定功能的程序段,通常由用戶定義或系統(tǒng)定義。一個C程序,由一個主函數(shù)和若干其它函數(shù)組成:主函數(shù)可以調(diào)用其它函數(shù),其它函數(shù)可相互調(diào)用。函數(shù)用途:使得同一功能(程序段)能夠在不同位置多次反復(fù)執(zhí)行
實現(xiàn)程序模塊化7.2函數(shù)分類從用戶角度標準函數(shù)(庫函數(shù)):由系統(tǒng)提供用戶自定義函數(shù)從函數(shù)形式無參函數(shù)有參函數(shù)Ch7_201.c7.3函數(shù)定義的一般形式1.無參函數(shù)的定義形式:
函數(shù)類型函數(shù)名(){聲明部分語句}
注:無參函數(shù)一般不返回函數(shù)值,故類型標識符可省。舉例:intmax(intx,inty) { intz; z=x>y?x:y; return(z); }2.有參函數(shù)的定義形式:
函數(shù)類型函數(shù)名(形式參數(shù)表列){
聲明部分 語句
}7.4函數(shù)的返回值返回語句形式:return(表達式);
或
return表達式;
或
return;功能:使程序控制從被調(diào)用函數(shù)返回到調(diào)用函數(shù)中,同時把返值帶給調(diào)用函數(shù)說明:例無返回值函數(shù)
voidswap(intx,inty){inttemp;temp=x;x=y;y=temp;}1.被調(diào)函數(shù)中可用多個return語句,執(zhí)行哪一個由程序執(zhí)行情況來定。例:函數(shù)中有如下語句
if(a>b)return(a);elsereturn(b);2.若無return語句,遇}時,自動返回調(diào)用函數(shù)3.return后面的括號可省,如:returna;4.return后的值可以是一個表達式,如:return(x>y?x:y);5.函數(shù)值的類型是在定義函數(shù)時指定的注:未加類型說明的函數(shù)自動按整型處理;說明:7.5函數(shù)的調(diào)用調(diào)用形式函數(shù)名(實際參數(shù)表列);說明:實參與形參個數(shù)相等,類型一致,按順序一一對應(yīng)形參與實參形式參數(shù):定義函數(shù)時函數(shù)名后面括號中的變量名實際參數(shù):調(diào)用函數(shù)時函數(shù)名后面括號中的表達式c=max(a,b);(main函數(shù))(max函數(shù))max(intx,inty){intz;z=x>y?x:y;return(z);}例比較兩個數(shù)并輸出大者main(){inta,b,c;scanf("%d,%d",&a,&b);c=max(a,b);printf("Maxis%d",c);}max(intx,inty){intz;z=x>y?x:y;return(z);}形參實參例:求兩個數(shù)之和floatadd(floatx,floaty){floatz;z=x+y;return(z);}main(){floata,b,c;scanf("%f,%f",&a,&b);c=add(a,b);printf("sumis%f",c);}例計算x的立方#include<stdio.h>floatcube(floatx){return(x*x*x);}main(){floata,product;printf("Pleaseinputvalueofa:");scanf("%f",&a);product=cube(a);printf(”Cubeof%.4fis%.4f\n",a,product);}xaproduct××××1.21.21.7287.6
函數(shù)的嵌套與遞歸調(diào)用嵌套調(diào)用C規(guī)定:函數(shù)定義不可嵌套,但可以嵌套調(diào)用函數(shù)main()調(diào)用函數(shù)a結(jié)束a函數(shù)b函數(shù)調(diào)用函數(shù)b例求三個數(shù)中最大數(shù)和最小數(shù)的差值#include<stdio.h>
intdif(intx,inty,intz);intmax(intx,inty,intz);intmin(intx,inty,intz);voidmain(){inta,b,c,d;scanf("%d%d%d",&a,&b,&c);
d=dif(a,b,c);printf("Max-Min=%d\n",d);}Ch7_202.cintdif(intx,inty,intz){returnmax(x,y,z)-min(x,y,z);}intmax(intx,inty,intz){intr;r=x>y?x:y;return(r>z?r:z);}intmin(intx,inty,intz){intr;r=x<y?x:y;return(r<z?r:z);}main()調(diào)用函數(shù)dif輸出結(jié)束dif函數(shù)max函數(shù)調(diào)用函數(shù)max調(diào)用函數(shù)minmin函數(shù)函數(shù)的遞歸調(diào)用
遞歸:在函數(shù)調(diào)用過程中,直接或間接的調(diào)用自身。1.直接遞歸:在函數(shù)體內(nèi)又調(diào)用自身f1()┇
調(diào)用f1()
┇2.間接遞歸:當函數(shù)去調(diào)用另一函數(shù)時,而另一函數(shù)反過來又調(diào)用自身。
f1()函數(shù)f2()函數(shù)
調(diào)用f2()函數(shù)調(diào)用f1()函數(shù)例求n的階乘/*ch7_8.c*/#include<stdio.h>intfac(intn){intf;if(n<0)printf("n<0,dataerror!");elseif(n==0||n==1)f=1;elsef=fac(n-1)*n;return(f);}main(){intn,y;printf("Inputaintegernumber:");scanf("%d",&n);
y=fac(n);printf("%d!=%15d",n,y);}例:采用遞歸方法計算X的n次方#include<stdio.h>intpower(intx,intn){if(n==0)return(1);elsereturn(x*power(x,n-1));}main(){intx,n,y;printf(“x=?n=?");scanf(“%d%d”,&x,&n);
y=power(x,n);printf("%d",y);}變量的屬性數(shù)據(jù)類型:變量所持有的數(shù)據(jù)的性質(zhì)(操作屬性)存儲屬性存儲器類型:內(nèi)存、CPU中的寄存器生存期:變量值保留的期限-------靜態(tài)變量與動態(tài)變量作用域:變量的有效范圍---------局部變量與全局變量7.7
變量的存儲屬性概述變量是對程序中數(shù)據(jù)的存儲空間的抽象7.7.1局部變量和全局變量 變量:按其作用域,可分為局部和全局1.局部變量局部:作用域僅限在所定義的函數(shù)或復(fù)合語句內(nèi)部
#include<stdio.h>
main()
{ inta=1; { intb=2; b=a+b; a=a+b; } printf("a=%d\n",a);
}局部變量的特點:(1)在不同函數(shù)中允許變量同名,它們占據(jù)不同的內(nèi)存單元,相互之間互不影響(2)形參屬局部變量,只能在其所在的函數(shù)內(nèi)部使用。例不同函數(shù)中同名變量main(){inta,b;a=3;b=4;printf("main:a=%d,b=%d\n",a,b);sub();printf("main:a=%d,b=%d\n",a,b);}sub(){inta,b;a=6;b=7;printf("sub:a=%d,b=%d\n",a,b);}運行結(jié)果:main:a=3,b=4sub:a=6,b=7main:a=3,b=42.全局變量全局(外部)變量:在一個文件的所有函數(shù)以外定義的變量。作用域:從變量的定義位置開始到源程序結(jié)束。例:intd=11;voidfun(intp){intd=5;d+=p++;printf(“%d”,d);}Main(){inta=3;fun(a);d+=a++;Printf(“%d”,d);}floatmax,min;floataverage(floatarray[],intn){inti;floatsum=array[0];max=min=array[0];for(i=1;i<n;i++){if(array[i]>max)max=array[i];elseif(array[i]<min)min=array[i];sum+=array[i];}return(sum/n);}main(){inti;floatave,score[10];/*Input*/ave=average(score,10);printf("max=%6.2f\nmin=%6.2f\naverage=%6.2f\n",max,min,ave);}作用域maxmin7.7.2動態(tài)變量與靜態(tài)變量存儲方式靜態(tài)存儲:程序運行期間分配固定存儲空間動態(tài)存儲:程序運行期間根據(jù)需要動態(tài)分配存儲空間生存期靜態(tài)變量:從程序開始執(zhí)行到程序結(jié)束動態(tài)變量:從包含該變量定義的函數(shù)開始執(zhí)行至函數(shù)執(zhí)行結(jié)束1.auto變量函數(shù)內(nèi)部的沒有用static聲明的局部量,均為動態(tài)存儲類別,存儲類別聲明符為auto
。
聲明符auto可省;自動變量被分配在動態(tài)存儲區(qū),若未賦初值,其值不確定,每次函數(shù)調(diào)用重新分配存儲單元(應(yīng)重新賦值),每次函數(shù)調(diào)用結(jié)束時釋放存儲單元。例如:intf(inta){ autointb,c=3; /*定義b、c為自動變量*/ …}其中:autointb,c=3;
與:intb,c=3;等價
2.用static聲明局部變量若希望函數(shù)調(diào)用結(jié)束后,其值不消失,下次調(diào)用函數(shù)時繼續(xù)使用,則用static對變量加以聲明。舉例:靜態(tài)局部變量的值f(inta){ autointb=0;
staticintc=3; b=b+1;c=c+1; return(a+b+c);}main(){ inta=2,i; for(i=0
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 風力發(fā)電機組在極端氣候下的結(jié)構(gòu)健康監(jiān)測考核試卷
- 飲料制造原材料采購管理考核試卷
- 銀行間市場融資機制-洞察分析
- 超臨界流體技術(shù)在化學(xué)試劑制備中的應(yīng)用考核試卷
- 稅收信息化建設(shè)-洞察分析
- 漁業(yè)節(jié)能減排技術(shù)創(chuàng)新-洞察分析
- 遠程醫(yī)療在農(nóng)村地區(qū)的發(fā)展策略研究-洞察分析
- 原型理論與文學(xué)批評-洞察分析
- 碳酸飲料廣告?zhèn)鞑バЧ?洞察分析
- 羽毛絨制品表面防水防污技術(shù)探究-洞察分析
- 空調(diào)系統(tǒng)維保記錄表格模板
- QC小組活動管理制度
- 市區(qū)自備井排查整治工作實施方案
- 8位半萬用表大比拼
- 品牌管理部績效考核指標
- 瀝青路面施工監(jiān)理工作細則
- 物業(yè)設(shè)備設(shè)施系統(tǒng)介紹(詳細).ppt
- 公司走賬合同范本
- 獲獎一等獎QC課題PPT課件
- 人教版小學(xué)三年級數(shù)學(xué)上冊判斷題(共3頁)
- 國際項目管理手冊The Project Manager’s Manual
評論
0/150
提交評論