.NET 程式設計入門 ( 使用 C#) 講師:鄧智鴻
Outline 流程控制 : 選擇判斷流程 流程控制 : 重覆流程 巢狀式迴圈
Outline 流程控制 : 選擇判斷流程 流程控制 : 重覆流程 巢狀式迴圈
流程控制 : 選擇判斷流程 擇一執行 程式區塊 1 程式區塊 2-1 程式區塊 2-2 程式區塊 3
流程控制 : 選擇判斷流程 if...else… 可利用關係及邏輯運算子,來描述是否執行流程中的程式 區塊 語法 if ( 判斷條件 ) { 條件成立時執行內容 ; } else { 條件不成立時執行內容 ; }
流程控制 : 選擇判斷流程 - 課堂範例 程式功能 請使用者先輸入名字 猜測使用者為男生 請使用者回答是否為男生 列印結語 程式內容 // 輸入資料 Console.Write(" 請輸入您的名字︰ "); string name = Console.ReadLine(); Console.WriteLine(" 我猜 " + name + " 您一定是個男生 !!");
流程控制 : 選擇判斷流程 - 課堂範例 程式內容 Console.Write(“\n 所以 … 您真的是男生嗎 ? (y/n)"); string sex = Console.ReadLine(); if (sex == "y" || sex == "Y“ ) { Console.WriteLine(" 怎麼樣 !! 厲害吧 !!"); } else { Console.WriteLine(" 其實我是故意猜錯的 !!"); }
流程控制 : 選擇判斷流程 - 課堂練習 程式功能 請使用者先輸入名字 利用亂數來決定猜測使用者為男生或女生 請使用者回答是否為亂數所產生出來的性別 列印結語 基本概念 可使用亂數產生一個為 0 或 1 的數,當為 0 時猜測為女生, 為 1 時猜測為男生
流程控制 : 選擇判斷流程 擇一執行 程式區塊 1 程式區塊 2-1 程式區塊 2-2 程式區塊 3 程式區塊 2-3 程式區塊 2-4
流程控制 : 選擇判斷流程 If…else if … else... 當程式具有多個判斷條件時,可利用 if …else if …else if …else 來完成 語法 if ( 判斷條件 1) { 程式區塊 1; } else if ( 判斷條件 2) { 程式區塊 2; } else if ( 判斷條件 3) { 程式區塊 3; } else { 程式區塊 4; }
流程控制 : 選擇判斷流程 - 課堂範例 程式功能 請使用者輸入考試成績 列印成績的等第 程式內容 // 輸入資料 Console.Write(" 請輸入您的成績︰ "); int grade = int.Parse(Console.ReadLine());
流程控制 : 選擇判斷流程 - 課堂範例 // 輸出結果 Console.Write("\n 您的成績等第為︰ "); if (grade >= 80 && grade <= 100) { Console.WriteLine(" 優等 !!"); } else if (grade >= 70 && grade < 80) { Console.WriteLine(" 甲等 !!"); } else if (grade >= 60 && grade < 70) { Console.WriteLine(" 乙等 !!"); } else { Console.WriteLine(“ 丙等 !!"); }
流程控制 : 選擇判斷流程 - 課堂練習 程式功能 剪刀、石頭、布 列印剪刀、石頭及布讓使用者選擇 電腦隨機選擇 列印勝負結果 基本概念 以數字 1 、 2 、 3 記錄使用者所出的拳 利用亂數選擇電腦要出的拳 利用 if …else if …else 判斷結果
流程控制 : 選擇判斷流程 三元運算子可用來取代 if …else 流程控制,使得程式 碼更為簡潔 語法 變數 = 判斷條件 ? 變數值 1 : 變數值 2 用法 string a = 7>4 ? "7 比 4 大是對的 " : "7 比 4 大是錯的 "; 輸出結果︰ 7 比 4 大是對的 string b = 1>4 ? "1 比 4 大是對的 " : "1 比 4 大是錯的 "; 輸出結果︰ 1 比 4 大是錯的
流程控制 : 選擇判斷流程 - 課堂練習 程式功能 請使用者輸入兩個數字 在螢幕上列印出大的那一個 基本概念 三元運算子可以簡單地達成
流程控制 : 選擇判斷流程 程式中若具有多個判斷條件時,除了 if …else if …else 流程 控制外,還可以選擇 switch 敘述 語法 switch ( 判斷數值 ) { case 條件值 1: 程式區塊 1 break; case 條件值 2: 程式區塊 2 break; default: 預設程式區塊 break; }
流程控制 : 選擇判斷流程 switch 流程控制不但簡潔更易維護 switch 的判斷條件可為變數、數值或字串等等 判斷條件結果之資料型別要與所有條件值的資料型別 一致 若條件值 1 滿足時,便會執行程式區塊 1 的程式內容, 直到 break 為止,然後離開 switch 敍述 若所有條件值皆不滿足時,便會執行 default 的預設程 式區塊內容
流程控制 : 選擇判斷流程 - 課堂範例 程式功能 請使用者輸入他想看的頻道 然後編個理由和他說節目沒了 ( 不同頻道要用不同理由 ) 程式內容 // 輸入頻道 int channel; Console.WriteLine(“ 頻道 1- 中華職棒 "); Console.WriteLine(“ 頻道 2- 彩虹頻道 "); Console.WriteLine(“ 請輸入您想看的頻道︰ "); channel = int.Parse(Console.ReadLine());
流程控制 : 選擇判斷流程 - 課堂範例 switch (channel) { case 1: Console.WriteLine(" 中華職棒快打不下去了, 看了傷心還是別看吧 "); break; case 2: Console.WriteLine(" 彩虹要下雨天打開窗才可能看見喔 "); break; default: Console.WriteLine(" 不看就算了 "); break; }
流程控制 : 選擇判斷流程 - 課堂練習 程式功能 月份季節轉換 請使用者輸入月份 列印出所屬季節 基本概念 利用 switch 判斷結果 { case 1: case 2: 程式區塊 1….. break; // 這樣值為 1 或 2 的時候都會執行 }
Outline 流程控制 : 選擇判斷流程 流程控制 : 重覆流程 巢狀式迴圈
流程控制 : 重覆流程 重複多次 程式區塊 1 程式區塊 2 程式區塊 3
流程控制 : 重覆流程 for loop 當我們需要重複執行某段程式區塊時,就可以利用重複結 構流程控制來達成 語法 for ( 初值 ; 判斷式 ; 遞變值 ) { 程式區塊 ; } 用法 for (int i=0; i<10; i++) { Console.Write (i + " "); } // 輸出結果︰
流程控制 : 重覆流程 迴圈執行時,會先判斷初值是否滿足判斷式,若滿足則執 行程式區塊,程式區塊執行完畢後會回到遞增值部份,遞 增值結束後再一次回到判斷式中,檢查遞增後的值是否滿 足判斷式,滿足再次執行程式區塊,完成後再次回到遞增 值部份,直到判斷式不滿足為止離開迴圈 程式區塊只有一行時,可省略大括號 假設初值與遞增值有二個以上的運算式,中間必須以逗號 分隔 for (int i=0, j=0; i*j <10; i++, j++) 初值、判斷式及遞增值必須仔細考量設定,以防造成『無 窮迴圈』 若初值、判斷式及遞增值皆省略,即為無窮迴窮 for ( ; ; )
流程控制 : 重覆流程 - 課堂範例 程式功能 輸入 x 列印出 1 ~ x 間所有整數和 程式內容 Console.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 );
流程控制 : 重覆流程 - 課堂練習 程式功能 輸入 x 列印出 1~x 間所有奇數和
流程控制 : 重覆流程 break 在執行迴圈中,若遇到 break 陳述句時,會立即跳出迴圈 continue 在執行迴圈中,若遇到 continue 陳述句時,會略過而不執 行迴圈體中剩下的部份,立即跳至遞增值部份
流程控制 : 重覆流程 - 課堂範例 程式功能 for loop 執行 100 次,每次都亂數產生一個 1~100 間數 若第 k 次的 loop 產生的亂數剛好是 k ,那就跳出迴圈 每次都列出現在是第幾次,以及產生的亂數為多少 程式內容 int random_number; Random ran = new Random(); for (int a = 1; a <= 100;a++ ) { random_number = ran.Next(1, 101); Console.WriteLine(“ 現在是第 “+a+” 次 ”+”, 產生的亂數為 ”+random_number); if (a == random_number) { break; } Console.ReadKey();
流程控制 : 重覆流程 - 課堂練習 程式功能 登入系統 請使用者輸入密碼 輸入密碼為 john 則允許登入 容許三次登入機會
流程控制 : 重覆流程 - 課堂範例 程式功能 輸入 x 列印出 1~10 間不含 x 的所有數 程式內容 Console.Write(“ 請輸入一個整數 :”); int x=int.Parse(Console.ReadLine()); for(int i=1; i<=10; i++) { if(i==x) {continue;} Console.WriteLine(i); }
流程控制 : 重覆流程 - 課堂練習 程式功能 請使用者輸入一整數 N 請統計 1~N 中有多少整數可被 5 整除 將答案列印出來 提示 1~N 中的每個數都要被檢驗是否可被 5 整除,但不是每個數 都要被列入統計
流程控制 : 重覆流程 while loop for 迴圈中必須先設定迴圈執行次數,而 while 迴圈只須設定執行迴圈 的條件即可,當條件滿足時,即會不斷重複執行 語法 while ( 判斷條件 ) { 程式區塊 } 用法 int i = 0; while (i < 10) { i++; Console.Write(i + " "); } // 輸出結果︰
流程控制 : 重覆流程 while 迴圈在執行時,會先檢查條件是否成立,當條件 成立時才會執行迴圈中的程式區塊 while 迴圈中,一樣可以使用 break 及 continue 程式區塊中,必須有將判斷條件變成 false 的陳述句, 否則將導致無窮迴圈 while 迴圈判斷條件後加上時,表示迴圈中不需執行任 何程式區塊 while (Console.ReadLine() != "yes");
流程控制 : 重覆流程 - 課堂範例 程式功能 階乘計算 輸入 x 列印出 x! 的值 基本概念 int result=1, x, i=1; x = int.Parse(Console.ReadLine()); while(i<=x) { result *= i++; } Console.WriteLine(result); Console.ReadKey();
流程控制 : 重覆流程 - 課堂練習 程式功能 請使用者輸入整數 列印出 1 加 2 加 3 加至多少才會大於該整數 例 :“1+…+3 才會大於 5” 請使用者輸入 quit 後離開
流程控制 : 重覆流程 do…while loop while 迴圈執行時,會先檢查條件是否成立,進而決定 是否執行迴圈中的程式區塊。而 do …while 迴圈第一 次執行時並不會先檢查判斷條件,直接執行迴圈中的 程式區塊,執行完畢後才會檢查條件是否滿足 語法 do { 程式區塊 } while ( 判斷條件 );
流程控制 : 重覆流程 用法 do { Console.WriteLine("1"); }while (false); // 輸出結果︰ 1 do …while 迴圈中,一樣可以使用 break 及 continue
流程控制 : 重覆流程 - 課堂範例 程式功能 判斷輸入值是否在 0 ~ 100 間 輸入 x 若 x 的值不在範圍內,請使用者重新輸入 程式內容 int input; do { Console.WriteLine(" 請輸入 1~100 間的整數 "); input=int.Parse(Console.ReadLine()); } while (input 100 );
流程控制 : 重覆流程 - 課堂練習 程式功能 簡易猜數字遊戲 亂數產生一個 1~3 間的整數 請使用者猜測整數值 若猜對則列印 " 您好厲害猜中了 !!“ 否則列印 ” 哈哈哈 !! 沒猜中 !!" 詢問使用者是否再玩一次
流程控制 : 重覆流程 - 課堂練習 程式功能 輸入二個整數 求出二整數間之最大公因數 利用輾轉相除法完成 提示 輾轉相除法 : 一直除以餘數直到可除盡 例如 : 取 18 和 12 的最大公因數 18/12=1…6 12/6=2…0 除盡了,表示 6 是最大公因數
Outline 流程控制 : 選擇判斷流程 流程控制 : 重覆流程 巢狀式迴圈
巢狀式迴圈 重複多次 程式區塊 1 程式區塊 2 程式區塊 3 重複多次 程式區塊 2-1 程式區塊 2-2
巢狀式迴圈 在一個迴圈的程式區塊中又有一個迴圈,我們稱之為 『巢狀式迴圈』 假設 A 迴圈執行 m 次, B 迴圈執行 n 次, B 迴圈在 A 迴 圈當中,則 A 迴圈每執行一次, B 迴圈就會執行 n 次, 因此最後 B 迴圈的程式區塊會被執行 m * n 次
巢狀式迴圈 程式功能 輸入內外迴圈執行次數 計算內迴圈內的程式碼實際執行多少次 列印內迴圈執行次數 程式內容 // 輸入資料 Console.Write(" 輸入外迴圈執行次數︰ "); int m = int.Parse(Console.ReadLine()); Console.Write(" 輸入內迴圈執行次數︰ "); int n = int.Parse(Console.ReadLine());
巢狀式迴圈 程式內容 // 列印結果 int c=0; for(int i=0; i<m; i++) { for(int j=0; j<n; j++) { Console.WriteLine(" 內迴圈已經執行︰ " + (++c) + " 次 !!"); }
巢狀式迴圈 - 課堂範例 程式功能 列印出九九乘法表 程式內容 // 列印九九乘法表 for(int i=1; i<=9; i++) { for(int j=1; j<=9; j++) { Console.Write(i + "*" + j + "=" + (i*j) + "\t"); } Console.WriteLine(); }
巢狀式迴圈 - 課堂練習 程式功能 輸入 n 列印出邊長為 n 的實心正方形 * *
巢狀式迴圈 - 課堂範例 程式功能 輸入 x 列印出邊長為 x 的空心正方形 程式內容 int x; do { Console.Write(" 請輸入 x 的值 ( 奇數 ) ︰ "); x = int.Parse(Console.ReadLine()); } while (x <= 0);
巢狀式迴圈 - 課堂範例 程式內容 for(int i=0; i<x; i++) { for(int j=0; j<x; j++) { if (i >= 1 && i = 1 && j < x - 1) Console.Write(" "); else Console.Write(“* ”); } Console.WriteLine(); } Console.ReadKey();
巢狀式迴圈 - 課堂練習 程式功能 輸入 x ( 奇數 ) 列印出邊長為 x 的格子狀正方形 例如 : X=5 * * * * * * * * * * * * * * * * * * * * *
變數生命周期 變數的生命週期根據變數所屬的有效範圍來決定 我們可以簡單的把一組大括號所包含的範圍稱為一段 『程式碼區塊』 程式碼區塊界定變數的有效範圍 實例 在迴圈中宣告的變數,在迴圈外的程式碼區塊中便無法存 取該變數 for (int a = 0; a < 5; a++) { int I_am_a_variable; } I_am_a_variable = 1; // 錯誤, 因為這個變數已經不存在了
變數生命周期 例子 2 int k; for (int a = 0; a < 5; a++) { int k; } 例子 3 for (int a = 0; a < 5; a++) { int k; } for (int b = 0; b < 5; b++) { int k; }
作業 1-1 程式功能 輸入 x 列印出邊長為 x 的等腰直角三角形 基本概念 利用 if 來判斷決定出該列印那些星星
作業 1-2 程式功能 輸入平行四邊形的底和高 列印實心及空心平行四邊形