11函數(shù)1.ppt_第1頁
11函數(shù)1.ppt_第2頁
11函數(shù)1.ppt_第3頁
11函數(shù)1.ppt_第4頁
11函數(shù)1.ppt_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、思考,已知有下面的變量定義,如何將x和y的值交換一下: int x = 5, y = 10;,下面的運算方式是否可行? x = y; y = x;,常見的處理方式: (1)t = x; x = y; y = t; /借助了另一個變量 (2)x = x+y; y = x-y; x = x-y; /有點危險,主要內容,函數(shù)定義 函數(shù)調用,函數(shù)是C程序的基本構造塊,一個較大的應用程序一般分為若干個模塊,每個模塊用來實現(xiàn)一個特定的功能。 函數(shù)是C程序的基本模塊。 在前面學習的C程序中,都有一個名稱為main的函數(shù),每個完整的C程序從該函數(shù)開始運行。,什么是函數(shù)?,A function is a set

2、 of statements that have been collected together and given a name. 一個函數(shù)是具有名字的一個語句序列。 在結構上,一個函數(shù)包含函數(shù)首部和函數(shù)體兩部分,通過使用函數(shù),程序結構更清晰。,C函數(shù)的基本要素,一個函數(shù)由函數(shù)首部和函數(shù)體兩部分構成 函數(shù)首部包括:函數(shù)名、函數(shù)的返回值、函數(shù)的參數(shù) 函數(shù)體包括:聲明部分(數(shù)據(jù)說明)、語句部分(運算),int main() int inches, feet, fathoms; printf(input fathoms:); scanf(%d, ,聲明部分: 三個值將變化的整數(shù),語句部分: 輸入一

3、個英尋數(shù), 進行單位換算,函數(shù)體,函數(shù)首部:,使用庫函數(shù),在前面編寫的程序中,很多處理(運算)都是通過使用庫函數(shù)完成的。 輸入數(shù)據(jù):scanf()、getchar()、gets(). 輸出數(shù)據(jù):printf()、putchar()、puts(). 數(shù)學函數(shù):abs()、sqrt()、pow()、sin().,函數(shù)原型 函數(shù)的實現(xiàn)與調用格式說明(接口) 庫函數(shù)的原型一般在頭文件中說明 / #include 用戶(程序員)自定義的函數(shù)原型在適當?shù)牡胤秸f明,使用庫函數(shù)(續(xù)),在使用庫函數(shù)時,要遵循一定的要求。 printf(格式控制串,輸出表列) 正確:printf(%d %f,a,b) 錯誤:pr

4、intf(%d,a, %f,b) double sqrt(double x) 正確:b = sqrt(a) 錯誤:b = sqrt() 錯誤:sqrt(a,b),編寫程序語句時通過使用一個函數(shù)完成相應的運算稱為函數(shù)調用,函數(shù)的功能和使用函數(shù)的要求是通過函數(shù)定義確定的,函數(shù)定義和函數(shù)調用,編寫函數(shù)首部和函數(shù)體的內容就是進行函數(shù)定義,按照函數(shù)定義時給定的函數(shù)名使用函數(shù)稱為函數(shù)調用,庫函數(shù)是已經編寫好的函數(shù),編寫程序時可直接調用,要學習自己編寫函數(shù),并了解更多的庫函數(shù)的使用方法,函數(shù)定義的一般形式,函數(shù)定義的一般形式是:,類型標識符 函數(shù)名(形式參數(shù)表) 聲明部分; 語句部分; ,其中,類型標識符指

5、函數(shù)返回值的類型,例如,定義一個函數(shù),將給定一個攝氏溫度轉換為華氏溫度,并將華氏溫度返回。,double CelsToFahr(double c) double t; t = 9.0 / 5 * c + 32; return ( t ); ,int main() double x; double y; printf(Celsius to Fahrenheit table:n); for(x = 0; x = 100; x += 5) y = CelsToFahr(x); printf(%.1lf-%.1lft, x, y); return 0; ,函數(shù)定義,函數(shù)調用,#include #inc

6、lude double CelsToFahr(double c) /函數(shù)定義 double t; t = 9.0 / 5 * c + 32; return t ; int main() double x; double y; printf(Celsius to Fahrenheit table:n); for(x = 0; x = 100; x += 5) y = CelsToFahr(x); /函數(shù)調用 printf(%.1lf-%.1lft, x, y); system(pause); return 0; ,#include #include double CelsToFahr(doubl

7、e c); /聲明函數(shù)原型 int main() double x; double y; printf(Celsius to Fahrenheit table:n); for(x = 0; x = 100; x += 5) y = CelsToFahr(x);/函數(shù)調用 printf(%.1lf-%.1lft, x, y); system(pause); return 0; double CelsToFahr(double c) /函數(shù)定義 double t; t = 9.0 / 5 * c + 32; return t ; ,函數(shù)定義示例,定義一個函數(shù),其功能是求解并返回兩個整數(shù)的最大公約數(shù)

8、,int Gcd(int m, int n) int r = m % n; while (r) m = n; n = r; r = m%n; return n; ,函數(shù)定義示例,定義一個函數(shù),其功能是判斷一個整數(shù)是否是素數(shù),返回值為1、0分別表示該整數(shù)是/不是素數(shù)。 返回值為是/否的函數(shù)稱作“謂詞函數(shù)”,int Isprime(int n) int k; if (n2) return 0; for (k=2; kn; k+) if (n%k=0) return 0; return 1; ,函數(shù)參數(shù),形式參數(shù)(形參)和實際參數(shù)(實參),類型標識符 函數(shù)名(形式參數(shù)表) 聲明部分; 語句部分; ,

9、double CelsToFahr(double c) double t; t = 9.0 / 5 * c + 32; return (t); ,調用函數(shù)時的參數(shù)是實際參數(shù)(實參) x = 35; y = CelsToFahr(x); y = CelsToFahr(50);,函數(shù)定義中函數(shù)首部的參數(shù)稱為形式參數(shù)(形參),形參c,實參x,實參50,形參和實參,函數(shù)定義中函數(shù)首部的參數(shù)稱為形參 調用函數(shù)時的參數(shù)是實參,int Gcd(int m, int n) / 函數(shù)定義 int r = m % n; while (r) m = n; n = r; r = m%n; return n; ,形參m

10、和n,gcd = Gcd(10,4); printf(“%d”,Gcd(a,b);,實參,形參和實參,形參可看作是函數(shù)中定義的變量,所不同的是其初始值由實參提供,函數(shù)未被調用時,形參不占用存儲空間,記事本,實參與形參的類型應相同或賦值兼容,實參向形參傳遞值,形參不能向實參傳遞值,實參可以是常量、變量或表達式,#include double CelsToFahr(double c) return (9.0 / 5 * c + 32 ); void swap( int a, int b) int temp = (a) (b) ? (a) : (b); return temp; int main(

11、) double x; double y; printf(Celsius to Fahrenheit table:n); for(x = 0; x = 100; x += 5) y = CelsToFahr(x); printf(%.1lf-%.1lft, x, y); return 0; ,#include void swap(int a, int b) int temp; printf(In swap: a = %d, b = %dn, a, b); temp = a; a = b; b = temp; printf(In swap: a = %d, b = %dn, a, b); ret

12、urn; int main() int x = 5, y = 10; printf(In main: x = %d, y = %dn, x, y); if(xy) swap(x,y); printf(In main: x = %d, y = %dn, x, y); return 0; ,函數(shù)的返回值和return語句,函數(shù)的返回值由return語句帶回,return語句使被調用函數(shù)結束執(zhí)行并返回到調用它的地方,定義一個函數(shù),判斷給定的一個十進制正整數(shù)是否為素數(shù)。,/*判斷正整數(shù)d是否為素數(shù),若是返回1,否則返回0*/ int isPrime(int n) int i; if (n 2) ret

13、urn 0; for(i = 2; i = sqrt(n)+1; i+) if ( n % i = 0 ) return 0; return 1; ,記事本,return 表達式;,函數(shù)調用,函數(shù)調用的基本格式: 函數(shù)名(實際參數(shù)表),主調函數(shù)和被調用函數(shù),調用函數(shù)時,表達式(語句)所在的函數(shù)稱為主調函數(shù) 實參在主調函數(shù)中 形參在被調用函數(shù)中,記事本,函數(shù)調用(續(xù)),當一個函數(shù)被調用時,執(zhí)行以下步驟: 計算每個實際參數(shù)的值; 將每個實參的值拷貝至對應的形參變量; 執(zhí)行被調用函數(shù)的語句,直到遇到一條return語句或函數(shù)結束; 計算return語句中表達式的值; 返回主調函數(shù),用返回的值替換函數(shù)

14、調用,然后繼續(xù)執(zhí)行主調函數(shù)的后續(xù)語句。,記事本,函數(shù)原型,函數(shù)原型(function prototype) 返回值的類型 函數(shù)名(形式參數(shù)類型表) ANSI C標準中,函數(shù)原型使編譯程序可對函數(shù)調用的合法性進行檢查 函數(shù)聲明(declaration)的目的是:對將要調用的函數(shù)的使用方式通知編譯程序,聲明格式: 返回值的類型 函數(shù)名(形式參數(shù)表),記事本,void main( ) double x; double y; printf(Celsius to Fahrenheit table:n); for(x = 0; x = 100; x += 5) y = CelsToFahr(x); pri

15、ntf(%3g-%3gt, x, y); double CelsToFahr(double c) double t; t = 9.0 / 5 * c + 32; return ( t ); ,double CelsToFahr(double c); /函數(shù)原型,例題,定義一個求n的階乘的函數(shù)。函數(shù)返回n!,int main ( ) int i = 1; for(i = 1; i = 10; i+) printf(%d! = %ldn,i,fact(i); return 0; ,long fact(int n) long t = 1, i = 1; for(i = 1; i = n; i+) t = t * i; return ( t ); ,不同函數(shù)中的變量(局部變量)是互不干擾、相互獨立的,練習:求組合數(shù),書架上有n本不同的書,從中任取k本,有多少種取法?,long combinations(int n, int k) return ( fact(n)/(fact(k)*fact(n-k) ); ,long fact(int n) long t = 1, i = 1; for(i = 1

溫馨提示

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

評論

0/150

提交評論