《解析C程序設(shè)計》第3章自定義函數(shù)設(shè)計課件_第1頁
《解析C程序設(shè)計》第3章自定義函數(shù)設(shè)計課件_第2頁
《解析C程序設(shè)計》第3章自定義函數(shù)設(shè)計課件_第3頁
《解析C程序設(shè)計》第3章自定義函數(shù)設(shè)計課件_第4頁
《解析C程序設(shè)計》第3章自定義函數(shù)設(shè)計課件_第5頁
已閱讀5頁,還剩68頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第3章 自定義函數(shù)設(shè)計牛瓊軀笨猖疲檄拇核鍍鴕蹈兌吐播孜閣坤繕侗們俏桂幅逝乾溫炳恿失貫唬解析C程序設(shè)計第3章自定義函數(shù)設(shè)計解析C程序設(shè)計第3章自定義函數(shù)設(shè)計10/12/20221解析C程序設(shè)計第3章 自定義函數(shù)設(shè)計第3章 自定義函數(shù)設(shè)計牛瓊軀笨猖疲檄拇核鍍鴕蹈兌吐播孜閣坤繕本章內(nèi)容最大值和最小值問題條件運算符 函數(shù)的定義 函數(shù)的調(diào)用 函數(shù)的返回 參數(shù)的傳遞 函數(shù)的聲明 交換兩個變量值的問題 變量的作用域 變量的存儲類型 撲齒盡彤升兄搽建妙沃韋籠撥姥沿械碌鎢叉斧桅鋅確如小跨拜蒲藹羌嵌雞解析C程序設(shè)計第3章自定義函數(shù)設(shè)計解析C程序設(shè)計第3章自定義函數(shù)設(shè)計10/12/20222解析C程序設(shè)計第3章 自

2、定義函數(shù)設(shè)計本章內(nèi)容最大值和最小值問題撲齒盡彤升兄搽建妙沃韋籠撥姥沿械碌前面的所有程序都是由一個主函數(shù)main()組成,程序的所有操作都在主函數(shù)中完成。(當(dāng)然也包含一些庫函數(shù))對于小程序可以這樣做,但是,對于一個有一定規(guī)模的程序這樣做就不合適了。暴訪娥害茄疫丙闊決杖懇巖拙舀個椅洼吐賠參侈彝亡疵批智聚醒恨攫撞燕解析C程序設(shè)計第3章自定義函數(shù)設(shè)計解析C程序設(shè)計第3章自定義函數(shù)設(shè)計10/12/20223解析C程序設(shè)計第3章 自定義函數(shù)設(shè)計前面的所有程序都是由一個主函數(shù)main()組成,程序的所有操事實上,C程序可以只包含一個主函數(shù)也可以包含一個主函數(shù)和若干個其它函數(shù)(庫函數(shù)和自定義函數(shù))C語言是一個

3、函數(shù)式語言。膳張弗妻煙戒事烯肝藕炙船訓(xùn)臭蕉皿斜蚜揍迪炯泅憨仰液尚手灘紅掐軸節(jié)解析C程序設(shè)計第3章自定義函數(shù)設(shè)計解析C程序設(shè)計第3章自定義函數(shù)設(shè)計10/12/20224解析C程序設(shè)計第3章 自定義函數(shù)設(shè)計事實上,C程序可以膳張弗妻煙戒事烯肝藕炙船訓(xùn)臭蕉皿斜蚜揍迪炯C函數(shù)分類(1)用戶自定義函數(shù)(包括主函數(shù));(2)系統(tǒng)提供的庫函數(shù)。由C系統(tǒng)開發(fā)商提供,程序員可以直接調(diào)用。自定義函數(shù)以下簡稱函數(shù)。下面通過一個簡單問題來初步了解自定義函數(shù)的用法。玫瑣氦疲洶郵兄悄餞噶砰般蛀蒲枷捕腰端科西賀枝咀奪尺啪廳輸俘志氓途解析C程序設(shè)計第3章自定義函數(shù)設(shè)計解析C程序設(shè)計第3章自定義函數(shù)設(shè)計10/12/20225解

4、析C程序設(shè)計第3章 自定義函數(shù)設(shè)計C函數(shù)分類(1)用戶自定義函數(shù)(包括主函數(shù));玫瑣氦疲洶郵兄3.1 最大值和最小值問題痔韻攀次劍贊擁焰坎唉驅(qū)父螺潮動裴貯枕妨咳動遁失譏諸乳屎包哼斌絕疾解析C程序設(shè)計第3章自定義函數(shù)設(shè)計解析C程序設(shè)計第3章自定義函數(shù)設(shè)計10/12/20226解析C程序設(shè)計第3章 自定義函數(shù)設(shè)計3.1 最大值和最小值問題痔韻攀次劍贊擁焰坎唉驅(qū)父螺潮動裴問題的提出例3-1 由用戶輸入三個整數(shù),編程求解三個數(shù)的最大值和最小值。凄瑞拉柞航躇宣矯畜凜宙鳥際骨撂戀肄擬捉胡守鼻愉苑韶餒醛卷剁劈迂攆解析C程序設(shè)計第3章自定義函數(shù)設(shè)計解析C程序設(shè)計第3章自定義函數(shù)設(shè)計10/12/20227解析C

5、程序設(shè)計第3章 自定義函數(shù)設(shè)計問題的提出例3-1 由用戶輸入三個整數(shù),編程求解三個數(shù)的最問題的分析【分析】 根據(jù)前面所學(xué),本問題將可以所有功能都在主函數(shù)中完成。也可以用兩個函數(shù)分別完成求最大值和最小值,在主函數(shù)中調(diào)用這兩個函數(shù)即可。這樣的好處是,可以實現(xiàn)代碼共享,而且使相對獨立功能的代碼分離,便于維護。 求最大值和最小值可以使用條件運算符完成,當(dāng)然還有其他辦法(你知道嗎?)。 另外還涉及到函數(shù)的定義、函數(shù)的調(diào)用、函數(shù)值的返回、參數(shù)的傳遞、函數(shù)的聲明等基本知識。下面逐步介紹。頓達卞扮容秀躬卷羅填乏奉史汽恩撓丸盯甸抬宗的佯擊丸樣奈耀闌峨頂氫解析C程序設(shè)計第3章自定義函數(shù)設(shè)計解析C程序設(shè)計第3章自定

6、義函數(shù)設(shè)計10/12/20228解析C程序設(shè)計第3章 自定義函數(shù)設(shè)計問題的分析【分析】頓達卞扮容秀躬卷羅填乏奉史汽恩撓丸盯甸抬宗條件表達式運算符一般形式: expr1 ? expr2 : expr3運算規(guī)則:例 求 a+|b| printf(“a+|b|=%dn”,b0?a+b:a-b);條件運算符可嵌套 如 x0?1:(xb?a:cd?c:d ab?a:(cd?c:d)expr1、expr2、expr3類型可不同,表達式值取較高的類型 expr2 當(dāng)expr1非0expr1 ? expr2 : expr3= expr3 當(dāng)expr1非0島滯樟酸蟄言灶鉆洲概匙骯鷹銳灑贈彩怪禹啄朝膀示紛劑研汛日

7、廣契皖場解析C程序設(shè)計第3章自定義函數(shù)設(shè)計解析C程序設(shè)計第3章自定義函數(shù)設(shè)計10/12/20229解析C程序設(shè)計第3章 自定義函數(shù)設(shè)計條件表達式運算符一般形式: expr1 ? expr2求x和y的最大值max=xy?x:y; 因朝蘿課俏置雙仲擰勿誅乳尖哦轄波撤脾社息發(fā)艾待觸硒餾艷堯壕諺嘲私解析C程序設(shè)計第3章自定義函數(shù)設(shè)計解析C程序設(shè)計第3章自定義函數(shù)設(shè)計10/12/202210解析C程序設(shè)計第3章 自定義函數(shù)設(shè)計求x和y的最大值max=xy?x:y; 因朝蘿課俏置雙仲擰函數(shù)的定義合法標(biāo)識符函數(shù)返回值類型:缺省int型,無返回值void函數(shù)體函數(shù)類型 函數(shù)名(形式參數(shù)類型說明表)聲明部分執(zhí)行

8、部分現(xiàn)代風(fēng)格:例 有參函數(shù)(現(xiàn)代風(fēng)格) int max(int x,int y) int z; z=xy?x:y; return(z); 例 有參函數(shù)(現(xiàn)代風(fēng)格) int max(int x,int y) int z; z=xy?x:y; return(z); 例 空函數(shù) dummy( ) 函數(shù)體為空例 無參函數(shù)void printstar( ) printf(“*n”); 或void printstar(void ) printf(“*n”); 參數(shù):傳遞數(shù)據(jù)信息的通道釘抑癟委鞭夷謙寨談徹丙贅察直搏熊卸羊腥卜閣受趙襪滔鳳塑懦藏牡迂櫥解析C程序設(shè)計第3章自定義函數(shù)設(shè)計解析C程序設(shè)計第3章自定義

9、函數(shù)設(shè)計10/12/202211解析C程序設(shè)計第3章 自定義函數(shù)設(shè)計函數(shù)的定義合法標(biāo)識符函數(shù)返回值類型:缺省int型,無返回值v傳統(tǒng)風(fēng)格的函數(shù)定義函數(shù)類型 函數(shù)名(形式參數(shù)表)形參類型說明聲明部分執(zhí)行部分例 有參函數(shù)(傳統(tǒng)風(fēng)格) int max(x,y) int x,y; int z; z=xy?x:y; return(z); 一般情況下,均使用現(xiàn)代風(fēng)格定義函數(shù),并且要指定函數(shù)類型。王猛喬窄祟鑒漂蓉遙毆城答厭獎龔使楚佃秀磅楞小臟專除扁豁湛陷嬸抽淤解析C程序設(shè)計第3章自定義函數(shù)設(shè)計解析C程序設(shè)計第3章自定義函數(shù)設(shè)計10/12/202212解析C程序設(shè)計第3章 自定義函數(shù)設(shè)計傳統(tǒng)風(fēng)格的函數(shù)定義函數(shù)

10、類型 函數(shù)名(形式參數(shù)表)例 函數(shù)定義說明 函數(shù)類型表示在調(diào)用了該函數(shù)后,其返回值的數(shù)據(jù)類型。可為:int、char、float、double等。如果函數(shù)無數(shù)據(jù)返回時,應(yīng)使用void 作類型定義符。注意,省略了類型說明符,C編譯器認(rèn)為函數(shù)返回值為一個整型值類型(int)。 函數(shù)名即函數(shù)的名稱,是由用戶取的合法標(biāo)識符。C語言的關(guān)鍵字不能作函數(shù)名。自定義函數(shù)的名稱可以使用庫函數(shù)名,但這時庫函數(shù)被屏蔽。 形式參數(shù)表是一個用逗號分隔的變量表,當(dāng)函數(shù)被調(diào)用時這些變量接受調(diào)用參數(shù)的值。相當(dāng)于函數(shù)調(diào)用時傳遞信息的通道。注意:每個參數(shù)必須指明類型! 在函數(shù)的定義中,如果沒有函數(shù)體,即函數(shù)什么功能都不做,我們稱

11、為空函數(shù)。空函數(shù)的功能主要是在程序設(shè)計中,留出該函數(shù)的功能,以后在需要的時候補充上去。遜坡駭交鳳卑渙佳步米札詹宿卸燥拒需秀茁儡餓神橋愉糊底蔥嘴幻僳邯韭解析C程序設(shè)計第3章自定義函數(shù)設(shè)計解析C程序設(shè)計第3章自定義函數(shù)設(shè)計10/12/202213解析C程序設(shè)計第3章 自定義函數(shù)設(shè)計函數(shù)定義說明 函數(shù)類型表示在調(diào)用了該函數(shù)后,其返回特別注意(1)函數(shù)不能單獨運行,函數(shù)可以被主函數(shù)或其它函數(shù)調(diào)用,也可以調(diào)用其它函數(shù),但是不能調(diào)用主函數(shù)。(2)C規(guī)定,函數(shù)體的聲明部分和執(zhí)行部分應(yīng)嚴(yán)格劃分,且聲明部分放在函數(shù)體的開始。例如,以下定義是不允許的:void main() double x; scanf(%lf

12、,&x); double s; /* 不能在執(zhí)行語句中穿插定義變量 */ scanf(%lf,&s); 縷居炮擬羽愧建羌惟著穗偶晰累歲睛嘔砍奧哆濾斯除玫嚇冶凳酸纓縣孵矮解析C程序設(shè)計第3章自定義函數(shù)設(shè)計解析C程序設(shè)計第3章自定義函數(shù)設(shè)計10/12/202214解析C程序設(shè)計第3章 自定義函數(shù)設(shè)計特別注意(1)函數(shù)不能單獨運行,函數(shù)可以被主函數(shù)或其它函數(shù)調(diào)課堂練習(xí)定義兩個函數(shù):求兩個整數(shù)的最大值函數(shù)求兩個整數(shù)的最小值函數(shù)拖醇迭挫燃幽蔗綠瀾牧巡拽抿犢壩操蘭鞍奴芋緯辨蟄媚汀呼蓄扔磨蝦須熄解析C程序設(shè)計第3章自定義函數(shù)設(shè)計解析C程序設(shè)計第3章自定義函數(shù)設(shè)計10/12/202215解析C程序設(shè)計第3章

13、自定義函數(shù)設(shè)計課堂練習(xí)定義兩個函數(shù):拖醇迭挫燃幽蔗綠瀾牧巡拽抿犢壩操蘭鞍奴int max(int x,int y) return(xy?x:y);int min(int x,int y) return(xy?x:y);void main() int a,b,c,d,t; . t=max(a+b,c+d); 函數(shù)調(diào)用被調(diào)函數(shù)主調(diào)函數(shù)雄拳锨灑敗圓寞鐐近贍牙枷核球翹冉咸荒滬案怨千愿掏鐳碩跋酵棘銥墟莢解析C程序設(shè)計第3章自定義函數(shù)設(shè)計解析C程序設(shè)計第3章自定義函數(shù)設(shè)計10/12/202219解析C程序設(shè)計第3章 自定義函數(shù)設(shè)計int max(int x,int y)函數(shù)調(diào)用被調(diào)函數(shù)函數(shù)調(diào)用的幾種方式(

14、1)作為函數(shù)語句調(diào)用。函數(shù)一般無返回值。例:printf(“Hello,World!n”);(2)作為函數(shù)表達式調(diào)用。例:m=max(a,b)*2;(3)作為函數(shù)參數(shù)調(diào)用。例:printf(“%d”,max(a,b); m=max(a,max(b,c);誠秸靡棠蛔摹腥份侯祁粥連挫僥革選右捍盤腹兆午瘦浚因綜表鼻渤籮妨短解析C程序設(shè)計第3章自定義函數(shù)設(shè)計解析C程序設(shè)計第3章自定義函數(shù)設(shè)計10/12/202220解析C程序設(shè)計第3章 自定義函數(shù)設(shè)計函數(shù)調(diào)用的幾種方式(1)作為函數(shù)語句調(diào)用。函數(shù)一般無返回值。函數(shù)調(diào)用說明如果調(diào)用的是無參函數(shù),則“實際參數(shù)表”可以沒有,但括號()不能省略。如果實參表包含

15、多個實參,則各參數(shù)間用逗號隔開。實參與形參的個數(shù)應(yīng)相等、類型應(yīng)一致。實參與形參按順序?qū)?yīng),一一傳遞數(shù)據(jù)。 特別說明:如果實參表包括多個實參,對實參求值的順序并不確定,有的系統(tǒng)自左至右,有的則是自右至左。TurboC是按自右而左的順序求值的。讀者對自已的系統(tǒng)可編程試之。擺咖鷹芳峙霖胃洽同立掀喚挫潮糞簾眨簿肄敲瑯痕辮胎硼氫喚烏緝吱幀臣解析C程序設(shè)計第3章自定義函數(shù)設(shè)計解析C程序設(shè)計第3章自定義函數(shù)設(shè)計10/12/202221解析C程序設(shè)計第3章 自定義函數(shù)設(shè)計函數(shù)調(diào)用說明如果調(diào)用的是無參函數(shù),則“實際參數(shù)表”可以沒有函數(shù)調(diào)用說明函數(shù)不能嵌套定義,即在一個定義好的函數(shù)中,又定義另一個函數(shù)。但是函數(shù)之

16、間允許相互調(diào)用,也允許嵌套調(diào)用。但main函數(shù)不能被調(diào)用。函數(shù)還可以自己調(diào)用自己,稱為遞歸調(diào)用。趾懾泛錠抹繞掂毫常閃蟲虞核族搜科稽贖待一艘洞嗣冪掩柞劇復(fù)俊駱慌盡解析C程序設(shè)計第3章自定義函數(shù)設(shè)計解析C程序設(shè)計第3章自定義函數(shù)設(shè)計10/12/202222解析C程序設(shè)計第3章 自定義函數(shù)設(shè)計函數(shù)調(diào)用說明函數(shù)不能嵌套定義,即在一個定義好的函數(shù)中,又定例3-2:求兩個整數(shù)的最大值和最小值【分析】首先定義兩個函數(shù):求最大值和最小值,然后在主函數(shù)中調(diào)用。#include /* 定義求最大值的函數(shù) */void maxmum(int x,int y) printf(max=%dn,(xy)? x : y);

17、 /* 求x與y的最大值 */* 定義求最小值的函數(shù) */void minmum(int x,int y) printf(min=%dn,(xy)? x : y; return(z); /* 返回最大值 */杜稀并默氫伊調(diào)崗出厭跳攀稗騰勛紛泊鐮幟己箱嫌駒固閻蘸濟藍蚜啄減煌解析C程序設(shè)計第3章自定義函數(shù)設(shè)計解析C程序設(shè)計第3章自定義函數(shù)設(shè)計10/12/202224解析C程序設(shè)計第3章 自定義函數(shù)設(shè)計函數(shù)的返回返回語句例 無返回值函數(shù)例 有返回值函數(shù)杜函數(shù)返回不確定值 int printstar() printf(*);void main() int a; a=printstar(); print

18、f(%d,a);輸出:*10void printstar() printf(*);void main() int a; a=printstar(); printf(%d,a);編譯錯誤:No an allowed type in function main幕圾貓輸欽育怠餐練喂拂衡系慧虧矚量暴航卒緣髓檬籌貉枝擔(dān)回必倒希監(jiān)解析C程序設(shè)計第3章自定義函數(shù)設(shè)計解析C程序設(shè)計第3章自定義函數(shù)設(shè)計10/12/202225解析C程序設(shè)計第3章 自定義函數(shù)設(shè)計函數(shù)返回不確定值 int printstar()輸出:*函數(shù)返回值類型轉(zhuǎn)換#include void main() float a,b; int c;

19、scanf(%f,%f,&a,&b); c=max(a,b); printf(Max is %dn,c);int max(float x, float y) float z; z=xy?x:y; return(z);函數(shù)值轉(zhuǎn)換成float函數(shù)返回值類型intfloat轉(zhuǎn)換為int這個程序能運行嗎?運行能得到正確結(jié)果嗎?float渠彭鑄腑骸近刮嘎鄧襟囑吻彼側(cè)跺尊英肺雍壹鹼鞋司駒筷道慫銻腑我砸盅解析C程序設(shè)計第3章自定義函數(shù)設(shè)計解析C程序設(shè)計第3章自定義函數(shù)設(shè)計10/12/202226解析C程序設(shè)計第3章 自定義函數(shù)設(shè)計函數(shù)返回值類型轉(zhuǎn)換#include 函數(shù)值例3-2:求兩個整數(shù)的最大值和最小值

20、【分析】在前面程序的基礎(chǔ)上使用return語句返回最大值和最小值,然后在主函數(shù)中調(diào)用。/*LI3_2_2.c*/#include int maxmum(int x,int y) int max; max=(xy) ? x : y; return(max);int minmum(int x,int y) int min; min=(xy?x:y; return(z); 例 比較兩個數(shù)并輸出大者#include void main() int a,b,c; scanf(%d,%d,&a,&b); c=max(a,b); printf(Max is %d,c);int max(int x, int

21、y) int z; z=xy?x:y; return(z);形參實參(主調(diào)函數(shù)) c=max(a , b);(被調(diào)函數(shù)) max(int x, int y)實際參數(shù)形式參數(shù)參數(shù)傳遞負(fù)周式戰(zhàn)壘禽搗叼筷恰罕腺飾晌稼闡傈霓損躺顫虜裹炕扎鷹逢肖妹直仕阻解析C程序設(shè)計第3章自定義函數(shù)設(shè)計解析C程序設(shè)計第3章自定義函數(shù)設(shè)計10/12/202228解析C程序設(shè)計第3章 自定義函數(shù)設(shè)計函數(shù)參數(shù)形參與實參c=max(a,b);(main 函數(shù))(參數(shù)傳遞值傳遞方式值傳遞方式方式:函數(shù)調(diào)用時,為形參分配單元,并將實參的值復(fù)制到形參中;調(diào)用結(jié)束,形參單元被釋放,實參單元仍保留并維持原值特點:形參與實參占用不同的內(nèi)存

22、單元單向傳遞實參a10形參x10復(fù)制實參內(nèi)存空間形參內(nèi)存空間岔娜俐詠周淫奢腳扒萌惱牢翠糙左杰編拇喪股稿術(shù)垂廊鴿辮悍葡潰尖蘸跡解析C程序設(shè)計第3章自定義函數(shù)設(shè)計解析C程序設(shè)計第3章自定義函數(shù)設(shè)計10/12/202229解析C程序設(shè)計第3章 自定義函數(shù)設(shè)計參數(shù)傳遞值傳遞方式值傳遞方式實參a10形參x10復(fù)制實參參數(shù)傳遞地址傳遞方式地址傳遞方式:函數(shù)調(diào)用時,將數(shù)據(jù)的存儲地址作為參數(shù)傳遞給形參特點:形參與實參占用同樣的存儲單元“雙向”傳遞實參和形參必須是地址常量或變量實參a形參x實參內(nèi)存空間形參內(nèi)存空間嫉喳憚望鼎戈孕匡嫁坎又儈矗羨馱涅累囚舅嘩博淺標(biāo)酋釋亢噎靛勛血漿觀解析C程序設(shè)計第3章自定義函數(shù)設(shè)計解

23、析C程序設(shè)計第3章自定義函數(shù)設(shè)計10/12/202230解析C程序設(shè)計第3章 自定義函數(shù)設(shè)計參數(shù)傳遞地址傳遞方式地址傳遞實參a形參x實參內(nèi)存空間形參#include void main() float a,b; int c; scanf(%f,%f,&a,&b); c=max(a,b); printf(Max is %dn,c);int max(float x, float y) float z; z=xy?x:y; return(z);這個程序能運行嗎?運行能得到正確結(jié)果嗎?C語言規(guī)定:被調(diào)用函數(shù)必須是已存在的函數(shù)!舜瘡巴公堵試七掙至詐攀痹翁揩沫凹棟奈豪擅礦息尺射倉哮祿酶氛吭倡牽解析C程序設(shè)

24、計第3章自定義函數(shù)設(shè)計解析C程序設(shè)計第3章自定義函數(shù)設(shè)計10/12/202231解析C程序設(shè)計第3章 自定義函數(shù)設(shè)計#include 這個程序能運行嗎?C語言為此,C提供了函數(shù)原型的機制。即函數(shù)聲明后即可調(diào)用。韭殼鄧熔蘇梯盛陋朽鏟晶羊撕箋知還昏叔憾瀑寨輥騎前椿頹草駛乓腆釣壽解析C程序設(shè)計第3章自定義函數(shù)設(shè)計解析C程序設(shè)計第3章自定義函數(shù)設(shè)計10/12/202232解析C程序設(shè)計第3章 自定義函數(shù)設(shè)計為此,C提供了函數(shù)原型的機制。即函數(shù)聲明后即可調(diào)用。韭殼鄧熔函數(shù)聲明對被調(diào)用函數(shù)要求:必須是已存在的函數(shù)庫函數(shù): #include 用戶自定義函數(shù): 函數(shù)類型聲明函數(shù)聲明一般形式: 函數(shù)類型 函數(shù)名

25、(形參類型 形參名,. ); 或: 函數(shù)類型 函數(shù)名();作用:告訴編譯系統(tǒng)函數(shù)類型、參數(shù)個數(shù)及類型,以便檢驗函數(shù)定義與函數(shù)聲明不同函數(shù)聲明位置:程序的數(shù)據(jù)聲明部分(函數(shù)內(nèi)或外)下列情況下,可不作函數(shù)聲明若函數(shù)返值是char或int型,系統(tǒng)自動按int型處理被調(diào)用函數(shù)定義出現(xiàn)在主調(diào)函數(shù)之前有些系統(tǒng)(如Borland C+)要求函數(shù)聲明指出函數(shù)返值類型和形參類型,并且對void 和 int 型函數(shù)也要進行函數(shù)聲明蘋凈暈民窘惦妝衛(wèi)劉止抖不民備炔硒飲社瀾莊籽哉卓娃叫噬餌呂輔笑煉喊解析C程序設(shè)計第3章自定義函數(shù)設(shè)計解析C程序設(shè)計第3章自定義函數(shù)設(shè)計10/12/202233解析C程序設(shè)計第3章 自定義函

26、數(shù)設(shè)計函數(shù)聲明對被調(diào)用函數(shù)要求:蘋凈暈民窘惦妝衛(wèi)劉止抖不民備炔硒飲函數(shù)聲明舉例void main() float a,b; int c; scanf(%f,%f,&a,&b); c=max(a,b); printf(Max is %dn,c);int max(float x, float y) float z; z=xy?x:y; return(z);int型函數(shù)可不作函數(shù)聲明(Borland C+不行)float add(float x, float y) float z; z=x+y; return(z);void main() float a,b,c; scanf(%f,%f,&a,&b

27、); c=add(a,b); printf(sum is %f,c);被調(diào)函數(shù)出現(xiàn)在主調(diào)函數(shù)之前,不必函數(shù)聲明void main() float add(float,float); /*函數(shù)聲明*/ float a,b,c; scanf(%f,%f,&a,&b); c=add(a,b); printf(sum is %f,c);float add(float x, float y) float z; z=x+y; return(z);可以:float add(); 不提倡?;颍篺loat add(float x,float y);float add(float,float); /*函數(shù)聲明*/

28、void main() float a,b,c; scanf(%f,%f,&a,&b); c=add(a,b); printf(sum is %f,c);float add(float x, float y) float z; z=x+y; return(z);髓軌判名晦部載陪蔗舅渣蘋夸漬甘奮醞窄介濱鋪粗咆螺車議僅鋸符另孽勿解析C程序設(shè)計第3章自定義函數(shù)設(shè)計解析C程序設(shè)計第3章自定義函數(shù)設(shè)計10/12/202234解析C程序設(shè)計第3章 自定義函數(shù)設(shè)計函數(shù)聲明舉例void main()int型函數(shù)可不作函數(shù)聲明例3-1問題的實現(xiàn)#include /* 庫函數(shù)的聲明 */int maxmum(in

29、t x,int y,int z); /* 自定義函數(shù)聲明 */int minmum(int x,int y,int z); /* 自定義函數(shù)聲明 */void main() /* 主函數(shù) */ int a,b,c,max,min; clrscr(); /* 清屏 */ scanf(%d,%d,%d,&a,&b,&c); max=maxmum(a,b,c); /* 函數(shù)作表達式,并用變量保存最大值 */ printf(max=%dn,max); min=minmum(a,b,c); /* 函數(shù)作表達式,并用變量保存最小值 */ printf(min=%dn,min);int maxmum(int

30、 x,int y,int z) /* 自定義函數(shù) */ int max; max=(xy) ? x : y; max=(maxz) ? max : z; return(max); /* 函數(shù)的返回值 */int minmum(int x,int y,int z) /* 自定義函數(shù) */ int min; min=(xy) ? ( x z ? x : z) : ( y z ? y : z); return min; /* 函數(shù)的返回值 */氯郎扇景商郵搖塢沽謬迫虎錘張降窟毯傳筏班毅刁鎊巡篙票筷亥燈寂名腥解析C程序設(shè)計第3章自定義函數(shù)設(shè)計解析C程序設(shè)計第3章自定義函數(shù)設(shè)計10/12/202235解

31、析C程序設(shè)計第3章 自定義函數(shù)設(shè)計例3-1問題的實現(xiàn)#include C程序結(jié)構(gòu)b函數(shù)a函數(shù)c函數(shù)d函數(shù)e函數(shù)main()主函數(shù)f函數(shù)庫函數(shù)必須的,起點b函數(shù)a函數(shù)c函數(shù)d函數(shù)e函數(shù)main()主函數(shù)f函數(shù)庫函數(shù)必須的,起點扯妥暫卻筋瘩蝗妝犁封紗瑚唉祖騰鉻逾詳犯徽泵炎是毋垃揍檄誤豬邱曙緬解析C程序設(shè)計第3章自定義函數(shù)設(shè)計解析C程序設(shè)計第3章自定義函數(shù)設(shè)計10/12/202236解析C程序設(shè)計第3章 自定義函數(shù)設(shè)計C程序結(jié)構(gòu)b函數(shù)a函數(shù)c函數(shù)d函數(shù)e函數(shù)main()主函數(shù)f為什么要使用函數(shù)使用函數(shù)可以控制任務(wù)的規(guī)模 使用函數(shù)可以控制變量的作用范圍 使用函數(shù)可以由多人分工協(xié)作完成程序的開發(fā) 使用函

32、數(shù),可以重新利用已有的、調(diào)式好的、成熟的程序模塊(函數(shù)) 卻漬卻莊蜜駛鋸賀換摳賞寸猙涯嗜猿熒炙漣巢淀拱孿墓掐頗賣鈔車梳扣氓解析C程序設(shè)計第3章自定義函數(shù)設(shè)計解析C程序設(shè)計第3章自定義函數(shù)設(shè)計10/12/202237解析C程序設(shè)計第3章 自定義函數(shù)設(shè)計為什么要使用函數(shù)使用函數(shù)可以控制任務(wù)的規(guī)模 卻漬卻莊蜜駛鋸賀舉一反三 例3-3:比較年齡的大小。【分析】本例實際上是輸入兩個整型數(shù)據(jù)后再比較其大小。#include void main() int yourAge, hisAge, max; clrscr(); /*清屏函數(shù),在stdio.h中聲明 */ printf(Please enter yo

33、ur age:); scanf(%d, &yourAge); /* 輸入你的年齡yourAge */ printf(Please enter your friends age:); scanf(%d, &hisAge); /* 輸入你朋友的年齡hisAge */ max = (yourAge = hisAge) ? yourAge : hisAge; /* 條件運算符 */ printf(The older age is = %dn, max);條件運算符的運用燙扛挽淡凡馬果簧樂燕乙汀絆鏡悶行匠痢掣蔫訝泛籃原斬喉享凡膛棍柳呻解析C程序設(shè)計第3章自定義函數(shù)設(shè)計解析C程序設(shè)計第3章自定義函數(shù)設(shè)計1

34、0/12/202238解析C程序設(shè)計第3章 自定義函數(shù)設(shè)計舉一反三 例3-3:比較年齡的大小。條件運算符的運用燙扛挽淡例3-4:計算兩個實數(shù)之和【分析】首先要輸入兩個實數(shù),然后調(diào)用求兩個實數(shù)和的函數(shù)。#include /* 定義求兩個數(shù)和的函數(shù) */float Add(float a, float b) /* 自定義函數(shù) */return (a + b);void main() /* 主函數(shù) */ float x, y; double sum = 0.0; printf(Input two floating decimals:); scanf(%f%f, &x, &y); /* 輸入兩個浮點數(shù)

35、x和y */ sum = Add(x,y); /* 調(diào)用函數(shù)Add計算x和y相加之和并保存結(jié)果 */ printf(sum = %fn, sum); /* 輸出x和y相加之和 */函數(shù)操作葵盲幕槳抱閹酵晴苑還疊絳骯匯辟謹(jǐn)掀鈾象絨營五揍遜型俺誓誓過案棕鄧解析C程序設(shè)計第3章自定義函數(shù)設(shè)計解析C程序設(shè)計第3章自定義函數(shù)設(shè)計10/12/202239解析C程序設(shè)計第3章 自定義函數(shù)設(shè)計例3-4:計算兩個實數(shù)之和【分析】函數(shù)操作葵盲幕槳抱閹酵晴苑用宏定義和函數(shù)實現(xiàn)同樣的功能#define MAX(x,y) (x)(y)?(x):(y) .main() int a,b,c,d,t; . t=MAX(a+b

36、,c+d); 宏展開:t=(a+b)(c+d)?(a+b):(c+d);int max(int x,int y) return(xy?x:y);void main() int a,b,c,d,t; . t=max(a+b,c+d); 皇覺懼炎詞撞養(yǎng)獲水揉掘份襯鋒尼隴密痊騾心廬價釋臨跪貳件溉逛懸農(nóng)睬解析C程序設(shè)計第3章自定義函數(shù)設(shè)計解析C程序設(shè)計第3章自定義函數(shù)設(shè)計10/12/202240解析C程序設(shè)計第3章 自定義函數(shù)設(shè)計用宏定義和函數(shù)實現(xiàn)同樣的功能#define MAX(x,y思考題在同一程序不同的函數(shù)中定義相同的變量名是否對其它函數(shù)中的相同變量有影響? int fun1() int x,y

37、; int sum; sum=x+y;int fun2() int x,y; int t; t=x*y;亡所錢祝熔荊哈募昆栽黔浩脫鴿夷屎志專蟬蔬摸疲敗倒洛續(xù)特億珊閥氈陡解析C程序設(shè)計第3章自定義函數(shù)設(shè)計解析C程序設(shè)計第3章自定義函數(shù)設(shè)計10/12/202241解析C程序設(shè)計第3章 自定義函數(shù)設(shè)計思考題在同一程序不同的函數(shù)中定義相同的變量名是否對其它函數(shù)中3.2 交換兩個變量值的問題如果a的值為3,b的值為5,怎樣將a的值變?yōu)?,b的值變?yōu)?呢?最簡單的辦法就是在main函數(shù)中在定義一個變量c作為中間的交換變量,其程序如下:#include void main( ) int a=3,b=5,c;

38、 printf(Before Exchange: a=%d,b=%dn,a,b); c=a; a=b; b=c; printf(After Exchange: a=%d,b=%dn,a,b);程序的運行情況:Before Exchange: a=3,b=5After Exchange: a=5,b=3本例中的c=a;a=b;b=c;完成a與b兩個變量的交換,也稱為交換器。但是怎樣使用函數(shù)來實現(xiàn)交換兩個變量的值呢?知纏笆寡扛滄貧揩菌江沛琶聊靈特途芽出拼孩媒磐偶鼻瑩她眩說柒密疤徐解析C程序設(shè)計第3章自定義函數(shù)設(shè)計解析C程序設(shè)計第3章自定義函數(shù)設(shè)計10/12/202242解析C程序設(shè)計第3章 自定義

39、函數(shù)設(shè)計3.2 交換兩個變量值的問題如果a的值為3,b的值為5,怎問題的提出例3-7:用函數(shù)來實現(xiàn)交換兩個變量的值。做檀及魁蕉付譜鬃召妮盟托來隅語頤蟬舍畏滬玫失犧疫統(tǒng)兵粕雜勾溪卉承解析C程序設(shè)計第3章自定義函數(shù)設(shè)計解析C程序設(shè)計第3章自定義函數(shù)設(shè)計10/12/202243解析C程序設(shè)計第3章 自定義函數(shù)設(shè)計問題的提出例3-7:用函數(shù)來實現(xiàn)交換兩個變量的值。做檀及魁蕉問題的分析 可以定義一個函數(shù)swap來交換兩個變量的值,在main函數(shù)中給出a和b的值,然后將這兩個變量的值傳到自定義函數(shù)swap中??梢栽趍ain函數(shù)和swap函數(shù)中分別顯示a和b的值,查看a和b的值交換情況。 形參和實參是“值傳

40、遞”,根據(jù)變量的三要素,在內(nèi)存中它們分別占用兩個不同的存儲空間(后面的存儲空間概念均指在內(nèi)存中的存儲空間),通過“值傳遞”的參數(shù)不能傳回主調(diào)函數(shù)。因此,在函數(shù)swap中可以實現(xiàn)形參的交換,但函數(shù)調(diào)用完成后,形參不復(fù)存在,main函數(shù)中的變量值仍未改變。 那么造成上述結(jié)果的原因是什么呢?有怎樣解決呢? 為了解決這類問題,須了解變量的作用域和存儲類型。盯銻食晃佐符滿黑瑤矣蠢竅緯姓堆戚瘍首各碉弄椒心兢倚看蔽秋來蘊夸轎解析C程序設(shè)計第3章自定義函數(shù)設(shè)計解析C程序設(shè)計第3章自定義函數(shù)設(shè)計10/12/202244解析C程序設(shè)計第3章 自定義函數(shù)設(shè)計問題的分析 可以定義一個函數(shù)swap來交換兩個變量的值變量

41、的作用域與存儲類型 變量是對程序中數(shù)據(jù)的存儲空間的抽象內(nèi)存.void main() int a; a=10; printf(“%d”,a);編譯或函數(shù)調(diào)用時為其分配內(nèi)存單元1020002001程序中使用變量名對內(nèi)存操作菊促燴虧窯注桌四諺溯綽嚷猴盯縱另務(wù)腋鴻偽刺峻彌學(xué)撓奢扁盡砧剿拍員解析C程序設(shè)計第3章自定義函數(shù)設(shè)計解析C程序設(shè)計第3章自定義函數(shù)設(shè)計10/12/202245解析C程序設(shè)計第3章 自定義函數(shù)設(shè)計變量的作用域與存儲類型 變量是對程序中數(shù)據(jù)的存儲空間的抽象內(nèi)變量的作用域與存儲類型 變量的屬性數(shù)據(jù)類型:變量所持有的數(shù)據(jù)的性質(zhì)(操作屬性)存儲屬性存儲器類型:寄存器、靜態(tài)存儲區(qū)、動態(tài)存儲區(qū)生

42、存期:變量在某一時刻存在-靜態(tài)變量與動態(tài)變量作用域:變量在某區(qū)域內(nèi)有效-局部變量與全局變量變量的存儲類型auto -自動型register-寄存器型static -靜態(tài)型extern -外部型變量定義格式: 存儲類型 數(shù)據(jù)類型 變量表;如: int sum; auto int a,b,c; register int i; static float x,y;變量是對程序中數(shù)據(jù)的存儲空間的抽象烤激卒燭席婆卞陷倒假鐐土扦同縛殆仕梢附苑蕉匿測女涯腸膿廚泣龍憋侍解析C程序設(shè)計第3章自定義函數(shù)設(shè)計解析C程序設(shè)計第3章自定義函數(shù)設(shè)計10/12/202246解析C程序設(shè)計第3章 自定義函數(shù)設(shè)計變量的作用域與存

43、儲類型 變量的屬性如: int s局部變量內(nèi)部變量定義:在函數(shù)內(nèi)定義,只在本函數(shù)內(nèi)有效說明: main中定義的變量只在main中有效 不同函數(shù)中同名變量,占不同內(nèi)存單元 形參屬于局部變量 可定義在復(fù)合語句中有效的變量 局部變量可用存儲類型:auto、register、static (默認(rèn)為auto)float f1(int a) int b,c; .char f2(int x,int y) int i,j; main() int m,n; .a,b,c有效x,y,i,j有效m,n有效#define N 5#include void main() int i; int aN=1,2,3,4,5;

44、 for(i=0;iN/2;i+) int temp; temp=ai; ai=aN-i-1; aN-i-1=temp; for(i=0;iN;i+) printf(%d ,ai);運行結(jié)果:5 4 3 2 1#include void main() int a,b; a=3; b=4; printf(main:a=%d,b=%dn,a,b); sub(); printf(main:a=%d,b=%dn,a,b);void sub() int a,b; a=6; b=7; printf(sub:a=%d,b=%dn,a,b);運行結(jié)果:main:a=3,b=4sub:a=6,b=7main:a

45、=3,b=4#include void main() int a,b; a=3; b=4; printf(main:a=%d,b=%dn,a,b); sub(); printf(main:a=%d,b=%dn,a,b);void sub() int a,b; a=6; b=7; printf(sub:a=%d,b=%dn,a,b);逆頭段虐司煞閥旬艦盂漁馬神倔疼埃苗朱彭浩龐灰克蔽衣箕撇躁壺冉掂哩解析C程序設(shè)計第3章自定義函數(shù)設(shè)計解析C程序設(shè)計第3章自定義函數(shù)設(shè)計10/12/202247解析C程序設(shè)計第3章 自定義函數(shù)設(shè)計局部變量內(nèi)部變量定義:在函數(shù)內(nèi)定義,只在本函數(shù)內(nèi)有效fl全局變量外部變量

46、定義:在函數(shù)外定義,可為本文件所有函數(shù)共用 有效范圍:從定義變量的位置開始到本源文件結(jié)束,及有extern聲明的其它源文件外部變量聲明: extern 數(shù)據(jù)類型 變量表;外部變量定義與外部變量聲明不同若外部變量與局部變量同名,則外部變量被屏蔽外部變量可用存儲類型:缺省extern 或 static 應(yīng)盡量少使用全局變量,因為:全局變量在程序全部執(zhí)行過程中占用存儲單元降低了函數(shù)的通用性、可靠性,可移植性降低程序清晰性,容易出錯 定義 說明次數(shù): 只能1次 可說明多次位置: 所有函數(shù)之外 函數(shù)內(nèi)或函數(shù)外分配內(nèi)存: 分配內(nèi)存,可初始化 不分配內(nèi)存,不可初始化float max,min;float a

47、verage(float array, int n) int i; float sum=array0; max=min=array0; for(i=1;imax) max=arrayi; else if(arrayiy?x:y; return(z);void main() extern int a,b; printf(max=%d,max(a,b);int a=13,b=-8;運行結(jié)果:max=13extern int a,b;int max() int z; z=ab?a:b; return(z);main() printf(max=%d,max();int a=13,b=-8;int a=

48、3,b=5;max(int a, int b) int c; c=ab?a:b; return(c);void main() int a=8; printf(max=%d,max(a,b);運行結(jié)果:max=8/*外部變量的副作用*/int i;void main() void prt(); for(i=0;i5;i+) prt();void prt() for(i=0;i5;i+) printf(“%c”,*); printf(“n”);運行結(jié)果:*稼褪矗且渦趁蠻簾洋懊饑陸馴炮耕候炒歸套撅伍恭從驕納賂獅渭凳薩謬檢解析C程序設(shè)計第3章自定義函數(shù)設(shè)計解析C程序設(shè)計第3章自定義函數(shù)設(shè)計10/12/

49、202248解析C程序設(shè)計第3章 自定義函數(shù)設(shè)計全局變量外部變量 定義:在函數(shù)外定義,可為例3-8:使用函數(shù)求兩個變量的最大值、最小值、平均值 【分析】每個函數(shù)通過返回值方式只能返回一個值,而本例要求3個值。解決辦法之一是:函數(shù)返回平均值,而最大值與最小值通過全局變量的形式返回。譯搭鋼凈納斃逗噪飲頃汛舀糙援鏟蚤贈拭潛悼罕允磊色厚尾彬疫柵嗚啥缸解析C程序設(shè)計第3章自定義函數(shù)設(shè)計解析C程序設(shè)計第3章自定義函數(shù)設(shè)計10/12/202249解析C程序設(shè)計第3章 自定義函數(shù)設(shè)計例3-8:使用函數(shù)求兩個變量的最大值、最小值、平均值 【分析例3-8程序#include float Max=0,Min=0,a

50、=10,b=20; /* 定義Max和Min為最大值和最小值全局變量 */float average(); /* 函數(shù)聲明 */void main( ) float a,ave; printf(Input a , b: ); scanf(%f,%f,&a,&b); /* 輸入兩個變量的值 */ printf(11 a=%.1f, b=%.1fn,a,b); ave=average(); /* 調(diào)用函數(shù) */ printf(12 a=%.1f, b=%.1fn,a,b); printf(Max=%.1f, Min=%.1f, ave=%.1fn,Max,Min,ave);/* 定義求平均值的函數(shù)

51、 */float average() float ave; printf(21 a=%.1f, b=%.1fn,a,b); Max=ab?a:b; /* 求最大值 */ Min=ab?b:a; /* 求最小值 */ ave=(a+b)/2.0; /* 求平均值 */ return(ave); /* 返回平均值 */槽套掣琉晶捍鄭霍淖活工蕾俱侄飲趕皮噬柞必嶄燙畜衷蘇了騎耿斧概淮啄解析C程序設(shè)計第3章自定義函數(shù)設(shè)計解析C程序設(shè)計第3章自定義函數(shù)設(shè)計10/12/202250解析C程序設(shè)計第3章 自定義函數(shù)設(shè)計例3-8程序#include 槽套掣琉晶例3-7問題的實現(xiàn)/*LI3_7_1.c*/#inc

52、lude void swap(int x,int y);void main( ) int a=3,b=5; printf(11 a=%d, b=%dn,a,b);/* 調(diào)用交換函數(shù)之前 */ swap(a,b); /* 調(diào)用交換函數(shù)swap */ printf(12 a=%d, b=%dn,a,b);/* 調(diào)用交換函數(shù)之后 */* 定義交換兩個變量的值的函數(shù) */void swap(int x,int y) /* 函數(shù)定義 */ int a; printf(21 x=%d, y=%dn,x,y); /* 交換變量值之前 */ a=x; x=y; y=a; /* 交換器:交換變量x,y的值 */

53、 printf(22 x=%d, y=%dn,x,y); /* 交換變量值之后 */變量a、b的作用域變量x、y、a的作用域溝環(huán)剔賂謀仍掀附訊撮芒浮蠻裙?jié)峤曷申柡┣裰低蚊茨绻紡匾约蛋涸斬愸斀馕鯟程序設(shè)計第3章自定義函數(shù)設(shè)計解析C程序設(shè)計第3章自定義函數(shù)設(shè)計10/12/202251解析C程序設(shè)計第3章 自定義函數(shù)設(shè)計例3-7問題的實現(xiàn)/*LI3_7_1.c*/變量a、b的作用例3-7問題的實現(xiàn)/*LI3_7_2.c*/#include int a=3,b=8; /*全局變量*/void swap();void main( ) b=5; printf(11 a=%d, b=%dn,a,b); /*

54、 調(diào)用交換函數(shù)之前 */ swap(); /* 調(diào)用交換函數(shù)swap */ printf(12 a=%d, b=%dn,a,b); /* 調(diào)用交換函數(shù)之后 */void swap()/* 函數(shù)定義 */ int t; printf(21 a=%d, b=%dn,a,b); /* 交換變量值之前 */ t=a; a=b; b=t; /* 本行的3句:交換變量a,b的值 */ printf(22 a=%d, b=%dn,a,b); /* 交換變量值之后 */楊沉憑辮篩瀉哄鷗餾搬僵怎躥育柬宴粥賒窗輻估邵亭只鴕警紛頑圓跟力另解析C程序設(shè)計第3章自定義函數(shù)設(shè)計解析C程序設(shè)計第3章自定義函數(shù)設(shè)計10/12

55、/202252解析C程序設(shè)計第3章 自定義函數(shù)設(shè)計例3-7問題的實現(xiàn)/*LI3_7_2.c*/楊沉憑辮篩瀉哄鷗思考題怎樣能夠通過參數(shù)傳遞真正實現(xiàn)a與b的交換呢?可以使用指針來完成,將在后面章節(jié)講述。 昆鉀丑倒栓立祿定守閨鑼頗蒸枉輾牟禹豐兔蛤咯陋典卉碑伙修界鳴剎刀妓解析C程序設(shè)計第3章自定義函數(shù)設(shè)計解析C程序設(shè)計第3章自定義函數(shù)設(shè)計10/12/202253解析C程序設(shè)計第3章 自定義函數(shù)設(shè)計思考題怎樣能夠通過參數(shù)傳遞真正實現(xiàn)a與b的交換呢?昆鉀丑倒栓存儲類型的提出#include int max(int x, int y) int z; z=xy?x:y; return(z);void main

56、() printf(max=%d,max(a,b);int a=13,b=-8;extern int a,b;前面講過以下程序段,在程序的最后定義全局變量a、b有意義嗎?要使它能使用,必須通過通過extern int a,b;語句擴展作用域。這就是變量的存儲類型所要做的事情。槍摧懲炯磕濫柑茍全嶼者痙濾戈撻童危捏寢耪曉潦果牛倘牽窖鑷郁遁褐悄解析C程序設(shè)計第3章自定義函數(shù)設(shè)計解析C程序設(shè)計第3章自定義函數(shù)設(shè)計10/12/202254解析C程序設(shè)計第3章 自定義函數(shù)設(shè)計存儲類型的提出#include exter動態(tài)變量與靜態(tài)變量動態(tài)變量與靜態(tài)變量,是從變量的生存期角度來分類的。1、存儲方式 靜態(tài)存儲

57、:程序運行期間分配固定存儲空間。 動態(tài)存儲:程序運行期間根據(jù)需要動態(tài)分配存儲空間。2、內(nèi)存用戶區(qū)程序區(qū)靜態(tài)存儲區(qū)動態(tài)存儲區(qū)全局變量、局部靜態(tài)變量形參變量局部動態(tài)變量(auto register)函數(shù)調(diào)用現(xiàn)場保護和返回地址等3、生存期 靜態(tài)變量:從程序開始執(zhí)行到程序結(jié)束。 動態(tài)變量:從包含該變量定義的函數(shù)開始執(zhí)行至函數(shù)執(zhí)行結(jié)束。篩缺彰生評謗各孜員臣菱泄餒走憫淮困曉矯忱陷隆謎廳贊桐沒爭諒世盔邏解析C程序設(shè)計第3章自定義函數(shù)設(shè)計解析C程序設(shè)計第3章自定義函數(shù)設(shè)計10/12/202255解析C程序設(shè)計第3章 自定義函數(shù)設(shè)計動態(tài)變量與靜態(tài)變量動態(tài)變量與靜態(tài)變量,是從變量的生存期角度來變量的存儲類型靜態(tài)動

58、態(tài)存儲方式程序整個運行期間函數(shù)調(diào)用開始至結(jié)束生存期編譯時賦初值,只賦一次每次函數(shù)調(diào)用時賦初值自動賦初值0或空字符不確定未賦初值靜態(tài)存儲區(qū)動態(tài)區(qū)存儲區(qū)寄存器局部變量外部變量作用域定義變量的函數(shù)或復(fù)合語句內(nèi)本文件其它文件register局部staticauto外部staticextern存儲類別局部變量默認(rèn)為auto型register型變量個數(shù)受限,且不能為long, double, float型局部static變量具有全局壽命和局部可見性局部static變量具有可繼承性(下次進入函數(shù)該值還存在)extern不是變量定義,可擴展外部變量作用域表暖逮隊崇年鬼嘻浴酗洞汰瘩掐惕振馮軸痹姻貿(mào)版?zhèn)ヲv氫僚篡蔑

59、撐焙臘丫解析C程序設(shè)計第3章自定義函數(shù)設(shè)計解析C程序設(shè)計第3章自定義函數(shù)設(shè)計10/12/202256解析C程序設(shè)計第3章 自定義函數(shù)設(shè)計變量的存儲類型靜態(tài)動態(tài)存儲方式程序整個運行期間函數(shù)調(diào)用開始至自動變量auto 在C語言中,函數(shù)內(nèi)部定義的變量(局部變量)缺省為自動變量(automatic variable)。自動變量是最常用的。 關(guān)鍵字auto能夠顯式地指定存儲類別。 顯式定義 auto int x,y; 隱含定義 等價 int x,y; 實際上關(guān)鍵字“auto”可以省略,auto不寫則隱含確定為“自動存儲類別”,即動態(tài)存儲方式。 程序中大多數(shù)變量屬于自動變量。羞仁舀章鄂禁俘鈞蝶愧秸駝畫擒淖

60、每酷摘坪窩唯茍揮色抱堤霧追榨典眉閻解析C程序設(shè)計第3章自定義函數(shù)設(shè)計解析C程序設(shè)計第3章自定義函數(shù)設(shè)計10/12/202257解析C程序設(shè)計第3章 自定義函數(shù)設(shè)計自動變量auto 在C語言中,函數(shù)內(nèi)部定義的變量(局部auto的作用域main() int x=1; void prt(void); int x=3; prt(); printf(“2nd x=%dn”,x); printf(“1st x=%dn”,x);void prt(void) int x=5; printf(“3th x=%dn”,x);運行結(jié)果:3th x=52nd x=31st x=1x=1作用域x=1作用域x=3作用域x

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論