




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第3章
選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)
13.1一個簡單的選擇結(jié)構(gòu)程序3.2if語句——二分支選擇語句3.3switch語句——多分支選擇語句3.4一個簡單的循環(huán)結(jié)構(gòu)程序3.5while語句和do…while語句3.6for語句和foreach語句3.7跳轉(zhuǎn)語句
本章內(nèi)容2【例3.1】構(gòu)造一個C#控制臺應(yīng)用程序,使之實現(xiàn)下列分段函數(shù)的功能:3.1一個簡單的選擇結(jié)構(gòu)程序——分段函數(shù)的實現(xiàn)V2R6T13創(chuàng)建一個控制臺應(yīng)用程序PiecewiseFunction:3.1一個簡單的選擇結(jié)構(gòu)程序——分段函數(shù)的實現(xiàn)3.1.1創(chuàng)建C#控制臺應(yīng)用程序運行該程序,從鍵盤上輸入一個數(shù)值數(shù)據(jù),如-3.14:
V2R6T143.1一個簡單的選擇結(jié)構(gòu)程序——分段函數(shù)的實現(xiàn)3.1.2選擇結(jié)構(gòu)解析如果x>0,則f=1如果x=0,則f=0如果x<0,則f=-1選擇結(jié)構(gòu)V2R6T153.1一個簡單的選擇結(jié)構(gòu)程序——分段函數(shù)的實現(xiàn)3.1.2選擇結(jié)構(gòu)解析(續(xù))選擇結(jié)構(gòu)主要有:單入口雙分支單入口三分支(如上面的if語句實現(xiàn)的選擇結(jié)構(gòu))單入口多分支(三個或三個以上的分支)對于這些選擇結(jié)構(gòu),除了可以利用if語句來實現(xiàn)以
外,還可以用switch語句來完成。V2R6T163.2if語句——二分支選擇語句為表述方便,我們將if語句分為三種類型:if…語句if…else…語句if…elseif…else…語句V2R6T173.2if語句——二分支選擇語句3.2.1if…語句if…語句是最簡單的一種if語句,其語法格式如下:if(布爾表達式)語句塊說明:該語句的作用是:如果括號中布爾表達式的值為true,則
執(zhí)行后面的語句塊(語句塊是指放在大括號“{”和“}”之間
的語句序列),否則什么都不做。如果語句塊僅由一條語句組成,那么大括號“{”和“}”可以
省略?!癷f(布爾表達式)”和“語句塊”可以放在一行上,也可以分在
兩行上。“if”后面括號中的表達式的返回值必須為布爾類型,即返回
true或false,這一點與C/C++不同;此外,關(guān)鍵字“if”后面
沒有“then”。V2R6T183.2if語句——二分支選擇語句3.2.1if…語句(續(xù))if…語句的流程圖如下圖所示。V2R6T193.2if語句——二分支選擇語句3.2.1if…語句(續(xù))【例3.2】從鍵盤上輸入兩個整數(shù),然后輸出較大的整數(shù)。經(jīng)過該語句后x總是保存了它們當中的最大者V2R6T1103.2if語句——二分支選擇語句3.2.2if…else…語句if…else…語句是一種二分支選擇語句,其語法格式如下:if(布爾表達式)語句塊1else語句塊2說明:該語句的作用是:如果括號中布爾表達式的值為true,則執(zhí)行后面的語句塊1,否則執(zhí)行語句2。也就是說,不管布爾表達式的值為true還是為false,語句塊1和語句塊2必有其中之一被執(zhí)行。V2R6T1113.2if語句——二分支選擇語句3.2.2if…else…語句(續(xù))【例3.3】編寫一個窗體應(yīng)用程序,使之能夠?qū)o定的實數(shù)進行四舍五入。創(chuàng)建C#窗體應(yīng)用程序Rounding,界面如下圖:V2R6T1123.2if語句——二分支選擇語句3.2.2if…else…語句(續(xù))雙擊“四舍五入”按鈕,在生成的button1_Click函數(shù)中添加下列代碼:在if語句中利用了int的強制數(shù)據(jù)轉(zhuǎn)換功能:對浮點數(shù)向下取整,如3.14和3.54在進行int強制轉(zhuǎn)換后都得到3。于是根據(jù)x-(int)x的差值來決定是“舍”還是“入”。在“舍”和“入”之間的選擇正是利用了if…else…語句來實現(xiàn)。V2R6T1133.2if語句——二分支選擇語句3.2.3if…elseif…else…語句if…elseif…else…語句的語法格式如下:if(布爾表達式1)語句塊1elseif(布爾表達式2)語句塊2…elseif(布爾表達式n)語句塊nelse語句塊n+1說明:該語句的作用是:先計算布爾表達式1,如果其值為true,則執(zhí)行語句塊1;否則計算布爾表達式2,如果布爾表達式2的值為true,則執(zhí)行語句塊2;…;否則計算布爾表達式n,如果布爾表達式n的值為true,則執(zhí)行語句塊n;否則(所有布爾表達式的值均為false)執(zhí)行語句塊n+1。一旦有語句塊被執(zhí)行,執(zhí)行后程序都跳出整個if語句,而不再去計算其他表達式,更不會再執(zhí)行其他語句塊。默認情況下,else總是與前面最近的if相匹配。最后面的“else”和“語句塊n+1”可以省略,要根據(jù)實際需要取舍。V2R6T1143.2if語句——二分支選擇語句3.2.3if…elseif…else…語句(續(xù))【例3.4】編寫一個控制臺應(yīng)用程序,使之能夠?qū)W生成績從百分制轉(zhuǎn)化為等級制。創(chuàng)建控制臺應(yīng)用程序Grade:staticvoidMain(string[]args){Console.Write("請輸入分數(shù):");doublescore=Convert.ToDouble(Console.ReadLine());stringgrade;if(score>100||score<0){Console.Write("輸入的分數(shù)不合法,請核查!");Console.ReadLine();return;}
V2R6T1153.2if語句——二分支選擇語句3.2.3if…elseif…else…語句(續(xù))【例3.4】編寫一個控制臺應(yīng)用程序,使之能夠?qū)W生成績從百分制轉(zhuǎn)化為等級制。if(score>=90)grade="優(yōu)秀";elseif(score>=80)grade="良好";elseif(score>=70)grade="中等";elseif(score>=60)grade="及格";elsegrade="不及格";Console.Write("成績等級為:{0}!",grade);Console.ReadLine();}利用了if…elseif…else…語句來實現(xiàn)成績從百分制到等級制的轉(zhuǎn)化V2R6T1163.3switch語句
——多分支選擇語句switch語句的語法格式如下:switch(表達式){case常量表達式1:語句塊1;break;case常量表達式2:語句塊2;break;…case常量表達式n:語句塊n;break;default:語句塊n+1;break;}說明:switch語句的工作原理是:先計算“switch”后面的表達式的值,然后從上到下依次判斷該值是否等于“case”后面的常量表達式的值,如果等于某個常量表達式的值,如等于常量表達式i的值,則執(zhí)行對應(yīng)的語句塊i;執(zhí)行語句塊i后,如果碰到break語句,則跳出switch語句。表達式的類型必須是整型、字符型(char)、字符串型(string)或者枚舉型以及能夠隱士轉(zhuǎn)換為上述類型的任何一種數(shù)據(jù)類型。表達式不能為浮點型;表達式的類型必須與常量表達式的類型相匹配。switch語句中的default部分可以省略。switch語句中,最后的break語句是不能省略的。V2R6T1173.3switch語句
——多分支選擇語句【例3.5】對于例3.4中關(guān)于將學生成績從百分制轉(zhuǎn)化為等級制的問題,也可以使用switch語句來解決。創(chuàng)建控制臺應(yīng)用程序Grade2:
staticvoidMain(string[]args){Console.Write("請輸入分數(shù):");doublescore=Convert.ToDouble(Console.ReadLine());stringgrade;if(score>100||score<0){Console.Write("輸入的分數(shù)不合法,請核查!");Console.ReadLine();return;}
V2R6T1183.3switch語句
——多分支選擇語句switch((int)(score/10)){case10:case9:grade="優(yōu)秀";break;case8:grade="良好";break;case7:grade="中等";break;case6:grade="及格";break;default:grade="不及格";break;}Console.Write("成績等級為:{0}!",grade);Console.ReadLine();}switch語句
V2R6T1193.4一個簡單的循環(huán)結(jié)構(gòu)程序
——等差數(shù)列求和3.4.1創(chuàng)建C#控制臺應(yīng)用程序【例3.6】構(gòu)造一個C#控制臺應(yīng)用程序,使之能夠計算下列等差數(shù)列的前n項之和,n從鍵盤輸入:1,3,5,7,9,…創(chuàng)建控制臺應(yīng)用程序ArithProg:usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespaceArithProg{classProgram{
V2R6T1203.4一個簡單的循環(huán)結(jié)構(gòu)程序
——等差數(shù)列求和3.4.1創(chuàng)建C#控制臺應(yīng)用程序staticvoidMain(string[]args){Console.Write("n=");intn=int.Parse(Console.ReadLine());inti=1; //循環(huán)控制變量intsum=0; //累加器while(i<=n){sum=sum+(2*i-1);i++;}Console.Write("1+3+5+...+{0}={1}",2*n-1,sum);Console.ReadLine();}}}V2R6T1213.4一個簡單的循環(huán)結(jié)構(gòu)程序
——等差數(shù)列求和3.4.2循環(huán)結(jié)構(gòu)解析staticvoidMain(string[]args){Console.Write("n=");intn=int.Parse(Console.ReadLine());inti=1; intsum=0; //累加器while(i<=n){sum=sum+(2*i-1);i++;}Console.Write("1+3+5+...+{0}={1}",2*n-1,sum);Console.ReadLine();}}}while語句循環(huán)條件表達式
循環(huán)控制變量V2R6T1223.5while語句和do…while語句3.5.1while語句while語句屬于當型循環(huán)語句,其語法格式如下:while(條件表達式)循環(huán)體{語句序列;}說明:條件表達式的返回值必須布爾類型。該語句的功能是:先計算條件表達式的值,值為true時,會執(zhí)行
循環(huán)體中的語句;然后再計算表達式的值,如果仍然為true,則
繼續(xù)執(zhí)行循環(huán)體中的語句;不斷重復(fù)這個過程,直到條件表達式
的值為false時才退出while語句,執(zhí)行while語句后面的語句。如果循環(huán)體由多條語句組成,則必須用大括號“{”和“}”將這些語
句括起來;如果僅由一條語句組成,則大括號可以省略。V2R6T1233.5while語句和do…while語句3.5.1while語句(續(xù))【例3.7】用while語句對下列無窮級數(shù)求和:分析:(1)該級數(shù)可以寫成:,顯然各項的分母構(gòu)成
了一個等差數(shù)列,因此可以用循環(huán)語句來控制;(2)設(shè)定循環(huán)終止條件:計算機程序不可能真正求一個無窮級
數(shù)的和,而只能求其前面有限項的和。這樣,循環(huán)的終止
條件可以設(shè)為求前面n項的和,或當某一項的值小于給定
的閥值。這里,我們?nèi)『笳?。V2R6T1243.5while語句和do…while語句3.5.1while語句(續(xù))staticvoidMain(string[]args){doublet=2;inti=1;doublesum=0;while(t>0.000001){t=1.0/i;sum=sum+t;i++;}Console.Write("1+1/2+1/3+...+1/{0}={1}",i-1,sum);Console.ReadLine();}while語句循環(huán)控制變量(各項分母)累加器累加器V2R6T1253.5while語句和do…while語句3.5.2do…while語句do…while語句屬于直到型循環(huán)語句,其語法格式如下:do循環(huán)體{語句序列;}while(條件表達式)說明:功能:先無條件地執(zhí)行一次循環(huán)體,再計算條件表達式的值,
如果其值為true,則繼續(xù)執(zhí)行循環(huán)體;然后再次計算條件表達式
的值,如果該值還是為true,則繼續(xù)執(zhí)行循環(huán)體,直到條件表達
式的值為false時才終止循環(huán),執(zhí)行do…while語句后面的語句。當條件表達式的值一開始就為false時,do…while語句會執(zhí)行一
次循環(huán)體,而while語句則不會執(zhí)行循環(huán)體。這是它們的區(qū)別。V2R6T1263.5while語句和do…while語句3.5.2do…while語句(續(xù))【例3.8】用do…while語句計算1~100之間所有整數(shù)的和。staticvoidMain(string[]args){intn=100;inti=1; intsum=0; do{sum=sum+i;i++;}while(i<=n);Console.Write("1+2+3+...+{0}={1}",n,sum);Console.ReadLine();}do…while語句V2R6T1273.6for語句和foreach語句3.6.1for語句for語句也使用頻率非常高一種循環(huán)語句;多用于:在循環(huán)次數(shù)已經(jīng)知道,或用于訪問數(shù)組的情況;實際上,for語句的使用方法十分靈活,其功能也十分強大??梢哉f,凡是使用while語句的地方都可以使用for語句替代。V2R6T1283.6for語句和foreach語句3.6.1for語句(續(xù))for語句的語法格式如下:for(表達式1;表達式2;表達式3)循環(huán)體{語句序列;}說明:表達式1和表達式3可以是任意一種表達式,表達式2必須是布爾類型表
達式,或能夠隱式轉(zhuǎn)換為布爾類型的值。功能:先計算表達式1,然后計算表達式2,如果表達式2的值為false,
則退出該for循環(huán),執(zhí)行for語句后面的語句;如果表達式2的值為true,
則執(zhí)行循環(huán)體中的語句,接著計算表達式3,然后又計算表達式2,如果
表達式2的值仍然為true,則重復(fù)上面執(zhí)行循環(huán)體、計算表達式3的過
程,直到表達式2的值為false時才退出for循環(huán)。表達式1和表達式3可以省略,也可以根據(jù)需要將它們分別放在for語句之
前和for循環(huán)體內(nèi);表達式2一般不可省略,否則會導(dǎo)致死循環(huán),除非循
環(huán)體中有break語句。V2R6T1293.6for語句和foreach語句3.6.1for語句(續(xù))【例3.9】從鍵盤輸入由若干字符構(gòu)成的一個字符串,用for語句統(tǒng)計字符串中大寫英文字母、小寫英文字母、數(shù)字字符和其他字符的個數(shù)。分析:大寫英文字母和小寫英文字母的ASCII碼值分別分布在65~90和97~122,數(shù)字字符的分布在48~57。于是,結(jié)合if,我們就可以用for語句統(tǒng)計各類字符的個數(shù)。V2R6T1303.6for語句和foreach語句3.6.1for語句(續(xù))staticvoidMain(string[]args){intlowerNum=0; //小寫字母個數(shù)intupperNum=0; //大寫字母個數(shù)intnumeralNum=0; //數(shù)字個數(shù)intotherNum=0; //其他字符個數(shù)stringline=Console.ReadLine();char[]chars=line.ToCharArray();intlineLen=chars.Length; //獲取字符數(shù)組chars的長度for(inti=0;i<lineLen;i++){intascii=(int)chars[i]; //獲取字符的ASCII碼值if(ascii>=65&&ascii<=90)upperNum++; //統(tǒng)計大寫字母elseif(ascii>=97&&ascii<=122)lowerNum++; //統(tǒng)計大寫字母elseif(ascii>=48&&ascii<=57)numeralNum++; //統(tǒng)計數(shù)字字符elseotherNum++; //統(tǒng)計其他字符}Console.WriteLine("大寫字母個數(shù):{0}",upperNum);Console.WriteLine("小寫字母個數(shù):{0}",lowerNum);Console.WriteLine("數(shù)字字符個數(shù):{0}",numeralNum);Console.WriteLine("其他字符個數(shù):{0}",otherNum);Console.ReadLine();}do…while語句循環(huán)控制變量循環(huán)條件表達式V2R6T1313.6for語句和foreach語句3.6.2foreach語句foreach語句多用于:對于集合類型中的元素,有時候不在乎元素的下標,或者根本就沒有下標時,foreach語句來處理這些元素就顯得更為自然。foreach語句的語法格式如下:foreach(數(shù)據(jù)類型變量in集合表達式){語句序列;}說明:作用:取出集合表達式中的每一個元素并保存到變量中,
每保存一次變量后執(zhí)行一次循環(huán)體,集合表達式中有多少
個元素就有多少次變量保存和循環(huán)體執(zhí)行操作。不能更改變量的值,只能引用。集合表達式的類型必須為集合類型V2R6T1323.6for語句和foreach語句3.6.2foreach語句(續(xù))【例3.10】將學生的記錄信息(包括學號和姓名)保存到Hashtable類的實例中,然后用foreach語句篩選學號為奇數(shù)的學生。分析:Hashtable是命名空間System.Collections中的一個容器,它類似于數(shù)組(屬于一種集合類型),但比數(shù)組功能強大得多。它支持任何類型的key/value鍵值對,可以對其進行元素添加和刪除、數(shù)據(jù)清空等操作。V2R6T1333.6for語句和foreach語句3.6.2foreach語句(續(xù))usingSystem.Collections;
//必須引入System.Collections命名空間,才能使用Hashtable類staticvoidMain(string[]args){Hashtableht=newHashtable();//創(chuàng)建一個Hashtable實例ht.Add(201001,"張趙剛");//在哈希表實例中添加學生記錄ht.Add(201002,"李斯");ht.Add(201003,"王智高");ht.Add(201004,"蒙恬");ht.Add(201005,"趙高");Console.WriteLine("學號為奇數(shù)的學生:");Console.WriteLine("------------------------");Console.WriteLine("學號姓名");foreach(intstuidinht.Keys){if((stuid+1)%2==0)Console.WriteLine(stuid+""+ht[stuid]);}Console.ReadLine();}foreach語句V2R6T1343.7跳轉(zhuǎn)語句3.7.1break語句和continue語句break語句是跳出循環(huán)體,終止循環(huán)語句continue語句結(jié)束本次循環(huán)而提前進入下一輪循環(huán),整個循環(huán)語句仍在執(zhí)行break語句和continue語句一般都是帶條件的V2R6T1353.7跳轉(zhuǎn)語句3.7.1break語句和continue語句【例3.11】break語句的應(yīng)用舉例:判斷一個正整數(shù)是否為素數(shù)。分析:在數(shù)學上我們已經(jīng)知道,如果正整數(shù)n不被區(qū)間(1,n)中的任何整數(shù)整除,則n是素數(shù)。因此,用循環(huán)結(jié)構(gòu)依次檢查(1,n)中的整數(shù),一旦出現(xiàn)其中的整數(shù)整除n,則跳出循環(huán)結(jié)構(gòu),表明n不是素數(shù);如果所有這樣的整數(shù)都不整除n,則表明n是素數(shù)。V2R6T1363.7跳轉(zhuǎn)語句3.7.1break語句和continue語句staticvoidMain(string[]args){strings;Console.Write("n=");intn=int.Parse(Console.ReadLine());inti;
if(i==1)s="整數(shù)"+n.ToString()+"是素數(shù)!";elses="整數(shù)"+n.ToString()+"不是素數(shù)!";Console.Write(s);Console.ReadLine();}for(i=(int)System.Math.Sqrt(n);i>1;i--)if(n%i==0)break;
break語句for(i=n-1;i>1;i--)
if(n%i==0)break;數(shù)學上可以證明,如果[2,√n]中的整
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權(quán)】 ISO/IEC 30186:2025 EN Digital twin - Maturity model and guidance for a maturity assessment
- 【正版授權(quán)】 IEC 62007-2:2025 EN Semiconductor optoelectronic devices for fibre optic system applications - Part 2: Measuring methods
- 單位憲法宣傳課件
- 卓越績效管理課件教學
- 卒中患者體位管理課件
- 廣州執(zhí)信入學數(shù)學試卷
- 華為客戶管理課件
- 海淀區(qū)中考數(shù)學試卷
- 衡陽小學6年級數(shù)學試卷
- 廣益中學數(shù)學試卷
- DB11T 2442-2025 學校食堂異物管控規(guī)范
- 企業(yè)防汛培訓課件模板
- 黨課課件含講稿:《關(guān)于加強黨的作風建設(shè)論述摘編》輔導(dǎo)報告
- 國家開放大學行管??啤侗O(jiān)督學》期末紙質(zhì)考試總題庫2025春期版
- GB/T 3280-2015不銹鋼冷軋鋼板和鋼帶
- 風壓、熱壓共同作用下的自然通風
- 常用塑料改性加工工藝
- 農(nóng)村低壓電力技術(shù)規(guī)程(國標正本)
- 廠房鋼結(jié)構(gòu)屋面及彩鋼板施工方案資料講解
- 服裝購銷合同
- 某單樁承載力及樁基沉降計算表格
評論
0/150
提交評論