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

下載本文檔

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

文檔簡介

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

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

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

要求定義和調(diào)用函數(shù)cylinder(r,h)計算圓柱體的體積。#include<stdio.h>voidmain(void)/*計算圓柱體積*/{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;/*計算體積*/

returnresult;

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

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

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

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

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

return表達式;}不能寫成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;

/*計算圓柱體積*/

returnresult;

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

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

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

return;

/*可以省略return*/}表示不返回結(jié)果不能省略void否則,函數(shù)類型被默認為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);/*每個數(shù)字的前后各有一個空格*/

putchar('\n'); }}

122333444455555

1.3函數(shù)的調(diào)用定義一個函數(shù)后,就可以在程序中調(diào)用這個函數(shù)。調(diào)用標準庫函數(shù)時,在程序的最前面用#include命令包含相應的頭文件。調(diào)用自定義函數(shù)時,程序中必須有與調(diào)用函數(shù)相對應的函數(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)用常量、變量、表達式函數(shù)名(實參表)函數(shù)調(diào)用的過程計算機在執(zhí)行程序時,從主函數(shù)main開始執(zhí)行,如果遇到某個函數(shù)調(diào)用,主函數(shù)被暫停執(zhí)行,轉(zhuǎn)而執(zhí)行相應的函數(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ù)實參形參執(zhí)行函數(shù)中的語句返回調(diào)用它的地方2.參數(shù)傳遞函數(shù)定義時的參數(shù)被稱為形式參數(shù)(簡稱形參)doublecylinder(doubler,doubleh);函數(shù)調(diào)用時的參數(shù)被稱為實際參數(shù)(簡稱實參)volume=cylinder(radius,height);實參形參在參數(shù)傳遞過程中,實參把值復制給形參。形參和實參一一對應:數(shù)量一致,類型一致,順序一致形參:變量,用于接受實參傳遞過來的值實參:常量、變量或表達式單向傳遞3.函數(shù)結(jié)果返回函數(shù)返回的兩種情況完成確定的運算,有一個運算結(jié)果返回給主調(diào)函數(shù)。(有返回值)完成指定工作,沒有確定的運算結(jié)果需返回給主調(diào)函數(shù)(函數(shù)類型void)。(無返回值)函數(shù)結(jié)果返回的形式:return表達式;return(表達式);二者作用相同例3判斷奇偶數(shù)的函數(shù)even(n)定義一個判斷奇偶數(shù)的函數(shù)even(n),當n為偶數(shù)時返回1,否則返回0。如何調(diào)用該函數(shù)?voidmain(){intn,flag;

printf("請輸入一個正整數(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ù)的調(diào)用是否正確。只寫函數(shù)定義中的第1行(函數(shù)首部),并以分號結(jié)束。2使用函數(shù)編寫程序例4輸入精度e,使用格里高利公式求π的近似值,精確到最后一項的絕對值小于e。要求定義和調(diào)用函數(shù)

funpi(e)求π的近似值。/*用公式計算π的近似值,精度為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)的全部素數(shù),每行輸出10個。素數(shù)就是只能被1和自身整除的正整數(shù),1不是素數(shù),2是素數(shù)。

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

算法描述:對2~100之間的每個數(shù)進行判斷,若是素數(shù),則輸出該數(shù)。for(m=2;m<=100;m++)if(m是素數(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)部定義在復合語句內(nèi)的變量作用范圍:復合語句內(nèi)部全局變量

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

int a;

a=1;

{ /*復合語句開始*/

intb=2;

b=a+b;

a=a+b;

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

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

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; /*全局變量運算*/}

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

auto

intx,y;charc1;

autocharc1;函數(shù)調(diào)用時,定義變量,分配存儲單元。函數(shù)調(diào)用結(jié)束,收回存儲單元。全局變量:從程序執(zhí)行開始,到程序的結(jié)束,存儲單元始終保持。變量生命周期變量從定義開始分配存儲單元,到運行結(jié)束存儲單元被回收的整個過程。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)用時留下來的值靜態(tài)變量的初值默認為0本章小結(jié)函數(shù)的定義與調(diào)用函數(shù)參數(shù)的傳遞與返回值(數(shù)字金字塔、計算π的近似值、求100以內(nèi)的全部素數(shù))。函數(shù)的形參

溫馨提示

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

評論

0/150

提交評論