版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
第三章
流程控制C#.net程序設計1本章主要內(nèi)容選擇語句(if語句和switch語句)循環(huán)語句(while,do-while,for,foreach循環(huán)語句)跳轉(zhuǎn)語句(break,continue,return,goto語句)異常處理(try-catch-Finally)和throw語句2條件選擇語句 選擇語句根據(jù)某個條件是否為true來將程序控制權移交給特定的語句流程。選擇語句分為if語句和switch語句兩種。3if語句
if語句是條件選擇語句,根據(jù)布爾表達式的值選擇要執(zhí)行的語句。其常用的表達形式有:if(布爾表達式) {語句組(塊);}或 if(布爾表達式) {語句組(塊)1;} else {語句組(塊)2; }流程圖如下:條件選擇語句4if語句例:使用if-else條件選擇語句對一個浮點數(shù)x進行四舍五入,結(jié)果保存到一個整數(shù)i中,代碼如下:if(x–(int)x>=0.5)//x–(int)x>=0.5條件成立執(zhí)行代碼{ i=(int)x+1;} Else//x–(int)x>=0.5條件不成立執(zhí)行代碼{ i=(int)x; } 例:使用if條件選擇語句將i除j,結(jié)果保存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例:檢查輸入字符是否是小寫字符、大寫字符或數(shù)字,或其他。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是否為數(shù)字
Console.WriteLine("Characterisanumber.");Else//除字母數(shù)字以外的字符
Console.WriteLine("Characterisnotalphanumeric.");}}7switch語句switch語句的一般格式為:switch(控制表達式){case常量表達式1:
{語句組1}break;case常量表達式2:
{語句組2}break;……case常量表達式n:
{語句組n}break;default:
{語句組n+1}break;}條件選擇語句8switch語句
switch語句的控制類型,即其中控制表達式的數(shù)據(jù)類型可以是整數(shù)如(byte、short、int、long等),char,string或枚舉類型,每個case標簽中的常量表達式(constant-expression)必須屬于或能隱式轉(zhuǎn)換成控制類型。 下面例子說明switch語句是如何實現(xiàn)程序的多路分支的。假設考查課的成績按優(yōu),良,中,及格和不及格分為五等分別用5、4、3、2、1來表示,但實際的考卷為百分制分別對應的分數(shù)為90-100、80-89、70-79、60-69、60分以下。下面的程序?qū)⒖季沓煽儀轉(zhuǎn)換為考查課成績y。 SwitchSample項目代碼如下:條件選擇語句9inty;doublegrade=double.Parse(Console.ReadLine());//控制臺輸入分數(shù)intx=(int)(grade/10);//除,去掉小數(shù)點取整。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},轉(zhuǎn)換為{1}",grade,y);
switch語句可以包括任意數(shù)目的case實例,但是任何兩個case語句都不能具有相同的值。在每一個case塊(無論case語句還是default語句)的后面,都必須有一個跳轉(zhuǎn)語句(如break)。但有一個例外是當case語句中沒有代碼時。如上例:case10:。如果沒有任何case表達式與開關值匹配,則控制傳遞給跟在可選default標簽后的語句。如果沒有default標簽,則控制傳遞到switch以外。10循環(huán)語句循環(huán)語句實現(xiàn)一個程序模塊的重復執(zhí)行。C#提供了四種循環(huán)語句:while語句do-while語句for語句foreach語句它們分別適用于不同的情形。11while循環(huán)語句while語句循環(huán)執(zhí)行一個語句或語句塊,直到指定的表達式計算為false。while語句的流程圖如下:while語句的格式為: while(布爾表達式){循環(huán)體語句組 }
使用break語句結(jié)束while循環(huán),執(zhí)行后續(xù)語句。使用continue語句停止循環(huán)體的執(zhí)行,重新回到while循環(huán)表達式判斷,開始下一次迭代但不退出循環(huán)。循環(huán)語句12例:使用While循環(huán)語句,在給定數(shù)組中查找一個指定的值,遇到不等的正數(shù)在屏幕顯示,找到指定的值就返回數(shù)組下標并在屏幕顯示找到。未找到返回-1。下面是WhilSample項目的代碼:
staticintFind(intvalue,int[]array){inti=-1;while(++i<array.Length)//array.Length是數(shù)組長度
{if(array[i]==value){Console.WriteLine("在數(shù)組第{0}個元素找到:{1}",i,value);break;//找到,結(jié)束while循環(huán)
}if(array[i]<=0){continue;//數(shù)組元素為負數(shù)時,不執(zhí)行下句回到while循環(huán)表達式判斷
}Console.WriteLine(array[i]);}if(i==array.Length){//未找到時i=array.Lengthi=-1;Console.WriteLine("在數(shù)組未找到:{0}",value);}returni;}13do-while循環(huán)語句do-while循環(huán)語句,語句格式如下:do{循環(huán)體}while(布爾表達式);do語句重復執(zhí)行括在{}里的一個語句或語句組,直到while指定的表達式計算為false。同樣允許使用break語句結(jié)束while循環(huán),和使用continue語句停止循環(huán)體的執(zhí)行開始下一次迭代但不退出循環(huán)。do-while語句與while語句不同的是:內(nèi)嵌循環(huán)體語句執(zhí)行至少一次,例如intx=0;//如果x=6,輸出6,do{Console.Write(x+”,”);x++;}while(x<5);//輸出0,1,2,3,4,循環(huán)語句14for循環(huán)語句for語句的格式為:
for(表達式1;布爾表達式2;表達式3){循環(huán)體;} for語句的流程控制圖示:for語句相當下面While語句:表達式1;while(布爾表達式2){
循環(huán)體;表達式3; }循環(huán)語句15計算素數(shù)Windows應用程序 例:創(chuàng)建一個Windows應用程序計算最小整數(shù)與最大整數(shù)之間的素數(shù),程序界面如下圖所示,要求:在最小整數(shù)和整數(shù)文本框中輸入整數(shù)區(qū)間的最與最大值,按“計算并顯示素數(shù)”按鈕,將在底部文本框顯示所有所在整數(shù)區(qū)間的素數(shù)及素數(shù)個數(shù),素數(shù)用“,”隔開。程序界面如下:循環(huán)語句16控件名稱屬性屬性值Label(標簽控件)Text“最小整數(shù)”Label(標簽控件)Text“最大整數(shù)”Lable(標簽控件)Text“計算最小整數(shù)與最大整數(shù)之間(含這兩數(shù))的素數(shù)”TextBox(文本框控件)Name“txtMin”TextBox(文本框控件)Name“txtMan”TextBox(文本框控件)Name,ScrollBarsMultiLine“txtResult”,”Vertical”“true”Button(按鈕控件)name,Text“btnCompute”,"計算并顯示素數(shù)"Form1窗體各個控件的屬性如下表:在Form1雙擊“計算并顯示素數(shù)”按鈕,添加按鈕處理代碼如下:
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++)//對區(qū)間內(nèi)每一個整數(shù)循環(huán)判斷是否是素數(shù)
{ boolblnPrime=true; for(intj=2;j<i/2+1;j++)//判斷i是否被2一直到i/2+1整除
{ if(i%j==0)//出現(xiàn)整除說明不是素數(shù)
{ blnPrime=false; break; } } if(blnPrime)//是素數(shù)
{ count++; sbResult.AppendFormat("{0},",i); }}sbResult.AppendFormat("共{0}個素數(shù)。",count);returnsbResult.ToString();}18foreach語句foreach語句為數(shù)組或?qū)ο蠹现械拿總€元素重復執(zhí)行一個循環(huán)體。foreach語句用于循環(huán)訪問集合以獲取所需信息,但不應用于更改集合內(nèi)容,循環(huán)變量是一個只讀型局部變量,如果試圖改變它的值將引發(fā)編譯時錯誤,如需要更改集合內(nèi)容,使用其他循環(huán)語句。foreach循環(huán)語句的格式為:foreach(變量類型循環(huán)變量vin集合表達式e) { 循環(huán)體 }其中集合表達式e是,可枚舉的集合,指實現(xiàn)System.Collections.IEnumerable接口的一個集合。如數(shù)組,ArrayList類等,foreach循環(huán)收集可枚舉的集合中的各元素。循環(huán)語句19對數(shù)組使用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跳轉(zhuǎn)語句跳轉(zhuǎn)語句有以下幾種:break語句用于終止最內(nèi)層的while、do-while、for和switch等語句的執(zhí)行。當程序遇到這一語句后,跳出所在循環(huán)語句或switch語句,執(zhí)行后面的語句。continue語句,當程序循環(huán)遇到這一語句后,停止當前進行的這次循環(huán)并把控制返回到當前循環(huán)的的布爾表達式判斷是否繼續(xù)循環(huán),以便于進行下一次循環(huán)。return語句終止方法的執(zhí)行并將控制返回給調(diào)用該方法的語句。不能在finally塊中使用return語句。它還可以返回一個可選值,如。return表達式。如果方法為void類型,則可以省略return語句。goto語句將程序控制直接傳遞給標記語句。 語法格式為:goto標號;gotocase表達式;gotodefault; goto語句可用來跳出循環(huán)和switch語句。它無條件地轉(zhuǎn)移程序的執(zhí)行控制,其轉(zhuǎn)移目的地是一標號,因此要求標號與goto語句處在同一個方法中。goto語句例子如下:21
switch(n){case1:cost+=25;break;case2:cost+=25;gotocase1;//轉(zhuǎn)到case1語句
}for(inti=0;i<x;i++){for(intj=0;j<y;j++){if(array[i,j].Equals(myNumber)){gotoFound;//轉(zhuǎn)到標號Found}}}Console.WriteLine("Thenumber{0}wasnotfound.",myNumber);Found:Console.WriteLine("Thenumber{0}isfound.",myNumber);}22異常處理異常是程序運行程序時遇到的任何錯誤情況或意外行為。例如數(shù)據(jù)類型從字符串轉(zhuǎn)換整型
intintA=int.Parse(strA);如果strA不是整數(shù)的字符串如strA=”A”則有引發(fā)FormatException異常。在語句intResult=(int)(100/intA);如果intA是0,則有引發(fā)DivideByZeroException零除數(shù)異常。異常處理使用try、catch和finally關鍵字來嘗試可能未成功的操作,處理可能發(fā)生的異常,以及在事后清理資源。代碼如下:
try{intintResult=(int)(100/intA);}catch(DivideByZeroExceptionerr){Console.WriteLine("零除數(shù)異常");}23異常處理語句try-catch語句將可能引發(fā)異常的代碼節(jié)放在try塊中,而將處理異常的代碼放在catch塊中。catch塊是一系列以關鍵字catch開頭的語句,語句后跟異常類型和要執(zhí)行的操作。如果能確定在try語句塊中可能發(fā)生的異常類型,那么catch語句可以捕捉相應的異常類型;如果事先并不知道try語句塊中會引起哪一種異常,則在catch語句中可以忽略異常的類型。如果是多個異常,可以用多個catch語句塊,格式如下:try{…} //try語句塊catch(類型1參數(shù)1){ …}//針對類型1的異常處理catch(類型2參數(shù)2){…}//針對類型2的異常處理…catch(類型n參數(shù)n){…}//針對類型n的異常處理異常處理24staticvoidCopyArray(){int[]array1={0,0};int[]array2={0,0};try{Array.Copy(array1,array2,-1);//數(shù)組array1拷貝到array2,-1是復制長度-錯
Console.WriteLine("本語句因上句出錯而無發(fā)執(zhí)行");}catch(ArgumentOutOfRangeExceptione){Console.WriteLine("Error:{0}",e);}/*finally{Console.WriteLine("Thisstatementisalwaysexecuted.");}*/}下面是使用Try-Catch的CopyArray()方法(TryCatch項目):方法執(zhí)行結(jié)果將顯示“Error:System.ArgumentOutOfRangeException:要求非負數(shù)。”25使用Finally塊異常發(fā)生時,執(zhí)行將終止,并且控制交給最近的異常處理程序。這通常意味著不執(zhí)行希望總是調(diào)用的代碼行。有些資源清理(如關閉文件)必須總是執(zhí)行,即使有異常發(fā)生。為實現(xiàn)這一點,可以使用Finally塊。Finally塊總是執(zhí)行,不論是否有異常發(fā)生。格式有兩種:try{語句塊}-finally{語句塊}和try{語句塊}-catch(s){語句塊}-finally{語句塊}。如上例:Finally塊注釋關閉了,去掉注釋就是try{}-catch{}-finally{},如果去掉catch{}塊就是try{}finally{}。異常處理26throw語句可以以兩種不同的方式引發(fā)異常:C#語句和表達式執(zhí)行過程中激發(fā)了某個異常的條件使得操作無法正常結(jié)束從而引發(fā)異常,如整數(shù)除法操作分母為零時將拋出一個System.DivideByZeroException異常等。throw語句無條件主動拋出異常。
throw語句用于在程序執(zhí)行期間主動發(fā)出異常的信號。
throw語句格式:throw;或throwexpression;其中expression是System.Exception類或派生類的對象。throw語句例子:classMyException:System.Exception{…}thrownewMyException();if(s==null){thrownewArgumentNullException();}異常處理27下面是包含了各種創(chuàng)建和引發(fā)異常及異常處理的TryCatch項目的例子的代碼:classProgram{staticvoidMain(string[]args){try{invertStr("adc");//FormatExceptioninvertStr("0");//DivideByZeroExceptioninvertStr("45");//正常
invertStr("-1");//主動拋出一個異常
invertStr("3");//因前句異常,該句無法執(zhí)行
}catch(Exceptionerr){//捕捉invertStr()方法未處理或重新拋出的異
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公安知識教學課件
- 職業(yè)性黃斑裂孔的手術修復與預后分析
- 公安內(nèi)務條例課件
- 邵陽2025年湖南邵陽市洞口縣衛(wèi)生健康局下屬事業(yè)單位招聘48人筆試歷年參考題庫附帶答案詳解
- 菏澤2025年山東菏澤東明縣基層醫(yī)療衛(wèi)生機構(gòu)招聘專業(yè)技術人員46人筆試歷年參考題庫附帶答案詳解
- 玉溪云南玉溪易門縣財政局招聘城鎮(zhèn)公益性崗位工作人員筆試歷年參考題庫附帶答案詳解
- 淮安2025年恩來干部學院招聘事業(yè)單位工作人員2人筆試歷年參考題庫附帶答案詳解
- 杭州浙江杭州西湖風景名勝區(qū)疾病預防控制中心招聘編外聘用人員筆試歷年參考題庫附帶答案詳解
- 寧德2025年福建寧德市壽寧縣教育局緊缺急需專項招聘筆試歷年參考題庫附帶答案詳解
- 合肥2025年安徽合肥海關所屬事業(yè)單位招聘事業(yè)編制工作人員筆試歷年參考題庫附帶答案詳解
- 借用妹妹名字買房協(xié)議書
- 三萜合酶的挖掘鑒定與三萜化合物細胞工廠構(gòu)建研究
- 沖突解決之道醫(yī)患溝通實踐案例分析
- SJG01-2010地基基礎勘察設計規(guī)范
- 水電與新能源典型事故案例
- 2024屆新高考語文高中古詩文必背72篇 【原文+注音+翻譯】
- DZ∕T 0217-2020 石油天然氣儲量估算規(guī)范
- DL-T439-2018火力發(fā)電廠高溫緊固件技術導則
- 2024年首屆全國“紅旗杯”班組長大賽考試題庫1400題(含答案)
- 網(wǎng)站對歷史發(fā)布信息進行備份和查閱的相關管理制度及執(zhí)行情況說明(模板)
- 工資新老方案對比分析報告
評論
0/150
提交評論