第二章

68
第第第 第第第第 第第第第第第第第第第第第第第第第第第第第第第第第第第第第第

Upload: lel

Post on 05-Jan-2016

27 views

Category:

Documents


0 download

DESCRIPTION

第二章. 流程控制. 本章投影片僅供本書上課 教師 使用 , 非經同意請勿供網路下載或拷貝. 2-1 演算法 (Algorithm). 演算法是設計程式的藍圖,規劃出解決問題 具體步驟。 演算法的定義: 為解決某特定問題,所規劃出一系列有順序 且明確步驟。 建造房子先繪藍圖再依藍圖建造符合需求房子。 利用電腦解決某問題前  先充分瞭解問題  構思出具體可行且有效率處理步驟  這些抽象思考過程需透過演算法做具體呈現, 做為撰寫程式的依據。. 好演算法必須滿足五個條件:. 1. 有 限 性:要在有限的步驟內解決問題。 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第二章

第二章

流程控制

本章投影片僅供本書上課教師使用,非經同意請勿供網路下載或拷貝

Page 2: 第二章

2-1 演算法 (Algorithm)

演算法是設計程式的藍圖,規劃出解決問題具體步驟。

演算法的定義:為解決某特定問題,所規劃出一系列有順序且明確步驟。

建造房子先繪藍圖再依藍圖建造符合需求房子。 利用電腦解決某問題前

先充分瞭解問題 構思出具體可行且有效率處理步驟 這些抽象思考過程需透過演算法做具體呈現, 做為撰寫程式的依據。

Page 3: 第二章

好演算法必須滿足五個條件:1.有 限 性:要在有限的步驟內解決問題。2.明 確 性:演算法中每個步驟必須清楚表達。3.輸入資料:應包含零個或一個以上輸入資料。4.輸出資料:演算法中至少應產生一個輸出。5.有 效 性:每個步驟須在有限時間內完成。

Page 4: 第二章

演算法表示方式有兩種: 使用虛擬碼 (Pseudo Code) 即一般描述語言

使用流程圖 (Flow Chart)

Page 5: 第二章

一、虛擬碼 使用文字敘述來說明處理問題的步驟。 類似程式語言。 此種表示方式較易改寫成任何程式語言。 複雜演算法大都採用此方式描述。

Page 6: 第二章

二、流程圖 流程圖是利用簡明的圖形符號來表示

程式處理問題的流程和方法。 藉著各種不同圖形和箭頭

來表達解決問題的順序 每種圖形代表一種作業功能 箭頭代表流程方向,可協助設計出周詳程式 不致漏掉某些部份。

流程圖缺點 只能表示細部邏輯,對整個程式結構較難表示。

複雜演算法大都不採流程圖,而採虛擬碼。

Page 7: 第二章
Page 8: 第二章

【例】由鍵盤輸入密碼,若正確顯示 Pass , 若連續輸入三次都不對,顯示 Fail 。

使用虛擬碼 Step1 令猜的次數為 0 次。 Step2 輸入密碼,次數加 1 。 Step3 檢查密碼是否正確? 若正確,顯示 “ Pass” 。 跳到步驟 5 。

若不正確,繼續下一步驟。 Step4 檢查次數是否超過 3 ? 若次數未超過,跳到步驟 2 。 若次數超過,顯示 “ Fail” 。跳到步驟 5 。

Step5 結束程式執行。

Page 9: 第二章

方式 2 使用流程圖

Page 10: 第二章

2-2 結構化程式設計

結構化程式設計技巧: 1. 使用三種基本邏輯結構 循序、選擇、重覆。

2. 由上而下的設計。 3. 模組獨立性。

Page 11: 第二章

一、循序結構

Page 12: 第二章

二、選擇結構

Page 13: 第二章
Page 14: 第二章

三、重覆結構亦稱迴圈 (Loop) 。重覆結構可分為下列兩種:

1. 前測式重覆結構

2. 後測式重覆結構

Page 15: 第二章

1. 前測式重覆結構

Page 16: 第二章

2. 後測式重覆結構

Page 17: 第二章

2-3 選擇敘述

Page 18: 第二章

一、單向選擇 if … 敘述

Page 19: 第二章
Page 20: 第二章

二、雙向選擇 if …else… 敘述

Page 21: 第二章
Page 22: 第二章

三、…?…:… 三元運算子

Page 23: 第二章
Page 24: 第二章
Page 25: 第二章
Page 26: 第二章

// FileName : ifElse1.sln05 static void Main(string[] args)06 {07 int num = 0;08 Console.Write(" 請輸入正整數: ");09 num = int.Parse(Console.ReadLine());10 if (num % 2 == 0)11 Console.WriteLine("{0} 是偶數! ", num);12 else13 Console.WriteLine("{0} 是奇數! ", num);14 Console.Read();15 }

Page 27: 第二章

2-4 巢狀選擇

Page 28: 第二章
Page 29: 第二章
Page 30: 第二章

// FileName : ifElse2.sln

01 namespace ifElse2

02 {

03 class Program

04 {

05 static void Main(string[] args)

06 {

07 int score1 = 0, score2 = 0;

08 Console.Write(" 請輸入操行成績: ");

09 score1 = int.Parse(Console.ReadLine());

10 Console.Write(" 請輸入學科成績: ");

11 score2 = int.Parse(Console.ReadLine());

Page 31: 第二章

12 if (score1 >= 90)

13 if (score2 >= 95)

14 Console.WriteLine("操行 {0} 分 , 學科 {1} 分 ,獎學金 5000 元 ",

score1, score2);

15 else

16 if (score2 >= 90)

17 Console.WriteLine("操行 {0} 分 , 學科 {1} 分 ,獎學金 2000元 ",

score1, score2);

18 else

19 Console.WriteLine("操行 {0} 分 ,學科 {1} 分 , 未達申請條件 ",

score1, score2);

20 else

21 Console.WriteLine("操行 {0} 分 ,學科 {1} 分 , 未達申請條件 ",

score1, score2);

22 Console.Read();

23 }

24 }

25 }

Page 32: 第二章
Page 33: 第二章

2-5 多向選擇

Page 34: 第二章
Page 35: 第二章
Page 36: 第二章
Page 37: 第二章
Page 38: 第二章

// FileName : switch1.sln

01 namespace switch1

02 {

03 class Program

04 {

05 static void Main(string[] args)

06 {

07 int num1 = 0, num2 = 1;

08 Console.Write(" 請輸入第 1 個數: ");

09 num1 = int.Parse(Console.ReadLine());

10 Console.Write(" 請輸入第 2 個數 ( 不能為 0) : ");

11 num2 = int.Parse(Console.ReadLine());

12 string op;

13 Console.Write(" 請輸入運算子 (+ 、 - 、 * 、 /) : ");

Page 39: 第二章

14 op = Console.ReadLine();15 switch (op)16 {17 case "+":18 Console.WriteLine("{0} + {1} = {2}", num1, num2, num1 + num2);19 break;20 case "-":21 Console.WriteLine("{0} - {1} = {2}", num1, num2, num1 - num2);22 break;23 case "*":24 Console.WriteLine("{0} * {1} = {2}", num1, num2, num1 * num2);25 break;26 case "/":27 Console.WriteLine("{0} / {1} = {2}", num1, num2, num1 / num2);28 break;29 default:30 Console.WriteLine(" 運算子錯誤 ");31 break;32 }33 Console.Read();34 }35 }36 }

Page 40: 第二章

2-6 計數迴圈

Page 41: 第二章

一 . for … 迴圈

Page 42: 第二章
Page 43: 第二章
Page 44: 第二章
Page 45: 第二章

// FileName :forAdd1.sln05 static void Main(string[] args)

06 {

07 int start_num, end_num, step_num, i, sum = 0;

08 Console.Write(" 請輸入初值 ( 整數 ) : ");

09 start_num = int.Parse(Console.ReadLine());

10 Console.Write(" 請輸入終值 ( 整數 ) : ");

11 end_num = int.Parse(Console.ReadLine());

12 Console.Write(" 請輸入增值 ( 整數 ) : ");

13 step_num = int.Parse(Console.ReadLine());

14 for (i = start_num; i <= end_num; i += step_num)

15 sum += i;

16 Console.Write("初值 {0} 到終值 {1} 增值為 {2} 時,總和為 {3}",

start_num, end_num, step_num, sum);

17 Console.Read();

18 }

Page 46: 第二章
Page 47: 第二章
Page 48: 第二章
Page 49: 第二章

二 . Foreach 迴圈

Page 50: 第二章

簡例

Page 51: 第二章

2-7 條件式迴圈

條件式迴圈的基本形式有下列兩種:

1. 前測式迴圈: while…

2. 後測式迴圈: do…while

Page 52: 第二章

一、前測式迴圈

Page 53: 第二章
Page 54: 第二章

二、後測式迴圈

Page 55: 第二章

【簡例】使用者只能輸入 1 到 6 之間的整數。

int num;

do

{

Console.Write(" 請輸入 1 到 6之間的整數: ");

num = int.Parse(Console.ReadLine());

} while (num < 1 || num > 6);

Console.WriteLine("你輸入的整數 = {0}", num);

Page 56: 第二章

三、無窮迴圈

表示迴圈的條件式結果無法變為 false ,無法離開迴圈。

無法離開迴圈時按 <Ctrl>+ <Break> 鍵中斷程式。

Page 57: 第二章

2-8 巢狀迴圈

是指一個程式,迴圈內還有迴圈。一般製作二維表格如:九九乘法表或有規則表格都可用「巢狀迴圈」。

Page 58: 第二章
Page 59: 第二章

// FileName : nestFor1.sln05 static void Main(string[] args)06 {07 for (int i = 1; i <= 5; i++) 08 {09 for (int j = 1; j <= i; j++) 10 {11 Console.Write("{0} ", j);12 }13 Console.Write("\n"); 14 }15 Console.Read();16 }

Page 60: 第二章

2-9 例外處理當程式執行時發生問題會造成無法繼續執行,系統就會發出一個例外 (Exception) 訊號。

譬如:除法運算遇到除數為 0 時產生錯誤。 例外處理 (Exception Handle)

C# 將 發生問題程式區段 使用 try 框住,透過 catch 抓取符合問題的敘述在該區塊內編寫例外處理相關程式碼。

Page 61: 第二章

一、 try…catch…finally 語法

Page 62: 第二章

二、例外類別

Page 63: 第二章

【簡例】除數為 0 時的例外處理。 Filename : tryCatch.sln int num1=5, num2=0, num3; try { num3=num1/num2; Console.WriteLine(" 結果 = {0}", num3); } catch(DivideByZeroException e) { Console.WriteLine("除數不得為 0!!"); } catch(Exception e) { Console.WriteLine("其他錯誤 !!"); } Console.Read();

Page 64: 第二章

三、自訂例外處理

Page 65: 第二章
Page 66: 第二章

// FileName : tryCatch2.sln05 static void Main(string[] args)06 {07 string input;08 while (true)09 {10 try11 {12 Console.Write(" 請輸入 Y 或 N : ");13 input = Console.ReadLine();14 if (input != "Y" && input != "N")15 {16 throw new InvalidCastException();17 }18 Console.WriteLine("你輸入的是 {0}", input);19 break;20 }

Page 67: 第二章

21 catch (InvalidCastException ex)

22 {

23 Console.WriteLine(" 只能輸入 Y 或 N!");

24 }

25 }

26 Console.ReadLine();

27 }

28 }

29 }

Page 68: 第二章

本章結束Take a Break …..