




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第3章
選擇結構和循環結構
3.1一個簡單的選擇結構程序3.2if語句——二分支選擇語句3.3switch語句——多分支選擇語句3.4一個簡單的循環結構程序3.5while語句和do…while語句3.6for語句和foreach語句3.7跳轉語句
本章內容【例3.1】
構造一個C#控制臺應用程序,使之實現下列分段函數的功能:3.1一個簡單的選擇結構程序——分段函數的實現創建一個控制臺應用程序PiecewiseFunction:3.1一個簡單的選擇結構程序——分段函數的實現3.1.1創建C#控制臺應用程序運行該程序,從鍵盤上輸入一個數值數據,如-3.14:
3.1一個簡單的選擇結構程序——分段函數的實現3.1.2選擇結構解析如果x>0,則f=1如果x=0,則f=0如果x<0,則f=-1選擇結構3.1一個簡單的選擇結構程序——分段函數的實現3.1.2選擇結構解析(續)選擇結構主要有:單入口雙分支單入口三分支(如上面的if語句實現的選擇結構)單入口多分支(三個或三個以上的分支)對于這些選擇結構,除了可以利用if語句來實現以
外,還可以用switch語句來完成。3.2if語句——二分支選擇語句為表述方便,我們將if語句分為三種類型:if…語句if…else…語句if…elseif…else…語句3.2if語句——二分支選擇語句3.2.1if…語句if…語句是最簡單的一種if語句,其語法格式如下:if(布爾表達式)語句塊說明:該語句的作用是:如果括號中布爾表達式的值為true,則
執行后面的語句塊(語句塊是指放在大括號“{”和“}”之間
的語句序列),否則什么都不做。如果語句塊僅由一條語句組成,那么大括號“{”和“}”可以
省略?!癷f(布爾表達式)”和“語句塊”可以放在一行上,也可以分在
兩行上?!癷f”后面括號中的表達式的返回值必須為布爾類型,即返回
true或false,這一點與C/C++不同;此外,關鍵字“if”后面
沒有“then”。3.2if語句——二分支選擇語句3.2.1if…語句(續)if…語句的流程圖如下圖所示。3.2if語句——二分支選擇語句3.2.1if…語句(續)【例3.2】
從鍵盤上輸入兩個整數,然后輸出較大的整數。經過該語句后x總是保存了它們當中的最大者3.2if語句——二分支選擇語句3.2.2if…else…語句if…else…語句是一種二分支選擇語句,其語法格式如下:if(布爾表達式)語句塊1else語句塊2說明:該語句的作用是:如果括號中布爾表達式的值為true,則執行后面的語句塊1,否則執行語句2。也就是說,不管布爾表達式的值為true還是為false,語句塊1和語句塊2必有其中之一被執行。3.2if語句——二分支選擇語句3.2.2if…else…語句(續)【例3.3】
編寫一個窗體應用程序,使之能夠對給定的實數進行四舍五入。創建C#窗體應用程序Rounding,界面如下圖:3.2if語句——二分支選擇語句3.2.2if…else…語句(續)雙擊“四舍五入”按鈕,在生成的button1_Click函數中添加下列代碼:在if語句中利用了int的強制數據轉換功能:對浮點數向下取整,如3.14和3.54在進行int強制轉換后都得到3。于是根據x-(int)x的差值來決定是“舍”還是“入”。在“舍”和“入”之間的選擇正是利用了if…else…語句來實現。3.2if語句——二分支選擇語句3.2.3if…elseif…else…語句if…elseif…else…語句的語法格式如下:if(布爾表達式1)語句塊1elseif(布爾表達式2)語句塊2…elseif(布爾表達式n)語句塊nelse語句塊n+1說明:該語句的作用是:先計算布爾表達式1,如果其值為true,則執行語句塊1;否則計算布爾表達式2,如果布爾表達式2的值為true,則執行語句塊2;…;否則計算布爾表達式n,如果布爾表達式n的值為true,則執行語句塊n;否則(所有布爾表達式的值均為false)執行語句塊n+1。一旦有語句塊被執行,執行后程序都跳出整個if語句,而不再去計算其他表達式,更不會再執行其他語句塊。默認情況下,else總是與前面最近的if相匹配。最后面的“else”和“語句塊n+1”可以省略,要根據實際需要取舍。3.2if語句——二分支選擇語句3.2.3if…elseif…else…語句(續)【例3.4】編寫一個控制臺應用程序,使之能夠將學生成績從百分制轉化為等級制。創建控制臺應用程序Grade:staticvoidMain(string[]args){
Console.Write("請輸入分數:");doublescore=Convert.ToDouble(Console.ReadLine());stringgrade;if(score>100||score<0){
Console.Write("輸入的分數不合法,請核查!");
Console.ReadLine();return;}
3.2if語句——二分支選擇語句3.2.3if…elseif…else…語句(續)【例3.4】編寫一個控制臺應用程序,使之能夠將學生成績從百分制轉化為等級制。if(score>=90)grade="優秀";elseif(score>=80)grade="良好";elseif(score>=70)grade="中等";elseif(score>=60)grade="及格";elsegrade="不及格";
Console.Write("成績等級為:{0}!",grade);
Console.ReadLine();}利用了if…elseif…else…語句來實現成績從百分制到等級制的轉化3.3switch語句
——多分支選擇語句switch語句的語法格式如下:switch(表達式){case常量表達式1:語句塊1;break;case常量表達式2:語句塊2;break;…case常量表達式n:語句塊n;break;default:語句塊n+1;break;}說明:switch語句的工作原理是:先計算“switch”后面的表達式的值,然后從上到下依次判斷該值是否等于“case”后面的常量表達式的值,如果等于某個常量表達式的值,如等于常量表達式i的值,則執行對應的語句塊i;執行語句塊i后,如果碰到break語句,則跳出switch語句。表達式的類型必須是整型、字符型(char)、字符串型(string)或者枚舉型以及能夠隱士轉換為上述類型的任何一種數據類型。表達式不能為浮點型;表達式的類型必須與常量表達式的類型相匹配。switch語句中的default部分可以省略。switch語句中,最后的break語句是不能省略的。3.3switch語句
——多分支選擇語句【例3.5】
對于例3.4中關于將學生成績從百分制轉化為等級制的問題,也可以使用switch語句來解決。創建控制臺應用程序Grade2:
staticvoidMain(string[]args){
Console.Write("請輸入分數:");doublescore=Convert.ToDouble(Console.ReadLine());stringgrade;if(score>100||score<0){
Console.Write("輸入的分數不合法,請核查!");
Console.ReadLine();return;}
3.3switch語句
——多分支選擇語句switch((int)(score/10)){case10:case9:grade="優秀";break;case8:grade="良好";break;case7:grade="中等";break;case6:grade="及格";break;default:grade="不及格";break;}
Console.Write("成績等級為:{0}!",grade);
Console.ReadLine();}switch語句
3.4一個簡單的循環結構程序
——等差數列求和3.4.1創建C#控制臺應用程序【例3.6】
構造一個C#控制臺應用程序,使之能夠計算下列等差數列的前n項之和,n從鍵盤輸入:1,3,5,7,9,…創建控制臺應用程序ArithProg:usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespaceArithProg{classProgram{
3.4一個簡單的循環結構程序
——等差數列求和3.4.1創建C#控制臺應用程序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();}}}3.4一個簡單的循環結構程序
——等差數列求和3.4.2循環結構解析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語句循環條件表達式
循環控制變量3.5while語句和do…while語句3.5.1while語句while語句屬于當型循環語句,其語法格式如下:while(條件表達式)循環體{
語句序列;}說明:條件表達式的返回值必須布爾類型。該語句的功能是:先計算條件表達式的值,值為true時,會執行
循環體中的語句;然后再計算表達式的值,如果仍然為true,則
繼續執行循環體中的語句;不斷重復這個過程,直到條件表達式
的值為false時才退出while語句,執行while語句后面的語句。如果循環體由多條語句組成,則必須用大括號“{”和“}”將這些語
句括起來;如果僅由一條語句組成,則大括號可以省略。3.5while語句和do…while語句3.5.1while語句(續)【例3.7】
用while語句對下列無窮級數求和:分析:(1)該級數可以寫成:,顯然各項的分母構成
了一個等差數列,因此可以用循環語句來控制;(2)設定循環終止條件:計算機程序不可能真正求一個無窮級
數的和,而只能求其前面有限項的和。這樣,循環的終止
條件可以設為求前面n項的和,或當某一項的值小于給定
的閥值。這里,我們取后者。3.5while語句和do…while語句3.5.1while語句(續)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語句循環控制變量(各項分母)累加器累加器3.5while語句和do…while語句3.5.2do…while語句do…while語句屬于直到型循環語句,其語法格式如下:do循環體{
語句序列;}while(條件表達式)說明:功能:先無條件地執行一次循環體,再計算條件表達式的值,
如果其值為true,則繼續執行循環體;然后再次計算條件表達式
的值,如果該值還是為true,則繼續執行循環體,直到條件表達
式的值為false時才終止循環,執行do…while語句后面的語句。當條件表達式的值一開始就為false時,do…while語句會執行一
次循環體,而while語句則不會執行循環體。這是它們的區別。3.5while語句和do…while語句3.5.2do…while語句(續)【例3.8】
用do…while語句計算1~100之間所有整數的和。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語句3.6for語句和foreach語句3.6.1for語句for語句也使用頻率非常高一種循環語句;多用于:在循環次數已經知道,或用于訪問數組的情況;實際上,for語句的使用方法十分靈活,其功能也十分強大??梢哉f,凡是使用while語句的地方都可以使用for語句替代。3.6for語句和foreach語句3.6.1for語句(續)for語句的語法格式如下:for(表達式1;表達式2;表達式3)循環體{
語句序列;}說明:表達式1和表達式3可以是任意一種表達式,表達式2必須是布爾類型表
達式,或能夠隱式轉換為布爾類型的值。功能:先計算表達式1,然后計算表達式2,如果表達式2的值為false,
則退出該for循環,執行for語句后面的語句;如果表達式2的值為true,
則執行循環體中的語句,接著計算表達式3,然后又計算表達式2,如果
表達式2的值仍然為true,則重復上面執行循環體、計算表達式3的過
程,直到表達式2的值為false時才退出for循環。表達式1和表達式3可以省略,也可以根據需要將它們分別放在for語句之
前和for循環體內;表達式2一般不可省略,否則會導致死循環,除非循
環體中有break語句。3.6for語句和foreach語句3.6.1for語句(續)【例3.9】
從鍵盤輸入由若干字符構成的一個字符串,用for語句統計字符串中大寫英文字母、小寫英文字母、數字字符和其他字符的個數。分析:大寫英文字母和小寫英文字母的ASCII碼值分別分布在65~90和97~122,數字字符的分布在48~57。于是,結合if,我們就可以用for語句統計各類字符的個數。3.6for語句和foreach語句3.6.1for語句(續)staticvoidMain(string[]args){
int
lowerNum=0; //小寫字母個數
int
upperNum=0; //大寫字母個數
int
numeralNum=0; //數字個數
int
otherNum=0; //其他字符個數
stringline=Console.ReadLine();char[]chars=line.ToCharArray();
int
lineLen=chars.Length; //獲取字符數組chars的長度
for(inti=0;i<lineLen;i++){
int
ascii=(int)chars[i]; //獲取字符的ASCII碼值
if(ascii>=65&&ascii<=90)upperNum++; //統計大寫字母
elseif(ascii>=97&&ascii<=122)lowerNum++; //統計大寫字母
elseif(ascii>=48&&ascii<=57)numeralNum++; //統計數字字符
elseotherNum++; //統計其他字符
}
Console.WriteLine("大寫字母個數:{0}",upperNum);
Console.WriteLine("小寫字母個數:{0}",lowerNum);
Console.WriteLine("數字字符個數:{0}",numeralNum);
Console.WriteLine("其他字符個數:{0}",otherNum);
Console.ReadLine();}do…while語句循環控制變量循環條件表達式3.6for語句和foreach語句3.6.2foreach語句foreach語句多用于:對于集合類型中的元素,有時候不在乎元素的下標,或者根本就沒有下標時,foreach語句來處理這些元素就顯得更為自然。foreach語句的語法格式如下:foreach(數據類型變量in集合表達式){
語句序列;}說明:作用:取出集合表達式中的每一個元素并保存到變量中,
每保存一次變量后執行一次循環體,集合表達式中有多少
個元素就有多少次變量保存和循環體執行操作。不能更改變量的值,只能引用。集合表達式的類型必須為集合類型3.6for語句和foreach語句3.6.2foreach語句(續)【例3.10】
將學生的記錄信息(包括學號和姓名)保存到Hashtable類的實例中,然后用foreach語句篩選學號為奇數的學生。分析:Hashtable是命名空間System.Collections中的一個容器,它類似于數組(屬于一種集合類型),但比數組功能強大得多。它支持任何類型的key/value鍵值對,可以對其進行元素添加和刪除、數據清空等操作。3.6for語句和foreach語句3.6.2foreach語句(續)usingSystem.Collections;
//必須引入System.Collections命名空間,才能使用Hashtable類staticvoidMain(string[]args){
Hashtableht=newHashtable();//創建一個Hashtable實例
ht.Add(201001,"張趙剛");//在哈希表實例中添加學生記錄
ht.Add(201002,"李斯");ht.Add(201003,"王智高");ht.Add(201004,"蒙恬");ht.Add(201005,"趙高");
Console.WriteLine("學號為奇數的學生:");
Console.WriteLine("------------------------");
Console.WriteLine("學號姓名");
foreach(int
stuidinht.Keys){if((stuid+1)%2==0)
Console.WriteLine(stuid+""+ht[stuid]);}
Console.ReadLine();}foreach語句3.7跳轉語句3.7.1break語句和continue語句break語句是跳出循環體,終止循環語句continue語句結束本次循環而提前進入下一輪循環,整個循環語句仍在執行break語句和continue語句一般都是帶條件的3.7跳轉語句3.7.1break語句和continue語句【例3.11】break語句的應用舉例:判斷一個正整數是否為素數。分析:在數學上我們已經知道,如果正整數n不被區間(1,n)中的任何整數整除,則n是素數。因此,用循環結構依次檢查(1,n)中的整數,一旦出現其中的整數整除n,則跳出循環結構,表明n不是素數;如果所有這樣的整數都不整除n,則表明n是素數。3.7跳轉語句3.7.1break語句和continue語句staticvoidMain(string[]args){strings;
Console.Write("n=");
intn=int.Parse(Console.ReadLine());
inti;
if(i==1)s="整數"+n.ToString()+"是素數!";elses="整數"+n.ToString()+"不是素數!";
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;數學上可以證明,如果
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- T/CECS 10391-2024整體式垃圾壓縮機
- T/CI 508-2024裝配式混凝土建筑質量控制技術規程
- T/CI 475-2024廚余垃圾廢水處理工程技術規范
- 2025年水產捕撈勞動合同3篇
- 司機聘用勞動合同5篇
- 普通房屋出租合同范本4篇
- 鍋爐管道維修合同3篇
- 增資擴股托管申請協議8篇
- 飛龍陽光城D影視合同4篇
- 用友服務合同4篇
- 日本旅游路線展示課件
- 木地板培訓資料大全
- 康養旅游概念及市場現狀分析
- 99版-干部履歷表-A4打印
- 人教版六年級上冊數學(新插圖) 倒數的認識 教學課件
- CJJ 36-2016 城鎮道路養護技術規范
- 非暴力溝通(完整版)
- 中華傳統文化之文學瑰寶學習通超星課后章節答案期末考試題庫2023年
- 直臂式高空作業車安全管理培訓課件-
- 廣東省省級政務信息化服務預算編制標準(運維服務分冊)
- 之江實驗室:生成式大模型安全與隱私白皮書
評論
0/150
提交評論