1
選擇結構流程控制 ( 一 ) 選擇結構流程控制 ( 二 ) 重複結構流程控制 ( 一 ) 重複結構流程控制 ( 二 ) 重複結構流程控制 ( 三 ) 巢狀式迴圈 2
可利用關係及條件運算子, 來描述是否執行流程中的程式區塊 語法 if ( 判斷條件 ) 條件成立時執行內容 ; else 條件不成立時執行內容 ; 3
程式功能 請使用者先輸入名字 猜測使用者為男生 請使用者回答是否為男生 列印結語 程式內容 // 輸入資料 Console.Write(" 請輸入您的名字.. "); string name = Console.ReadLine(); Console.WriteLine(" 我猜 " + name + " 您一定是個男生!!"); 4
程式內容 Console.Write("\n 您真的是男生嗎!? (y/n)"); string sex = Console.ReadLine(); if (sex == "y" sex == "Y" sex == "yes" sex == "Yes" sex == "Yes") Console.WriteLine(" 怎麼樣!! 厲害吧!!"); else Console.WriteLine(" 其實我是故意猜錯的!!"); 5
程式功能 請使用者先輸入名字 利用亂數來決定猜測使用者為男生或女生 請使用者回答是否為亂數所產生出來的性別 列印結語 基本概念 可使用亂數產生一個為 0 或 1 的數, 當為 0 時猜測為女生, 為 1 時猜測為男生 6
當程式具有多個判斷條件時, 可利用 if else if else if else 來完成 語法 if ( 判斷條件 1) 程式區塊 1; else if ( 判斷條件 2) 程式區塊 2; else if ( 判斷條件 3) 程式區塊 3; else 程式區塊 4; 7
程式功能 請使用者輸入考試成績 列印成績的等第 程式內容 // 輸入資料 Console.Write(" 請輸入您的成績.. "); int grade = int.parse(console.readline()); 8
程式內容 // 輸出結果 Console.Write( ("\n 您的成績等第為.. "); if (grade >= 90 && grade <= 100) Console.WriteLine( WriteLine(" 優等!!"); else if (grade >= 80 && grade < 90) Console.WriteLine(" 甲等!!"); else if (grade >= 70 && grade < 80) Console.WriteLine(" 乙等!!"); 9
程式內容 else if (grade >= 60 && grade < 70) Console.WriteLine(" 丙等!!"); else Console.WriteLine(" 丁等!!"); 10
程式功能 剪刀 石頭 布 列印剪刀 石頭及布讓使用者選擇 電腦隨機選擇 列印勝負結果 基本概念 以數字 1 2 3 記錄使用者所出的拳 利用亂數選擇電腦要出的拳 利用 if else if else 判斷結果 11
三元運算子可用來取代 if else 流程控制, 使得程式碼更為簡潔 語法 變數 = 判斷條件? 變數值 1 : 變數值 2 用法 string a = 7>4? "7 比 4 大是對的 " : "7 比 4 大是錯的 "; 輸出結果.. 7 比 4 大是對的 12
string b = 1>4? "1 比 4 大是對的 " : "1 比 4 大是錯的 "; 輸出結果.. 1 比 4 大是錯的 13
變數的生命週期根據變數所屬的有效範圍來決定 我們可以簡單的把一組大括號所包含的範圍稱為一段 程式碼區塊 程式碼區塊界定變數的有效範圍 實例 在迴圈中宣告的變數, 在迴圈外的程式碼區塊中便無法存取該變數 14
選擇結構流程控制 ( 一 ) 選擇結構流程控制 ( 二 ) 重複結構流程控制 ( 一 ) 重複結構流程控制 ( 二 ) 重複結構流程控制 ( 三 ) 巢狀式迴圈 15
程式中若具有多個判斷條件時, 除了 if else if else 流程控制外, 還可以選擇 switch 敘述 語法 switch ( 判斷條件 ) case 條件值 1: 程式區塊 1 break; case 條件值 2: 程式區塊 2 break; default: 預設程式區塊 break; 16
switch 流程控制不但簡潔更易維護 switch 的判斷條件可為變數 數值或字串等等 判斷條件結果之資料型別要與所有條件值的資料型別一致 若條件值 1 滿足時, 便會執行程式區塊 1 的程式內容, 直到 break 為止離開 switch 敍述 若所有條件值皆不滿足時, 便會執行 default 的預設程式區塊內容 17
程式功能 把 sample2 a2 改以 switch 方式設計 請使用者輸入考試成績 列印成績的等第 程式內容 // 輸入資料 Console.Write(" 請輸入您的成績.. "); int grade = int.parse(console.readline()); 18
程式內容 Console.Write("\n 您的成績等第為.. "); switch(grade/10) case 10: case 9: Console.WriteLine(" 優等!!"); break; case 8: Console.WriteLine(" 甲等!!"); break; case 7: Console.WriteLine(" 乙等!!"); break; case 6: Console.WriteLine( WriteLine(" 丙等!!"); break; default: Console.WriteLine(" 丁等!!"); break; 19
程式功能 月份季節轉換 請使用者輸入月份 列印出所屬季節 基本概念 利用 switch 判斷結果 20
選擇結構流程控制 ( 一 ) 選擇結構流程控制 ( 二 ) 重複結構流程控制 ( 一 ) 重複結構流程控制 ( 二 ) 重複結構流程控制 ( 三 ) 巢狀式迴圈 21
當我們需要重複執行某段程式區塊時, 就可以利用重複結構流程控制來達成 語法 for ( 初值 ; 判斷式 ; 遞增值 ) 程式區塊 ; 用法 for (int i=0; i<10; i++) Console.Write (i+ " "); // 輸出結果.. 0 1 2 3 4 5 6 7 8 9 22
迴圈執行時, 會先判斷初值是否滿足判斷式, 若滿足則執行程式區塊, 程式區塊執行完畢後會回到遞增值部份, 遞增值結束後再一次回到判斷式中, 檢查遞增後的值是否滿足判斷式, 滿足再次執行程式區塊, 完成後再次回到遞增值部份, 直到判斷式不滿足為止離開迴圈 程式區塊只有一行時, 可省略大括號 假設初值與遞增值有二個以上的運算式, 中間必須以逗號分隔 for (int i=0, j=0; i*j <10; i++, j++) 初值 判斷式及遞增值必須仔細考量設定, 以防造成 無窮迴圈 若初值 判斷式及遞增值皆省略, 即為無窮迴窮 for ( ; ; ) 23
程式功能 輸入 x 列印出 1 ~ x 間所有整數和 程式內容 Console.Write( Write(" 請輸入 x 的值.. "); int x = int.parse(console.readline()); int sum = 0; for(int i=1; i<=x; i++) sum +=i; Console.WriteLine("1 ~ " + x + " 間的整數和為.. " + sum ); 24
程式功能 輸入 x 列印出 1~x 間所有奇數和 基本概念 可利用 if 來判斷是否為奇數 或改變遞增值遞增數目 25
break 在 for 執行迴圈中, 若遇到 break 陳述句時, 會立即逃離迴圈 continue 在 for 執行迴圈中, 若遇到 continue 陳述句時, 會立即跳至遞增值部份 26
程式功能 登入系統 請使用者輸入密碼 輸入密碼為 ives 則允許登入 容許三次登入機會 程式內容 // 設定密碼 const string pw = "ives"; 27
程式內容 // 輸入密碼 for(int i=0; i<3; i++) Console.Write(" 請輸入您的密碼.. "); if(pw == Console.ReadLine()) Console.WriteLine(" 您已順利登入成功!!"); break; else if(i==2) Console.WriteLine(" 錯誤已達三次!! 謝謝再聯絡!!"); else Console.WriteLine(" 密碼錯誤!! 請再輸入一次!!"); 28
程式功能 輸入 x 列印出 1~10 間不含 x 的所有數 基本概念 請利用 continue 來完成 29
選擇結構流程控制 ( 一 ) 選擇結構流程控制 ( 二 ) 重複結構流程控制 ( 一 ) 重複結構流程控制 ( 二 ) 重複結構流程控制 ( 三 ) 巢狀式迴圈 30
for 迴圈中必須先設定迴圈執行次數, 而 while 迴圈只須設定執行迴圈的條件即可, 當條件滿足時, 即會不斷重複執行 語法 while ( 判斷條件 ) 程式區塊 用法 int i = 0; while (i < 10) i++; Console.Write(i + " "); // 輸出結果.. 1 2 3 4 5 6 7 8 9 10 31
while 迴圈在執行時, 會先檢查條件是否成立, 當條件成立時才會執行迴圈中的程式區塊 while 迴圈中, 一樣可以使用 break 及 continue 程式區塊中, 必須有將判斷條件變成 false 的陳述句, 否則將導致無窮迴圈 while 迴圈判斷條件後加上時, 表示迴圈中不需執行任何程式區塊 while (Console.ReadLine() ()!= "yes"); 32
程式功能 請使用者輸入整數 列印出 1 加 2 加 3 加至多少才會大於該整數 請使用者輸入 quit 後離開 程式內容 // 輸入資料 Console.Write( Write(" 請輸入一整數.. "); int x = int.parse(console.readline()); 33
程式內容 int sum = 0, i=0; while(sum <= x) sum += ++i; Console.WriteLine("1 + + " + i+ " 才會大於 " + x); Console.WriteLine(" 輸入 quit 離開程式.."); while("quit" it"!= Console.ReadLine()); 34
程式功能 階乘計算 輸入 x 列印出 x! 的值 基本概念 請利用 while 來完成 x! = 1 * 2 * 3 * * x 35
選擇結構流程控制 ( 一 ) 選擇結構流程控制 ( 二 ) 重複結構流程控制 ( 一 ) 重複結構流程控制 ( 二 ) 重複結構流程控制 ( 三 ) 巢狀式迴圈 36
while 迴圈執行時, 會先檢查條件是否成立, 進而決定是否執行迴圈中的程式區塊 而 do while 迴圈第一次執行時並不會先檢查判斷條件, 直接執行迴圈中的程式區塊, 執行完畢後才會檢查條件是否滿足 語法 do 程式區塊 while ( 判斷條件 ); 37
用法 do Console.WriteLine("1"); while (false); // 輸出結果.. 1 do while 迴圈中, 一樣可以使用 break 及 continue 38
程式功能 簡易猜數字遊戲 亂數產生一個 1~3 間的整數 請使用者猜測整數值 列印猜測結果 詢問使用者是否再玩一次 程式內容 // 亂數宣告 Random rnd = new Random(); 39
程式內容 // 執行遊戲 do Console.Write(" 您猜的數字為 (1~3).."); 40
if (rnd.next(1,4) dn ( == int.parse(console.readline())) ())) Console.WriteLine(" 您好厲害猜中了!!"); else Console.WriteLine(" 哈哈哈!! 沒猜中!!"); Console.Write( Write(" 再玩一遍!! (y/n)"); ); while(console.readline() == "y"); 41
程式功能 判斷輸入值是否在 0 ~ 100 間 輸入 x 若 x 的值不在範圍內, 請使用者重新輸入 基本概念 利用 do while 即可完成 42
程式功能 輸入二個整數 求出二整數間之最大公因數 利用輾轉相除法完成 紅利 輾轉相除法.. 10 分 43
選擇結構流程控制 ( 一 ) 選擇結構流程控制 ( 二 ) 重複結構流程控制 ( 一 ) 重複結構流程控制 ( 二 ) 重複結構流程控制 ( 三 ) 巢狀式迴圈 44
在一個迴圈的程式區塊中又有一個迴圈, 我們稱之為 巢狀式迴圈 假設 A 迴圈執行 m 次,B 迴圈執行 n 次,B 迴圈在 A 迴圈當中, 則 A 迴圈每執行一次,B 迴圈就會執行 n 次, 因此最後 B 迴圈的程式區塊會被執行 m * n 次 45
程式功能 計算內迴圈執行多少次 輸入內外迴圈執行次數 列印內迴圈執行次數 程式內容 // 輸入資料 Console.Write(" 輸入外迴圈執行次數.. "); int m = int.parse(console.readline()); Console.Write(" 輸入內迴圈執行次數.. "); int n = int.parse(console.readline()); 46
程式內容 int c=0; for(int i=0; i<m; i++) for(int j=0; j<n; j++) Console.WriteLine(" 內迴圈已經執行.. " + ++c + " 次!!"); 47