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

下載本文檔

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

文檔簡介

1、主講教師:吳秀芹主講教師:吳秀芹電子郵件:電子郵件:電電 話:話:6507725公室地址:一教辦公室地址:一教D座座309室室 選擇結構及if、switch語句 循環(huán)結構及循環(huán)語句 跳出循環(huán) 異常處理及try-catch-finally語句 ifif語句是最常用的選擇語句,它根據(jù)布爾表達式的值來語句是最常用的選擇語句,它根據(jù)布爾表達式的值來判斷是否執(zhí)行后面的內嵌語句。判斷是否執(zhí)行后面的內嵌語句。 if(布爾表達式)(布爾表達式) 表達式表達式A;else 表達式表達式B;3.1.1 if語句 if(boolean expression1) 表達式表達式A; else

2、if(boolean expression2) 表達式表達式B; else if(boolean expression3) 表達式表達式C; else 表達式表達式N; IfIf語句的嵌套:語句的嵌套: 程序運行結果如下所示:程序運行結果如下所示: 例:例:輸入一個浮點數(shù),將其進行四舍五入,并輸出。輸入一個浮點數(shù),將其進行四舍五入,并輸出。 static void Main(string args) double x; int y; Console.WriteLine(請輸入一個浮點數(shù):請輸入一個浮點數(shù):); x = Convert.ToDouble(Console.ReadLine(); i

3、f (x - (int)x = 0.5) y = (int)x + 1; else y = (int)x; Console.WriteLine(0經過四舍五入后的結果是:經過四舍五入后的結果是:1, x, y); Console.ReadLine(); C# C#語言提供了語言提供了switchswitch開關語句專門處理多路分支的情形。開關語句專門處理多路分支的情形。 switch (switch_expression) case value1 : statement1; break; case value2 : statement2; break; case valueN : statem

4、entN; break; default : statementM; break; 3.1.2 switch語句 例:例:假設考查課的成績按優(yōu)秀、良好、中等、及格和不及假設考查課的成績按優(yōu)秀、良好、中等、及格和不及格分為五等,分別用格分為五等,分別用“優(yōu)秀優(yōu)秀”、“良好良好”、“中等中等”、“及格及格”、“不及格不及格”來表示,但實際的考卷為百分制,來表示,但實際的考卷為百分制,分別對應的分數(shù)段為分別對應的分數(shù)段為90-10090-100、80-8980-89、70-7970-79、60-6960-69、0-590-59,請使用請使用switchswitch語句將用戶輸入的考卷成績轉換為考查課

5、成績,語句將用戶輸入的考卷成績轉換為考查課成績,并輸出。并輸出。程序運行結果如下所示:程序運行結果如下所示: static void Main(string args) int x; string y = ; Console.WriteLine(請輸入百分制分數(shù):請輸入百分制分數(shù):); x = Convert.ToInt32(Console.ReadLine(); if (x 100 | x 0) Console.WriteLine(您輸入的分數(shù)不合法您輸入的分數(shù)不合法!); else int temp = x / 10; switch (temp) case 10: y = 優(yōu)秀優(yōu)秀; br

6、eak; case 9: y = 優(yōu)秀優(yōu)秀; break; case 8: y = 良好良好; break; case 7: y = 中等中等; break; case 6: y = 及格及格; break; default: y = 不及格不及格; break; Console.WriteLine(該學生百分制下該學生百分制下0分經轉換,為分經轉換,為5分制下的分制下的1., x, y); Console.ReadLine(); for for循環(huán)語句是循環(huán)語句是C#C#中使用頻率最高的循環(huán)語句,在事先中使用頻率最高的循環(huán)語句,在事先知道循環(huán)次數(shù)的情況下,使用知道循環(huán)次數(shù)的情況下,使用for

7、for循環(huán)語句比較方便。循環(huán)語句比較方便。forfor循循環(huán)語句的格式為:環(huán)語句的格式為: for(for(初始條件初始條件; ;結束條件結束條件; ;循環(huán)變量迭代器循環(huán)變量迭代器) ) 循環(huán)體循環(huán)體 3.2.1 for語句 程序運行結果如下所示:程序運行結果如下所示: 例:例:使用使用forfor循環(huán),求輸入任意大于循環(huán),求輸入任意大于0 0整數(shù)的階乘。整數(shù)的階乘。 static void Main(string args) Console.WriteLine(請輸入一個大于請輸入一個大于0的整數(shù):的整數(shù):); int a = Convert.ToInt32(Console.ReadLine

8、(); if (a = 0) Console.WriteLine(你輸入的數(shù)字不合法!你輸入的數(shù)字不合法!); else int result = 1; for (int i = 1; i 0); Console.WriteLine(0的階乘是的階乘是1,a,result); Console.ReadLine(); foreachforeach語句是在語句是在C#C#中新引入的,它表示遍歷一個集合中新引入的,它表示遍歷一個集合或數(shù)組或數(shù)組中的各元素,并針對各個元素執(zhí)行內嵌語句。中的各元素,并針對各個元素執(zhí)行內嵌語句。foreachforeach語句的語法格式為:語句的語法格式為: foreac

9、h ( foreach (數(shù)據(jù)類型數(shù)據(jù)類型 變量變量 inin 集合或者數(shù)組集合或者數(shù)組) ) /語句語句 3.2.4 foreach語句 static void Main(string args) int fibarray = new int 0, 1, 2, 3, 5, 8, 13 ; foreach (int i in fibarray) Console.WriteLine(i); Console.ReadLine(); foreach (數(shù)據(jù)類型數(shù)據(jù)類型 元素元素(變量變量) in 集合或者數(shù)組集合或者數(shù)組) /語句語句 程序運行結果如下所示:程序運行結果如下所示: 例:例:使用使用f

10、oreach foreach 循環(huán)遍歷所輸入字符串中的每個字符,循環(huán)遍歷所輸入字符串中的每個字符,分別輸出該字符串中字母、數(shù)字以及標點符號的個數(shù)。分別輸出該字符串中字母、數(shù)字以及標點符號的個數(shù)。當判斷某指定的當判斷某指定的UnicodeUnicode字符是否屬于字母類別時,可使用字符是否屬于字母類別時,可使用charchar類的類的IsLetterIsLetter方法,方法,其定義為其定義為public static bool IsLetter(char c); public static bool IsLetter(char c); 如果參數(shù)如果參數(shù)c c是字母,則返回值為是字母,則返回值為

11、truetrue;否則,為否則,為falsefalse。if(char.IsLetter(chr) / if(char.IsLetter(chr) / 檢查字母檢查字母 countLetters+;countLetters+;當判斷某指定的當判斷某指定的UnicodeUnicode字符是否屬于數(shù)字類別或標點符號類別時,可分別使用字符是否屬于數(shù)字類別或標點符號類別時,可分別使用charchar類的類的IsDigitIsDigit方法以及方法以及IsPunctuationIsPunctuation方法。方法。static void Main(string args)int countLetters

12、 = 0; / 存放字母的個數(shù) int countDigits = 0; / 存放數(shù)字的個數(shù)int countPunctuations = 0; / 存放標點符號的個數(shù)string input; / 用戶提供的輸入 Console.WriteLine(請輸入一個字符串 );input = Console.ReadLine();/ 聲明 foreach 循環(huán)以遍歷輸入的字符串中的每個字符。 foreach(char chr in input) if(char.IsLetter(chr) / 檢查字母 countLetters+; if(char.IsDigit(chr) / 檢查數(shù)字 count

13、Digits+; if(char.IsPunctuation(chr) / 檢查標點符號 countPunctuations+;Console.WriteLine(“字母的個數(shù)為: 0, countLetters);Console.WriteLine(“數(shù)字的個數(shù)為: 0, countDigits);Console.WriteLine(“標點符號的個數(shù)為: 0, countPunctuations);為所有計數(shù)器設置初始值接受輸入對輸入的每一個字符都進行循環(huán)使用了所有輸入的字符之后,循環(huán)自動終止 如在循環(huán)體內遇到特定的情況需要在循環(huán)條件滿足的情如在循環(huán)體內遇到特定的情況需要在循環(huán)條件滿足的情況

14、下終止循環(huán),就需要用到中斷循環(huán)語句。況下終止循環(huán),就需要用到中斷循環(huán)語句。 Break Break:立即終止循環(huán),并跳轉到循環(huán)后面第一行代:立即終止循環(huán),并跳轉到循環(huán)后面第一行代碼執(zhí)行。碼執(zhí)行。 Continue Continue:立即終止當次的循環(huán):立即終止當次的循環(huán)( (并不影響循環(huán)的繼并不影響循環(huán)的繼續(xù)執(zhí)行續(xù)執(zhí)行) )。 3.2.5 跳出循環(huán) 1 1、breakbreak語句語句 作作 用:用: 1) 1) 從循環(huán)體內跳出循環(huán)體,即提前結束循環(huán),接著執(zhí)行循從循環(huán)體內跳出循環(huán)體,即提前結束循環(huán),接著執(zhí)行循環(huán)下面的語句;環(huán)下面的語句; 2) break2) break語句只能用于語句只能用于

15、循環(huán)語句循環(huán)語句和和switchswitch語句語句。 static void Main(string args) double area; int r; for (r=1;r100) break; Console.WriteLine(area is 0,area); Console.ReadLine(); 2 2、continuecontinue語句語句 (1)(1)作作 用:用: 結束本次循環(huán),即跳過循環(huán)體中下面尚未執(zhí)行的語句,結束本次循環(huán),即跳過循環(huán)體中下面尚未執(zhí)行的語句,接著執(zhí)行對循環(huán)條件的判斷。接著執(zhí)行對循環(huán)條件的判斷。 (2)break(2)break語句和語句和continuec

16、ontinue語句的區(qū)別語句的區(qū)別 1 1)continuecontinue語句只結束本次循環(huán),不終止整個循環(huán)的執(zhí)語句只結束本次循環(huán),不終止整個循環(huán)的執(zhí)行;行; 2 2)breakbreak語句是終止整個循環(huán)的執(zhí)行,不再進行條件判語句是終止整個循環(huán)的執(zhí)行,不再進行條件判斷。斷。 int n; for (n = 100; n = 200; n+) if (n % 2 = 0) continue; Console.WriteLine(0,n); Console.ReadLine();if (n%2!=0) Console.WriteLine(0,n);錯誤錯誤語法錯誤語法錯誤邏輯錯誤邏輯錯誤不通過

17、編譯不通過編譯通過編譯,運行出錯通過編譯,運行出錯 3.3.1 異常的基本概念 static void Main(string args) Console.Write(請輸入請輸入x的值:的值:); int x, y = 0; if (!int.TryParse(Console.ReadLine(), out x) Console.WriteLine(輸入格式不正確!輸入格式不正確!); else if (x = 10 | x = 5 | x = 0) Console.WriteLine(x的值不能為的值不能為10、5或或0); else y = 100 / (10 - x) / (x - 5

18、) / x; Console.WriteLine(y=0, y); Console.ReadLine(); static void Main(string args) Console.Write(請輸入請輸入x的值:的值:); int x, y = 0; x = Convert.ToInt32(Console.ReadLine(); y = 100 / (10 - x) / (x - 5) / x; Console.WriteLine(y=0, y); Console.ReadLine(); BinaryReader br1 = new BinaryReader(D:students.bin)

19、;Strudent s1 = Student.Load(br1);br1.Close();3.3.1 異常的基本概念 一個性能良好且穩(wěn)健的程序應該允許異常情況發(fā)生,一個性能良好且穩(wěn)健的程序應該允許異常情況發(fā)生,但應避免終止運行,這就要求編程人員能夠預知可能發(fā)生但應避免終止運行,這就要求編程人員能夠預知可能發(fā)生的特殊情況,并且在程序編碼中處理這些特殊情況,我們的特殊情況,并且在程序編碼中處理這些特殊情況,我們稱這個過程叫稱這個過程叫“”。3.3.1 異常的基本概念 異常處理結構可以用來捕捉在塊的執(zhí)行期間發(fā)生的各異常處理結構可以用來捕捉在塊的執(zhí)行期間發(fā)生的各種異常。它可以包含種異常。它可以包含tr

20、ytry塊、塊、catchcatch塊和塊和finallyfinally塊。塊。trytry /有可能發(fā)生異常的代碼塊有可能發(fā)生異常的代碼塊 catchcatch /當當trytry塊中的代碼發(fā)生異常時,響應的代碼塊中的代碼發(fā)生異常時,響應的代碼 finallyfinally /不管不管trytry塊中的代碼是否發(fā)生異常,該代碼塊一定執(zhí)行塊中的代碼是否發(fā)生異常,該代碼塊一定執(zhí)行 3.3.2 異常處理結構 static void Main(string args) Console.Write(請輸入請輸入x的值的值:); int x, y = 0; try x = Convert.ToInt32

21、(Console.ReadLine(); y = 100 / (10 - x) / ( x 5 ) /x; catch Console.WriteLine(輸入不正確輸入不正確); Console.WriteLine(y=0,y); Console.ReadLine(); static void Main(string args) Console.Write(請輸入請輸入x的值:的值:); int x, y = 0; x = Convert.ToInt32(Console.ReadLine(); y = 100 / (10 - x) / (x - 5) / x; Console.WriteLi

22、ne(y=0, y); Console.ReadLine(); 3.3.2 異常處理結構 C#C#采用面向對象的方式來處理程序異常,每一個異常采用面向對象的方式來處理程序異常,每一個異常都是一個都是一個ExceptionException對象,在對象,在catchcatch語句中可以訪問該對象。語句中可以訪問該對象。static void Main(string args) Console.Write(請輸入請輸入x的值的值:); int x, y = 0; try x = Convert.ToInt32(Console.ReadLine(); y = 100 / (10 - x) / ( x

23、 5 ) /x; catch (Exception exp) Console.WriteLine(輸入錯誤:輸入錯誤:+exp.Message); Console.WriteLine(y=0,y); Console.ReadLine(); System.ExceptionSystem.Exception類表示在應用程序執(zhí)行期間發(fā)類表示在應用程序執(zhí)行期間發(fā)生的錯誤,它是生的錯誤,它是.NET Framework.NET Framework中所有異常的基類型。當系中所有異常的基類型。當系統(tǒng)或應用程序發(fā)生錯誤時,將通過引發(fā)包含錯誤信息的異常統(tǒng)或應用程序發(fā)生錯誤時,將通過引發(fā)包含錯誤信息的異常來報告錯

24、誤。來報告錯誤。 System.ExceptionSystem.Exception類類描描 述述System.IndexOutOfRangeException 如果使用小于零或超出數(shù)組界限的下標訪問數(shù)組,如果使用小于零或超出數(shù)組界限的下標訪問數(shù)組,引發(fā)該異常引發(fā)該異常System.InvalidCastException 如果顯式轉換失敗,就會引發(fā)此異常如果顯式轉換失敗,就會引發(fā)此異常System.DivideByZeroException 當除數(shù)為當除數(shù)為0 0時,引發(fā)該異常時,引發(fā)該異常System.StackOverflowException 當堆棧溢出(如無限遞歸)時,引發(fā)該異常當堆棧

25、溢出(如無限遞歸)時,引發(fā)該異常System.OutOfMemoryException 在通過在通過newnew操作分配內存失敗時,引發(fā)該異常操作分配內存失敗時,引發(fā)該異常System.ArithmeticException 在算術運算期間發(fā)生錯誤時,引發(fā)該異常在算術運算期間發(fā)生錯誤時,引發(fā)該異常 在在try-catchtry-catch異常處理結構中,一個異常處理結構中,一個trytry語句后面可以語句后面可以有多個并列的有多個并列的catchcatch語句,每個語句,每個catchcatch語句用于捕獲和處理語句用于捕獲和處理不同類型的異常。在發(fā)生了某個特定類型的異常后,程序不同類型的異常

26、。在發(fā)生了某個特定類型的異常后,程序就轉入相應的就轉入相應的catchcatch代碼段,并在執(zhí)行完后退出整個代碼段,并在執(zhí)行完后退出整個try-try-catchcatch語句;如果列出的所有語句;如果列出的所有catchcatch語句都不能處理異常,語句都不能處理異常,當前程序將非正常中止。當前程序將非正常中止。3.3 異常處理結構 3.3.2 異常處理結構 static void Main(string args) Console.Write(請輸入請輸入x的值的值:); int x, y = 0; try x = Convert.ToInt32(Console.ReadLine(); y

27、 = 100 / (10 - x) / (x - 5) / x; catch (FormatException) Console.WriteLine(輸入的格式不正確,應輸入一個整數(shù)輸入的格式不正確,應輸入一個整數(shù)); catch (DivideByZeroException exp) Console.WriteLine(輸入錯誤:輸入錯誤: + exp.Message); catch(Exception) Console.WriteLine(程序發(fā)生意外錯誤程序發(fā)生意外錯誤); Console.WriteLine(y=0,y); Console.ReadLine(); 例:例:使用異常處理結

28、構將使用異常處理結構將“2008.1abc”“2008.1abc”字符串轉字符串轉換為一個整數(shù),結果保存為換為一個整數(shù),結果保存為i i變量。該異常處理結構變量。該異常處理結構包含一個包含一個trytry塊和兩個塊和兩個catchcatch塊。第一個塊。第一個catchcatch塊使用塊使用System.FormatExceptionSystem.FormatException類捕獲異常,并顯示異常類捕獲異常,并顯示異常的信息。第二個的信息。第二個catchcatch塊使用塊使用System.ExceptionSystem.Exception類捕類捕獲異常,并顯示異常的信息。獲異常,并顯示異常

29、的信息。 static void Main(string args) string s = 2008.1abc; int i = -1; try i = Convert.ToInt32 (s); /將將s轉換為整數(shù)轉換為整數(shù) catch (System.FormatException ex) Console.WriteLine(ex.Message); /顯示異常信息顯示異常信息 catch (System.Exception ex) Console.WriteLine(ex.Message); /顯示異常信息顯示異常信息 Console.ReadLine(); 在在try-catchtry-

30、catch結構之后再加上一個結構之后再加上一個finallyfinally代碼段,這代碼段,這就形成了就形成了try-catch-finallytry-catch-finally結構。它對異常的捕獲和處理結構。它對異常的捕獲和處理方式與方式與try-catchtry-catch結構相同;但不論程序在執(zhí)行過程中是否結構相同;但不論程序在執(zhí)行過程中是否發(fā)生異常,發(fā)生異常,finallyfinally代碼段總是會被執(zhí)行。代碼段總是會被執(zhí)行。3.3.2 異常處理結構 例:例:使用使用trytry語句求得所輸入的兩個數(shù)字的商,在語句求得所輸入的兩個數(shù)字的商,在第一個第一個catchcatch塊使用塊使用

31、System.FormatExceptionSystem.FormatException類捕獲類捕獲異常,并顯示異常的信息。第二個異常,并顯示異常的信息。第二個catchcatch塊使用塊使用System. DivideByZeroExceptionSystem. DivideByZeroException類捕獲異常,并顯類捕獲異常,并顯示異常的信息。最后使用示異常的信息。最后使用finallyfinally塊輸出問候信息。塊輸出問候信息。 static void Main(string args) int a, b, c; try Console.WriteLine(請輸入被除數(shù):請輸入被除

32、數(shù):); a = Convert.ToInt32(Console.ReadLine(); Console.WriteLine(請輸入除數(shù):請輸入除數(shù):); b = Convert.ToInt32(Console.ReadLine(); c = a / b; Console.WriteLine(0/1的值是:的值是:2, a, b, c); catch (FormatException) Console.WriteLine(所輸入的被除數(shù)和除數(shù)都必須是數(shù)字。所輸入的被除數(shù)和除數(shù)都必須是數(shù)字。); catch (DivideByZeroException) Console.WriteLine(除數(shù)不能為除數(shù)不能為0。); finally Console.WriteLine(謝謝使用本程序,再見!謝謝使用本程序,再見!); Console.ReadLine(); throwthro

溫馨提示

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

評論

0/150

提交評論