計(jì)算機(jī)c語言編程-函數(shù)_第1頁
計(jì)算機(jī)c語言編程-函數(shù)_第2頁
計(jì)算機(jī)c語言編程-函數(shù)_第3頁
計(jì)算機(jī)c語言編程-函數(shù)_第4頁
計(jì)算機(jī)c語言編程-函數(shù)_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

計(jì)算機(jī)編程中的函數(shù)

1計(jì)算圓柱體積2使用函數(shù)編寫程序3變量與函數(shù)隆回職業(yè)中專幸建新本章要點(diǎn)函數(shù)的定義,函數(shù)的定義域,函數(shù)的值域什么是函數(shù)的參數(shù)?在函數(shù)調(diào)用時(shí),參數(shù)是如何傳遞的?在使用函數(shù)的過程中,要注意哪些問題?怎樣確定函數(shù)的參數(shù)?如何使用局部變量和全局變量?1計(jì)算圓柱體積1.1程序解析--計(jì)算圓柱體積

例1輸入圓柱體的高和半徑,求圓柱體積volume=π*r2*h。

要求定義和調(diào)用函數(shù)cylinder(r,h)計(jì)算圓柱體的體積。#include<stdio.h>voidmain(void)/*計(jì)算圓柱體積*/{doubleheight,radius,volume;

doublecylinder(doubler,doubleh);/*函數(shù)聲明*/

printf("Enterradiusandheight:");

scanf("%lf%lf",&radius,&height); volume=cylinder(radius,height);/*調(diào)用函數(shù)*/

printf("Volume=%.3f\n",volume);}doublecylinder(doubler,doubleh)/*定義求圓柱體積的函數(shù)*/{ doubleresult; result=3.14159*r*r*h;/*計(jì)算體積*/

returnresult;

/*返回結(jié)果*/}Enterradiusandheight:3.010Volume=282.7431.2函數(shù)的定義

函數(shù)是指完成一個(gè)特定工作的獨(dú)立程序模塊。庫函數(shù):由C語言系統(tǒng)提供定義(如scanf()、printf()等)自定義函數(shù):需要用戶自己定義如計(jì)算圓柱體體積函數(shù)cylinder()main()也是一個(gè)函數(shù),C程序由一個(gè)main()和多個(gè)其它函數(shù)構(gòu)成。程序中一旦調(diào)用了某個(gè)函數(shù),該函數(shù)就會完成一些特定的工作,然后返回到調(diào)用它的地方。函數(shù)經(jīng)過運(yùn)算,得到一個(gè)明確的運(yùn)算結(jié)果,并需要回送該結(jié)果。例如,函數(shù)cylinder()返回圓柱的體積。函數(shù)完成一系列操作步驟,不需要回送任何運(yùn)算結(jié)果。1.返回運(yùn)算結(jié)果的函數(shù)定義函數(shù)類型函數(shù)名(形參表)/*函數(shù)首部*/{ /*函數(shù)體*/

函數(shù)實(shí)現(xiàn)過程

return表達(dá)式;}把函數(shù)運(yùn)算的結(jié)果回送給主函數(shù)函數(shù)返回值的類型沒有分號只能返回一個(gè)值形參類型1參數(shù)1,類型2參數(shù)2,……,類型n參數(shù)n參數(shù)之間用逗號分隔,每個(gè)參數(shù)前類型都必須分別寫明函數(shù)類型函數(shù)名(形參表){

函數(shù)實(shí)現(xiàn)過程

return表達(dá)式;}不能寫成doubler,hdoublecylinder(doubler,doubleh){doubleresult;result=3.1415926*r*r*h;returnresult;}doublecylinder(doubler,doubleh)

/*函數(shù)首部*/{

/*函數(shù)體,寫在一對大括號內(nèi)*/

doubleresult;

result=3.1415926*r*r*h;

/*計(jì)算圓柱體積*/

returnresult;

/*返回運(yùn)算結(jié)果*/ }分析函數(shù)的定義函數(shù)類型函數(shù)名形參表與函數(shù)類型一致2.不返回運(yùn)算結(jié)果的函數(shù)定義void

函數(shù)名(參數(shù)表)/*函數(shù)首部*/{ /*函數(shù)體*/

函數(shù)實(shí)現(xiàn)過程

return;

/*可以省略return*/}表示不返回結(jié)果不能省略void否則,函數(shù)類型被默認(rèn)為int例2輸出5之內(nèi)的數(shù)字金字塔。#include<stdio.h>intmain(void){ voidpyramid(intn);

/*函數(shù)聲明*/

pyramid(5); /*調(diào)用函數(shù),輸出數(shù)字金字塔*/ return0;}voidpyramid(intn)

/*函數(shù)定義*/{ inti,j; for(i=1;i<=n;i++) /*需要輸出的行數(shù)*/ {for(j=1;j<=n-i;j++) /*輸出每行左邊的空格*/

printf(""); for(j=1;j<=i;j++) /*輸出每行的數(shù)字*/

printf("%d",i);/*每個(gè)數(shù)字的前后各有一個(gè)空格*/

putchar('\n'); }}

122333444455555

1.3函數(shù)的調(diào)用定義一個(gè)函數(shù)后,就可以在程序中調(diào)用這個(gè)函數(shù)。調(diào)用標(biāo)準(zhǔn)庫函數(shù)時(shí),在程序的最前面用#include命令包含相應(yīng)的頭文件。調(diào)用自定義函數(shù)時(shí),程序中必須有與調(diào)用函數(shù)相對應(yīng)的函數(shù)定義。1.函數(shù)調(diào)用的形式和過程使用返回值:volume=cylinder(radius,height);printf(“%f\n”,cylinder(radius,height));完成操作:pyramid(5);常用于void類型函數(shù)的調(diào)用常用于返回結(jié)果的函數(shù)的調(diào)用常量、變量、表達(dá)式函數(shù)名(實(shí)參表)函數(shù)調(diào)用的過程計(jì)算機(jī)在執(zhí)行程序時(shí),從主函數(shù)main開始執(zhí)行,如果遇到某個(gè)函數(shù)調(diào)用,主函數(shù)被暫停執(zhí)行,轉(zhuǎn)而執(zhí)行相應(yīng)的函數(shù),該函數(shù)執(zhí)行完后,將返回主函數(shù),然后再從原先暫停的位置繼續(xù)執(zhí)行。函數(shù)遇return或最后的大括號,返回主函數(shù)main調(diào)用函數(shù)f結(jié)束函數(shù)f結(jié)束執(zhí)行調(diào)用返回函數(shù)調(diào)用流程分析函數(shù)調(diào)用的過程#include<stdio.h>intmain(void){doubleheight,radius,volume;

doublecylinder(doubler,doubleh);

printf("Enterradiusandheight:");

scanf("%lf%lf",&radius,&height); volume=cylinder(radius,height);

printf("Volume=%.3f\n",volume); return0;}doublecylinder(doubler,doubleh)

{ doubleresult; result=3.1415926*r*r*h;

returnresult;

}調(diào)用函數(shù)實(shí)參形參執(zhí)行函數(shù)中的語句返回調(diào)用它的地方2.參數(shù)傳遞函數(shù)定義時(shí)的參數(shù)被稱為形式參數(shù)(簡稱形參)doublecylinder(doubler,doubleh);函數(shù)調(diào)用時(shí)的參數(shù)被稱為實(shí)際參數(shù)(簡稱實(shí)參)volume=cylinder(radius,height);實(shí)參形參在參數(shù)傳遞過程中,實(shí)參把值復(fù)制給形參。形參和實(shí)參一一對應(yīng):數(shù)量一致,類型一致,順序一致形參:變量,用于接受實(shí)參傳遞過來的值實(shí)參:常量、變量或表達(dá)式單向傳遞3.函數(shù)結(jié)果返回函數(shù)返回的兩種情況完成確定的運(yùn)算,有一個(gè)運(yùn)算結(jié)果返回給主調(diào)函數(shù)。(有返回值)完成指定工作,沒有確定的運(yùn)算結(jié)果需返回給主調(diào)函數(shù)(函數(shù)類型void)。(無返回值)函數(shù)結(jié)果返回的形式:return表達(dá)式;return(表達(dá)式);二者作用相同例3判斷奇偶數(shù)的函數(shù)even(n)定義一個(gè)判斷奇偶數(shù)的函數(shù)even(n),當(dāng)n為偶數(shù)時(shí)返回1,否則返回0。如何調(diào)用該函數(shù)?voidmain(){intn,flag;

printf("請輸入一個(gè)正整數(shù):");

scanf("%d",&n);flag=even(n);if(flag)printf("%d是偶數(shù)\n",n);elseprintf("%d是奇數(shù)\n",n);}int

even(intn) /*函數(shù)首部*/

{if(n%2==0) /*判別奇偶數(shù)*/

return1; /*偶數(shù)返回1*/elsereturn0;

/*奇數(shù)返回0*/} 函數(shù)沒有聲明,可以嗎?為什么?4.函數(shù)原型聲明函數(shù)類型函數(shù)名(參數(shù)表);例如:

doublecylinder(doubler,doubleh);voidpyramid(intn);函數(shù)必須先定義后調(diào)用,將主調(diào)函數(shù)放在被調(diào)函數(shù)的后面,就像變量先定義后使用一樣。如果自定義函數(shù)在主調(diào)函數(shù)的后面,就需要在函數(shù)調(diào)用前,加上函數(shù)原型聲明。函數(shù)聲明:說明函數(shù)的類型和參數(shù)的情況,以保證程序編譯時(shí)能判斷對該函數(shù)的調(diào)用是否正確。只寫函數(shù)定義中的第1行(函數(shù)首部),并以分號結(jié)束。2使用函數(shù)編寫程序例4輸入精度e,使用格里高利公式求π的近似值,精確到最后一項(xiàng)的絕對值小于e。要求定義和調(diào)用函數(shù)

funpi(e)求π的近似值。/*用公式計(jì)算π的近似值,精度為e*/#include<stdio.h>#include<math.h>intmain(void){ doublee,pi;

doublefunpi(doublee);

printf("Entere:");

scanf("%lf",&e); pi=funpi(e);

printf("pi=%f\n",pi); return0;}doublefunpi(doublee){ intdenominator,flag;doubleitem,sum; flag=1; denominator=1; item=1.0; sum=0;while(fabs(item)>=e){ item=flag*1.0/denominator;sum=sum+item;flag=-flag; denominator=denominator+2;}

returnsum*4;}Entere:0.0001pi=3.1418例5求100以內(nèi)的全部素?cái)?shù),每行輸出10個(gè)。素?cái)?shù)就是只能被1和自身整除的正整數(shù),1不是素?cái)?shù),2是素?cái)?shù)。

要求定義和調(diào)用函數(shù)prime(m)判斷m是否為素?cái)?shù),當(dāng)m為素?cái)?shù)時(shí)返回1,否則返回0。

算法描述:對2~100之間的每個(gè)數(shù)進(jìn)行判斷,若是素?cái)?shù),則輸出該數(shù)。for(m=2;m<=100;m++)if(m是素?cái)?shù))

printf("%d",m);prime(m)!=0#include<stdio.h>#include<math.h>intmain(void){ intcount,m;

intprime(intm);/*函數(shù)聲明*/ count=0; for(m=2;m<=100;m++){if(prime(m)!=0){printf("%6d",m);count++; if(count%10==0)printf("\n");} }

printf("\n");}/*函數(shù)定義*/

int

prime(intm){inti,n;if(m==1)return

0;

n=sqrt(m);for(i=2;i<=n;i++)if(m%i==0)

return

0;

return

1;}3變量與函數(shù)3.1局部變量和全局變量局部變量在函數(shù)內(nèi)定義的變量(包括形參)作用范圍:本函數(shù)內(nèi)部定義在復(fù)合語句內(nèi)的變量作用范圍:復(fù)合語句內(nèi)部全局變量

在函數(shù)以外定義的變量,不從屬于任一函數(shù)。作用范圍:從定義處到源文件結(jié)束(包括各函數(shù))例6在復(fù)合語句中定義局部變量。#include<stdio.h>intmain(void){

int a;

a=1;

{ /*復(fù)合語句開始*/

intb=2;

b=a+b;

a=a+b;

} /*復(fù)合語句結(jié)束*/

printf("%d",a); return0;}b:小范圍內(nèi)的臨時(shí)變量

4例7全局變量定義#include"stdio.h"intx; /*定義全局變量x*/intf(){

intx=4;/*x為局部變量*/returnx;}intmain(void){

inta=1;

x=a; /*對全局變量x

賦值*/a=f(); /*a的值為4*/{

intb=2;

b=a+b; /*b的值為4*/

x=x+b; /*全局變量運(yùn)算*/}

printf("%d%d",a,x);return0;}4,7若局部變量與全局變量同名,局部變量有效時(shí),全局變量無效。這被稱為同名覆蓋。自動變量(auto):普通的局部變量intx,y;

auto

intx,y;charc1;

autocharc1;函數(shù)調(diào)用時(shí),定義變量,分配存儲單元。函數(shù)調(diào)用結(jié)束,收回存儲單元。全局變量:從程序執(zhí)行開始,到程序的結(jié)束,存儲單元始終保持。變量生命周期變量從定義開始分配存儲單元,到運(yùn)行結(jié)束存儲單元被回收的整個(gè)過程。3.2變量生命周期和靜態(tài)局部變量存儲類型:動態(tài)存儲:自動變量靜態(tài)存儲:全局變量、靜態(tài)局部變量用戶存儲空間存儲區(qū)數(shù)據(jù)區(qū)靜態(tài)存儲區(qū)動態(tài)存儲區(qū)static

類型名變量表作用范圍:同局部變量生命周期:同全局變量靜態(tài)局部變量例8靜態(tài)局部變量示例#include<stdio.h>voidfun(intk);intmain(void){intk;for(k=1;k<=3;k++)fun(k);return0;}voidfun(intk){staticinta;

printf("%d,",a);a+=k; }0,1,3,靜態(tài)變量會記住前一次調(diào)用時(shí)留下來的值靜態(tài)變量的初值默認(rèn)為0本章小結(jié)函數(shù)的定義與調(diào)用函數(shù)參數(shù)的傳遞與返回值(數(shù)字金字塔、計(jì)算π的近似值、求100以內(nèi)的全部素?cái)?shù))。函數(shù)的形參

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論