c程序語言函數(shù)課件_第1頁
c程序語言函數(shù)課件_第2頁
c程序語言函數(shù)課件_第3頁
c程序語言函數(shù)課件_第4頁
c程序語言函數(shù)課件_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

計算機程序設(shè)計C語言程序設(shè)計1第八章

函數(shù)第八章函數(shù)§8函數(shù)本章主要介紹了模塊化程序設(shè)計的思想,講解函數(shù)定義的方式、函數(shù)的參數(shù)的傳遞方式、函數(shù)的返回值。同時重點講解了局部變量和全局變量的區(qū)別和注意事項。重點:模塊化程序設(shè)計的思想,和局部變量和全局變量的區(qū)別。C語言的函數(shù)C語言的特點結(jié)構(gòu)化程序設(shè)計模塊化程序設(shè)計C語言中的函數(shù)是支持程序設(shè)計實現(xiàn)模塊化和層次結(jié)構(gòu)的基礎(chǔ),C語言函數(shù)是由完成某一特定任務(wù)的說明語句和執(zhí)行語句組成的基本功能單元§8-1概述問題的提出:設(shè)計一程序,實現(xiàn)學(xué)生成績的處理:求平均值、方差、分段統(tǒng)計等。解決方法:可以順序地在程序中,實現(xiàn)這些算法。但可能出現(xiàn)的問題是程序重復(fù)、不容維護好的解決方法:采用結(jié)構(gòu)化程序設(shè)計的思路,分模塊設(shè)計à函數(shù)例:通過調(diào)用求最大值函數(shù),實現(xiàn)求a,b的最大值.示例

main(){inta,b,c;scanf("%d,%d",&a,&b);c=max(a,b);printf("max=%d\n",c);}intmax(intx,inty){intz;if(x>y)z=x;elsez=y;returnz;}主調(diào)函數(shù)被調(diào)函數(shù)函數(shù)的一般形式函數(shù)的一般形式: 類型說明符函數(shù)名(形參表列) 形參說明; { 數(shù)據(jù)描述; 算法實現(xiàn); }例如:y=x2-1floaty(x)floatx;{return(x*x-1);}說明函數(shù)名程序自定義的標示符,用以標識該函數(shù)類型說明符定義函數(shù)返回的數(shù)值類型可以為C語言中的任意類型、整型時可以省略,無數(shù)值返回時,可以用void表示返回值Return中的表達式的值,返回給函數(shù)名(函數(shù)調(diào)用)形參表列以逗號分隔的變量名表,值由主調(diào)函數(shù)初始化函數(shù)的特點C語言中關(guān)于函數(shù)的約定:一個源程序文件由一個或多個函數(shù)組成,但有且僅有一個main()函數(shù)一個C程序可以由多個文件組成;C程序從main()開始執(zhí)行,由主函數(shù)結(jié)束函數(shù)之間的關(guān)系相互獨立,不存在從屬關(guān)系主函數(shù)和其它函數(shù)發(fā)生關(guān)系是靠函數(shù)調(diào)用實現(xiàn)的函數(shù)調(diào)用:實參=>形參調(diào)用函數(shù)應(yīng)注意任何函數(shù)均可相互調(diào)用(main除外)主調(diào)函數(shù)、被調(diào)函數(shù)main(){floata;floaty(float);a=3;printf("%.2f\n",y(a));}floaty(x)floatx;{return(x*x-1);}函數(shù)調(diào)用floaty(float);函數(shù)說明對被調(diào)函數(shù)的說明被調(diào)函數(shù)在整個程序之前或者函數(shù)類型是基本整型聲明部分可以省略。函數(shù)的分類用戶角度標準庫函數(shù)(系統(tǒng)函數(shù))用戶自定義函數(shù)形參(函數(shù)形式)無參函數(shù)有參函數(shù)§8-2函數(shù)的定義、返回值無參函數(shù)的定義類型說明符函數(shù)名(){函數(shù)體;}#include"stdio.h"main(){voidbeep();beep();}voidbeep(){inti;for(i=0;i<10;i++)putchar('\007');}有參函數(shù)的定義與返回值一般形式初值:實參=>形參(數(shù)據(jù)的抽象表示,定義的時候不占內(nèi)存空間))類型說明符函數(shù)名(形參表列)形參說明;{數(shù)據(jù)描述;算法實現(xiàn);}返回值格式

return(表達式);功能返回該函數(shù)一個值結(jié)束該函數(shù)數(shù)據(jù)類型不一致時,自動轉(zhuǎn)換為函數(shù)的定義類型程序舉例[例]編寫函數(shù)將某一字母變成大寫字母算法分析:小寫字母=〉大寫字母C-32返回值:return類型:字符型參考程序charpro(c)charc;{if(c>='a'&&c<='z')return(c-32);elsereturn(c);}main(){charc;c='a';printf("%c%c",c,pro(c));}參考程序判斷結(jié)果main(){charc,ch;c='a';ch='b';printf("%c%c\n",c,ch);printf("%c%c\n",pro(c),pro(ch));c=pro(c);printf("%c%c\n",c,ch);}charpro(charc){charch;if(c>='a'&&c<='z')ch=c-32;elsech=c;return(ch);}§8-3函數(shù)的調(diào)用在C語言中,用戶可以根據(jù)需要調(diào)用任何函數(shù)來完成某種處理,一個函數(shù)調(diào)用另一個函數(shù)稱為函數(shù)調(diào)用。其中調(diào)用者稱為主調(diào)函數(shù),被調(diào)用者稱為被調(diào)函數(shù)函數(shù)調(diào)用可以作為表達式中的一個分量,也可以單獨構(gòu)成語句。①函數(shù)調(diào)用的格式函數(shù)調(diào)用的一般形式

函數(shù)名(實際參數(shù)表)函數(shù)調(diào)用時把控制權(quán)和實際參數(shù)傳遞給函數(shù)系統(tǒng)給形參分配內(nèi)存空間然后執(zhí)行函數(shù)體若有返回值則返回主調(diào)函數(shù)釋放形參和函數(shù)體內(nèi)部變量的存儲空間且將流程控制權(quán)交回主調(diào)函數(shù)②實參和形參參數(shù)傳遞一一對應(yīng)求值方向自右向左主調(diào)函數(shù)函數(shù)名(參數(shù))實際參數(shù)函數(shù)調(diào)用被調(diào)函數(shù)函數(shù)名(參數(shù))形式參數(shù)函數(shù)定義D:\TC>typew1.cmain(){inta=1;printf("%d,%d\n",a,a++);}D:\TC>w1.exe2,1示例intmax(intx,inty){intz;if(x>y)z=x;elsez=y;returnz;}main(){inta,b,c;scanf("%d,%d",&a,&b);c=max(a,b);printf("max=%d\n",c);}#include<stdio.h>intmax(intx,inty);main(){inta,b,c;scanf("%d,%d",&a,&b);c=max(a,b);printf("max=%d\n",c);}intmax(intx,inty){intz;if(x>y)z=x;elsez=y;returnz;}被調(diào)函數(shù)放在主調(diào)函數(shù)之前主調(diào)函數(shù)之前(內(nèi))加函數(shù)聲明函數(shù)期間執(zhí)行過程

main函數(shù)c=max(a,b);

函數(shù)調(diào)用執(zhí)行max函數(shù)return返回調(diào)用結(jié)果intmax(intx,inty){intz;z=x>y?x:y;returnz;}main(){inta=3,b=5,c;c=max(a,b);printf("max=%d\n",c);}abcxyz355355⑤注意事項一個函數(shù)只能有一個返回值函數(shù)調(diào)用不能改變實參的值主調(diào)函數(shù)不能使用被調(diào)函數(shù)中的變量主調(diào)函數(shù)中的變量也不能用于被調(diào)函數(shù)中變量起作用的范圍只限本函數(shù)(局部變量)程序舉例[例]輸入兩數(shù),逆序輸出main(){inta,b;voidpro(int,int);scanf("%d,%d",&a,&b);pro(a,b);printf("%d,%d\n",a,b);}voidpro(inta,intb){intt;t=a;a=b;b=t;printf("%d,%d\n",a,b);}判斷結(jié)果:3,55,33,5§8-4函數(shù)的參數(shù)函數(shù)調(diào)用的執(zhí)行過程實際參數(shù)被傳遞給被調(diào)函數(shù)的形式參數(shù),實參和形參的數(shù)據(jù)類型以及傳遞順序必須一一對應(yīng)(賦值兼容)把控制傳遞給函數(shù)的第一條語句,執(zhí)行函數(shù)體在函數(shù)體中,執(zhí)行返回語句return,把控制和返回值返回主調(diào)函數(shù)。如無返回語句時,則執(zhí)行完最后一條語句時,把控制返回主調(diào)函數(shù)除void類型外,所有函數(shù)都返回一個值,值由return語句表達式返回只要是非void型,函數(shù)返回值(函數(shù)調(diào)用)均可作為操作數(shù)出現(xiàn)在表達式中參數(shù)的傳遞如果函數(shù)需要參數(shù),它就必須定義用來接受實參數(shù)據(jù)的形參,形參和實參不僅具備同樣的數(shù)據(jù)類型,而且必須選擇正確的傳遞方法通常有兩種方法實現(xiàn)參數(shù)的傳遞:傳值調(diào)用傳址調(diào)用傳值調(diào)用這種方法采用復(fù)制的形式把實參的值傳遞給形參,被調(diào)函數(shù)中形參的改變對于主調(diào)函數(shù)中的形參而言沒有影響主調(diào)函數(shù)被調(diào)函數(shù)數(shù)據(jù)數(shù)據(jù)傳址調(diào)用(數(shù)組作函數(shù)參數(shù))傳址調(diào)用是被調(diào)函數(shù)的形參和主調(diào)函數(shù)中的實參在內(nèi)存中占據(jù)相同的位置,可以實現(xiàn)函數(shù)中對主調(diào)函數(shù)的數(shù)據(jù)進行操作數(shù)組名作函數(shù)的形參和實參時傳遞的是數(shù)組的首地址,形參和實參共享存儲單元,形參的改變影響實參的改變。數(shù)組元素只能做函數(shù)的實參。程序舉例[例]編兩個函數(shù),分別實現(xiàn)對數(shù)組的輸入和輸出main(){inta[N];input(a);output(a);}#defineN10voidinput(a)inta[N];{inti;for(i=0;i<N;i++)scanf("%d",&a[i]);}voidoutput(b)intb[N];{inti;for(i=0;i<N;i++)printf("%d",b[i]);}注意事項在主調(diào)函數(shù)和被調(diào)函數(shù)中,作為實參和形參出現(xiàn)的數(shù)組要分別定義,類型應(yīng)一致,數(shù)組名可以相同函數(shù)調(diào)用時,傳遞數(shù)組名(地址),對形參的數(shù)組個數(shù)不作檢查,因此,可以不必聲明長度習(xí)慣上 實參 數(shù)組名,長度 a,N 形參 數(shù)組名,變量 a,n參考#defineN10voidinput(a,n)inta[],n;{inti;for(i=0;i<n;i++)scanf("%d",&a[i]);}voidoutput(b,n)intb[],n;{inti;for(i=0;i<n;i++)printf("%d",b[i]);}main(){inta[N];input(a,N);output(a,N);}例:編寫函數(shù)用“冒泡法”排序voidsort(array,n)intarray[],n;{inti,j,t;for(i=1;i<n;i++)for(j=1;j<=n-i;j++)if(a[j-1]>a[j]){t=array[j-1];array[j-1]=arrar[j];array[j]=t;}}#defineN10main(){inta[N],I;for(i=0;i<N;i++)scanf(“%d”,&a[i]);sort(a,N);for(i=0;i<N;i++)printf(“%8d”,a[i]);printf(“\n”);}函數(shù)的嵌套調(diào)用函數(shù)之間沒有從屬關(guān)系即在一個函數(shù)的定義內(nèi)不能再包含有另一個函數(shù)的定義,也就是說函數(shù)的定義不能嵌套,但是允許函數(shù)嵌套調(diào)用。所謂嵌套調(diào)用指的是在函數(shù)的調(diào)用過程中又出現(xiàn)了另外一種函數(shù)調(diào)用成為函數(shù)的嵌套調(diào)用。例:計算n!floatfac(intn){floatf;if(n==0||n==1)f=1;elsef=fac(n-1)*n;return(f);}main(){intn;floaty;printf(“inputn:”);scanf(“%d”,&n);y=fac(n);printf(“%d!=%.0f\n”,n,y);}局部變量和全局變量局部變量指在一個函數(shù)內(nèi)定義的變量,只在定義它的函數(shù)內(nèi)起作用。允許在不同的函數(shù)中使用相同的變量名,它們代表不同的對象分配不同的內(nèi)存互不干擾。全局變量:函數(shù)外定義的變量稱作全局變量。允許全局變量和局部變量同名,在局部變量的作用域內(nèi),全局變量不起作用。變量的存儲類型變量定義的完整形式:

[存儲類型]類型說明符變量名表列;存儲類型關(guān)鍵字主要有:auto、register、extern、static.

變量在內(nèi)存的存儲分為靜態(tài)存儲和動態(tài)存儲。靜態(tài)存儲的變量從程序開始到程

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論