




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第5章流程控制語句與函數(shù)5.1控制程序流程5.2使用選擇語句5.3使用循環(huán)語句5.4使用goto語句5.5嵌套使用流程控制語句5.6函數(shù)5.7常用內(nèi)部函數(shù)5.8小結(jié)5.1控制程序流程控制程序流程的方法很多,主要有如下3種。選擇語句:如同考試中的單選題目,選擇執(zhí)行了某條語句,另一條就不會(huì)再執(zhí)行。循環(huán)語句:在需要將一個(gè)表達(dá)式進(jìn)行多次重復(fù)運(yùn)算時(shí),可以使用循環(huán)語句,指定其循環(huán)次數(shù)或者界定其退出循環(huán)的條件。goto語句:即標(biāo)記語句,使程序自動(dòng)跳到標(biāo)記語句處執(zhí)行,標(biāo)記語句執(zhí)行完畢又直接回到調(diào)用標(biāo)記語句處。需要注意的是,在程序中最好不使用goto語句,因?yàn)樵撜Z句會(huì)使得程序代碼可讀性很差。5.2使用選擇語句5.2.1if語句用if語句實(shí)現(xiàn)單分支選擇結(jié)構(gòu)
if(表達(dá)式)語句;語句中的表達(dá)式通常用于表示條件,應(yīng)為關(guān)系表達(dá)式或邏輯表達(dá)式。語句只是一條語句,如果在條件滿足時(shí)需要執(zhí)行多條語句,應(yīng)使用花括號({})括起來,使之成為語句塊?!?表達(dá)式)”中的括號不能省略。5.2.1if語句示例:staticvoidMain(string[]args){doublescore;score=Convert.ToDouble(Console.ReadLine());if(score>=60)Console.WriteLine("恭喜你,通過了這次考試!");Console.Read();}5.2.1if語句用if語句實(shí)現(xiàn)雙分支選擇結(jié)構(gòu)
if(表達(dá)式)
語句1;else
語句2;5.2.1if語句用if語句實(shí)現(xiàn)多分支選擇結(jié)構(gòu)if(表達(dá)式1)語句1;elseif(表達(dá)式2)語句2;elseif(表達(dá)式3)語句3;……else語句n;5.2.2switch語句在C#語言中,除了可以使用if語句實(shí)現(xiàn)多分支外,也可以使用switch語句。switch(表達(dá)式){case常量表達(dá)式1:
語句1;break;case常量表達(dá)式2:
語句2;break;……case常量表達(dá)式n:
語句n;break;default:
語句n+1;break;}5.2.2switch語句switch表達(dá)式的類型為sbyte、byte、short、ushort、int、uint、long、ulong、char、string、枚舉或用戶自定義類型。每個(gè)case分支中的常量表達(dá)式必須能隱式轉(zhuǎn)換為switch表達(dá)式的類型,且常量表達(dá)式的值不能相同,從而保證分支選擇的唯一性。如果某個(gè)分支有多條語句,可以用花括號括起來,也可以不加花括號。default分支可有可無,但是每個(gè)switch語句最多只能有一個(gè)default分支。當(dāng)default語句缺省時(shí),如果switch后面的表達(dá)式值與任意常量表達(dá)式值不相等,將不執(zhí)行任何語句,直接退出switch語句。各分支語句中的break不可省略,否則將會(huì)出現(xiàn)錯(cuò)誤。使用switch語句時(shí)一定要注意,case后面必須是常量表達(dá)式,以冒號結(jié)束而不是分號,且case語句后一定要跟break語句,這一點(diǎn)跟Java和C++不同。5.2.2switch語句示例:staticvoidMain(string[]args){doublescore;charclass1;inti;Console.WriteLine("請輸入你的成績:");score=Convert.ToDouble(Console.ReadLine());i=(int)score/10;switch(i){case10:case9:class1='A';break;case8:class1='B';break;case7:class1='C';break;case6:class1='D';break;default:class1='E';break;}Console.WriteLine("你的成績等級為:{0}",class1);}5.2.3switch語句的控制類型switch語句的控制可以按case語句的排列先后順序進(jìn)行,也可以通過跳轉(zhuǎn)語句來實(shí)現(xiàn)。示例:實(shí)現(xiàn)switch語句的跳轉(zhuǎn)語句。
staticvoidMain(string[]args){intdays=0;intmonth=3;switch(month){case1:case3:case5:case7:case8:case10:case12:days=31;break;case2:days=28;break;case4:case6:case9:case11:days=30;break;default:days=0;break;}Console.WriteLine("thismonthhas{0}days",days);}5.3使用循環(huán)語句5.3.1while語句while語句是用來實(shí)現(xiàn)循環(huán)的語句,該類循環(huán)先測試循環(huán)條件再執(zhí)行循環(huán)體,按照不同條件執(zhí)行循環(huán)體部分零次或多次。它的語法形式如下。while(表達(dá)式)循環(huán)體部分;5.3.1while語句注意:循環(huán)體如果包含一條以上的語句,應(yīng)以花括號括起來作為復(fù)合語句。在循環(huán)體中,通常應(yīng)包含改變循環(huán)條件表達(dá)式值的語句,否則便會(huì)造成無限循環(huán)。由于先判斷條件,可能出現(xiàn)第一次測試條件時(shí),表達(dá)式的值就為false。此種情況下循環(huán)體將一次也不執(zhí)行,又稱“允許0次循環(huán)”。5.3.1while語句示例:
classTestWhile{staticvoidMain(string[]args){intnumber=1,sum=0;while(number<=10){sum+=number;number++;}Console.WriteLine("thesumis{0}",sum);Console.Read();}}執(zhí)行上述代碼,運(yùn)行結(jié)果為:thesumis55。5.3.2do語句do循環(huán)語句實(shí)現(xiàn)的是直到型循環(huán),該類循環(huán)先執(zhí)行循環(huán)體再測試循環(huán)條件。do循環(huán)體語句while(表達(dá)式);5.3.2do語句示例:
classTestWhile{staticvoidMain(string[]args){intnumber=1,sum=0;do{sum+=number;number++;}while(number<=10);Console.WriteLine("thesumis{0}",sum);Console.Read();}}執(zhí)行上述代碼,運(yùn)行結(jié)果為:thesumis55。5.3.3for語句for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語句;5.3.3for語句表達(dá)式1、2、3都可以省略,分號不能省略。如果表達(dá)式1、2、3都省略,則將無終止地執(zhí)行循環(huán)體。表達(dá)式2是循環(huán)控制條件,如果省略,循環(huán)將無終止地進(jìn)行下去。表達(dá)式1一般用于為循環(huán)控制條件賦初值,也可以是與循環(huán)變量無關(guān)的其他表達(dá)式。如果表達(dá)式1省略或者是與循環(huán)條件無關(guān)的其他表達(dá)式,則應(yīng)該在for語句之前給循環(huán)控制條件賦初值。表達(dá)式3一般用于改變循環(huán)控制條件的值。如果表達(dá)式3省略或者是其他與循環(huán)條件無關(guān)的表達(dá)式,則應(yīng)該在循環(huán)體中另有語句改變循環(huán)條件,以保證循環(huán)能正常結(jié)束。5.3.4foreach語句foreach(類型標(biāo)識符in表達(dá)式)嵌入語句;示例:staticvoidMain(string[]args){int[]list={10,20,30,40,50,60};foreach(intminlist)Console.Write("{0,-5}",m);Console.Read();}5.3.5break語句和continue語句break語句用于跳出包含它的switch、while、do、for、foreach語句,如果break不是在switch、while、do、for、foreach語句塊中,將發(fā)生編譯錯(cuò)誤。當(dāng)switch、while、do、for、foreach語句相互嵌套時(shí),break語句只是跳出直接包含它的語句塊。5.3.5break語句和continue語句
classTestBreak{staticvoidMain(string[]args){for(inti=0;i<10;i++){Console.Write("enteraword:");strings=Console.ReadLine();if(s=="end")break;Console.WriteLine("youentered:{0}",s);}Console.Read();}}5.3.5break語句和continue語句continue語句類似于break語句,也必須用于while、dowhile、for、foreach語句,它只從循環(huán)的當(dāng)前迭代中退出,然后在循環(huán)的下一次迭代開始重新執(zhí)行,而不是退出循環(huán)。需要注意如下事項(xiàng)。continue語句的目標(biāo)地址為直接包含它的while、dowhile、for或者foreach語句的嵌套語句結(jié)尾。假如continue語句不能被while、dowhile、for或者foreach語句包含,將發(fā)生編譯錯(cuò)誤。當(dāng)有while、dowhile、for或者foreach語句相互嵌套時(shí),continue語句只適用于直接包含它的語句塊。如果要在多個(gè)嵌套語句中完成轉(zhuǎn)移,必須使用goto語句。5.3.5break語句和continue語句示例staticvoidMain(string[]args){for(inti=0;i<10;i++){Console.Write("enteraword:");strings=Console.ReadLine();if(s=="end")continue;Console.WriteLine("youentered:{0}",s);}Console.Read();}5.4使用goto語句
goto語句是除選擇語句、循環(huán)語句之外的控制程序流程的語句,常用于將程序流程轉(zhuǎn)移出嵌套范圍。goto語句的常見用法為gotolable語句。其中,lable為一個(gè)標(biāo)簽,其語法形式為:標(biāo)簽1:5.4使用goto語句示例:staticvoidMain(string[]args){intn=1,sum=0;lable:if(n<=5){sum=sum+n;n++;gotolable;}Console.WriteLine("sum={0}",sum);Console.Read();}5.5嵌套使用流程控制語句選擇結(jié)構(gòu)的嵌套:if(表達(dá)式1)if(表達(dá)式2)
語句1else
語句2elseif(表達(dá)式3)
語句3else
語句45.5嵌套使用流程控制語句循環(huán)結(jié)構(gòu)的嵌套示例:staticvoidMain(string[]args){inti=1,a=0;for(;i<=5;i++){do{i++;a++;}while(i<3);i++;}Console.WriteLine("a的值為{0},i的值為{1}",a,i);Console.ReadLine();}5.6函數(shù)5.6.1函數(shù)的定義與使用函數(shù)在使用之前必須先定義,函數(shù)定義的形式如下。函數(shù)修飾符數(shù)據(jù)類型標(biāo)識符函數(shù)名(形式參數(shù)說明列表){
變量、數(shù)組的定義語句;
其他可執(zhí)行部分}函數(shù)的返回值是需要返回給主調(diào)函數(shù)的處理結(jié)果,由return語句給出。對于無返回值的函數(shù),其類型標(biāo)識符為void,不需要return語句5.6.1函數(shù)的定義與使用示例:編寫一個(gè)函數(shù),用于求任意兩個(gè)整數(shù)之間所有數(shù)的平方和。classProgram{privatestaticintpfh(intx,inty){inti,sum=0;for(i=x;i<=y;i++)sum=sum+i*i;return(sum);}}5.6.1函數(shù)的定義與使用函數(shù)的使用在類中的某個(gè)函數(shù)中,調(diào)用本類中由“函數(shù)名”指定的函數(shù),其語法形式如下:函數(shù)名([實(shí)際參數(shù)列表])調(diào)用由另一個(gè)類的對象指定的函數(shù),其語法形式如下:對象名.方法名([實(shí)際參數(shù)列表])只能調(diào)用非本類的另一個(gè)類的靜態(tài)方法,其語法形式如下:類名.方法名([實(shí)際參數(shù)列表])5.6.2函數(shù)的參數(shù)傳遞參數(shù)傳遞中的類型轉(zhuǎn)化示例:classProgram{staticfloatSqr(floatk){return(k*k);}staticvoidMain(string[]args){inty;floatyy;y=6;yy=Sqr(y);Console.WriteLine("{0}的平方是{1}",y,yy);
Console.ReadLine();}}5.6.2函數(shù)的參數(shù)傳遞參數(shù)傳遞的類型值傳遞時(shí)參數(shù)的語法形式如下:參數(shù)類型參數(shù)名引用傳遞參數(shù)的語法形式如下:ref參數(shù)類型參數(shù)名輸出引用類型參數(shù)的語法形式如下:out參數(shù)類型參數(shù)名參數(shù)數(shù)組:使用params關(guān)鍵字聲明參數(shù)的個(gè)數(shù)為不確定。5.6.2函數(shù)的參數(shù)傳遞引用傳遞參數(shù)示例:classProgram{staticvoidswap(refinta,refintb){inti;i=a;a=b;b=i;}staticvoidMain(string[]args){intx,y;Console.WriteLine("請輸入x和y的值:");x=Convert.ToInt32(Console.ReadLine());y=Convert.ToInt32(Console.ReadLine());
swap(refx,refy);Console.WriteLine("轉(zhuǎn)換后x和y的值為:{0},{1}",x,y);Console.ReadLine();}}5.6.2函數(shù)的參數(shù)傳遞輸出引用類型參數(shù)示例:classProgram{staticvoidswap(outinta,outintb){inti;a=Convert.ToInt32(Console.ReadLine());b=Convert.ToInt32(Console.ReadLine());i=a;a=b;b=i;}staticvoidMain(string[]args){intx,y;swap(outx,outy);Console.WriteLine("轉(zhuǎn)換后x和y的值為:{0},{1}",x,y);Console.ReadLine();}}5.6.2函數(shù)的參數(shù)傳遞參數(shù)數(shù)組示例:classProgram{publicstaticfloatAverage(paramslong[]array){longtotal,i;for(i=0,total=0;i<array.Length;++i){total=total+array[i];}return((float)total/array.Length);}staticvoidMain(string[]args){floatx=Average(1,2,3,5);Console.WriteLine("1、2、3、5的平均值為{0}",x);x=Average(10,20,35,52);Console.WriteLine("10、20、35、52的平均值為{0}",x);Console.ReadLine();}}5.6.3內(nèi)聯(lián)函數(shù)對于一些功能簡單、規(guī)模較小又使用頻繁的函數(shù),CLR會(huì)做出是否使用內(nèi)聯(lián)函數(shù)的判斷。內(nèi)聯(lián)函數(shù)不在調(diào)用時(shí)發(fā)生控制轉(zhuǎn)移,而是在編譯時(shí)將函數(shù)體嵌入在每一個(gè)調(diào)用處,這樣就節(jié)省了參數(shù)傳遞、控制轉(zhuǎn)移等消耗。注意:在何處內(nèi)聯(lián)代碼完全由CLR判斷得出,無法使用諸如C++中inline的關(guān)鍵字來控制哪些方法是內(nèi)聯(lián)的。5.6.4函數(shù)重載函數(shù)重載允許一個(gè)類中有同名的函數(shù)存在,即一個(gè)類中可以存在兩個(gè)以上的函數(shù)名稱相同。重載函數(shù)的形參必須不同,可以個(gè)數(shù)不同或者類型不同。示例:intadd(intx,inty);intadd(inta,intb); //錯(cuò)誤!編譯器不以形參名來區(qū)分函數(shù)intadd(intx,inty);voidadd(intx,inty); //錯(cuò)誤!編譯器不以返回值來區(qū)分函數(shù)5.6.4函數(shù)重載示例:classProgram{publicstaticintAdd(inti,intj){returni+j;}publicstaticstringAdd(strings1,strings2){returns1+s2;}publicstaticlongAdd(longx){returnx+5;}staticvoidMain(string[]args){Console.WriteLine(Add(1,2));Console.WriteLine(Add("1","2"));Console.WriteLine(Add(10));Console.ReadLine();}}5.7常用內(nèi)部函數(shù)5.7.1隨機(jī)函數(shù)介紹在C#中要生成隨機(jī)數(shù)需要使用Random類。該類的主要方法是Next方法,它生成一個(gè)介于兩個(gè)整數(shù)之間的隨機(jī)數(shù),其語法形式如下:publicvirtualintNext([intminValue,intmaxValue]);5.7.1隨機(jī)函數(shù)介紹示例:
classProgram{staticvoidMain(string[]args){Randomop1=newRandom(10);Randomop2=newRandom();intresult;result=op1.Next(10,99)+op2.Next(0,9);Console.WriteLine(result);Console.Read();}}由于結(jié)果是隨機(jī)值,所以這里不再描述運(yùn)行結(jié)果,5.7.2格式化函數(shù)介紹.NET為處理數(shù)字、日期以及字符串的格式化提供了WriteLine方法、Format方法和ToString方法。通過WriteLine方法和Format方法可對多個(gè)變量進(jìn)行格式化,ToString方法只能對一個(gè)變量進(jìn)行格式化。對于使用WriteLine方法和Format方法格式化字符串,規(guī)定格式的一般語法形式如下。{N,[M][:格式碼精度]}對于使用ToString方法格式化字符串,規(guī)定形式的一般語法如下。格式碼精度5.7.2格式化函數(shù)介紹[]:表示其中的內(nèi)容為可選項(xiàng)。N:表示要格式化的參數(shù)的索引。M:可選參數(shù),表示格式化后的參數(shù)所占的寬度。如果M是負(fù)數(shù),那么格式化后的值就是左對齊的;如果M是正數(shù),那么格式化后的值是右對齊的;如果未指定M,則默認(rèn)為零。格式碼:可選的格式化代碼字符串。精度:格式化輸出的有效位數(shù)或小數(shù)位數(shù)。5.7.3日期函數(shù)介紹用于處理時(shí)間和日期的對象為DateTime結(jié)構(gòu)和TimeSpan類。DateTime結(jié)構(gòu)用于表示日期和時(shí)間,表示范圍在0001年1月1日午夜12:00:00到9999年12月31日晚上11:59:59之間的日期和時(shí)間,最小時(shí)間單位等于100納秒。TimeSpan類可以表示一個(gè)時(shí)間間隔,表示范圍可以在Int64.MinValue到Int64.MaxValue之間。5.7.3日期函數(shù)介紹DateTime結(jié)構(gòu)的常用方法如下:AddYears、AddMonths、AddDays、AddHours、AddMinutes、AddSeconds方法,用于將指定的年、月、日、時(shí)、分、秒加到DateTime上。Substract方法:日期相減。
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- T-ZZB 3706-2024 石化行業(yè)用不銹鋼閥門鑄件
- T-ZJCX 0047-2024 浙江省法人數(shù)字證書應(yīng)用接口規(guī)范
- 二零二五年度宅基地占用權(quán)轉(zhuǎn)讓協(xié)議
- 獨(dú)立董事聘用合同(二零二五年度)-能源行業(yè)節(jié)能減排
- 2025年度門面買賣合同(含廣告位租賃)
- 二零二五年度音樂作品著作權(quán)許可與網(wǎng)絡(luò)播放協(xié)議
- 2025年度校外住宿生安全管理及意外傷害賠償協(xié)議
- 2025年度相鄰宅基地邊界爭議解決與宅基地置換協(xié)議
- 二零二五年度拆除工程合同糾紛解決機(jī)制合同
- 二零二五年度自然人個(gè)人醫(yī)療設(shè)備貸款合同生效與還款規(guī)定
- 產(chǎn)房分娩安全核查表及使用說明
- oppor11t刷全網(wǎng)通改全教程
- 內(nèi)部控制-倉儲與存貨循環(huán)調(diào)查問卷
- 高二英語期末考試試卷質(zhì)量分析報(bào)告
- 第一講酒吧的類型及特征
- JJF 1071-2010國家計(jì)量校準(zhǔn)規(guī)范編寫規(guī)則
- GB/T 28906-2012冷鐓鋼熱軋盤條
- GB/T 24803.4-2013電梯安全要求第4部分:評價(jià)要求
- GB/T 1348-1988球墨鑄鐵件
- 獻(xiàn)給媽媽的愛doc資料
- Unit 4 History and Traditions Reading and thinking 課件- 高中英語人教版(2019)必修第二冊
評論
0/150
提交評論