




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第三章
流程控制C#.net程序設計1本章主要內容選擇語句(if語句和switch語句)循環語句(while,do-while,for,foreach循環語句)跳轉語句(break,continue,return,goto語句)異常處理(try-catch-Finally)和throw語句2條件選擇語句 選擇語句根據某個條件是否為true來將程序控制權移交給特定的語句流程。選擇語句分為if語句和switch語句兩種。3if語句
if語句是條件選擇語句,根據布爾表達式的值選擇要執行的語句。其常用的表達形式有:if(布爾表達式) {語句組(塊);}或 if(布爾表達式) {語句組(塊)1;} else {語句組(塊)2; }流程圖如下:條件選擇語句4if語句例:使用if-else條件選擇語句對一個浮點數x進行四舍五入,結果保存到一個整數i中,代碼如下:if(x–(int)x>=0.5)//x–(int)x>=0.5條件成立執行代碼{ i=(int)x+1;} Else//x–(int)x>=0.5條件不成立執行代碼{ i=(int)x; } 例:使用if條件選擇語句將i除j,結果保存y中(要判斷j不等于0),代碼如下:if(j!=0){ y=i/j;}條件選擇語句5if語句嵌套
if語句可以嵌套使用,每一條else與離它最近且沒有其它else與之對應的if相搭配。使用elseif方法處理多個條件形式如下:if(布爾表達式1)
{語句組1;}elseif(布爾表達式2)
{語句組2;}……elseif(布爾表達式n)
{語句組n;}else{語句組n+1;}條件選擇語句6例:檢查輸入字符是否是小寫字符、大寫字符或數字,或其他。usingSystem;publicclassIfTest{staticvoidMain(){Console.Write("Enteracharacter:");charc=(char)Console.Read();//讀一個字符
if(Char.IsUpper(c))//用于判斷c是否為大寫字符
Console.WriteLine("Characterisuppercase.");elseif(Char.IsLower(c))//用于判斷c是否為小寫字符
Console.WriteLine("Characterislowercase.");elseif(Char.IsDigit(c))//用于判斷c是否為數字
Console.WriteLine("Characterisanumber.");Else//除字母數字以外的字符
Console.WriteLine("Characterisnotalphanumeric.");}}7switch語句switch語句的一般格式為:switch(控制表達式){case常量表達式1:
{語句組1}break;case常量表達式2:
{語句組2}break;……case常量表達式n:
{語句組n}break;default:
{語句組n+1}break;}條件選擇語句8switch語句
switch語句的控制類型,即其中控制表達式的數據類型可以是整數如(byte、short、int、long等),char,string或枚舉類型,每個case標簽中的常量表達式(constant-expression)必須屬于或能隱式轉換成控制類型。 下面例子說明switch語句是如何實現程序的多路分支的。假設考查課的成績按優,良,中,及格和不及格分為五等分別用5、4、3、2、1來表示,但實際的考卷為百分制分別對應的分數為90-100、80-89、70-79、60-69、60分以下。下面的程序將考卷成績x轉換為考查課成績y。 SwitchSample項目代碼如下:條件選擇語句9inty;doublegrade=double.Parse(Console.ReadLine());//控制臺輸入分數intx=(int)(grade/10);//除,去掉小數點取整。switch(x){case10: //100/10=10case9:y=5;break; //[99-90]/10=9 case8:y=4;break; //[80-89]/10=8case7:y=3;break; //[70-79]/10=7case6:y=2;break; //[60-69]/10=6default:y=1;break; //其余}Console.WriteLine("百分制{0},轉換為{1}",grade,y);
switch語句可以包括任意數目的case實例,但是任何兩個case語句都不能具有相同的值。在每一個case塊(無論case語句還是default語句)的后面,都必須有一個跳轉語句(如break)。但有一個例外是當case語句中沒有代碼時。如上例:case10:。如果沒有任何case表達式與開關值匹配,則控制傳遞給跟在可選default標簽后的語句。如果沒有default標簽,則控制傳遞到switch以外。10循環語句循環語句實現一個程序模塊的重復執行。C#提供了四種循環語句:while語句do-while語句for語句foreach語句它們分別適用于不同的情形。11while循環語句while語句循環執行一個語句或語句塊,直到指定的表達式計算為false。while語句的流程圖如下:while語句的格式為: while(布爾表達式){循環體語句組 }
使用break語句結束while循環,執行后續語句。使用continue語句停止循環體的執行,重新回到while循環表達式判斷,開始下一次迭代但不退出循環。循環語句12例:使用While循環語句,在給定數組中查找一個指定的值,遇到不等的正數在屏幕顯示,找到指定的值就返回數組下標并在屏幕顯示找到。未找到返回-1。下面是WhilSample項目的代碼:
staticintFind(intvalue,int[]array){inti=-1;while(++i<array.Length)//array.Length是數組長度
{if(array[i]==value){Console.WriteLine("在數組第{0}個元素找到:{1}",i,value);break;//找到,結束while循環
}if(array[i]<=0){continue;//數組元素為負數時,不執行下句回到while循環表達式判斷
}Console.WriteLine(array[i]);}if(i==array.Length){//未找到時i=array.Lengthi=-1;Console.WriteLine("在數組未找到:{0}",value);}returni;}13do-while循環語句do-while循環語句,語句格式如下:do{循環體}while(布爾表達式);do語句重復執行括在{}里的一個語句或語句組,直到while指定的表達式計算為false。同樣允許使用break語句結束while循環,和使用continue語句停止循環體的執行開始下一次迭代但不退出循環。do-while語句與while語句不同的是:內嵌循環體語句執行至少一次,例如intx=0;//如果x=6,輸出6,do{Console.Write(x+”,”);x++;}while(x<5);//輸出0,1,2,3,4,循環語句14for循環語句for語句的格式為:
for(表達式1;布爾表達式2;表達式3){循環體;} for語句的流程控制圖示:for語句相當下面While語句:表達式1;while(布爾表達式2){
循環體;表達式3; }循環語句15計算素數Windows應用程序 例:創建一個Windows應用程序計算最小整數與最大整數之間的素數,程序界面如下圖所示,要求:在最小整數和整數文本框中輸入整數區間的最與最大值,按“計算并顯示素數”按鈕,將在底部文本框顯示所有所在整數區間的素數及素數個數,素數用“,”隔開。程序界面如下:循環語句16控件名稱屬性屬性值Label(標簽控件)Text“最小整數”Label(標簽控件)Text“最大整數”Lable(標簽控件)Text“計算最小整數與最大整數之間(含這兩數)的素數”TextBox(文本框控件)Name“txtMin”TextBox(文本框控件)Name“txtMan”TextBox(文本框控件)Name,ScrollBarsMultiLine“txtResult”,”Vertical”“true”Button(按鈕控件)name,Text“btnCompute”,"計算并顯示素數"Form1窗體各個控件的屬性如下表:在Form1雙擊“計算并顯示素數”按鈕,添加按鈕處理代碼如下:
privatevoidbtnCompute_Click(objectsender,EventArgse){ intintMin=int.Parse(txtMin.Text); intintMax=int.Parse(txtMax.Text); if(intMin>intMax) { txtMin.Text=txtMax.Text; txtMax.Text=intMin.ToString(); } txtResult.Text=GetPrime(intMin,intMax);}17privatestringGetPrime(intintMin,intintMax){//程序主要代碼
intcount=0;StringBuildersbResult=newStringBuilder();;for(inti=intMin;i<=intMax;i++)//對區間內每一個整數循環判斷是否是素數
{ boolblnPrime=true; for(intj=2;j<i/2+1;j++)//判斷i是否被2一直到i/2+1整除
{ if(i%j==0)//出現整除說明不是素數
{ blnPrime=false; break; } } if(blnPrime)//是素數
{ count++; sbResult.AppendFormat("{0},",i); }}sbResult.AppendFormat("共{0}個素數。",count);returnsbResult.ToString();}18foreach語句foreach語句為數組或對象集合中的每個元素重復執行一個循環體。foreach語句用于循環訪問集合以獲取所需信息,但不應用于更改集合內容,循環變量是一個只讀型局部變量,如果試圖改變它的值將引發編譯時錯誤,如需要更改集合內容,使用其他循環語句。foreach循環語句的格式為:foreach(變量類型循環變量vin集合表達式e) { 循環體 }其中集合表達式e是,可枚舉的集合,指實現System.Collections.IEnumerable接口的一個集合。如數組,ArrayList類等,foreach循環收集可枚舉的集合中的各元素。循環語句19對數組使用foreach的ForeachSample項目的部分代碼如下:int[]numbers={4,5,6,1,2,3,-2,-1,0};foreach(intiinnumbers){System.Console.Write("{0}",i);}//輸出“56123-2-10”int[,]numbers2D=newint[3,2]{{9,99},{3,33},{5,55}};foreach(intiinnumbers2D){System.Console.Write("{0}",i);}//輸出“999333555”20跳轉語句跳轉語句有以下幾種:break語句用于終止最內層的while、do-while、for和switch等語句的執行。當程序遇到這一語句后,跳出所在循環語句或switch語句,執行后面的語句。continue語句,當程序循環遇到這一語句后,停止當前進行的這次循環并把控制返回到當前循環的的布爾表達式判斷是否繼續循環,以便于進行下一次循環。return語句終止方法的執行并將控制返回給調用該方法的語句。不能在finally塊中使用return語句。它還可以返回一個可選值,如。return表達式。如果方法為void類型,則可以省略return語句。goto語句將程序控制直接傳遞給標記語句。 語法格式為:goto標號;gotocase表達式;gotodefault; goto語句可用來跳出循環和switch語句。它無條件地轉移程序的執行控制,其轉移目的地是一標號,因此要求標號與goto語句處在同一個方法中。goto語句例子如下:21
switch(n){case1:cost+=25;break;case2:cost+=25;gotocase1;//轉到case1語句
}for(inti=0;i<x;i++){for(intj=0;j<y;j++){if(array[i,j].Equals(myNumber)){gotoFound;//轉到標號Found}}}Console.WriteLine("Thenumber{0}wasnotfound.",myNumber);Found:Console.WriteLine("Thenumber{0}isfound.",myNumber);}22異常處理異常是程序運行程序時遇到的任何錯誤情況或意外行為。例如數據類型從字符串轉換整型
intintA=int.Parse(strA);如果strA不是整數的字符串如strA=”A”則有引發FormatException異常。在語句intResult=(int)(100/intA);如果intA是0,則有引發DivideByZeroException零除數異常。異常處理使用try、catch和finally關鍵字來嘗試可能未成功的操作,處理可能發生的異常,以及在事后清理資源。代碼如下:
try{intintResult=(int)(100/intA);}catch(DivideByZeroExceptionerr){Console.WriteLine("零除數異常");}23異常處理語句try-catch語句將可能引發異常的代碼節放在try塊中,而將處理異常的代碼放在catch塊中。catch塊是一系列以關鍵字catch開頭的語句,語句后跟異常類型和要執行的操作。如果能確定在try語句塊中可能發生的異常類型,那么catch語句可以捕捉相應的異常類型;如果事先并不知道try語句塊中會引起哪一種異常,則在catch語句中可以忽略異常的類型。如果是多個異常,可以用多個catch語句塊,格式如下:try{…} //try語句塊catch(類型1參數1){ …}//針對類型1的異常處理catch(類型2參數2){…}//針對類型2的異常處理…catch(類型n參數n){…}//針對類型n的異常處理異常處理24staticvoidCopyArray(){int[]array1={0,0};int[]array2={0,0};try{Array.Copy(array1,array2,-1);//數組array1拷貝到array2,-1是復制長度-錯
Console.WriteLine("本語句因上句出錯而無發執行");}catch(ArgumentOutOfRangeExceptione){Console.WriteLine("Error:{0}",e);}/*finally{Console.WriteLine("Thisstatementisalwaysexecuted.");}*/}下面是使用Try-Catch的CopyArray()方法(TryCatch項目):方法執行結果將顯示“Error:System.ArgumentOutOfRangeException:要求非負數。”25使用Finally塊異常發生時,執行將終止,并且控制交給最近的異常處理程序。這通常意味著不執行希望總是調用的代碼行。有些資源清理(如關閉文件)必須總是執行,即使有異常發生。為實現這一點,可以使用Finally塊。Finally塊總是執行,不論是否有異常發生。格式有兩種:try{語句塊}-finally{語句塊}和try{語句塊}-catch(s){語句塊}-finally{語句塊}。如上例:Finally塊注釋關閉了,去掉注釋就是try{}-catch{}-finally{},如果去掉catch{}塊就是try{}finally{}。異常處理26throw語句可以以兩種不同的方式引發異常:C#語句和表達式執行過程中激發了某個異常的條件使得操作無法正常結束從而引發異常,如整數除法操作分母為零時將拋出一個System.DivideByZeroException異常等。throw語句無條件主動拋出異常。
throw語句用于在程序執行期間主動發出異常的信號。
throw語句格式:throw;或throwexpression;其中expression是System.Exception類或派生類的對象。throw語句例子:classMyException:System.Exception{…}thrownewMyException();if(s==null){thrownewArgumentNullException();}異常處理27下面是包含了各種創建和引發異常及異常處理的TryCatch項目的例子的代碼:classProgram{staticvoidMain(string[]args){try{invertStr("adc");//FormatExceptioninvertStr("0");//DivideByZeroExceptioninvertStr("45");//正常
invertStr("-1");//主動拋出一個異常
invertStr("3");//因前句異常,該句無法執行
}catch(Exceptionerr){//捕捉invertStr()方法未處理或重新拋出的異
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣播影視編導專業多媒體應用實習總結范文
- 部編版2025三年級語文上冊知識梳理復習計劃
- 康復器材配套醫用防撞扶手安裝工藝流程
- 部編版語文三年級下冊聽力提升復習計劃
- 高一第二學期班主任班級團建活動計劃
- 以形助數:面積法在小學數學教學中的多維應用與實踐探索
- 以太極之柔筑后勤之健:太極拳對聊城大學后勤集團員工身心健康的影響探究
- 以墨為韻:初中階段中國畫教學的價值挖掘與實踐創新
- 2025年部編人教版初一語文上冊教學資源開發計劃
- 2025語文高考漫畫《學前班》審題范文
- LED照明有關國家標準及對應國際標準
- 實驗訓練2數據查詢操作
- 物理-貴州省畢節市2024年畢節市高二年級下學期7月期末聯考試題和答案
- 文創產品定制合同范本
- 科普版四年級上冊英語全冊同步練習
- 2024年巴西血液透析膜市場機會及渠道調研報告
- 理工英語4-02-國開機考參考資料
- 小升初真題卷(七)(江蘇卷)(試題)- 2023-2024學年六年級下冊數學蘇教版
- 《中國噬血細胞綜合征診斷與治療指南(2022年版)》解讀
- 生活飲用水管道分質直飲水衛生規范
- 人教版六年級數學上冊《全冊完整》課件
評論
0/150
提交評論