第5章程序流控制_第1頁
第5章程序流控制_第2頁
第5章程序流控制_第3頁
第5章程序流控制_第4頁
第5章程序流控制_第5頁
已閱讀5頁,還剩42頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第5章 程序流程控制(kngzh)5.1. 順序結(jié)構(gòu)5.2 選擇結(jié)構(gòu)5.3 循環(huán)結(jié)構(gòu)5.4 轉(zhuǎn)移語句(yj)5.5 異常處理語句5.6 條件編譯 總結(jié)共四十七頁5.1 順序(shnx)結(jié)構(gòu)1表達(dá)式語句(yj)2塊(復(fù)合)語句返回首頁共四十七頁5.1.1 表達(dá)式語句(yj)表達(dá)式是指用運(yùn)算符連接各個(gè)運(yùn)算對(duì)象,合乎語法規(guī)則的式子。在C#程序中,幾乎所有的操作運(yùn)算都通過表達(dá)式來實(shí)現(xiàn),而表達(dá)式語句(yj)也就成了C# 程序中最簡單也是最基本的一類語句。 (1)空語句。 (2)賦值語句。int i=0;(3)函數(shù)調(diào)用語句 (對(duì)象.方法) p.Open();返回本節(jié)共四十七頁5.1.2 塊(復(fù)合(fh)語

2、句C# 語言允許(ynx)把一組語句用一對(duì)花括號(hào)括起來,構(gòu)成一個(gè)塊塊語句。例如:int a;a=1+2;塊語句是若干條語句的一個(gè)集合,它在語法上是一個(gè)整體,相當(dāng)于一個(gè)語句。復(fù)合語句與簡單語句一樣地使用。 返回本節(jié)共四十七頁5.2 選擇(xunz)結(jié)構(gòu)1ifelse語句 (1) if,ifelse語句 (2) if 與三目運(yùn)算符 (3) 嵌套 (4) 注意事項(xiàng)2switch語句 switch語句是多分支(fnzh)的選擇語句。 返回首頁共四十七頁5.2.1.1 ifelse語句(yj)例:判斷用戶的輸入,如果(rgu)輸入的數(shù)值大于0,則在屏幕上顯示“正數(shù)”;否則在屏幕上顯示“不是正數(shù)”。pub

3、lic static void main() int a =(int)Console.ReadLine(); if(a0) Console.WriteLine(“0:是正數(shù)”,a); else Console.WriteLine(“0:不是正數(shù)”,a);返回本節(jié)共四十七頁5.2.1.2 if 與三目運(yùn)算符通常,如果一條if.else語句比較簡單的話,我們也可以用 ?: 來替代(tdi) 例: if(ab) s=a*a; else s=b*b; 等價(jià)為 s=ab?a*a:b*b;返回(fnhu)本節(jié)共四十七頁5.2.1.3 嵌套if,if.else 允許(ynx)嵌套 例: if(布爾表達(dá)式)

4、if,if.else 語句 else if,if.else 語句返回(fnhu)本節(jié)共四十七頁5.2.1.4 注意(zh y) 1.條件的運(yùn)算結(jié)果(ji gu)一定要是布爾類型 turu/false if(布爾表達(dá)式) 例: /以前C,C+中喜歡的方式 計(jì)算:s=a/b int s,a,b; if(b) Console.WriteLine(“除數(shù)不能為0”); else s=a/b; .例: /C#中 int s,a,b; if(b=0) Console.WriteLine(“除數(shù)不能為0”); else s=a/b; . 2.嵌套只能一環(huán)扣一環(huán),不能形成交叉返回本節(jié)共四十七頁5.2.2 sw

5、itch 語句(yj) 5.2.2.1 基本形式(xngsh) 5.2.2.2 替代if語句形成多分支 5.2.2.3 貫穿與標(biāo)號(hào)組合區(qū)分 5.2.2.4 break goto retune 退出分支 5.2.2.5 注意事項(xiàng)返回本節(jié)共四十七頁5.2.2.1 基本(jbn)形式switch語句的語法(yf)格式為:switch (表達(dá)式)case 常量表達(dá)式1:語句1;跳轉(zhuǎn)語句;case 常量表達(dá)式2:語句2;跳轉(zhuǎn)語句;case 常量表達(dá)式n:語句n;跳轉(zhuǎn)語句;default:語句n+1;跳轉(zhuǎn)語句;返回本節(jié)共四十七頁例如,根據(jù)考試成績的等級(jí)(dngj)輸出百分制分?jǐn)?shù)段: char grade;

6、switch (grade) caseA: Console.WriteLine(85100“);break; caseB: Console.WriteLine(7084“);break; caseC: Console.WriteLine(6069“);break; caseD: Console.WriteLine(60“);break; default: Console.WriteLine(error“);break;返回(fnhu)本節(jié)共四十七頁有幾點(diǎn)說明:(1)default語句是可缺省的。 (2)switch后面括號(hào)中的表達(dá)式只能是整型、字符型,字符串或枚舉型表達(dá)式。 (3)在各個(gè)(gg

7、)分支中的break語句起著退出switch語句的作用。 (4)case語句起標(biāo)號(hào)的作用。標(biāo)號(hào)不能重名,所以每一個(gè)case常量表達(dá)式的值必須互不相同,否則就會(huì)出現(xiàn)編譯錯(cuò)誤。 (5)當(dāng)多個(gè)分支需要執(zhí)行同一操作時(shí),可以使多個(gè)case語句共用一組語句。 (6)各個(gè)case(包括default)語句的出現(xiàn)次序可以任意。 (7)每個(gè)case語句中可以有多條語句組成相應(yīng)的語句,但不必用 。 返回(fnhu)本節(jié)共四十七頁5.2.2.2 替代if語句(yj)形成多分支 switch 與 if嵌套語句在作用(zuyng)上可以互換 switch 的好處是多分支條理清晰,程序可讀性強(qiáng) 例:用if嵌套改寫 if

8、(grade=A) ConSole.WriteLine(85100“); else if (grade=B) ConSole.WriteLine(7084“); else if (grade=C) ConSole.WriteLine(6069“); else if (grade=D) ConSole.WriteLine(60“); else ConSole.WriteLine(error“);返回本節(jié)共四十七頁5.2.2.3貫穿(遍歷)與標(biāo)號(hào)組合(zh)區(qū)分例 C,C+中 計(jì)算一年中天數(shù)(tinsh) (利用了貫穿的技巧)switch (month) case 12: day+=31; /貫穿

9、下面所有的 case case 11: day+=30; /貫穿下面所有的 case case 1: day+=31; /貫穿下面所有的 case Console.WriteLine(“天數(shù)為:0”,day);例2 C# 計(jì)算一年中天數(shù)switch (month) case 12: day+=31;goto case 11; /跳轉(zhuǎn) case 11: day+=30;goto case 10; case 1: day+=31;break; Console.WriteLine(“天數(shù)為:0”,day);返回本節(jié)共四十七頁5.2.2.3貫穿(遍歷(bin l)與標(biāo)號(hào)組合區(qū)分例2 C# 計(jì)算(j s

10、un)一年中天數(shù)switch (month) case “12月”:case “12”: Console.WriterLine(“標(biāo)號(hào)組合”); case 11: day+=30;goto case 10; case 1: day+=31;break; Console.WriteLine(“天數(shù)為:0”,day);返回本節(jié)共四十七頁5.2.2.4 break goto return 例2 計(jì)算一年中天數(shù)int CountDayByMonth(int year ,int month) switch (month) case 12: day+=31;goto case 11; case 11: d

11、ay+=30;goto case 10; 跳轉(zhuǎn) case 1: day+=31;break; 退出該條switch語句 default: return -1; /退出該函數(shù) /修正(xizhng)閏年和閏月 day +=閏年和閏月處理函數(shù); return day;返回(fnhu)本節(jié)共四十七頁5.2.2.5 注意(zh y) 與C,C+不同1.switch后面括號(hào)中的表達(dá)式還可以是字符串表達(dá)式2.case語句不能貫穿,如果(rgu)一定要達(dá)到C,C+的效果請(qǐng)用 goto 標(biāo)號(hào) 語句跳轉(zhuǎn)實(shí)現(xiàn)3. Case 語句的位置無關(guān)性(因?yàn)闆]有貫穿的原因)4.其它: 1.跳轉(zhuǎn)語句:break 和goto的用

12、法 2.return 的用法 返回本節(jié)共四十七頁5.3 循環(huán)(xnhun)結(jié)構(gòu)C# 提供了三種循環(huán)控制語句: 1.while語句 2.dowhile語句3.for語句4.foreach 語句(C,C+中沒有)前三種語句都由相似的三部分組成: 1.進(jìn)入循環(huán)的條件; 2.循環(huán)體; 3.退出循環(huán)的條件;完成的功能也類似(li s)。所不同的只是三者進(jìn)入與退出循環(huán)的方式不同。(注意: 除布爾表達(dá)外其它要求與C,C+語句類似)(記憶: 當(dāng)循環(huán)條件為真時(shí),進(jìn)入循環(huán))返回首頁共四十七頁5.3.1 while語句(yj) 1while語句while語句的語法格式為:while (布爾表達(dá)式)循環(huán)體;它的含義為

13、:首先對(duì)布爾表達(dá)式進(jìn)行判斷,若判斷結(jié)果為假(false),則跳過循環(huán)體,執(zhí)行while結(jié)構(gòu)(jigu)后面的語句。若判斷結(jié)果為真(true),則進(jìn)入循環(huán)體,執(zhí)行其中的語句序列。 while循環(huán)由4個(gè)部分組成:循環(huán)變量初始化,判斷條件,循環(huán)體,改變循環(huán)變量的值。返回本節(jié)共四十七頁5.3.1 while語句(yj)例1 計(jì)算sum=1+2+3+10的while循環(huán)結(jié)構(gòu)如下:int sum=0;int i=1; /循環(huán)變量初始化while (ilimit程序(chngx)如下:void Main() int i=0,sum=0; float limit; Console.WriteLine(Plea

14、se input limit:“); limit =(float)Console.ReadLine(); do i+; sum+=(float)1/i; while (sum=limit); Console.WriteLine(i);返回(fnhu)本節(jié)共四十七頁5.3.3 for語句(yj) for語句的語法格式為: for(初始化;布爾表達(dá)式;步長) 循環(huán)體(1)初始化;(2)測試布爾表達(dá)式,若為false,則結(jié)束循環(huán)(xnhun),轉(zhuǎn)到(5);(3)若布爾表達(dá)式,若為ture ,則執(zhí)行循環(huán)體,然后計(jì)算步長;(4)轉(zhuǎn)回(2);(5)執(zhí)行for語句下面的一個(gè)語句。返回本節(jié)共四十七頁例如,計(jì)算

15、sum=1+2+3+10 : for (int i=1;i=10;i+) /注意:不能漏掉分號(hào)sum+=i;回憶(huy): 上小節(jié) while 的方式記憶: 其實(shí) while dowhile for 大多數(shù)情況下都可以實(shí)現(xiàn)相同功能返回(fnhu)本節(jié)共四十七頁5.3.4 foreach 語句(yj) 語法(yf)格式:foreach(類型 變量名 in 表達(dá)式) 循環(huán)體 返回本節(jié)共四十七頁5.3.4 foreach 語句(yj) 例: 顯示(xinsh)數(shù)組的數(shù)值 int arr1=new int1,2,3,4,5; foreach(int x in arr1) Console.WriteL

16、ine(“值為:0”,x); /顯示 值為:1 /x0=1 值為: 2 /x1=2 值為:5 /x4=5 返回本節(jié)共四十七頁5.3.4 foreach 語句(yj) 3.注意 foreach(類型 循環(huán)變量 in 表達(dá)式) 循環(huán)體 (1) 表達(dá)式必須是集合類型 (一種數(shù)組對(duì)象,只不過此數(shù)組實(shí)現(xiàn)了IEnumerable接口,foreach 正是利用了它來完成索引工作) (2) 集合類型中元素 類型 都為循環(huán)變量的類型 (3) 循環(huán)變量為只讀,即不能改變該變量的任何(rnh)內(nèi)容 (4)循環(huán)自動(dòng)進(jìn)行,循環(huán)次數(shù)為集合的元素?cái)?shù) (5) break continue return 可以改變或跳出循環(huán)返回

17、本節(jié)共四十七頁5.4 轉(zhuǎn)移(zhuny)語句1break語句break語句的作用是:結(jié)束當(dāng)前正在執(zhí)行的循環(huán)(for、while和dowhile)或多路分支(fnzh)(switch)程序結(jié)構(gòu),轉(zhuǎn)而執(zhí)行這些結(jié)構(gòu)后面的語句。2continue語句continue語句的作用是:結(jié)束當(dāng)前正在執(zhí)行的這一次循環(huán)(for、while和dowhile),接著執(zhí)行下一次循環(huán)。即跳過循環(huán)體中尚未執(zhí)行的語句,接著進(jìn)行下一次是否執(zhí)行循環(huán)的判定。3goto語句goto語句的語法格式為:goto 標(biāo)號(hào);4. return 語句 退出函數(shù)體注意: 1.轉(zhuǎn)移只能是轉(zhuǎn)出,而不能是轉(zhuǎn)入 2.goto 語句可以用在任何語句間,但絕

18、對(duì)不能亂用,否則會(huì)讓程序變得復(fù)雜!返回首頁共四十七頁5.5 異常(ychng)處理語句5.5.1 引發(fā)異常的條件 5.5.2 自定義拋出異常 throw5.5.3異常處理語句 try catch(Exception e) 可以有多個(gè)(du )catch塊 finally5.5.4 異常處理的過程5.5.5 異常類返回首頁共四十七頁5.5.1 引發(fā)(yn f)異常的條件1.系統(tǒng)拋出 算術(shù)溢出(y ch),除0錯(cuò)誤 訪問資源失敗(數(shù)據(jù)庫操作失敗)2.自定義拋出 程序用 throw 語句拋出返回本節(jié)共四十七頁5.5.2 自定義拋出(po ch)異常 throw 語句: 1.throw 表達(dá)式 表達(dá)式

19、返回值為異常類型(Exception)或其派生(pishng)的類型 2.throw ; 再次拋出(繼續(xù)傳播)返回本節(jié)共四十七頁5.5.3 異常處理(chl)語句 常見形式: 1.try catch(s) 2. try catch(s) finally 異常傳播 當(dāng)出現(xiàn)一個(gè)異常以后,程序(chngx)將控制權(quán)轉(zhuǎn)移給第一個(gè)能夠處理該異常的子句,這整個(gè)處理的過程就叫做異常傳播 (記憶:是不是有點(diǎn)象C,C+中的switch的匹配過程?)返回本節(jié)共四十七頁5.5.3 異常處理(chl)語句各語句塊的介紹 try 監(jiān)視異常 catch() 捕捉并處理異常(可以多條) finally 必須執(zhí)行的語句塊 注

20、意1: 不能理解為沒有(mi yu) try就不會(huì)產(chǎn)生異常,異常的產(chǎn)生與有沒有try無關(guān) 注意2 : finally塊一定會(huì)執(zhí)行到,不論是否會(huì)發(fā)生由以下原因?qū)е碌某绦蚩刂妻D(zhuǎn)移: 1.普通語句 2. break; continue ;goto; return;的結(jié)果 3.將異常傳播到語句之外的結(jié)果返回本節(jié)共四十七頁5.5.4 異常(ychng)處理過程對(duì)待異常的態(tài)度: 1.捕捉清除繼續(xù)程序(chngx) 2.捕捉處理繼續(xù)拋出(傳播)繼續(xù)程序例1: using Sytem; class Test static void F() try G(); catch(Exception e) Console

21、.WriteLine(“Exception in F:0”,e.Message); e=new Exception(“F”); throw; static void G() throw new Exception(“G”); static void Main() try F(); catch(Exception e) Console.WriteLine(“Exception in Main:0”,e.Message); 返回本節(jié)共四十七頁5.5.4 異常(ychng)處理過程例2: 計(jì)算 Z=sqr(|x2-y2|)+x (c#2.0 中sqrt不再彈出異常,所以(suy)此例作廢) doub

22、le x,y,z; try z=Math.Sqrt(x*x-y*y); catch z=Math.Sqrt(y*y-x*x); finally z+=x; 返回本節(jié)共四十七頁5.5.5 異常(ychng)類5.5.5.1 常用的異常類5.5.5.2 Exception 類的屬性5.5.5.3 Exception對(duì)象(duxing)的構(gòu)造(實(shí)例化)返回本節(jié)共四十七頁5.5.5.1 常用(chn yn)的異常類表11-1(P290)返回(fnhu)本節(jié)異常類導(dǎo)致異常出現(xiàn)的原因Exception基類AccessException訪問一個(gè)類型成員如一個(gè)方法或字段時(shí)失敗 ArgumentExceptio

23、n方法的參數(shù)非法IndexOutOfRangeException數(shù)組下標(biāo)出界OutOfMemoryException 無足夠的內(nèi)存OverFlowException數(shù)據(jù)溢出.共四十七頁5.5.5.2 Exception 類的屬性(shxng)屬性返回類型作用Messagestring 存放異常的信息 (讀)Sourcestring 出現(xiàn)異常時(shí)的程序名稱 (讀,寫)TargeSiteSystem.Reflection.MethodBase 方法的參數(shù)非法 (讀)StackTracestring 出現(xiàn)異常的位置 (讀)HelpLinkstring 異常的幫助文件URL字符串(讀,寫)InnerEx

24、ceptionException導(dǎo)致出現(xiàn)異常的實(shí)例(讀).例:11-8 (p294) 返回(fnhu)本節(jié)共四十七頁5.5.5.3 Exception對(duì)象的構(gòu)造(guzo)(實(shí)例化) 構(gòu)造方法 1. public Exception(); 2. public Exception(string 錯(cuò)誤消息); 3. public Exception(string,Exception); 3. protected Exception(SerializationInfo,StreamongConteat)例: throw new Exception(); throw new Exception(“XX

25、錯(cuò)誤”); throw new Exception(“xx 參數(shù)格式(g shi)出錯(cuò)”,new FormatException);返回本節(jié)共四十七頁5.6 條件(tiojin)編譯與以上介紹的本質(zhì)(bnzh)不同處: 條件編譯屬于編譯器編譯前的預(yù)處理過程 預(yù)處理 條件編譯指令: #define COUNT 定義符號(hào) #undef COUNT 取消符號(hào) 必須放在所有”實(shí)語句”之前 # if . #endif 單支, if 符號(hào)表達(dá)式 #if #else #endif 雙支 #if #elif#else.#endif 多支(嵌套) #elif =#else if 注意: 條件編譯語句 不用分號(hào)結(jié)

26、束條件編譯語句的作用: 根據(jù)符號(hào)選擇要編譯的語句 (如分別定義測試版和正式發(fā)行版,然后編譯成不同版本的程序) 返回首頁共四十七頁5.6 條件(tiojin)編譯注意: #define COUNT 必須放在所有實(shí)代碼之前 例1: namespace N #define B /錯(cuò)誤 ,位于(wiy)namespace N語句之后 #if B class CClass1 #endif 例2: #define Debug class Class1 #if Debug void Trace(string s) #endif 例3: #define A #define B #undef C class D

27、 #if C void F() #elif A&B void I() #else voidG() #endif 注意: #elif 與 #else 是一組if 語句返回本節(jié)共四十七頁5.6 條件(tiojin)編譯在編譯時(shí)發(fā)出錯(cuò)誤或警告信息 #warning 警告信息 #error 錯(cuò)誤信息 注意: 1. 不用分號(hào)結(jié)束 2. 字符串不用引號(hào)括起來, 可以有空格 3.信息僅出現(xiàn)在編譯時(shí),且僅顯示在調(diào)試窗口(chungku)或錯(cuò)誤窗口(chungku)中 4.當(dāng)執(zhí)行了#error時(shí),不僅顯示出錯(cuò)信息,同時(shí)還因?yàn)檫@個(gè)”錯(cuò)誤”而停止編譯例2: #define DEBUG #define RELEASE # define DEMO VERSION #if DEMO VERSION &!DEBUG #wa

溫馨提示

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

評(píng)論

0/150

提交評(píng)論