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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

計算機編程中的函數

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

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

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

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

printf("Enterradiusandheight:");

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

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

returnresult;

/*返回結果*/}Enterradiusandheight:3.010Volume=282.7431.2函數的定義

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

函數實現過程

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

函數實現過程

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

/*函數首部*/{

/*函數體,寫在一對大括號內*/

doubleresult;

result=3.1415926*r*r*h;

/*計算圓柱體積*/

returnresult;

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

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

函數實現過程

return;

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

/*函數聲明*/

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

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

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

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

putchar('\n'); }}

122333444455555

1.3函數的調用定義一個函數后,就可以在程序中調用這個函數。調用標準庫函數時,在程序的最前面用#include命令包含相應的頭文件。調用自定義函數時,程序中必須有與調用函數相對應的函數定義。1.函數調用的形式和過程使用返回值:volume=cylinder(radius,height);printf(“%f\n”,cylinder(radius,height));完成操作:pyramid(5);常用于void類型函數的調用常用于返回結果的函數的調用常量、變量、表達式函數名(實參表)函數調用的過程計算機在執行程序時,從主函數main開始執行,如果遇到某個函數調用,主函數被暫停執行,轉而執行相應的函數,該函數執行完后,將返回主函數,然后再從原先暫停的位置繼續執行。函數遇return或最后的大括號,返回主函數main調用函數f結束函數f結束執行調用返回函數調用流程分析函數調用的過程#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;

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

printf("請輸入一個正整數:");

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

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

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

return1; /*偶數返回1*/elsereturn0;

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

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

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以內的全部素數,每行輸出10個。素數就是只能被1和自身整除的正整數,1不是素數,2是素數。

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

算法描述:對2~100之間的每個數進行判斷,若是素數,則輸出該數。for(m=2;m<=100;m++)if(m是素數)

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

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

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

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變量與函數3.1局部變量和全局變量局部變量在函數內定義的變量(包括形參)作用范圍:本函數內部定義在復合語句內的變量作用范圍:復合語句內部全局變量

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

int a;

a=1;

{ /*復合語句開始*/

intb=2;

b=a+b;

a=a+b;

} /*復合語句結束*/

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

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;函數調用時,定義變量,分配存儲單元。函數調用結束,收回存儲單元。全局變量:從程序執行開始,到程序的結束,存儲單元始終保持。變量生命周期變量從定義開始分配存儲單元,到運行結束存儲單元被回收的整個過程。3.2變量生命周期和靜態局部變量存儲類型:動態存儲:自動變量靜態存儲:全局變量、靜態局部變量用戶存儲空間存儲區數據區靜態存儲區動態存儲區static

類型名變量表作用范圍:同局部變量生命周期:同全局變量靜態局部變量例8靜態局部變量示例#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,靜態變量會記住前一次調用時留下來的值靜態變量的初值默認為0本章小結函數的定義與調用函數參數的傳遞與返回值(數字金字塔、計算π的近似值、求100以內的全部素數)。函數的形參

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論