版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
思考題#include<stdio.h>intmain(){inta,b,c,max;printf("Inputa,b,c:");scanf("%d%d%d",&a,&b,&c);max=a;if(max<b)max=b;if(max<c)max=c;printf("max=%d\n",max);}三個整數(shù)如何找最大值?一個非常龐大的程序,在100個不同的位置需要“三個整數(shù)如何找最大值”這個功能。。。。。第7章函數(shù)
7.1為什么要用函數(shù)7.2函數(shù)的定義7.3函數(shù)的調(diào)用7.4函數(shù)的聲明7.5函數(shù)的嵌套調(diào)用
結(jié)構(gòu)化程序設(shè)計要求一種自頂向下的設(shè)計方法,也就是將復雜的系統(tǒng)劃分為相對獨立的,功能較為單一功能的子系統(tǒng)的組合。每個子系統(tǒng)稱為模塊,在C語言中表現(xiàn)為函數(shù)。7.1為什么要用函數(shù)復雜問題main()abca1a2b1b2c1c2各模塊之間的關(guān)系稱之為接口優(yōu)點:
函數(shù)實現(xiàn)的功能單一完整,可以獨立設(shè)計,單獨調(diào)試。易于維護,通用性強。main(){charans=‘y’;clrscr();cover();
/*調(diào)用軟件封面顯示函數(shù)*/password();
/*調(diào)用密碼檢查函數(shù)*/while(ans==’y’||ans==’Y’){question();
/*調(diào)用產(chǎn)生題目函數(shù)*/answers();/*調(diào)用接受回答函數(shù)*/marks();
/*調(diào)用評分函數(shù)*/results();
/*調(diào)用結(jié)果顯示函數(shù)*/printf(“是否繼續(xù)練習?(Y/N)\n”);ans=getch();}printf(“謝謝使用,再見!”);}/*定義所用函數(shù)*/顯示軟件封面檢查密碼
產(chǎn)生題目接受回答評判計分顯示結(jié)果如果要繼續(xù)練習告別詞cover(){}/*軟件封面顯示函數(shù)*/password(){}/*密碼檢查函數(shù)*/question(){}/*產(chǎn)生題目函數(shù)*/answers(){}/*接受回答函數(shù)*/marks(){}/*評分函數(shù)*/results(){}/*結(jié)果顯示函數(shù)*/復雜問題main()abca1a2b1b2c1c21、一個源文件由一個或多個函數(shù)組成。2、C程序執(zhí)行總是從main函數(shù)開始,調(diào)用其它函數(shù)后總是回到main函數(shù),最后在main函數(shù)中結(jié)束整個程序的運行。3、所有函數(shù)都是平行的、互相獨立的,即在一個函數(shù)內(nèi)只能調(diào)用其他函數(shù),不能再定義一個函數(shù)(嵌套定義)。4、一個函數(shù)可以調(diào)用其他函數(shù)或其本身,但任何函數(shù)均不可調(diào)用main函數(shù)。1、系統(tǒng)庫函數(shù);
2、自定義函數(shù)。【例】計算xy的值(假設(shè)y為整型變量)請注意:C語言中沒有乘方運算符解法1:調(diào)用庫函數(shù)pow,計算xy
返回【例】調(diào)用函數(shù),輸出若干個“*”
voidmyprint(){inti=0;for(i=1;i<=20;i++)printf("*");printf("\n");}無參函數(shù)#include<stdio.h>輸出一行20個“*”
voidmyprint_n(intn){inti=0;for(i=1;i<=n;i++)printf("*");printf("\n");}輸出一行n個“*”
有參函數(shù)main(){myprint();myprint_n(5); myprint_n(10);myprint();}需要解決的問題:一個函數(shù)調(diào)用另一個函數(shù),應(yīng)具備什么條件?函數(shù)應(yīng)該如何編寫?各函數(shù)的位置在哪里?
7.2
函數(shù)的定義及參數(shù)函數(shù)的分類(用戶角度):
1、系統(tǒng)庫函數(shù);
2、自定義函數(shù)。函數(shù)的分類(函數(shù)形式):
1、無參函數(shù);
2、有參函數(shù)。函數(shù)應(yīng)該先定義后使用1、無參函數(shù)主調(diào)函數(shù)不向被主調(diào)函數(shù)傳遞數(shù)據(jù),無參函數(shù)可以帶回或不帶回函數(shù)值(不帶回居多)1、無參函數(shù)定義格式:[數(shù)據(jù)類型]函數(shù)名()
{
說明部分執(zhí)行語句
[return];
}函數(shù)的返回值通過函數(shù)體中的語句獲得。return語句形式:return;return(x);returnx;void:函數(shù)無返回值缺省值:int#include<stdio.h>printstar(){printf("***************\n");}
print_message(){printf("Howdoyoudo!\n");}main(){printstar();print_message();printstar();}請思考:用函數(shù)的形式,打印輸出20個星號#include<stdio.h>try1(){ intx=3; x++; return(x);}main(){ inti,x; for(i=0,x=0;i<=2;i++) x+=try1(); printf("%d\n",x);}【例】輸入兩數(shù)據(jù),求最大值。(用函數(shù)解決)#include<stdio.h>max(){inta,b,z;scanf("%d,%d",&a,&b);z=a>=b?a:b;return(z);}voidmain(){intx;x=max();printf("%d",x);}#include<stdio.h>intmax(){intz;z=a>=b?a:b;return(z);}voidmain(){intx;inta,b;scanf("%d,%d",&a,&b);x=max();printf("%d",x);}數(shù)據(jù)怎么傳遞?2、有參函數(shù)定義格式:[數(shù)據(jù)類型]函數(shù)名(形參類型形參名1,形參類型形參名2,……){
說明部分執(zhí)行語句
[return];}調(diào)用:
函數(shù)名(實參1,實參2……..);#include<stdio.h>intmain(){inta,b,z;scanf("%d,%d",&a,&b);
z=max(a,b);printf("%d",z);}intmax(intx,inty){intz;z=x>=y?x:y;
return(z);}主函數(shù)函數(shù)體函數(shù)的返回值通過函數(shù)體中的return語句獲得。函數(shù)名(用標識符命名),引用函數(shù)的標志,并得到結(jié)果。函數(shù)參數(shù)說明表。定義!引用!函數(shù)定義是要確定函數(shù)的名稱、函數(shù)的類型、函數(shù)的參數(shù)及函數(shù)的功能。3、形式參數(shù)和實際參數(shù)#include<stdio.h>voidmain(void){inta,b,z;scanf(“%d,%d”,&a,&b);z=max(a,b);
printf(“%d”,z);}
int
max(intx,inty){intz;z=x>=y?x:y;
return(z);}形式參數(shù):在定義函數(shù)時,函數(shù)名后面括弧中的變量名。注意:形參未出現(xiàn)函數(shù)調(diào)用時,不占內(nèi)存中的存儲單元。只在調(diào)用時才分配內(nèi)存單元,調(diào)用結(jié)束后,形參所占的內(nèi)存單元也被釋放。實際參數(shù):在調(diào)用函數(shù)時,函數(shù)名后面括弧中的表達式。形參與實參的說明:1、形參與實參一一對應(yīng),且類型應(yīng)相同。2、實參可以是常量、變量或表達式,但要有確定的值。在調(diào)用時將實參的值賦給形參變量。3、在被定義的函數(shù)中,必須指定形參的類型。4、實參變量對形參變量的數(shù)據(jù)傳遞是“值傳遞”,即單向傳遞,只由實參傳給形參,而不能由形參傳回來給實參。#include<stdio.h>voidmain(void){inta,b,c;scanf(“%d,%d”,&a,&b);
c=max(a,b);printf(“%d”,c);}
intmax(intx,inty){intz;z=x>=y?x:y;
return(z);}23abXy23z3#include<stdio.h>intexchange(inti,intj){intk;printf("i=%d,j=%d\n",i,j);k=i;i=j;j=k;printf("i=%d,j=%d\n",i,j);}intmain(){intm=1,n=10;printf("m=%d,n=%d\n",m,n);exchange(m,n);printf("m=%d,n=%d\n",m,n);};運行輸出:;m=1,n=10(函數(shù)調(diào)用前)i=1,j=10(函數(shù)中參數(shù)交換前)i=10,j=1(函數(shù)中參數(shù)交換后)m=1,n=10(函數(shù)調(diào)用后)intmax(void){floatz;…
returnz;/*z先轉(zhuǎn)化為整型*/}4、函數(shù)的返回值
⑴函數(shù)可以通過一個return語句返回一個值,也可以不返回值,此時應(yīng)在定義函數(shù)時用void類型加以說明。⑵函數(shù)中可以出現(xiàn)多個return語句,執(zhí)行到哪一個return語句,哪一個就起作用,返回值,且返回調(diào)用函數(shù),繼續(xù)執(zhí)行。intmax(intx,inty){if(x>=y)returnx;elsereturny;}⑶返回值的類型應(yīng)與函數(shù)的類型一致,如不一致,以函數(shù)類型為準,先轉(zhuǎn)換為函數(shù)類型后,再返回。#include<stdio.h>intmain(){intmax(floatx,floaty);floata,b;intc;scanf("%f,%f,",&a,&b);c=max(a,b);printf("maxis%d\n",c);return0;}intmax(floatx,floaty){floatz;z=x>y?x:y;return(z);}1.52.62.62變?yōu)?補充定義空函數(shù)一般形式為:類型名函數(shù)名(
){
}先用空函數(shù)占一個位置,以后逐步擴充好處:以后擴充新功能方便,7.4
函數(shù)的聲明在一個函數(shù)中調(diào)用另一函數(shù)(即被調(diào)用函數(shù))需要具備哪些條件呢?1.首先被調(diào)用的函數(shù)必須是已經(jīng)存在的函數(shù)(是庫函數(shù)或用戶自己定義的函數(shù))。但光有這一條件還不夠。2.如果使用庫函數(shù),還應(yīng)該在本文件開頭用#include命令將調(diào)用有關(guān)庫函數(shù)時所需用到的信息“包含”到本文件中來。3.如果使用用戶自己定義的函數(shù),而該函數(shù)的位置在調(diào)用它的函數(shù)(即主調(diào)函數(shù))的后面,應(yīng)該在主調(diào)函數(shù)中對被調(diào)用的函數(shù)作聲明。函數(shù)原型聲明函數(shù)原型函數(shù)原型的一般形式為:1.函數(shù)類型函數(shù)名(參數(shù)類型1,參數(shù)類型2……);2.函數(shù)類型函數(shù)名(參數(shù)類型1,參數(shù)名1,參數(shù)類型2,參數(shù)名2……);
聲明的作用是把函數(shù)名、函數(shù)參數(shù)的個數(shù)和參數(shù)類型等信息通知編譯系統(tǒng),以便在遇到函數(shù)調(diào)用時,編譯系統(tǒng)能正確識別函數(shù)并檢查調(diào)用是否合法。函數(shù)的“定義”和“聲明”的區(qū)別?#include<stdio.h>voidmain(){floatadd(floatx,floaty);
floata,b,c;
scanf("%f,%f",&a,&b);
c=add(a,b);printf("sumis%f\n",c);}floatadd(floatx,floaty)
{floatz;
z=x+y;
return(z);}#include<stdio.h>floatadd(floatx,floaty){floatz;
z=x+y;
return(z);}voidmain(){
floata,b,c;
scanf("%f,%f",&a,&b);
c=add(a,b);printf("sumis%f\n",c);}注意:函數(shù)的“定義”和“聲明”的區(qū)別:函數(shù)的定義是指對函數(shù)功能的確立,包括指定函數(shù)名,函數(shù)值類型、形參及其類型、函數(shù)體等,它是一個完整的、獨立的函數(shù)單位。函數(shù)的聲明的作用則是把函數(shù)的名字、函數(shù)類型以及形參的類型、個數(shù)和順序通知編譯系統(tǒng),以便在調(diào)用該函數(shù)時系統(tǒng)按此進行對照檢查。7.3
函數(shù)的調(diào)用1、函數(shù)調(diào)用的一般形式函數(shù)名(實參表列);函數(shù)和變量一樣,在其主調(diào)函數(shù)中必須“先聲明,后使用”。注意關(guān)系:函數(shù)定義--制造函數(shù)函數(shù)使用--聲明(準備使用)調(diào)用(使用函數(shù))2、函數(shù)調(diào)用的方式函數(shù)語句形式:如printf_star();(這時不要求函數(shù)帶回值,只要求函數(shù)完成一定的操作)2、函數(shù)調(diào)用的方式函數(shù)表達式形式:c=max(a,b)*2;(這時要求函數(shù)帶回一個確定的值以參加表達式的運算)2、函數(shù)調(diào)用的方式函數(shù)參數(shù):c=max(a,max(b,d));#include<math.h>
longmyfac(intn){inti=0;longy=1;for(i=1;i<=n;i++)y=y*i;returny;}
main(){intn=0;doubley=0;longz=0;scanf("%d",&n);y=sqrt(n);z=myfac(n);printf(“n=%d,y=%lf,z=%ld\n",n,y,z);}4442.0#include<math.h>
longmyfac(intn){inti=0;longy=1;for(i=1;i<=n;i++)y=y*i;returny;}
main(){intn=0;doubley=0;longz=0;scanf("%d",&n);y=sqrt(n);z=myfac(n);printf(“n=%d,y=%lf,z=%ld\n",n,y,z);}4n=4,y=2.000000,z=24實參主調(diào)函數(shù)被調(diào)函數(shù)444程序總是從主函數(shù)開始執(zhí)行2.024形參要調(diào)用另一函數(shù),應(yīng)注意:(1)被調(diào)函數(shù)必須存在(2)被調(diào)函數(shù)的定義位置正確盡量采用“自頂向下、逐步細化、模塊化”的方法編寫程序回顧:(1)調(diào)用時函數(shù)名要一致(2)實參與形參個數(shù)相同、類型一致(3)實參與形參可以同名,但占不同的存儲單元。無參函數(shù):[數(shù)據(jù)類型]函數(shù)名(){
說明部分執(zhí)行語句
[return];}有參函數(shù):[數(shù)據(jù)類型]函數(shù)名(形參類型:形參名1,形參類型:形參名2,……){
說明部分執(zhí)行語句
[return];}函數(shù)的定義函數(shù)的聲明(函數(shù)原型+;)函數(shù)原型的一般形式為:1.函數(shù)類型函數(shù)名(參數(shù)類型1,參數(shù)類型2……);2.函數(shù)類型函數(shù)名(參數(shù)類型1,參數(shù)名1,參數(shù)類型2,參數(shù)名2……);
函數(shù)的調(diào)用函數(shù)調(diào)用的一般形式為:函數(shù)名(實參列表);執(zhí)行下列程序后,變量i的值應(yīng)為(A). intma(intx,inty){returnx*y;}main() {inti; i=5; i=ma(i,i-1)-7; }A)13 B)17 C)19 D)以上都錯執(zhí)行下列程序后,變量a的值應(yīng)為(D).
intf(intx){
returnx+3;
}main(){
inta=1;
while(f(a)<10)
a++;}A)11B)10C)9D)7下列程序結(jié)構(gòu)中,不正確的是(A,B)。A)main()B)main(){floata,b,c;{floata,b,c;scanf("%f,%f",&a,&b);scanf("%f,%f",&a,&b);c=add(a,b);c=add(a,b);...........}}intadd(floatx,floaty)floatadd(floatx,floaty){...}{...}C)floatadd(floatx,floaty);D)floatadd(floatx,floaty)main(){...}{floata,b,c;main()scanf("%f,%f",&a,&b);{floata,b,c;c=add(a,b);scanf("%f,%f",&a,&b);......c=add(a,b);}.....floatadd(floatx,floaty)}{...}請思考:若輸入一個整數(shù)10,以下程序的運行結(jié)果.#include<stdio.h>voidmain(){inta,e[10],c,i=0;
intsub(int);scanf("%d",&a);while(a!=0){c=sub(a);a=a/2;e[i]=c;i++;}for(;i>0;i--)printf("%5d",e[i-1]);}intsub(inta){intc;c=a%2;returnc;}【練習】調(diào)用mysum,求1+2+3+…+nprintf("Inputdata:");scanf("%d",&n);y=mysum(n);printf(“%d,%ld",n,y);intn=0;longy=0;main(){}inti=0;longsum=0;for(i=1;i<=n;i++)sum=sum+i;returnsum;longmysum(intn)}{練習:編程求1!+2!+…n!.1、數(shù)據(jù)n從主程序中獲得;2、編寫子函數(shù)完成求解。#defineN3#include<stdio.h>voidmain(){ints(intn);
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工程施工合同成本結(jié)轉(zhuǎn)分錄
- 《薄壁不銹鋼管》課件
- 2025年鄂爾多斯貨運從業(yè)資格證考試題
- 2025年邵陽貨運從業(yè)資格證考試試題
- 2025年銅陵貨運上崗證考試多少道題
- 2025年連云港道路運輸從業(yè)資格證考試
- 《EYEQ項目說明完整》課件
- 第四單元 維護國家利益
- 建筑工程維修合同
- 紡織機械操作指南
- 九年級安全班會課件
- 《預防性侵安全教育》主題班會教案
- 礦山環(huán)境保護管理制度模版(3篇)
- 綜合服務(wù)中心施工組織設(shè)計
- 學前兒童衛(wèi)生與保健-期末大作業(yè):案例分析-國開-參考資料
- 濱州電動伸縮雨棚施工方案
- ISO45001管理體系培訓課件
- 醫(yī)院消防系統(tǒng)維護保養(yǎng)服務(wù)投標方案(圖文版)(技術(shù)方案)
- 花都區(qū)2023-2024年-2024年八年級上學期語文期末試卷
- 2025年健康素養(yǎng)知識競賽題庫(含答案)
- 2024年新疆區(qū)公務(wù)員錄用考試《行測》試題及答案解析
評論
0/150
提交評論