翻轉電子書系列:Java 程式設計()含程式邏輯  

翻轉工作室:粘添壽

第四章 順序與分歧流程

4-1 程式流程簡介

(1) 程式(Program即是要求電腦執行工作的一份詳細企劃書。設計師製作程式時,除了期望達成目標之外,也須考慮可能發生的其他異常狀況,事先規劃狀況發生時應如何處理。為了製作各種可能出現狀態,一般程式語言可下列三種敘述流程:

(2) 順序性流程:將敘述句由上往下依照順序排列。電腦按部就班地執行完一個敘述句後,緊接著執行下一個敘述句,一直到所有敘述句執行完畢為止。

(3) 選擇性流程:選擇性敘述句(if/else)會判斷某一種條件是否成立,成立與否可能執行不同的敘述;程式結束後,某些敘述可能不會被執行到。

(4) 重複性流程:重複性敘述句亦會判斷某一條件是否成立,條件成立的話,則重複執行某敘述區塊;條件不成立,則停止該敘述運作。

本章將介紹順序與選擇性敘述,至於重複性敘述於下一章(第五章)介紹。

4-2 順序性流程

4-2-1 順序性敘述

將若干條敘述句(Statement由上往下排列,每一行編寫一條敘述句並以一個『分號』(;)表示結束。電腦接收到程式後,將依序由上往下執行程式內每一條敘述句,如圖 4-1 所示。

4-1 順序性敘述的範例

許多程式語言(如 Java C),並沒有要求一個敘述命令需要單獨一行排列,而是以一個『分號』(;)表示一個敘述的結束。也就是說,一個敘述句可能佔用多行;或是,一行裡存放多個敘述句,但每一個敘述句都是以分號表示結束。

4-2-2 範例探討:超商列印購買清單

A)程式功能:Ex4_1.java

請製作一套具有列印購物清單功能的超商收銀機。假設該收銀機僅允輸入三種貨品的購買數量,並會顯示該貨品的數量;使者輸入客戶購買數量後,系統會計算總金額及印出清單,操作介面如下:

百事可樂(每瓶 15 ) 購買數量 =>5

國民便當(每盒 45 ) 購買數量 =>2

約翰走路(每瓶 312 ) 購買數量 =>2

 

 *** 列印購物清單 ***

-------------------------------------------------------------------

|   品名         |    單價      |  數量  |  小計     |

-------------------------------------------------------------------

| 百事可樂       |    15        |    5     |   75      |

| 國民便當       |    45        |    2     |   90      |

| 約翰走路       |   312        |    2     |   624   |

------------------------------------------------------------------

| 總計     |     789                                |

------------------------------------------------------------------

B)製作技巧分析:

乍看起來,本範例好像不合乎實際情況,購物清單應該由印表機輸出才對,哪有由螢幕輸出的現象;其實在編寫程式時,無論是螢幕或印表機輸出格式都是相同的,只不過設定輸出設備不同而已。本範例僅利用順序敘述句即可達成,較困難的地方是,如何將清單排列整齊;吾人可利用跳『Tab』(\t)空白格的小技巧,將某些文字固定於特定位置。

C)程式範例:

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

// Ex4_1.java

 

import java.util.Scanner;

public class Ex4_1 {    

  public static void main(String args[]) {

     Scanner in = new Scanner(System.in);

     int total, sum1, sum2, sum3, value;

     int item1, item2, item3;

 

     System.out.printf("百事可樂(每瓶 15 ) 購買數量 =>");

     item1 = in.nextInt(); sum1 = item1 * 15;

       

     System.out.printf("國民便當(每盒 45 ) 購買數量 =>");

     item2 = in.nextInt(); sum2 = item2 * 45;

 

     System.out.printf("約翰走路(每瓶 312 ) 購買數量 =>");

     item3 = in.nextInt(); sum3 = item3 * 312;

 

     total = sum1+sum2+sum3;

     System.out.printf("\n *** 列印購物清單 ***\n");

     System.out.printf("------------------------------------------------------------------\n");

     System.out.printf("|   品名  \t|    單價   \t|  數量  \t|  小計 \t |\n");

     System.out.printf("------------------------------------------------------------------\n");

     System.out.printf("| 百事可樂\t|    15     \t|    %d  \t|   %d  \t |\n",

 item1, sum1);

     System.out.printf("| 國民便當\t|    45     \t|    %d  \t|   %d  \t |\n",

 item2, sum2);

     System.out.printf("| 約翰走路\t|   312     \t|    %d  \t|   %d  \t |\n",

 item3, sum3);

     System.out.printf("------------------------------------------------------------------\n");

     System.out.printf("| 總計  \t|     %d     \t          \t        \t |\n",

 total);

     System.out.printf("------------------------------------------------------------------\n");

  }

}

D)程式重點分析:

4-2-3 自我挑戰:規劃客戶資料

雖然可以任意指定變數名稱,來存放各項資料,但一般公司都希望所儲存的資料能夠在不同系統之間相互享用,所代表資料的變數名稱與資料型態,則必須統一規定才可達成。因此,公司大多會指定每一種資料的名稱與型態,公佈並要求程式設計師依照此標準編寫程式。我們以一個美體公司做個簡單的範例,來觀察一般公司指定變數型態的方法如何。

A)程式功能:PM4_1.java

請您幫『春嬌美體公司』建立一套客戶資料登錄系統,該系統以交談方式詢問客戶資料,輸入完後在螢幕上顯示客戶資料;客戶資料包含有:姓名(String name;)、性別(int sex; (1 表男性;0 表女性))、年齡(int age;)、地址(String address;)、身高(float tall;)、體重(float weight;)。期望操作介面如下:

請輸入客戶姓名 =>張大智

請輸入客戶性別(: 1, : 0) =>1

請輸入客戶年齡 =>22

請輸入客戶地址 =>高雄市鳥松區澄清路 840

請輸入客戶身高 =>175

請輸入客戶體重 =>72

 

列印客戶資料如下:

客戶姓名 = 張大智

    姓別 = 1 (1: 0:)

    年齡 = 22

    地址 = 高雄市鳥松區澄清路 840

    身高 = 175.00

    體重 = 72.00

B)製作技巧提示:

首先設定客戶資料的名稱與型態,再分別讀入與輸出,程式提示如下:

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

….

/* 規劃資料的名稱與型態 */

String name;     // 姓名

int sex;         // 性別 (1:, 0:)

int age;         // 年齡

String address;  // 地址

float tall;      // 身高

float weight;    // 體重

……

/* 輸入客戶各項資料 */

System.out.print("請輸入客戶姓名 =>");

name = keyin.nextLine();

……

System.out.printf("請輸入客戶年齡 =>");

     age = keyin.nextInt();

keyin.nextLine();             // 清除輸入 enter

….

/*  列印客戶資料  */

System.out.printf("\n列印客戶資料如下: \n");

System.out.printf("客戶姓名 = %s\n", name);

System.out.printf("    姓別 = %d (1: 0:)\n", sex);

……

C)擴充程式功能:

雖然變數 sex = 1 表示男性;sex=0 為女性,這僅針對資料儲存較為方便而已;資料輸出時,還是能夠確實表示『男』或『女』較為理想,而不要用 0 1 來取代,可稍修上述提示即可達成,如下:

……

if (sex == 1)

     System.out.printf("    姓別 = 男性\n");

else

     System.out.printf("    姓別 = 女性\n");

……

 

4-3 條件判斷式

程式執行當中,期望測試某些現象是否發生,再決定如何處理下一步驟的話,則需仰賴條件判斷式來達成。也就是說,程式當中可加入某些條件判斷式,測試是否發生某種特殊現象。經由判斷式運算處理後,有兩種輸出結果:『真』(True)或『假』(False),前者表示條件成立;後者為條件不成立。

一般程式語言的比較判斷式大致上可區分為:數值比較、字元比對與條件邏輯組合等三類,以下分別介紹之。

4-3-1 數值比較

兩數值之間比較判斷是否大於(>)、小於(<)、大於或等於(>=...等等等。得到一個『真』(true1)或『否』(false0)的邏輯結果,常用的數值比較判斷運算子,如表 4-1 所示。

4-1 判斷式(假設 value1 = 10value2 = 5

判斷式

  

大於

(value1 > value2),則輸出為 true (1)

小於

(value1 < value2),則輸出為 false(0)

==

等於

(value1 == value2),為輸出為 false (0)

!=

不等於

(value1 != value2) true (1)

>=

大於或等於

(value1 >= value2) true (1)

<=

小於或等於

(value1 <= value2) false (0)

4-3-2 字元或字串比對

字元或字串比對與數值比較不同,字元比對必須使用 Character 類別方法,字串則須利用 String 方法;假設 key 被宣告成字元或字串物件,則常用的比對方法如表 4-2 所示。

4-2 字元比對方法(假設 key = ‘y’

判斷式

  

equals()

是否相同

key.equals(“n”),則輸出為 false (0)

compareTo()

字元比較大小

key.compareTo(“n”),整數輸出之間差異。

length()

字串長度

key.length(),輸出字串內字元長度。

isDigit()

是否數字

key.isDigit(),為輸出為 false (0)

isLetter()

是否文字

key.isLetterl(),為 true (1)

isLowerCase()

是否小寫

key.isLowerCase(),為 true (1)

isSpace()

是否空白格

key.isSpace(),為 false (0)

4-3-3 條件邏輯組合

當一個判斷式無法滿足條件時,也許需要多個判斷式組合成為一個決定條件。譬如:天氣下雨又颳風的話,則必須穿雨衣,其表示兩種條件都成立,才處理預先制定的事項。組合條件判斷中,每一個判斷式的計算輸出不是 1true)則是 0false),再利用特殊邏輯運算子來組合多個判斷式;但經過邏輯運算處理後,輸出也是 0 1。表 4-3 為一般程式語言的邏輯運算子。

4-3 邏輯運算子

運算式

  

&&

AND(且)

X && YX Y 兩條件都成立。

||

OR(或)

X || YX Y 只要一個條件成立即可。

!

NOT(否)

! XX 條件不成立即可。

4-4 分歧流程 - if

4-4-1 if 敘述流程

if 選擇性敘述(Selection statement)的功能是,首先判斷某一條件,如果條件成立的話,則執行某一敘述區塊(或某一敘述);不成立的話,則不做任何事或執行另一敘述區塊。

4-2 if 敘述(if statement)的流程控制圖(或稱流程圖),其中『圓形』為敘述句的開始(start)與結束(stop);『菱形』內存放條件判斷式,有成立(yes)與不成立(no)兩種可能性輸出;另外,『矩形』內存放敘述區塊(一連串順序性敘述)。

整體上而言,if 敘述句開始時,進入『條件判斷式』測試條件是否成立,成立則執行『yes 敘述區塊,然後結束 if 敘述;條件不成立的話,則直接離開,而不執行任何敘述。If 選擇敘述的語法如下:

4-2 if 敘述的流程圖

if 敘述語法:

      例:

if (條件判斷式) {

敘述 1;

敘述 2;

…..

}

if (value > 0) {

float sqrt_value = Math.sqrt(value);

System.out.printf("%.2f 平方根值為 =", value);

System.out.printf("%.2f \n", sqrt_value);

}

4-4-2 範例研討:簡單計算器製作

A)程式功能:Ex4_2.java

請製作一個求平方根的計算器,但被計算的原數不可以是負數;使用者輸入某一數值後,系統會先測試該值是否大於 0,如正確輸入則計算並輸出其平方根值。並期望系統操作介面如下:

如果輸入值大於零的結果如下:

請輸入一個浮點數 =>4.5

4.50 的平方根值為 = 2.12

程式最後結束了

 

如果輸入值小於零的結果如下:

請輸入一個浮點數 =>-3.5

程式最後結束了

B)製作技巧研討:

系統要求使用者輸入一個大於零的浮點數,如果正確輸入的話(if 敘述功能),則執行計算均方根函數(Math.sqrt()),否則不予執行。當 if 敘述句完成之後,再執行列印『程式最後結束了』之敘述句。程式流程圖如下:

4-2-1 計算器製作

C)程式範例:

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

// Ex4_2.java

 

import java.util.*;

public class Ex4_2 {    

   public static void main(String args[]) {

      Scanner keyin = new Scanner(System.in);

      double value, squre;

      System.out.printf("請輸入一個浮點數 =>");

      value = keyin.nextDouble();

      if (value > 0) {

          squre = Math.sqrt(value);

          System.out.printf("%.2f 的平方根值為 = %.2f\n", value, squre);

      }

      System.out.printf("程式最後結束了 \n");

   }

}

D)程式重點分析:

4-4-3 自我挑戰:薪資計算系統

A)程式功能:PM4_2.java

請幫春嬌美體公司建立一套薪資管理系統。員工薪資必須符合勞委會規定,底薪不可以低於 16800 元,如低於該值則自動調整到最低薪資;加班時數不得高於 45 小時,高於 45 小時則以 45 小時計算;又加班費為原來時薪再增加 1/3 倍(即是原來時薪的 (1 + 1/3) 倍)。該系統允許輸入員工姓名、底薪、加班時數,計算完成後,分別印出該員工姓名、底薪、加班費與應領薪資多寡。期望操作介面如下:

輸入薪資如符合規定,如下

請輸入員工姓名 =>張大智

請輸入底薪 =>24000

請輸入加班時數 =>30

 

列印員工薪資如下:

員工姓名 = 張大智

底薪 = 24000

加班費 = 3998

本月薪資 = 27998

輸入薪資如不符合勞委會規定,如下:

請輸入員工姓名 =>劉明傳

請輸入底薪 =>15000

請輸入加班時數 =>50

 

列印員工薪資如下:

員工姓名 = 劉明傳

底薪 = 16800

加班費 = 4198

本月薪資 = 20998

B)製作技巧提示:

輸入底薪後,立即判斷是否小於 16800 元,如是的話,就將底薪設定為 16800 元;同樣的,判斷加班時數是否大於 45 小時,成立則設定為 45。另一重點是,計算時薪時,必須將其轉換成點浮點數,最後結果再轉換回整數,如此計算員工較不會吃虧。程式提示如下:

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

…..

/* 輸入底薪後,判斷是否低於 16800,如是則設定成 16800 */

System.out.printf("請輸入底薪 =>");

base = keyin.nextInt();

if (base < 16800)

      base = 16800;

 

/* 輸入加班時數,再判斷是否高於 45,如是則設定成 45 */

System.out.printf("請輸入加班時數 =>");

extra = keyin.nextInt();

if (extra > 45)

      extra = 45;

/* 計算加班費,以及應領薪資多寡*/

extra_pay = (int)(((double)base/(30 * 8))*1.333 * extra);

pay = base + extra_pay;

…..

 

4-5 if/else 敘述與 Random 亂數產生

4-5-1 if/else 敘述流程

if/else 敘述句的特點是條件成立與否,都需各自執行所屬的敘述區塊,『yes body』或『else body』。圖 4-3 if/else 敘述的流程圖;程式進入該敘述後,首先判斷條件是否成立,成立的話則執行『 Yes』實體(yes body)敘述區塊;否則執行『else 實體(else body)敘述區塊。分別執行完敘述區塊後,立即離開 if/else 敘述句。另一個重點是,如果區塊內僅有一行敘述句的話,則左右大掛號({ …})可以省略。if/else 敘述的語法與範例如下:

4-3 if/else 敘述的流程圖

if/else 敘述語法:

範例:

if (條件判斷) {    //Yes body

Statement 1;

}

else {       //Else body

    Statement 1;

    ….

}

if (value1 == value2) {

   System.out.printf("答對了 您好棒 !!");

}

else {

   System.out.printf("答錯了  加油!!\n");

….

}

4-5-2 好用的 Random 類別

亂數的應用很多,賭場裡看得到的賭具多半與亂數有關,台灣從早期的瘋狂大家樂到現在合法的樂透彩也都是亂數的應用。

既然亂數是一種不可計算的數,它又如何能被設計?所以在數學上所產生的亂數也只能算是虛擬亂數,也就是自然界根本不存在真正的亂數,當然若產生的亂數已超過能歸納的規則,我們也可以將它視之為「真正的亂數」。在 Java 中,有一個專門產生亂數的類別—Random類別,它是 java.util 套件中的一個類別,所以使用上,除了要匯入 java.util.Random(或 java.util.* 外,還要產生物件才可以使用,語法如下:

import java.util.*;

…..

Random random = new Random();

int ran1 = random.nextInt(9);

……

上述語法說明如下:

nextDouble()

產生 0.0 ~ 1.0 之間雙倍浮點數

nextFloat()

產生 0.0 ~ 1.0 之間的浮點數

setSeed(long seed)

設定亂數種子為 seed

nextInt(int n)

產生 0 ~ n 之間的整數

4-5-3 範例探討:乘法練習系統

A)程式功能:Ex4_3.java

請製作一套九九乘法練習系統,系統會隨機出現兩個 1 ~9 的整數,學生將兩值相乘的值輸入,如果正確則系統會出現『您好棒 !!』;否則出現則出現正確答案,並出現『答錯了, 還要多努力哦 !!』。期望系統操作介面如下:

輸入正確答案的結果如下:

請輸入 6 * 3 =18

答對了 您好棒 !!

 

輸入錯誤答案的結果如下:

請輸入 5 * 7 =42

答錯了 正確答案是 35 多加油哦 !!

B)製作技巧研討:

系統要求隨機產生兩個介於1 ~ 9 之間的整數相乘,因此需利用亂數產生器(Random)來達成,系統相乘的結果與使用者輸入兩者相比較,如相同則表示使用者正確,否則不正確。

C)程式範例:

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

// Ex4_3.java

import java.util.*;

public class Ex4_3 {    

   public static void main(String args[]) {

      Scanner keyin = new Scanner(System.in);

      Random random = new Random();

      int ran1 = 1 + random.nextInt(9);

      int ran2 = 1 + random.nextInt(9);

      int value1 = ran1 * ran2;

 

      System.out.printf("請輸入 %d * %d =", ran1, ran2);

      int value2 = keyin.nextInt();

 

      if (value1 == value2) {

          System.out.printf("答對了 您好棒 !!");

      }

      else {

          System.out.printf("答錯了 正確答案是 %d 多加油哦 !!\n", value1);

      }

   }

}

D)程式重點說明:

4-5-4 自我挑戰:擲骰子遊戲

A)系統功能:PM4_3.java

許多博奕或遊戲方法,都利用擲骰子決定優先順序。請製作一套擲骰子工具,每一個骰子有 6 面(1 ~ 6),每次擲三個骰子。系統會要求擲骰子的人輸入姓名,擲完取得點數記錄,再由對賭的人輸入姓名後擲點,由系統判斷哪一個人贏了此局。期望系統操作介面如下:

請輸入第一個玩家的姓名(開始擲骰子) =>惠妹

張惠妹 先生/小姐擲骰子是 3  1  4 合計 = 8

 

請輸入第二個玩家的姓名(開始擲骰子) =>蔡依玲

蔡依玲 先生/小姐擲骰子是 5  4  1 合計 = 10

 

恭喜 蔡依玲 先生/小姐贏了此局

B)製作技巧提示:

當系統執行讀取命令時(如,user1 = keyin.readLine()),系統會等待輸入,一直到使用者由鍵盤輸入相關資料,並以『Enter 鍵表示輸入結束,此時系統才會讀取資料並繼續執行其他命令。本範例就是利用這個特性來啟動亂數產生;即是系統要求輸入姓名後,再執行亂數產生器(num1 = 1 + random.nextInt(6)num2num3),並計算其總合(sum1 = num1 + num2 + num3);第二個玩家也以相同方法輸入(sum2 = num1 + num2 + num3)。最後比較誰擲的較大(sum1 >= sum2)。

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

….

/* 第一個玩家擲骰子 */

System.out.printf("\n請輸入第一個玩家的姓名(開始擲骰子) =>");

user1 = keyin.readLine();

num1 = 1 + random.nextInt(6);

num2 = 1 + random.nextInt(6);

num3 = 1 + random.nextInt(6);

sum1 = num1 + num2 + num3;

System.out.printf("%s 先生/小姐擲骰子是 %d  %d  %d 合計 = %d\n",

                                 user1, num1, num2, num3, sum1);

/* 第二個玩家擲骰子 */

System.out.printf("\n請輸入第二個玩家的姓名(開始擲骰子) =>");

……

sum2 = num1 + num2 + num3;

…..

/* 兩玩家的骰子, 比較誰大 */

if (sum1 >= sum2)

     System.out.printf("\n恭喜 %s 先生/小姐贏了此局\n", user1);

else

     System.out.printf("\n %s 先生/小姐贏了此局\n", user2);

….

4-5-5 自我挑戰:電影院售票系統

A)系統功能:PM4_4.java

請製作一套電影院的售票系統,系統會詢問客戶欲購買全票(250 元)、優待票(200 元)與半票(150 元)的數量;隨之輸入客戶所繳納的金額。如果繳納金額大於購票金額的話,則輸出應找零錢(500 元、100 元、50 元與 10 元)的數量;如果不夠則告知客戶,金錢不足請下次再來。期望操作介面如下:

繳納金額足夠的結果如下:

購買全票張數 (250) =>3

購買優待票張數 (200) =>2

購買半票張數 (150) =>2

請輸入客戶繳納金額 =>2000

 

全票 3, 優待票 2, 半票 2

總計 1450 , 客戶繳納 2000

應找金額 = 550 各種零錢數量如下:

        100 元零錢 = 5

        50 元硬幣 = 1

        10 元硬幣 = 0

         5 元硬幣 = 0

         1 元硬幣 = 0

繳納金額不足的結果如下:

購買全票張數 (250) =>6

購買優待票張數 (200) =>2

購買半票張數 (150) =>2

請輸入客戶繳納金額 =>1000

 

總計 2200, 繳納金額 1000

金額不足請下次再來, 謝謝 !!

B)製作技巧提示:

本系統與 3-3-3 節的範例(Ex3_3.java)大同小異,僅增加讀入客戶購票張數,以及計算總金額多寡。吾人可利用『虛擬碼』(Pseudo Code)規劃程式大綱如下:

宣告輸入物件;

宣告相關變數;

顯示全票票價(250 元)並讀入購買張數;

顯示優待票票價(200 元)並讀入購買張數;

顯示半票票價(150 元)並讀入購買張數;

計算購買總計金額;

要求輸入客戶繳納金額,並讀取;

計算應找金額多寡;

if (應找金額 >= 0) {

計算各零錢數量;

輸出客戶購買各種票的數量;

輸出總計,以及客戶繳納金額;

輸出應找金額,以及各零錢的數量;

}

else {

輸出總計,以及客戶繳納金額;

輸出歡迎下次再來

}

4-6 多重 if/else 選擇分歧

4-6-1 多重 if/else 敘述流程

4-4 為多重 if/else 選擇敘述的流程圖,主要功能是能連續測試多種條件是否成立。程式進入多重 if/else 敘述之後,首先判斷第一個條件是否成立,如果成立的話,則執行『yes 區塊』內敘述,之後也離開該敘述句;否則再測試第二個條件(else if),成立的話,則執行『敘述區塊』,之後也離開該敘述句;否則再測試第三個條件(else if)。依此類推,一直到所有條件測試完畢。

4-4 多重 if/else 敘述的流程圖

多重 if/else 敘述句的語法與範例如下:

語法:

範例:

if(條件運算式 1 {

    條件一成立的敘述區塊

    …..

}

else if(條件運算式 2 {

    條件二成立的敘述區塊

     ….

}

else if (條件運算式 3 {

     條件三成立的敘述區塊

     …..

}

else {

     條件全不符合的敘述區塊

     …..

}

if (bmi <= base) {      //條件一

    ….

    System.out.printf("您身材太瘦了\n");

    ….

}

else if (bmi >= height) {     //條件二

    System.out.printf("您身材太胖了\n");

    …..

}

else {               //上述條件都不成立

    System.out.printf("您是健美體材\n");

    …..

}

4-6-2 範例研討:測量身材 BMI 系統

A)程式功能:Ex4_4.java

美體中心小姐需時常幫客人計算 BMI 值(體重(kg/身高2m)),正常值為 18 ~ 24;低於 18 則太瘦,高於 24 則太胖。系統會要求輸入客人體重與身高,則輸出印出該它的 BMI 值,並告知太胖、太瘦或標準體材。期望系統操作介面如下:

太胖的結果如下:

== 歡迎使用 BMI 評估系統(18 ~ 24) ==

請輸入客戶身高(公分) =>170

請輸入客戶體重(公斤) =>80

 

客戶 BMI = 27.6817

您身材太胖了, 需要減重

== 系統結束, 歡迎再次光臨 ==

太瘦的結果如下:

== 歡迎使用 BMI 評估系統(18 ~ 24) ==

請輸入客戶身高(公分) =>170

請輸入客戶體重(公斤) =>45

 

客戶 BMI = 15.5709

您身材太瘦了, 需要增胖

== 系統結束, 歡迎再次光臨 ==

標準身材的結果如下:

== 歡迎使用 BMI 評估系統(18 ~ 24) ==

請輸入客戶身高(公分) =>170

請輸入客戶體重(公斤) =>60

 

客戶 BMI = 20.7612

恭喜您有一個健美體材

== 系統結束, 歡迎再次光臨 ==

B)製作技巧研討:

我們利用虛擬碼來設計該程式的製作技巧,如下:

宣告輸入物件;

宣告相關變數;

讀入客戶身高與體重(tollweight);

計算客戶 bmi = weight / (toll * toll)

輸出顯示客戶 BMI 值;

if (bmi < 18.0)

輸出告知客戶身材太瘦;

else if (bmi > 24.0)

輸出告知客戶身材太胖;

else

輸出告知客戶身材健美;

輸出顯示歡迎再度光臨;

C)程式範例:

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

// Ex4_4.java

 

import java.util.*;

public class Ex4_4 {    

   public static void main(String args[]){

      Scanner keyin = new Scanner(System.in);

      final double base=18.0, height=24.0;

      double toll, weight, bmi;

     

      System.out.printf("== 歡迎使用 BMI 評估系統(18 ~ 24) ==\n");

      System.out.printf("請輸入客戶身高(公分) =>");

      toll = keyin.nextDouble() / 100;

      System.out.printf("請輸入客戶體重(公斤) =>");

      weight = keyin.nextDouble();

      bmi = weight / (toll * toll);

 

      System.out.printf("\n客戶 BMI = %.4f\n", bmi);

      if (bmi <= base)

          System.out.printf("您身材太瘦了, 需要增胖\n");

      else if (bmi >= height)

          System.out.printf("您身材太胖了, 需要減重\n");

      else

          System.out.printf("恭喜您有一個健美體材\n");

      System.out.printf("== 系統結束, 歡迎再次光臨 ==\n");

  }

}

D)程式重點分析:

4-6-3 自我挑戰:計算雕塑身材質量

A)程式功能:PM4_5.java

美體中心僅利用 BMI=(體重(kg/身高2m))告知客戶是否太瘦或太胖,並不能滿足公司的要求(公司目的要客戶購買塑身課程)。請您修改 Ex4-4.java 系統,使其能告知客戶太胖時,應該減重多少公斤;或太瘦時應該增胖多少公斤,才合乎健康美麗的身材(客戶身高大多無法改變)。期望操作介面如下:

太胖的結果如下:

== 歡迎使用 BMI 評估系統(18 ~ 24) ==

請輸入客戶身高(公分) =>170

請輸入客戶體重(公斤) =>80

 

客戶 BMI = 27.6817

您身材太胖了, 需要減重 10.64 公斤

== 系統結束, 歡迎再次光臨 ==

太瘦的結果如下:

== 歡迎使用 BMI 評估系統(18 ~ 24) ==

請輸入客戶身高(公分) =>170

請輸入客戶體重(公斤) =>50

 

客戶 BMI = 17.3010

您身材太瘦了, 需要增胖 2.02 公斤

== 系統結束, 歡迎再次光臨 ==

標準身材的結果如下:

== 歡迎使用 BMI 評估系統(18 ~ 24) ==

請輸入客戶身高(公尺) =>170

請輸入客戶體重(公斤) =>60

 

客戶 BMI = 20.7612

恭喜您有一個健美體材

== 系統結束, 歡迎再次光臨 ==

B)製作技巧提示:

客戶太胖或太瘦應該增重或減重的計算公式如下:

(1) 太胖(BMI > 24:減重量 = 原體重 – 24*身高*身高;

(2) 太瘦(BMI < 18:增重量= 18*身高*身高原體重;

程式重點提示如下:(虛擬碼)

if (BMI < 18){

     增重量 = 18*身高*身高原體重;

     輸出告知客戶身材太瘦,應增加 %增重量 公斤;

}

else if (BMI > 24) {

     減重量 = 原體重 – 24*身高*身高;

     輸出告知客戶身材太胖,應減少 %減重量 公斤;

}

else

     輸出告知客戶身材健美;

4-6-4 範例研討:醫療診斷推論系統

A)系統功能:Ex4_5.java

市面上出現許多醫療診斷系統,使用者輸入身體狀況可大略告知可能邏患哪種疾病。我們建立一個雛型診斷系統,功能如下:

簡單說明一下,如果發燒又咳嗽,又感覺疲倦,則應該是『感冒』症狀。另一條敘述推論是有發燒、沒有咳嗽但有高血壓,而且會感覺口乾,則可能是得『肝病』;其他推論敘述也大多如此。期望操作介面如下:

狀況一,結果如下:

歡迎使用醫療診斷系統請依序回答問題

=====================================

請問您最近是否發燒 (y/n) =>y

請問您最近是否咳嗽 (y/n) =>y

請問您最近是否感覺疲倦 (y/n) =>n

請問您是否血壓升高 (y/n) =>y

請問您最近是否口乾 (y/n) =>y

先生/小姐您可能得肝病 !!!

 

狀況二,結果如下:

歡迎使用醫療診斷系統請依序回答問題

=====================================

請問您最近是否發燒 (y/n) =>y

請問您最近是否咳嗽 (y/n) =>y

請問您最近是否感覺疲倦 (y/n) =>n

請問您是否血壓升高 (y/n) =>n

請問您最近是否盜汗 (y/n) =>y

先生/小姐您可能得肺病 !!!

B)製作技巧研討:

一般推論系統裡大多包含了許多規則(Rule),每條規則皆是利用 if/else 敘述句來描述。市面上銷售的推論系統大多允許使用者利用選單方式來填寫規則,再由系統自動產生 if/else 敘述句,並將所有規則整合成一套系統。基本上,推論系統無所謂準確度如何,完全依賴管理者給它的規則來推論,如果規則設定得越完備,則系統推論結果越細膩;否則它的知識有限,就無法做出正確的判斷。本範例僅以簡單的知識來推論,無關正確與否。

C)程式範例:

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

// Ex4_5.java

 

import java.util.*;

public class Ex4_5 {    

   public static void main(String args[]){

      Scanner keyin = new Scanner(System.in);

       String key;

       System.out.printf("歡迎使用醫療診斷系統請依序回答問題 \n");

       System.out.printf("===================================== \n");

       System.out.printf("請問您最近是否發燒 (y/n) =>");

       key = keyin.nextLine();

       if (key.equals("y")) {

          System.out.printf("請問您最近是否咳嗽 (y/n) =>");

          key = keyin.nextLine();

          if (key.equals("y")) {

              System.out.printf("請問您最近是否感覺疲倦 (y/n) =>");

              key = keyin.nextLine();

              if (key.equals("y")) {

                  System.out.printf("先生/小姐您已經感冒了 !!! \n");

              }

              else {

                  System.out.printf("請問您是否血壓升高 (y/n) =>");

                  key = keyin.nextLine();

                  if (key.equals("y")) {

                       System.out.printf("請問您最近是否口乾 (y/n) =>");

                       key = keyin.nextLine();

                       if (key.equals("y"))

                           System.out.printf("先生/小姐您可能得肝病 !!! \n");

                       else

                            System.out.printf("有可能僅有感冒而已 ??? \n");

                  }

                  else {

                       System.out.printf("請問您最近是否盜汗 (y/n) =>");

                       key = keyin.nextLine();

                       if (key.equals("y"))

                           System.out.printf("先生/小姐您可能得肺病 !!! \n");

                       else

                            System.out.printf("需要由其他系統進一步檢查 !!! \n");

                  }

             }

          }

          else

              System.out.printf("有發燒無咳嗽, 請到別科門診 !!!\n");

       }

       else

           System.out.printf("應該是健康身體 \n");

   }

}

D)程式重點分析:

4-6-5 自我挑戰:肺結核自我診斷系統

A)程式功能:PM4_6.java

結核病是受『結核菌感染』而引起,是一種慢性傳染病,不會遺傳;可分為『肺結核』與『肺外結核』兩種。政府除了宣導民眾預防結核病傳染之外,並希望製作一套自我檢查是否感染網站,讓不幸感染民眾能提早治療,自我診斷項目如下:

結核菌感染階段

病情現象

狀況處理

感染期

咳嗽現象:積分 1

< 3

未受感染

離開系統

>= 3

進入感染期

繼續詢問

咳痰現象:積分 1

疲倦現象:積分 1

體重減輕:積分 1

發作期

胸悶現象:積分 1

< 2

僅受感染

盡快就醫

>= 2

進入發病期

繼續詢問

胸痛現象:積分1

呼吸困難現象:積分 1

危險期

午後發燒現象:積分 1

< 2

已發病

儘快就醫

>= 2

進入危險期

需隔離就醫

夜間盜汗現象:積分 1

咳血現象:積分 1

如上表所示,民眾進入系統時,依照『結核病感染期』的病情現象(計 4 條),詢問是否有滿足現象,如果超過 3 項,表示已進入『感染期』,則緊接著『發作期』現象詢問;否則告知民眾沒有感染。『發作期』有 3 個詢問項目,如果低於 2 項,則告知儘快就醫;否則(高於 2 項),請民眾繼續進入『危險期』詢問。『危險期』有 3 個選項,超過兩個現象,則須隔離並儘速就醫。期望操作介面如下:

狀況(),未受感染的結果如下:

歡迎使用肺結核自我診斷系統, 請回答下列問題

=====================================

=== 感染期現象詢問 ==

您最近是否咳嗽現象 (y/n) =>n

您最近是否咳痰現象 (y/n) =>n

您最近是否疲倦現象 (y/n) =>y

您最近是否體重減輕 (y/n) =>y

恭喜您, 未受感染

 

狀況(),感染未發病的結果如下:

歡迎使用肺結核自我診斷系統, 請回答下列問題

=====================================

=== 感染期現象詢問 ==

您最近是否咳嗽現象 (y/n) =>y

您最近是否咳痰現象 (y/n) =>y

您最近是否疲倦現象 (y/n) =>y

您最近是否體重減輕 (y/n) =>y

 

=== 發病期現象詢問 ==

您最近是否胸悶現象 (y/n) =>y

您最近是否胸痛現象 (y/n) =>n

您最近是否呼吸困難現象 (y/n) =>n

您僅受感染未發病, 儘快就醫

 

狀況(),已進入危險期的結果如下:

歡迎使用肺結核自我診斷系統, 請回答下列問題

=====================================

=== 感染期現象詢問 ==

您最近是否咳嗽現象 (y/n) =>y

您最近是否咳痰現象 (y/n) =>y

您最近是否疲倦現象 (y/n) =>y

您最近是否體重減輕 (y/n) =>n

 

=== 發病期現象詢問 ==

您最近是否胸悶現象 (y/n) =>y

您最近是否胸痛現象 (y/n) =>y

您最近是否呼吸困難現象 (y/n) =>y

 

=== 危險期現象詢問 ==

您最近是否午後發燒現象 (y/n) =>y

您最近是否夜間盜汗現象 (y/n) =>y

您最近是否呼吸咳血現象 (y/n) =>n

您已進入危險期, 必須隔離並儘快就醫

B)製作技巧提示:

利用虛擬碼提示如下:

清除現象累積選擇項目(status = 0);

詢問及累積計算感染期現象(status = status +1);

if (status < 3) {

輸出顯示 "恭喜您, 未受感染"

}

else {

清除現象累積選擇項目(status = 0);

詢問及累積計算發病期現象(status = status +1);

if(status <2) {

輸出顯示您僅受感染未發病, 儘快就醫

}

else {

清除現象累積選擇項目(status = 0);

詢問及累積計算危險期現象(status = status +1);

if(status <2) {

輸出顯示您已進入發作期, 儘快就醫

else {

輸出顯示 "您已進入危險期, 必須隔離並儘快就醫"

}

}

}

狀態現象詢問程式片段提示如下:

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

……

/* 危險期現象詢問 */

System.out.printf("\n=== 危險期現象詢問 ==\n");

status = 0;

System.out.printf("您最近是否午後發燒現象 (y/n) =>");

key = keyin.nextLine();

if (key.equals("y"))

    status = status + 1;

System.out.printf("您最近是否夜間盜汗現象 (y/n) =>");

key = keyin.nextLine();

if (key.equals("y"))

     status = status + 1;

System.out.printf("您最近是否呼吸咳血現象 (y/n) =>");

key = keyin.nextLine();

if (key.equals("y"))

     status = status + 1;

if (status < 2)

     System.out.printf("您已進入發作期, 儘快就醫\n");

else

      System.out.printf("您已進入危險期, 必須隔離並儘快就醫\n");

……

 4-7 switch/case 選擇分歧

4-7-1 switch/case 敘述流程

switch/case 與多重 if/else 敘述皆是多重條件判斷,兩者處理方式也大致上相同。但如果判斷條件太多時,利用 if/else 敘述編寫,會感到很難閱讀,然而 switch/case 可簡了許多。圖 4-5 switch/case 敘述的流程圖,看起來好像是『多選一』的敘述,其實不然,它也如同多重 if/else 敘述一樣,也會一個條件接著一個條件測試。當某一條件成立時,則執行該條件下(case)的敘述區塊,執行完畢後,並不立即結束該敘述,而會繼續測試下一個條件(此功能與 if/else 不同),也會執行下一條件的敘述。

4-5 Switch/case 敘述的流程圖

一般情況下,大多期望眾多條件中,僅要求合乎其中一個條件,並僅執行該條下的敘述區塊。因此,條件敘述區塊的最後一行,加入『break 敘述,表示符合某一條件,執行完畢後立即離開該 switch/case 敘述。Switch/case 敘述語法與範例如下:

Switch/case 敘述句的語法:

範例:

switch (條件式) {

case 數值 1:

      敘述式 1;

      ….

case 數值 2:

      敘述式 2;

      ……

…..

default:

敘述式;

}

switch(oper) {

case ‘+’:

       result = op1 + op2;

       break;

    case ‘-‘:

       result = op1 – op2;

       break;

    case ‘*’:

       result = op1 * op2;

       break;

   ……

    default:

       System.out.printf("錯誤\n");

}

4-7-2 範例研討:多功能計算器製作

A)系統功能:Ex4_6.java

請製作一個具有加(+)、減(-)、乘(*)與除(/)功能的計算器。譬如輸入 5 + 10 後,系統會輸出 5 + 10 = 15 之樣式。期望操作介面如下:

狀況(),執行除法的結果如下:

== 歡迎使用 +*/ 計算器 ==

請輸入(: 45 + 28) =>45 / 28

45.00 / 28.00 = 1.61

 

狀況(),執行乘法的結果如下:

== 歡迎使用 +*/ 計算器 ==

請輸入(: 45 + 28) =>38 * 12

38.00 * 12.00 = 456.00

B)製作技巧研討:

系統條件需要提供有加、減、乘、除與餘數等五種計算功能。希望系統操作模式能與自然人習慣相符,將運算子置放於兩個運算元中間;也要求運算式必須同一行輸入完畢,如 5 + 10 之格式。系統需要鍵盤一次輸入 3 個元素,第一個為整數,接著是字元符號(+-*/%),最後再一個整數。由此可見,吾人需利用 Scanner 類別套件才可達成,又 Scanner 沒有讀入字元(Char)的物件方法;需利用讀入字串方法(next()),以字串格式讀入後再將其轉換成字元(charAt() 方法)。3 個運算元素都讀入後,再利用 switch/case 選擇到底輸入哪一個運算子,也相對應執行該運算子的運算。

C)程式範例:

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

// Ex4_6.java

 

import java.util.Scanner;

public class Ex4_6 {    

   public static void main(String args[]) {

       Scanner keyin = new Scanner(System.in);

       float op1, op2, result=0F;

       String oper_st;

       char oper;

       System.out.printf("== 歡迎使用+ - * / 計算器 ==\n");

       System.out.printf("請輸入(: 45 + 28) =>");

       op1 = keyin.nextFloat();

       oper_st = keyin.next();

       oper = oper_st.charAt(0);

       op2 = keyin.nextFloat();

       switch(oper) {

          case ‘+’:

              result = op1 + op2;

              break;

          case ‘-‘:

              result = op1 – op2;

              break;

          case ‘*’:

              result = op1 * op2;

              break;

          case ‘/’:

              result = op1 / op2;

              break;

          default:

              System.out.printf("錯誤輸入\n");

       }

       System.out.printf("%.2f %s %.2f = %.2f\n", op1, oper, op2, result);

    }

}

D)程式重點分析:

 

4-7-3 自我挑戰:數字轉換國字程式

A)程式功能:PM4_7.java

 客戶到銀行辦理業務時,常需將數字轉成國字再書寫在傳票上,但國字平常很少使用,客戶大多不會,請製作一套數字轉換國字系統,讓客戶直接查詢即可,期望操作介面如下:

狀況(),詢問 3 的結果如下:

== 歡迎使用數字轉換國字系統 ==

請輸入一個整數數字 =>3

3 <=>

 

狀況(),詢問 9 的結果如下:

== 歡迎使用數字轉換國字系統 ==

請輸入一個整數數字 =>9

9 <=>

B)製作技巧提示:

吾人將輸入的數字存放於 value 變數內,再利用 switch/case 處理各種可能數字,並將相對應國字存放於 chinese 變數內。程式片段如下:

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

……

switch(value) {

          case 1:

              chinese = "";

              break;

          case 2:

              chinese = "";

              break;

          case 3:

              chinese = "";

              break;

………

          case 9:

              chinese = "";

              break;

          case 0:

              chinese = "";

              break;

          default:

              chinese = "錯誤輸入";

}

…..

 

4-8 專題研討

4-8-1 範例研討:瓦斯費計算工具

(A)系統功能:Ex4_7

瓦斯公司需要一套計費工具,假設天然瓦斯計費標準如下:若度數小於 20,則瓦斯費為 100 (基本費);若大於 20 度,每度 5 元。期望操作介面如下:

狀況(),使用度數低於 20 度:

請輸入使用度數 => 15

應繳費用為 => 150

 

狀況(),使用度數高於 20 度:

請輸入使用度數 => 30

應繳費用為 => 150

(B)程式範例:

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

// PM4_7.java

import java.util.Scanner;

public class Ex4_7{

       public static void main(String args[]){

             Scanner in = new Scanner(System.in);

             int number,money=0;

             System.out.print("請輸入使用度數 => ");

             number = in.nextInt();

             if(number<=20)

                    money = 150;

             else

                    money = number * 5;

             System.out.printf("應繳費用為 => %d \n",money);

       }

}

4-8-2自我挑戰:新型身材評估工具

(A)系統功能:PM4_8.java

利用 BMI 判別身材還是有缺點,男女身材標準本來就有所差異,利用相同的公式計算並不合理。簡單計算方法如下:男生標準體重 (身高 - 80*0.7 女生體重 = (身高 - 70*0.6。請製作一套工具,當輸入客戶性別、身高、體重,再輸出體重是否合乎標準,以及應該減少或增加多少體重。期望操作介面如下:

狀況(),客戶男性操作結果如下:

請輸入性別(/)=>

請輸入身高(cm)=> 160

請輸入體重(kg)=>56

您的體重符合標準!!

 

狀況(),客戶男性操作結果如下:

請輸入性別(/)=>

請輸入身高(cm)=> 170

請輸入體重(kg)=>65

您過重 應該減肥 5.00公斤

(B)製作提示:

01

02

03

04

05

06

07

08

09

10

11

12

13

14

….

if(sex.equals("")){

        normal = (toll - 80) * 0.7;

        if(normal != weight){

                if(normal<weight)

                        System.out.printf("您過重 應該減肥 %.2f公斤\n",weight-normal);

                else

                        System.out.printf("您過輕 應該增重 %.2f公斤\n",normal-weight);

        }

        else

                System.out.printf("您的體重符合標準!!\n");

        }

….

4-8-3 自我挑戰:計程車計費工具

(A)系統功能:PM4_9

吾人需要一套計程車收費工具,計費方式為 3 公里內收費 70 元,之後每滿 0.5 公里增加 10 元。操作介面是使用者輸入行駛公里數,則計算並印出應收費用多寡,如下:

狀況(),低於 3 公里結果如下:

請輸入公里數=>2

搭車費用為 => 70

 

狀況(),高於 3 公里結果如下:

請輸入公里數=>5.8

搭車費用為 => 120

(B)製作提示:

01

02

03

04

05

06

….

if(number <= 3)

     money = 70;

else

     money = 70 + (int)(( number - 3 ) / 0.5) * 10;

….

4-8-4 自我挑戰:美容中心計費工具

(A)系統功能:PM4_10.java

美容公會期望公佈一套朔身收費標準,它是依照客人的 BMI 值(體重(kg/身高2m))收費,標準身材的 BMI 18 ~ 24,低於 18 則太瘦,高於 24 則太胖。收費標準是達標準身材(24 BMI)之間,每減少 0.5 BMI 則收費 1 萬元。並且對客戶身材分類評估如下:

(1) 小於 18.5:過輕(無)

(2) 8.5 ~ 22.9:理想體重(無)

(3) 23.0 ~ 24.9:過重(輕度增加)

(4) 25.0 ~ 29.9:第一度肥胖(中度增加)

(5) 30.0 ~ 34.9:第二度肥胖(重度增加)

(6) 大於 35.0:第三度肥胖(病態肥胖)

期望操作介面如下:

狀況(),體重過低:

請輸入身高(公分)=>170

請輸入體重(公斤)=>50

您身材過輕(無)

狀況(),體重過度肥胖:

請輸入身高(公分)=>170

請輸入體重(公斤)=>80

您第一度肥胖(中度過重)需花費 9.00 萬元達成標準身材

 

狀況(),體重高度肥胖:

請輸入身高(公分)=>170

請輸入體重(公斤)=>90

您第二度肥胖(重度過重)需花費 16.00 萬元達成標準身材

(B)製作提示:

01

02

03

04

05

06

….

if (BMI<18.5)

    System.out.printf("您身材過輕(無)\n");

if (BMI>18.5 && BMI<22.9)

    System.out.printf("您身材為理想體重\n");

….

4-8-5 自我挑戰:工讀生薪資計算工具

(A) 系統功能:PM4_11

許多量販店的員工都是利用時薪來計算薪資,每個月工作時數 160 小時(每周 40 小時)內以基本時薪(105/小時)計算; 161 ~ 205 小時,時薪的 1.5 倍計算,超過 205 小時的工作時間違反勞基法,不給與薪資。請製作一套時薪薪資計算工具,輸入某一員工該月工作時數後,輸出應領薪資多寡,操作介面如下:

狀況(),時數低於 160 小時:

請輸入該月工作時數 =>140

本月基本薪資如下:

    基本薪資 = 14700

    加班費 = 0

    總共薪資 = 14700

不計費時間 = 0 小時

狀況(),時數介於 161 ~ 205 小時之間:

請輸入該月工作時數 =>190

本月基本薪資如下:

    基本薪資 = 16800

    加班費 = 4725

    總共薪資 = 21525

不計費時間 = 0 小時

狀況(),時數高於 205 小時:

請輸入該月工作時數 =>230

本月基本薪資如下:

    基本薪資 = 16800

    加班費 = 7087

    總共薪資 = 23887

不計費時間 = 25 小時

(B) 製作提示:

01

02

03

04

05

06

….

if (hour <= 160){

    hour_1 = hour;

    total = hour_1 * 105;

}

….

4-8-6 自我挑戰:評量學期成績等級

(A) 系統功能:PM4_12.java

請製作一只評量學生學期成績的工具,使用者輸入期中考(30%)、期末考(30%)、以及平時成績(40%)後,系統會依學期總平均評量其等級,如學期總成績高於 90 分則輸出 A 級、80 ~ 90 分為 B 級、80 ~ 70 C 級、70 ~ 60 D 級,60 分以下為 E 級。期望操作介面如下:

狀況(),評量為 A

請輸入期中考成績=>90

請輸入期末考成績=>93

請輸入平常成績=>92

總成績評量為 A

狀況(),評量為 D

請輸入期中考成績=>50

請輸入期末考成績=>45

請輸入平常成績=>55

總成績評量為 E

4-8-7 自我挑戰:停車場收費工具

(A) 系統功能:PM4_13

請製作一套停車場收費系統,計算方式為 0.5 小時內不計費,2 小時內為 50 元,超過 2 小時後,每一小時 20 元計算,不足1 小時以 1 小時計算。期望操作介面如下:

狀況()0.5 小時內收費:

請輸入停車時間(小時) => 0.4

不足半小時不收費!!

狀況()2 小時內收費:

請輸入停車時間(小時) => 1.8

2小時以內皆為50!!

狀況(),超過 2 小時收費:

請輸入停車時間(小時) => 3.2

費用為 : 90

4-8-8 自我挑戰:電力公司收費計算工具

(A) 系統功能:PM4_14

請幫電力公司製作一套電費計費工具,電費計算方式如下:

使用者輸入客戶消費度數之後,系統會計算出應收電費多寡,期望操作如下:

狀況()50 度內收費:

請輸入使用度數=>40

電費應收取 => 150

狀況()150 度內收費:

請輸入使用度數=>130

電費應收取 => 580

狀況(),超過 200 度收費:

請輸入使用度數=>220

電費應收取 => 1210

(B) 製作提示:

01

02

03

04

….

if((watt>150)&&(watt<200))

    money = 150 + 50*5 + 50*6 + (watt-150)*7;

….

4-8-9 自我挑戰:業務員薪資計算工具

(A) 系統功能:PM4_15

一般銷售人員除了基本薪資(16500 元)外,大多採用銷售額來計算獎金多寡,每月銷售金額 10 萬元以內不給予將金,超過 10 萬元,給予 5000 元獎金,以後每增加 5 萬元,給予 5000 元獎金。系統要求某一員工的銷售額後,計算並輸出該月的薪資多寡。期望操作如下:

狀況(),銷售金額小於 10 萬元的薪資:

請輸入業務員姓名 =>張先生

請輸入業務員銷售金額(萬元) =>5

 

列印員工薪資如下:

員工姓名 = 張先生

    底薪 = 16500

    獎金 = 0

本月薪資 = 16500

狀況(),銷售金額大於 10 萬元的薪資:

請輸入業務員姓名 =>劉永在

請輸入業務員銷售金額(萬元) =>20

 

列印員工薪資如下:

員工姓名 = 劉永在

    底薪 = 16500

    獎金 = 15000

本月薪資 = 31500