作用域和選擇結(jié)構(gòu)程序設(shè)計(jì).ppt_第1頁(yè)
作用域和選擇結(jié)構(gòu)程序設(shè)計(jì).ppt_第2頁(yè)
作用域和選擇結(jié)構(gòu)程序設(shè)計(jì).ppt_第3頁(yè)
作用域和選擇結(jié)構(gòu)程序設(shè)計(jì).ppt_第4頁(yè)
作用域和選擇結(jié)構(gòu)程序設(shè)計(jì).ppt_第5頁(yè)
已閱讀5頁(yè),還剩22頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、1,#include #define PI 3.14 float l(float); /*函數(shù)聲明*/ float s(float); /*函數(shù)聲明*/ float l(float r) /*函數(shù)定義:求周長(zhǎng)*/ return PI*r*2; float s(float r) /*函數(shù)定義:求面積*/ return PI*r*r; void main() float r, cir, area; printf(please input r:); scanf(%f, ,作業(yè)及問(wèn)題,習(xí)慣用符號(hào)常量,并注意語(yǔ)法格式,函數(shù)聲明后有分號(hào) 一般都寫(xiě)在前面,return只能返回一個(gè)值 暫時(shí)還不能用一個(gè)函數(shù)求兩

2、個(gè)值。,printf(circumference=%7.2fn,area=%7.2fn,l(r),s(r); /*第二種調(diào)用方式: l(r),s(r) 作為printf()的參數(shù)*/,第4講,多函數(shù)程序設(shè)計(jì)變量的作用域 選擇結(jié)構(gòu)程序設(shè)計(jì),3,#include #define PI 3.14 float l(float); /*函數(shù)聲明*/ float s(float); /*函數(shù)聲明*/ float l(float r) /*函數(shù)定義:求周長(zhǎng)*/ return PI*r*2; float s(float r) /*函數(shù)定義:求面積*/ return PI*r*r; void main() fl

3、oat r, l, s; printf(please input r:); scanf(%f, ,問(wèn)題,若這樣起名會(huì)怎樣?,會(huì)有錯(cuò)誤提示,因?yàn)橄嗤拿衷斐闪藳_突。,4,#include #define PI 3.14 float l(float); /*函數(shù)聲明*/ float s(float); /*函數(shù)聲明*/ float l(float r) /*函數(shù)定義:求周長(zhǎng)*/ return PI*r*2; float s(float r) /*函數(shù)定義:求面積*/ return PI*r*r; void main() float r, cir, area; printf(please inpu

4、t r:); scanf(%f, ,問(wèn)題,若這樣起名又會(huì)怎樣?會(huì)沖突嗎?,不會(huì),它們雖然是不同的r,但因?yàn)樗鼈兊淖饔糜虿煌圆粫?huì)產(chǎn)生沖突。,5,涉及的語(yǔ)法-作用域,作用域:即作用范圍 可分為: 局部變量 全局變量,6,局部變量,局部變量 在語(yǔ)句塊內(nèi)(即 內(nèi))定義的變量 形式參數(shù)也是局部變量 特點(diǎn) 定義時(shí)不會(huì)自動(dòng)初始化,除非程序員指定初值 進(jìn)入語(yǔ)句塊時(shí)獲得內(nèi)存,僅能由語(yǔ)句塊內(nèi)語(yǔ)句訪問(wèn),退出語(yǔ)句塊時(shí)釋放內(nèi)存,不再有效 并列語(yǔ)句塊各自定義的同名變量互不干擾,7,main() int i=1,j=2; printf(i=%d,j=%dn,i,j); int i=3,a=4; printf(i=%d

5、,a=%dn, i,a); j+; int i=5; printf(i=%dn,i); j+; printf(i=%d,j=%dn,i,j); ,運(yùn)行結(jié)果為: i=1,j=2 i=3,a=4 i=5 i=1,j=4,例,運(yùn)行結(jié)果?,+是一個(gè)運(yùn)算符,j+表示將j變量的值加1,8,例3-7,運(yùn)行結(jié)果?,#include void swap(int x,int y); /* 函數(shù)聲明 */ void main( ) int a=3,b=5; printf(11a=%d, b=%dn,a,b);/* 調(diào)用交換函數(shù)之前 */ swap(a,b); /* 調(diào)用交換函數(shù)swap */ printf(12a=

6、%d, b=%dn,a,b);/* 調(diào)用交換函數(shù)之后 */ /* 函數(shù)定義:交換兩個(gè)變量的值的函數(shù) */ void swap(int a,int b) int temp; printf(21 a=%d, b=%dn,a,b); /* 交換變量值之前 */ temp=a; a=b; b=temp; /* 交換器:交換變量x,y的值 */ printf(22 a=%d, b=%dn,a,b); /* 交換變量值之后 */ ,3,5,3,實(shí)參a,b的值沒(méi)發(fā)生變化! 單向值傳遞! 即由實(shí)參向形參的方向傳遞數(shù)值!而不會(huì)朝相反的方向!,9,全局變量,全局變量 在所有函數(shù)之外定義的變量 特點(diǎn) 默認(rèn)作用范圍:

7、在源程序.c中,從定義它的位置以后都有效 在定義點(diǎn)之前或在其他.c文件中引用,應(yīng)該進(jìn)行如下聲明: extern 類(lèi)型名 變量名; 從程序運(yùn)行起即占據(jù)內(nèi)存,程序運(yùn)行過(guò)程中可隨時(shí)訪問(wèn),程序退出時(shí)釋放內(nèi)存 使函數(shù)之間的數(shù)據(jù)交換更容易,也更高效 但是盡量少用,因?yàn)檎l(shuí)都可以改寫(xiě)全局變量,所以很難確定是誰(shuí)改寫(xiě)了它 破壞了函數(shù)的獨(dú)立性(封裝性),10,#include int global;/*定義全局變量*/ void GlobalPlusPlus(void); main() global = 1; printf(Before GlobalPlusPlus(), it is %dn, global); G

8、lobalPlusPlus(); printf(After GlobalPlusPlus(), it is %dn, global); /* 函數(shù)功能: 對(duì)全局變量global加1,并打印加1之前與之后的值 函數(shù)入口參數(shù): 無(wú) 函數(shù)返回值: 無(wú) */ void GlobalPlusPlus(void) printf(Before +, it is %dn, global); global+; printf(After +, it is %dn, global); ,例,Before GlobalPlusPlus(), it is 1 Before +, it is 1 After +, it

9、is 2 After GlobalPlusPlus(), it is 2,注意:全局變量具有“記憶性” 。,11,#include void GlobalPlusPlus(void); main() int global = 1; printf(Before GlobalPlusPlus(), it is %dn, global); GlobalPlusPlus(); printf(After GlobalPlusPlus(), it is %dn, global); /* 函數(shù)功能: 對(duì)局部變量global加1,并打印加1之前與之后的值 函數(shù)入口參數(shù): 無(wú) 函數(shù)返回值: 無(wú) */ void

10、GlobalPlusPlus(void) int global = 1; printf(Before +, it is %dn, global); global+; printf(After +, it is %dn, global); ,例,Before GlobalPlusPlus(), it is 1 Before +, it is 1 After +, it is 2 After GlobalPlusPlus(), it is 1,12,如何用全局變量解決例3-7,#include int a=3,b=5; void swap(void); /* 函數(shù)聲明 */ void main(

11、) printf(11 a=%d, b=%dn,a,b);/* 調(diào)用交換函數(shù)之前 */ swap(); /* 調(diào)用交換函數(shù)swap */ printf(12 a=%d, b=%dn,a,b);/* 調(diào)用交換函數(shù)之后 */ void swap(void ) /* 函數(shù)定義,沒(méi)有參數(shù) */ int temp; printf(21 a=%d, b=%dn,a,b); /* 交換變量值之前 */ temp=a; a=b; b=temp; /* 交換變量a,b的值 */ printf(22 a=%d, b=%dn,a,b); /* 交換變量值之后 */ ,雖然得以解決,但并不是一個(gè)好辦法! 為什么? 因

12、為它破壞了函數(shù)的封閉性! 學(xué)指針的時(shí)候我們會(huì)學(xué)另外一種方法! 即便要用全局變量,一般也是在只讀不寫(xiě)的時(shí)候才用!,13,例:使用全局變量解決,#include #define PI 3.14 float r; float l( void ); /*函數(shù)聲明*/ float s(void); /*函數(shù)聲明*/ float l(void) /*函數(shù)定義:求周長(zhǎng)*/ return PI*r*2; float s(void) /*函數(shù)定義:求面積*/ return PI*r*r; void main() float cir, area; printf(please input r:); scanf(%f

13、, ,r一旦被賦值,其值不再發(fā)生變化,只是拿來(lái)用。,14,小結(jié):,分清楚同名變量的作用域。一般情況下用局部變量,極少情況下考慮到數(shù)據(jù)的一致性時(shí)可以用全局變量。 變量的存儲(chǔ)類(lèi)型待第5章以后再講。,15,編寫(xiě)函數(shù),求兩個(gè)整數(shù)的最小值、最大值 分析結(jié)果(算法) 主函數(shù): 輸入a,b 計(jì)算最小值和最大值(通過(guò)函數(shù)調(diào)用實(shí)現(xiàn)) 輸出最小值和最大值 求最大值函數(shù) 求最小值函數(shù),新的問(wèn)題:例3-2:,#include int min(int,int);/*函數(shù)聲明*/ int max(int,int); int min(int a,int b)/*函數(shù)功能:求a,b的最小值*/ int temp; if(ab

14、) temp=b; else temp=a; return temp; int max(int a,int b) /*函數(shù)功能:求a,b的最大值*/ int temp; if(ab) temp=b; else temp=a; return temp; ,void main() int a,b; printf( please input two integers: ); scanf(%d%d, ,運(yùn)行過(guò)程?,16,例3-2:編寫(xiě)函數(shù),求兩個(gè)整數(shù)的最小值、最大值,另一種寫(xiě)法: #include int min(int,int);/*函數(shù)聲明*/ int max(int,int); int min(

15、int a,int b) /*函數(shù)功能:求a,b的最小值*/ return (ab)?b:a; int max(int a,int b) /*函數(shù)功能:求a,b的最大值*/ return (ab)?a:b; void main() int a,b; printf( please input two integers: ); scanf(%d%d, ,條件運(yùn)算符?: C語(yǔ)言中唯一的三目運(yùn)算符 含義:若?前邊的表達(dá)式成立,則結(jié)果為:前邊的表達(dá)式或數(shù)據(jù),若不成立,結(jié)果為:后邊的表達(dá)式或數(shù)據(jù)。 簡(jiǎn)單的if-else語(yǔ)句可以用條件運(yùn)算符來(lái)替代。 結(jié)合性:自右向左 計(jì)算:y=x0?1:(x0?-1:0),

16、函數(shù)定義的另一種寫(xiě)法請(qǐng)參考書(shū)中48頁(yè)的解法一,17,例49,從鍵盤(pán)上輸入一個(gè)年份,然后判斷這個(gè)年份是否為閏年。 分析結(jié)果(算法) 輸入year 判斷year是否為閏年 輸出yes或no,如果year能被4整除且不能被100整除,或者year能被400整除, year是閏年, 否則 year不是閏年。,18,分析,year能被4整除且不能被100整除,或者year能被400整除 (?)或者(?) (?且?)或者(?) (? printf(“please input year:”); scanf(“%d”, /*縮進(jìn)與上邊一致*/ ,20,寫(xiě)成多函數(shù)程序,#include void leap(in

17、t year);/*函數(shù)聲明*/ void leap(int year)/*判斷year是否為閏年并輸出*/ if(year%4=0 /*調(diào)用leap函數(shù)判斷year是否為閏年并輸出*/ ,21,涉及的語(yǔ)法,選擇結(jié)構(gòu)語(yǔ)句格式 if(條件表達(dá)式) else ,else分支可以省略,此時(shí)為單分支結(jié)構(gòu),22,涉及的語(yǔ)法關(guān)系運(yùn)算符, = = = != 大于,小于,大于等于,小于等于,等于,不等于 運(yùn)算結(jié)果只有兩個(gè)值:0和非0,0表示假,即該關(guān)系不成立;非0,表示真,即該關(guān)系成立 例如:2006%4=0的結(jié)果是? 0,表示假(關(guān)系不成立),優(yōu)先級(jí):在算術(shù)運(yùn)算符和賦值運(yùn)算符之間。 結(jié)合性:自左向右,23,

18、涉及的語(yǔ)法邏輯運(yùn)算符,邏輯運(yùn)算也被稱(chēng)為布爾(Boolean)運(yùn)算,即參與運(yùn)算的數(shù)據(jù)和運(yùn)算結(jié)果都只有兩個(gè)值:0和非0,0表示假(條件不成立);非0表示真(條件成立) 與運(yùn)算 printf(“please input a character:”); c=getchar();/*從鍵盤(pán)上輸入一個(gè)字符并存儲(chǔ)到變量C中*/ if(c=a ,(letter=97 printf(“please input an lowercase:”); lower=getchar(); /*從鍵盤(pán)上輸入一個(gè)字符,并賦值給lower */ upper=lower-32; putchar(upper); /*將upper輸出 */ ,一般用法:字符型變量=getchar();含義是從鍵盤(pán)上敲入一個(gè)字符,然后把它賦給字符型變量。 另一種用法:getchar();功能相當(dāng)于“按任意健繼續(xù)”,一般用于程序最后,以便查看前邊的結(jié)果。,格

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論