第5章函數(shù)及其用ppt課件_第1頁
第5章函數(shù)及其用ppt課件_第2頁
第5章函數(shù)及其用ppt課件_第3頁
第5章函數(shù)及其用ppt課件_第4頁
第5章函數(shù)及其用ppt課件_第5頁
已閱讀5頁,還剩42頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 第第5 5章章 函數(shù)及其應用函數(shù)及其應用5.1 5.1 函數(shù)種類函數(shù)種類5.1.1 命令函數(shù)例如:getchar(),putchar()等。5.1.2標準庫函數(shù)例如: fabs(),pow(),rand(),sin(x),sqrt(),fexp()5.1.35.1.3自定義函數(shù)自定義函數(shù) 5.2 自定義函數(shù)的概念及使用方法自定義函數(shù)的概念及使用方法例1:求兩個數(shù)中的最大數(shù)#include int imax (int m, int n)return (mn ? m:n); void main() int a=6,b=9; coutimax(a,b); 例2:求x的n次方#include ios

2、tream.hvoid main() float mpow(float ,int); coutpow=mpow(3.,3)endl; float mpow(float a,int n)int i; float k=1; for(i=1;i=n;i+) k=k*a; return (k); 5.3 5.3 自定義函數(shù)的三種形式自定義函數(shù)的三種形式5.3.1 無參函數(shù),例如main(),getchar()等。 主函數(shù)與子函數(shù)之間不傳輸數(shù)據(jù)。例:輸出字符四方形 * * * *void print()int i; for(i=1;i5;i+) coutr; res(a, b, r); coutr=rs

3、etw(10)a=asetw(10)b=bendl;float res(float &a,float &b,float r)a=3.14159*r*r; b=2*3.14159*r; return 0; 例:編寫函數(shù)(過程、子程序)程序1.求n的階乘 f(n)2.求三個數(shù)的最大數(shù)(可以求多個數(shù)的最大數(shù))3.求兩個正整數(shù)的最大公約數(shù)(可以求多個數(shù)的最大公約數(shù)) f (m,n)4.求n+(n+1)+(n+2)+(n+k)5.用子函數(shù)完成x2,x3,xn5.5 c+5.5 c+庫函數(shù)庫函數(shù) 被直接調用的函數(shù)稱為庫(內(nèi)部)函數(shù)。函數(shù)名 函數(shù)原型 要用到的頭文件abs() int abs

4、(int n) stdlib.hfabs() double abs(double x) math.hcos() double cos(double x) math.hexp() double exp(double x) math.hlog() double log(double x) math.hpow() double pow(double x, double y) math.hsqrt() double sqrt(double x) math.hsin() double sin(double x) math.htan() double tan(double x) math.hkbhit()

5、 int kbhit() conio.hexit() void exit(int n) stdlib.hrand() double rand(double x) stdlib.h5.6 作用域和存儲類作用域和存儲類5.6.1 作用域1. 塊作用域 塊內(nèi)說明的變量只能在本塊有效。2. 文件作用域 文件作用域就是全局作用域。例:讀程序,觀察全局變量和局部變量的關系#include int i; /全局變量,文件作用域void main() i=5; /文件作用域的i賦初值 /子塊1 int i; /局部變量,塊作用域 i=7; couti=iendl; /輸出7 couti=iendl;/輸出5

6、3. 函數(shù)原型作用域 函數(shù)的作用域只限定在函數(shù)原型的函數(shù)中。4. 函數(shù)作用域 在函數(shù)內(nèi)均有效, 不受塊作用域的限制, 只有標號屬于函數(shù)作用域(在goto語句中使用)。5.6.2 存儲類 1. 局部變量及其概念l形參是局部變量。l在一個復合語句中定義的變量。l在一個函數(shù)中定義的變量。2. 全局(外部)變量及其概念l函數(shù)外部定義的變量。l用extern 說明的變量。3. 動態(tài)(自動)變量l程序運行期間,分配內(nèi)存單元,運行結束,內(nèi)存單元就釋放。l形參、局部變量都是動態(tài)變量。l動態(tài)變量用auto說明或省略。4. 靜態(tài)變量l調用函數(shù)結束,變量值保留,下次調用值仍存在。l靜態(tài)變量用static 說明。l數(shù)

7、組只有定義成靜態(tài)時,才能初始化。l靜態(tài)變量自動賦0值。l何時需要定義靜態(tài)數(shù)組:保留函數(shù)的變量值和數(shù)組初始化。例: 讀程序,理解靜態(tài)變量#include #include void main() int count(int); do count(0); while(!kbhit(); cout”function count() have been called”count(1)”timesn” int count(int i) static int c=0; if(i) return c; else return +c; return 0;說明:未從鍵盤上按下鍵時,反復循環(huán)調函數(shù)count(),

8、 c一直自加,從鍵盤上一旦按下鍵時,結束循環(huán),輸出c值。5. 寄存器變量作用:存取速度快。特點:只允許使用三個寄存器變量,且必須是形參和局部變量才能使用。用法:用 register 說明。5.7 5.7 內(nèi)聯(lián)函數(shù)內(nèi)聯(lián)函數(shù) 大量、多次調用函數(shù),要占計算機很多時間,為了用空間換時間,才用內(nèi)聯(lián)函數(shù)。只要在定義函數(shù),或者對函數(shù)原型說明時,在行首加上inline 即可。例:求圓面積#includeinline double calarea(double radius) return 3.14*radius*radius;void main() double r=3.0; /r是圓的半徑double ar

9、ea;area=calarea(r); /調用內(nèi)聯(lián)函數(shù),編譯時此處被替換為calarea函數(shù)體語句coutareaendl;return 0; 5.8 帶有缺省參數(shù)的函數(shù)帶有缺省參數(shù)的函數(shù) 函數(shù)說明時,先對形參初始化,調用函數(shù)時,若給實參,就使用實參,否則使用說明時給出的初始值。例:求四方體體積#include #include int get_volume(int length, int width = 2, int height = 3);void main()int x = 10, y = 12, z = 15;cout some box data is ;cout get_volume

10、(x, y, z) endl;cout some box data is ;cout get_volume(x, y) endl;cout some box data is ;cout get_volume(x) endl;cout some box data is ;cout get_volume(x, 7) endl;cout some box data is ;cout get_volume(5, 5, 5) endl;return 0;int get_volume(int length, int width, int height) coutsetw(5)lengthsetw(5)wi

11、dthsetw(5)height ;return (length * width * height); 說明:l默認參數(shù)的說明一定要放在函數(shù)使用之前。l對形參的初始化可以是任意表達式。l如部分形參初始化,必須自右向左。l如果函數(shù)說明出現(xiàn)在不同程序塊, 允許提供和使用不同的默認值。5.9 5.9 參數(shù)數(shù)目可變函數(shù)參數(shù)數(shù)目可變函數(shù) 根據(jù)需要,函數(shù)的參數(shù)可多可少,函數(shù)參數(shù)多少可變的函數(shù)稱參數(shù)數(shù)目可變函數(shù)。例:從n個數(shù)中找出最大數(shù)#include #include int main()int a,b,c,d,e;int max(int,int.); cinabcde; coutthe bigger b

12、etween a and b is max(2,a,b)endl; coutthe bigger in the five number is max(5,a,b,c,d,e)endl;return 0;int max(int num,int integer.) va_list ap; int m=integer; va_start(ap,integer); for(int i=1;im) m=t; coutiendl; va_end(ap); return m; 說明:l必須使用頭文件stdarg.h。l定義函數(shù)和函數(shù)原型的書寫要求。l要用到三個專用函數(shù)和一個類型定義關鍵字: va_start

13、, va_arg, va_end和va_list 。l請將此題改為求實型數(shù)最大值。 5.10 5.10 函數(shù)重載(函數(shù)重載(overloadoverload)一個函數(shù)可以當幾個函數(shù)使用。根據(jù)形參的類型,調用不同的函數(shù)。函數(shù)定義不能少。例: 用一個函數(shù)add( ) 實現(xiàn)兩個整型數(shù)相加和兩個實型數(shù)相加#includevoid main(void) int m, n;double x, y;int add(int m, int n);double add(double x, double y);coutmn;coutinteger “m+n=add(m,n)endl;coutxy;coutreal

14、number x+y= add(x,y)endl;int add(int m, int n) return m+n; double add(double x, double y) return x+y; 5.11 5.11 外部函數(shù)外部函數(shù)能被其他文件調用的函數(shù)稱為外部函數(shù)。外部函數(shù)要用extern 說明。5.12 5.12 函數(shù)遞歸函數(shù)遞歸函數(shù)遞歸的兩個基本條件1. 邊界條件2. 遞歸表達式3. 函數(shù)自身調用自身舉例:計算 n! (c=f(n-1)*n)#include long fac(int n) long f;if (n=1) c=1;else c=fac(n-1)*n;return(

15、f);void main()long fac(int n);int n;long y;coutn;y=fac(n);coutn!=yendl;1. 計算 1+2+3+ +1002. 計算 0,1,1,2,3,5,8,. 第前20項(return (f(n-1)+f(n-2);)5.13 5.13 編譯予處理編譯予處理概念:在對程序編譯之前就進行替換處理,稱予處理(有三種: 嵌入指令(文件包含)、宏定義、和條件編譯)。用途:1. 有利于程序的移植與兼容.2. 增加程序的兼容性.3. 減少程序的運行時間4. 減少程序的長度5.13.1 嵌入指令#include 方法:建立多個*.cpp文件,按執(zhí)行

16、順序放在#include 中。5.13.2 宏定義方法與用途1. 不帶參數(shù)的宏定義(用一個標識符代表一個字符串或一個常量,不做語法檢查。)#define pi 3.14159 (宏定義的標識符常使用大寫字母,以有別于變量)#define n 100 (n可以用作數(shù)組的下標)#define r 3#define a pi*r*r#define c conputer#define pr cin#define n “n” 例: prxn2. 帶參數(shù)的宏定義(用一個標識符代表一個函數(shù),不做語法檢查。)#define pi 3.14159#define circle (a,l,r) a=pi*r*r;l

17、=2*pi*pi #define max(x,y) (x)(y) ? (x) ? (y)#define mul(x1,x2) x1*x2 / 注意(x1)*(x2)例:定義一個求兩個數(shù)之積的宏名mul, 且求:2+3,6+2和3.1,3的積#define mul(x1,x2) x1*x2main() coutmul(2+3,6+2)mul(3.1, 2);說明: 1. 根據(jù)計算的結果決定其類型。2. 實參是表達式時, 形參要用( )。3. 一個#define 只能定義一個宏名。4. 帶參宏近似帶參函數(shù)的定義及用法。5. 帶參宏的宏中可以有進出兩種參數(shù)。6. 宏名可以作為定義數(shù)組時的下標(static int an )7. 如果要修改宏名的內(nèi)容,只能用define。8. 可以使用#undef 解除宏定義。例: 定義一個宏, 求x 的絕對值#define abs(x) (x0 ? x : -x) 使用時: int a=-3; coutabs(a); 例: 定義一個宏, 判斷x 是否是偶數(shù)(偶數(shù)取 1)#define num(x) (x%2 ? 0 : 1)5.13.3 條件編譯指令格式1: #if #else #endif格式2 (連續(xù)判斷)#if #elif #else#endif 例:讀程序,理解條件編譯#include #de

溫馨提示

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

評論

0/150

提交評論