chap函數(shù)與宏定義學(xué)習(xí)教案_第1頁
chap函數(shù)與宏定義學(xué)習(xí)教案_第2頁
chap函數(shù)與宏定義學(xué)習(xí)教案_第3頁
chap函數(shù)與宏定義學(xué)習(xí)教案_第4頁
chap函數(shù)與宏定義學(xué)習(xí)教案_第5頁
已閱讀5頁,還剩35頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、會計學(xué)1chap函數(shù)與宏定義函數(shù)與宏定義第一頁,編輯于星期六:點 四分。 C 函數(shù)分函數(shù)分標(biāo)準(zhǔn)函數(shù)標(biāo)準(zhǔn)函數(shù)(庫函數(shù)庫函數(shù))和和自定義函數(shù)自定義函數(shù)。 所有函數(shù)都是平行的,相互獨立不能嵌套定義,函數(shù)間所有函數(shù)都是平行的,相互獨立不能嵌套定義,函數(shù)間可以相互調(diào)用,但不能調(diào)用可以相互調(diào)用,但不能調(diào)用main()函數(shù)。函數(shù)。第1頁/共40頁第二頁,編輯于星期六:點 四分。6.1.1 函數(shù)的定義古典形式:古典形式:類型標(biāo)識符類型標(biāo)識符 函數(shù)名函數(shù)名(形式參數(shù)表形式參數(shù)表)形式參數(shù)說明;形式參數(shù)說明; 函數(shù)體;函數(shù)體;現(xiàn)代簡潔形式:現(xiàn)代簡潔形式:類型標(biāo)識符類型標(biāo)識符 函數(shù)名函數(shù)名(形參說明表形參說明表)

2、函數(shù)體函數(shù)體;第2頁/共40頁第三頁,編輯于星期六:點 四分。例:例:int max(x,y)int x, y;/ 形式參數(shù)說明形式參數(shù)說明 / int z;/ 函數(shù)體中的說明部分函數(shù)體中的說明部分 / z=xy ? x : y; return(z);這兩行可以寫成一行:這兩行可以寫成一行:int max(int x, int y)例:例:int max(int x, int y) int z;/ 函數(shù)體中的說明部分函數(shù)體中的說明部分 / z=xy ? x : y; return(z);第3頁/共40頁第四頁,編輯于星期六:點 四分。函數(shù)參數(shù)和函數(shù)的值函數(shù)參數(shù)和函數(shù)的值1形式參數(shù)和實際參數(shù)形式

3、參數(shù)和實際參數(shù)例例 從鍵盤輸入兩個數(shù),輸出其中較大的一個。從鍵盤輸入兩個數(shù),輸出其中較大的一個。 main( ) int a, b, c ; scanf(%d %d, &a, &b); c=max(a,b); /* a, b為實際參數(shù)為實際參數(shù) */ printf(Max is %d,c); getch(); max(int x, int y) /* x, y為形式參數(shù)為形式參數(shù) */ int z; z=xy ? x : y; return(z); 第4頁/共40頁第五頁,編輯于星期六:點 四分。注意注意:第5頁/共40頁第六頁,編輯于星期六:點 四分。2函數(shù)的返回值函數(shù)的返回值第6頁/共40

4、頁第七頁,編輯于星期六:點 四分。 若函數(shù)中沒有若函數(shù)中沒有return語句,則函數(shù)被調(diào)用后也會帶回語句,則函數(shù)被調(diào)用后也會帶回不確不確定的值定的值。 為了明確表示不需要函數(shù)返回值,可以用為了明確表示不需要函數(shù)返回值,可以用“void”定義定義函數(shù)為函數(shù)為“無類型無類型”。此時,不得使用。此時,不得使用a=f( )之類的賦值語句。之類的賦值語句。凡不需要返回值的函數(shù),一般均定義為凡不需要返回值的函數(shù),一般均定義為“void”類型。類型。第7頁/共40頁第八頁,編輯于星期六:點 四分。函數(shù)的調(diào)用函數(shù)的調(diào)用第8頁/共40頁第九頁,編輯于星期六:點 四分。 將函數(shù)調(diào)用作為一個函數(shù)的實參。將函數(shù)調(diào)用作

5、為一個函數(shù)的實參。如:如:m=max(max(a, b), c);2函數(shù)調(diào)用的方式函數(shù)調(diào)用的方式第9頁/共40頁第十頁,編輯于星期六:點 四分。 如果被調(diào)函數(shù)為自定義函數(shù)且其定義在主調(diào)函數(shù)定義之后如果被調(diào)函數(shù)為自定義函數(shù)且其定義在主調(diào)函數(shù)定義之后,則應(yīng)在主調(diào)函數(shù)中對該函數(shù)進(jìn)行聲明。其語句形式一般為,則應(yīng)在主調(diào)函數(shù)中對該函數(shù)進(jìn)行聲明。其語句形式一般為: 類型標(biāo)識符類型標(biāo)識符 被調(diào)函數(shù)名被調(diào)函數(shù)名(參數(shù)列表參數(shù)列表); 如:如:float add(int x, int y );第10頁/共40頁第十一頁,編輯于星期六:點 四分。第11頁/共40頁第十二頁,編輯于星期六:點 四分。局部變量和全局變量

6、局部變量和全局變量6.2 變量的作用域和存儲類型變量的作用域和存儲類型第12頁/共40頁第十三頁,編輯于星期六:點 四分。在文件開頭定義的外部變量才可在整個文件范圍內(nèi)使用,若在定義點之前的函數(shù)需引用外部變量,則可用關(guān)鍵字在文件開頭定義的外部變量才可在整個文件范圍內(nèi)使用,若在定義點之前的函數(shù)需引用外部變量,則可用關(guān)鍵字“extern”作作“外部變量聲明外部變量聲明”。注意注意:外部變量的定義外部變量的定義只能有一次,它的位置在所有函數(shù)之外。而同一程序中的只能有一次,它的位置在所有函數(shù)之外。而同一程序中的外部變量聲明外部變量聲明可以有多次,它的位置在函數(shù)之內(nèi)可以有多次,它的位置在函數(shù)之內(nèi)(哪個函數(shù)

7、要用就在哪個函數(shù)中說明哪個函數(shù)要用就在哪個函數(shù)中說明)。系統(tǒng)根據(jù)外部變量的定義。系統(tǒng)根據(jù)外部變量的定義(而不是根據(jù)外部變量的說明而不是根據(jù)外部變量的說明)分配存儲單元。對外部變量的初始化只能在分配存儲單元。對外部變量的初始化只能在“定義定義”時進(jìn)行,時進(jìn)行,“extern”只是申明該變量是一個已在外部定義過的變量而已只是申明該變量是一個已在外部定義過的變量而已。如果在同一源文件中,外部變量與局部變量同名,則在局部變量的作用范圍內(nèi),外部變量不起作用。如果在同一源文件中,外部變量與局部變量同名,則在局部變量的作用范圍內(nèi),外部變量不起作用。 第13頁/共40頁第十四頁,編輯于星期六:點 四分。輸出結(jié)

8、果:輸出結(jié)果:10, 4, 810, 2, 5例例#include stdio.hmain( ) int a=1, b=2, c=3; a+; c+=b; int b=4, c; c=2*b; a+=c; printf(%d,%d,%dn, a, b, c); printf(%d,%d,%dn, a, b, c); getch();第14頁/共40頁第十五頁,編輯于星期六:點 四分。變量的存儲類型變量的存儲類型第15頁/共40頁第十六頁,編輯于星期六:點 四分。2) 若希望被調(diào)函數(shù)在結(jié)束后,其局部變量占用的存儲空間若希望被調(diào)函數(shù)在結(jié)束后,其局部變量占用的存儲空間不釋放,以便保留其變量的值,用于

9、下次調(diào)用該函數(shù),則不釋放,以便保留其變量的值,用于下次調(diào)用該函數(shù),則用用“static”說明為說明為 “局部靜態(tài)變量局部靜態(tài)變量”。第16頁/共40頁第十七頁,編輯于星期六:點 四分。第17頁/共40頁第十八頁,編輯于星期六:點 四分。例例 打印打印1到到5的階乘值。的階乘值。 int fac(int n) static int f =1; / 定義定義f 為為int型靜態(tài)變量型靜態(tài)變量 / f = f n ; return( f ); main( ) int i; for (i=1; i1 f(0)=1,f(1)=1第23頁/共40頁第二十四頁,編輯于星期六:點 四分。第24頁/共40頁第二

10、十五頁,編輯于星期六:點 四分。6.5 預(yù)處理預(yù)處理第25頁/共40頁第二十六頁,編輯于星期六:點 四分。6.5.1 宏定義宏定義例例 求正圓錐體的底周長、底面積和它的體積。求正圓錐體的底周長、底面積和它的體積。 #define PI 3.1415926 /* 宏名宏名PI用大寫,行末無分號用大寫,行末無分號 */ main( ) float l, s, r, v ; scanf(%f,&r); l = 2.0*PI*r; s = PI*r*r ; v = 4.0 / 3*PI*r*r*r ; printf(l=%10.4f ns=%10.4f nv=%10.4f n,l,s,v); getc

11、h(); 第26頁/共40頁第二十七頁,編輯于星期六:點 四分。 宏名的有效范圍為該宏定義命令之后至本源文件結(jié)束。宏名的有效范圍為該宏定義命令之后至本源文件結(jié)束。通常,宏定義命令一般寫在文件開頭或函數(shù)之前作為該文通常,宏定義命令一般寫在文件開頭或函數(shù)之前作為該文件的一部分。件的一部分。 可以用可以用 #undef 命令終止宏定義的作用域。如:命令終止宏定義的作用域。如:#define G 9.8main( )#undef Gfloat f( ) G 的作用范圍的作用范圍第27頁/共40頁第二十八頁,編輯于星期六:點 四分。2帶參數(shù)的宏定義帶參數(shù)的宏定義語句形式:語句形式:#define 宏名宏

12、名(形參表形參表) 字符串字符串注意:字符串應(yīng)包含形參表中的參數(shù)注意:字符串應(yīng)包含形參表中的參數(shù)例例#define PI 3.1415926#define S(r) PI*r*rmain( )float a, area; a=3.6; area=S(a); /*area=3.1415926*a*a,但不會置換,但不會置換a為為3.6 */ printf(r=%f narea=%f n,a,area); getch();第28頁/共40頁第二十九頁,編輯于星期六:點 四分。第29頁/共40頁第三十頁,編輯于星期六:點 四分。 定義帶參數(shù)的宏,可以實現(xiàn)一些簡單的函數(shù)功能。定義帶參數(shù)的宏,可以實現(xiàn)一

13、些簡單的函數(shù)功能。如:如:#define MAX(x,y) (x)(y)?(x) : (y) main( )int a, b, c, t ; t = MAX(a+b, c+d); 第30頁/共40頁第三十一頁,編輯于星期六:點 四分。6.5.2 “文件包含文件包含” 用用 #include 命令實現(xiàn)一個文件包含另一個文件。命令實現(xiàn)一個文件包含另一個文件。 語句形式:語句形式: #include “文件名文件名”例例#include stdio.h#define N 2#define M N+1#define NUM (M+1)*M/2main( ) int i, n=0; for (i=1;

14、i=NUM; i+) n+; printf(%2d, n); getch();輸出結(jié)果:輸出結(jié)果:1 2 3 4 5 6 7 8第31頁/共40頁第三十二頁,編輯于星期六:點 四分。 NUM被代換展開后為:被代換展開后為:( 2+1+1) 2+1/2#include命令中,文件名既可用雙引命令中,文件名既可用雙引“ ”號號(推薦)推薦),也可用尖括號,也可用尖括號括起來。括起來。表示被包含在標(biāo)準(zhǔn)目表示被包含在標(biāo)準(zhǔn)目錄中錄中(include).“”表示被包含文件在指定目錄中,若表示被包含文件在指定目錄中,若只有文件名不帶路徑,則在當(dāng)前目錄中,若找不到,只有文件名不帶路徑,則在當(dāng)前目錄中,若找不到

15、,再到標(biāo)準(zhǔn)目錄中找。再到標(biāo)準(zhǔn)目錄中找。包含文件名可以是包含文件名可以是.c源文件或源文件或.頭文件,如頭文件,如#include #include “myhead.h”#include “D:myexammyfile.c”第32頁/共40頁第三十三頁,編輯于星期六:點 四分。所謂所謂“宏名已定義宏名已定義”是無論是無論“宏名宏名”定義為什么內(nèi)容。定義為什么內(nèi)容。 條件編譯的作用:縮短編譯時間,減少目標(biāo)程序的長度。條件編譯的作用:縮短編譯時間,減少目標(biāo)程序的長度。 第33頁/共40頁第三十四頁,編輯于星期六:點 四分。2#ifndef 宏名宏名 程序段程序段1 #else 程序段程序段2 #en

16、dif第34頁/共40頁第三十五頁,編輯于星期六:點 四分。第35頁/共40頁第三十六頁,編輯于星期六:點 四分。例例 #define TED 10main() #ifdef TED printf(Hi,Tedn); #else printf(HI,Anyonen); #endif #ifndef PALPH printf(RAPLH not definedn); #endif getch();第36頁/共40頁第三十七頁,編輯于星期六:點 四分。例main() #if MAX99 printf(compile for array greater than 99); #else printf(compile for small array); #endif getch();第37頁/共40頁第三十八頁,編輯

溫馨提示

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

評論

0/150

提交評論