《種程序結(jié)構(gòu)》PPT課件.ppt
C#程序設計,高歡萍 廣州科技職業(yè)技術(shù)學院,教學目的,通過本章的學習,要求能熟練掌握C#中的流程控制結(jié)構(gòu)和相關的語句,熟悉各種語句的執(zhí)行流程,能夠在不同情況下靈活選擇不同的語句來解決實際問題。掌握基本語句為后續(xù)章節(jié)做好準備,也為后續(xù)面向?qū)ο笳Z言課程的學習打下基礎。,本章要點,switch語句與if語句的區(qū)別 while和dowhile語句的使用場合 for語句:最常用的循環(huán)語句 使用foreach語句遍歷數(shù)組集合 break與continue的區(qū)別 什么情況下使用goto語句 異常處理語句,C#流程控制語句,選擇語句: if語句 swich語句 循環(huán)語句: while語句 dowhile語句 for語句 foreach語句,if語句,if (布爾表達式) 內(nèi)嵌語句序列1; else 內(nèi)嵌語句序列2; ,switch語句與if語句,用if或if.else或它們的嵌套也可使程序?qū)崿F(xiàn)多路分支,但容易出現(xiàn)下面的問題: 可讀性差 破壞結(jié)構(gòu) 解決問題的方法: 采用switch語句,執(zhí)行效率更高,程序結(jié)構(gòu)形式上更清晰。,一般形式: switch (控制表達式) case 常量表達式1:語句塊1; break; /每個語句后面都要有 case 常量表達式2:語句塊2; break; default: 語句塊; break; /只能有一個 default ,值是個常量,其類型與“表達式”的類型一致,switch語句,break語句的功能是終止本switch語句的執(zhí)行。 執(zhí)行過程: 首先計算switch后圓括號內(nèi)的表達式的值,然后用這個值逐個與case的常量表達式的值進行比較。當找到相一致(匹配)的case時,就執(zhí)行 其后的語句序列;否則進入default后的語句序列。,使用swich語句需要注意一下幾點: 每個case后面的常量表達式的值必須是與“表達式”的類型相同的一個常量,可以是整型或字符常量,不能是變量; 同一個swich語句中的兩個或多個case中指定同一個常數(shù)值,會導致編譯出錯; case后面的每個語句段后面都必須寫上break,若某個case后面沒有處理語句,可以不寫break,與下一個case一并處理。 default可有可無,也可放在最前面,如: case A: case B: case C: Console.Write(“score60n”); break; .,例題: 1.根據(jù)輸入的月份,判斷該月屬于哪個季節(jié) 2.開發(fā)一個程序,要求在輸入1時,顯示星期一;輸入2時,顯示星期二;以此類推,輸入0時,顯示星期天。 (ex3-5),while (true) Console.WriteLine (請輸入一個0至6之間的整數(shù):); string s = Console.ReadLine(); int i = Convert.ToInt32(s); switch (i) case 1: Console.WriteLine (星期一); break; case 2: Console.WriteLine (星期二); break; case 3: Console.WriteLine (星期三); break; case 4: Console.WriteLine (星期四); break; case 5: Console.WriteLine (星期五); break; case 6: Console.WriteLine (星期六); break; case 0: Console.WriteLine (星期天); break; default: Console.WriteLine (輸入無效,請重新輸入:); break; Console.Read();,循環(huán)語句,循環(huán)的本質(zhì):不斷地重復某種動作。 對計算機程序而言,循環(huán)必備兩個重要因素: 在一定的條件下,重復執(zhí)行一組指令 必然出現(xiàn)不滿足條件的情況,使循環(huán)終止 計算機程序的兩種循環(huán)方式: 計算器控制的循環(huán)(while/dowhile/for) 標記控制的循環(huán)(if與goto),如果要在控制臺中循環(huán)輸入數(shù)據(jù),可以定義一個無限循環(huán),出現(xiàn)無限循環(huán)的代碼可能有以下情況: for( ; ; ) while(true) /while(1) 錯誤 do while(true) ;,while語句,一般形式: 執(zhí)行流程: 特點:先判斷表達式, 后執(zhí)行循環(huán)體,while(布爾表達式) 循環(huán)體語句塊; ,說明: 循環(huán)體有可能一次也不執(zhí)行(條件一開始就不成立) 循環(huán)體可為任意類型語句,但必須要有改變循環(huán)控制變量的語句,以確保有限次后正常結(jié)束 下列情況,退出while循環(huán) 條件表達式不成立(false) 循環(huán)體內(nèi)遇break,return,goto,舉例: 開發(fā)一個程序,要求使用While語句計算前N個自然數(shù)之和 。(ex3-7) int sum = 0; int i = 0; /循環(huán)初值 while (i <= id) /設置循環(huán)條件 sum += i; /循環(huán)體 i+; /循環(huán)變量增值 ,dowhile語句,一般形式: 執(zhí)行流程: 特點:先執(zhí)行循環(huán)體,后判斷表達式,do 循環(huán)體語句; while(表達式);,說明: 至少執(zhí)行一次循環(huán)體 dowhile可轉(zhuǎn)化成while結(jié)構(gòu),for語句,一般形式: expr1:初始化表達式,給循環(huán)變量賦初值 expr2:條件表達式,循環(huán)條件。 expr3:增量表達式,改變循環(huán)變量。 執(zhí)行流程:,for(expr1 ; expr2 ; expr3) 循環(huán)體語句塊;,說明: for語句中expr1, expr2 ,expr3 類型任意,都可省略,但分號“;”不可省 無限循環(huán): for(;) for語句可以轉(zhuǎn)換成while結(jié)構(gòu)。,expr1; while(expr2) 循環(huán)體語句; expr3; ,for語句的幾種特例(表達方式靈活多樣),1)可以省略初始化表達式, 但須保留分號, 但在for之前必須給循環(huán)變量賦值;,i=a; j=b; for (; i<=j; i+) sum=sum+i;,2)增量表達式亦可省略,但在循環(huán)體中必須有語句來修改循環(huán)變量,使能夠正常結(jié)束循環(huán);,for (sum=0,i=1;i<=100; ) /* 沒有增量表達式 */ sum=sum+i; i+; /*此處為增量表達式 */ ,4)若同時省略初始表達式,和增量表達式,則相當于while語句;,for ( ; i<=100; ) sum+=i; i+;,while (i<=100) sum+= i; i+; ,3)條件表達式一般不可省略,否則為無限循環(huán),循環(huán)體內(nèi)應設法結(jié)束循環(huán);,for ( i=0; ;i+) s+=ai; if (i=10) break;,6)初始表達式、循環(huán)表達式可以是逗號表達式,以使循環(huán)變量值在修改時可以對其它變量賦值;,for (sum=0, i=1; i<=100; i+, i+) 相當于: sum=0;for (i=1; i<=100; i=i+2),7)循環(huán)體可以為空;,5)三個表達式均省略 即for(;)語句則相當于while(true)語句,為無限循環(huán);,三種循環(huán)的比較,1. 使用場合:三種循環(huán)都可以用來處理同一問題,一般情況下可以互相代替。 1)for一般用于具有明確循環(huán)次數(shù)的情況; 2)while 和do-while常用在事先只知道循環(huán)控制條件,循環(huán)次數(shù)要在循環(huán)過程中才能確定的情況; 2.三個要素:循環(huán)的初始條件、循環(huán)條件、改變循環(huán)變量,只是指定的位置不同。 3.判斷循環(huán)條件的時機:while、for循環(huán)先判循環(huán)條件,后執(zhí)行;do-while循環(huán)先執(zhí)行,后判循環(huán)條件。,foreach語句,用于循環(huán)列舉一個集合的元素,對每個元素執(zhí)行一次相關的語句,基本格式: foreach(類型 變量名 in 集合類型表達式) 語句塊; foreach循環(huán)支持在容器類中迭代每個項目。,變量的類型要與集合的類型一致,數(shù) 組,集合類,數(shù)組的聲明與初始化: 數(shù)組:一種有序的、能夠存儲多個相同類型變量的集合,是一種指定了類型的數(shù)據(jù)結(jié)構(gòu),在內(nèi)存中連續(xù)存放數(shù)據(jù),以便訪問。 一維數(shù)組的聲明: type arrayName;,type: 數(shù)組存儲數(shù)據(jù)的數(shù)據(jù)類型; arrayName:數(shù)組名稱; 必須跟在類型后面,數(shù)組的初始化: 聲明數(shù)組的同時初始化: 通過new運算符創(chuàng)建數(shù)組并將數(shù)組初始化為默認值: int arr=new arr5; /初始化為零 初始化的值為用戶自定義的值: int arr=new arr51,2,3,4,5; int arr=new arr 1,2,3,4,5; int arr=1,2,3,4,5; /快捷方式,聲明數(shù)組時不對其初始化: string arr; arr=new string3 Sun , Mon ,Tue ; string arr=Sun , Mon ,Tue ; 舉例:使用foreach語句遍歷數(shù)組中的每個元素 (ex3-10),使用new運算符,循環(huán)的嵌套,四種循環(huán)可互相嵌套,層數(shù)不限 外層循環(huán)可包含兩個以上內(nèi)循環(huán),但不能相互交叉 嵌套循環(huán)的執(zhí)行流程,(1) while() while() . ,(2) do do while( ); . while( );,(3) while() do while( ); . ,(4) for( ; ;) do while(); while() . ,避免使用,舉例:1.打印九九乘法表 (ex3-8) 2.計算1!+2!+10!(ex3-9),跳轉(zhuǎn)語句,用于無條件地轉(zhuǎn)移控制,將控制轉(zhuǎn)到指定位置,這個位置就成為跳轉(zhuǎn)語句的目標。 break語句:只能跳出直接包含它的語句,通常用于跳出switch、while、foreach、for 等 continue語句:只能使直接包含它的循環(huán)語句開始一次新的循環(huán) 舉例:區(qū)別break語句與continue語句 ex3-11,return語句:將控制返回到使用return語句的方法成員的調(diào)用處,如果return后面沒有表達式,只能用于返回值為void的方法中。 go語句:將控制轉(zhuǎn)移到由標簽標記的語句 goto 標識符 goto case 常數(shù)表達式 /switch goto default /switch,異常處理語句,trycatch try.catch.finally,