Java 程式設計(一)  第 三章 算術運算式  上一頁    下一頁

 

3-3 算術運算子

內容:

  • 3-3-1 算術運算子彙集

  • 3-3-2 範例研討:計算股票平均價格

  • 3-3-3 自我挑戰:學期成績計算程式

  • 3-3-4 範例研討:超商找錢工具

  • 3-3-5 自我挑戰:超商收銀機系統

3-3-1 算術運算子彙集

基本算術運算子包含一般數學的加法 ( + )、減法 ( - )、乘法 ( * )與除法 ( / ),在計算機運算裡增加一個除法餘數 ( %,或稱『模數』運算子 ),而其資料型態可以是 byteshortintlongfloatdoublechar,其中 char 型態於運算時會轉成ASCII碼,表 3-1是一些基本算術符號,可能會出現正、負號與加、減符號相同,運算式會自動去判斷。

3-2 基本算術運算子

運算符號

說明

+-

正、負號

+-*/%

加、減、乘、除、模數(求餘數)

++--

遞增、遞減

( …)

運算式集合

算術運算子大多必須與『指定運算子』(=)配合使用,常用運算式型態彙集如下:

x = x + y;

取出 x y 兩變數內容,相『加』後再填入變數 x 內。

x = - x + y;

變數 x 內容取負數,與變數 y 相『加』後再填入變數 x 內。

x = x * y;

取出 x y 兩變數內容,相『乘』後再填入變數 x 內。

z = x / y;

變數 x 除以 y,所得到的商存入變數 z 內。

z = x % y;

變數 x 除以 y,所得到的『餘數』存入變數 z 內;如 x = 5y = 3,則 x % y 得到餘數為 2

x++;

相當於 x = x+1;

x--

相當於 x = x – 1;

x+= y;

相當於 x = x + y;

x-= y;

相當於 x = x - y;

x*= y;

相當於 x = x * y;

x/= y;

相當於 x = x / y;

x%= y;

相當於 x = x % y;

(2 + 3) * (4 +5)

先處理括號內得到 5 * 9,最後結果為 45

3-3-2 範例探討:計算股票平均價格

A)程式功能:Ex3_2.java

當分析師選定某一支股票作為標的物後,則需紀錄該股票每天的股價多寡,並計算 5 日(一般都需紀錄 5102030 日)股價平均價格如何。請您幫他製作一套登錄及計算系統,可連續輸入 5 個交易日的收盤價,並隨時顯示當日的平均價格為何,最後輸出 5 日平均股價。期望系統運作模式如下:

*** 計算股票平均價系統 ***

請輸入第一個交易日股價 =>40.5

(目前平均價 = 40.50)請輸入第二個交易日股價 =>48.6

(目前平均價 = 44.55)請輸入第三個交易日股價 =>42.7

(目前平均價 = 43.93)請輸入第四個交易日股價 =>49.2

(目前平均價 = 45.25)請輸入第五個交易日股價 =>50.2

五日平均價 = 46.24

B)製作技巧研討:

股票 5 日平均價算法是當天之前 5 個交易日價錢的平均,本系統執行之前並沒有資料,只好每天輸入股價後,隨時計算出平均價,到第 5 天則可得到 5 日平均價;因此,每天輸入價格後,計算出從第 1 天到該日的總額及平均價

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

// Ex3_2.java

import java.util.Scanner;

public class Ex3_2 {    

   public static void main(String args[]) {

        Scanner keyin = new Scanner(System.in);

        float ave, sum=0, cost;

        int number=0;

        System.out.printf("*** 計算股票平均價系統 ***\n");

        System.out.printf("請輸入第一個交易日股價 =>");

        cost = keyin.nextFloat();

        sum = sum + cost;

        number++;

        ave = sum / number;

 

        System.out.printf("(目前平均價 = %.2f)請輸入第二個交易日股價 =>", ave);

        cost = keyin.nextFloat();

        sum = sum + cost;

        number++;

        ave = sum / number;

            

        System.out.printf("(目前平均價 = %.2f)請輸入第三個交易日股價 =>", ave);

       cost = keyin.nextFloat();

       sum = sum + cost;

       number++;

       ave = sum / number;

 

       System.out.printf("(目前平均價 = %.2f)請輸入第四個交易日股價 =>", ave);

       cost = keyin.nextFloat();

       sum = sum + cost;

       number++;

       ave = sum / number;

   

       System.out.printf("(目前平均價 = %.2f)請輸入第五個交易日股價 =>", ave);

        cost = keyin.nextFloat();

        sum = sum + cost;

        number++;

        ave = sum / number;

        System.out.printf("五日平均價 = %.2f\n", ave);

   }

}

D)程式重點分析:

    • 吾人可以發現計算 5 日平均價還稍可接受,如計算 102030 個交易日,程式將變得非常長,而大多書寫同樣的敘述句。因此,本系統應該使用迴圈敘述句,可容易許多,本書第五章將會介紹到。

    • 7 :『float ave, sum=0F, cost;』。表示同時宣告 3 個浮點變數,並給 sum 初值 0,但浮點數的數值必須多加 Fsum=0F)。

    • 11 :『sum = sum + cost;』。將 cost 內容累積增加到 sum 變數內。

    • 12 :『number++;』。功能是 number 變數累增 1number = number + 1)。

    • 13 :『ave = sum / number;』。計算當天之前連續交易日的平均股價。

3-3-3 自我挑戰:學期成績計算程式

A)程式功能:PM3_1.java

資管系二年級這學期開了電腦概論(2 學分)、程式設計(3 學分)、離散數學(3 學分)、國文(2 學分)、英文(2 學分),共計 5 門課 12 學分。請建立一套系統,讓學生自行輸入各科成績,能計算並印出出該同學學期總平均多寡。期望使用操作介面如下:

*** 學期成績計算系統(各科學分數) ***

請輸入電腦概論成績(2 學分) =>80

請輸入程式設計成績(3 學分) =>87

請輸入離散數學成績(3 學分) =>72

請輸入國文成績(2 學分) =>65

請輸入英文成績(2 學分) =>74

學期總平均分數 = 76.25

四捨五入後成績 = 76

B)製作技巧提示:

吾人可利用一個累積變數(sum),每筆資料讀入,再與它的學分數相乘後,累計到累積變數內;最後再乘以總學分數,即可得到總平均分數,程式重點提示如下:

01

02

03

04

05

06

07

08

09

10

11

……

      System.out.printf("請輸入程式設計成績(3 學分) =>");

      value = keyin.nextInt();

      sum = sum + value * 3;

…..

…..

      ave = sum/12.0F;

      System.out.printf("學期總平均分數 = %.2f\n", ave);

ave = ave + 0.5F;

      System.out.printf("四捨五入後成績 = %d\n", (int)ave);

….

題目要求平均分數必須包含小數點第二位,平均分數的變數需採用浮點數(float),因為整數相除只能得到整數,所以必須讓整數除以浮點數(12.0F),才會得到浮點數的結果。

3-3-4 範例研討:超商找錢工具

A)程式功能:Ex3_3.java

請建立一個超商找錢工具,系統要求輸入購買總金額之後,再要求輸入已收金額(大於購買金額),請輸出 100 元、50 元、10 元、5 元、1 元的零錢各需找多少。期望操作介面如下:

**** 超商找錢工具 ****

請輸入消費的金額 =>354

請輸入繳納金額(大於消費額 354 =>500

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

         100 元零錢 = 1

         50 元硬幣 = 0

         10 元硬幣 = 4

          5 元硬幣 = 1

          1 元硬幣 = 1

B)製作技巧研討:

本書到目前為止還未介紹到判斷大小的敘述句,因此假設繳納金額大於消費金額;繳納金額扣除消費金額,則為應找金額。吾人利用整數除以整數,僅得到整數結果的特性(譬如,431 / 100 = 4),來計算各項零錢的數目,再利用乘法計算剩餘的錢(431 – 100*4 = 31)多寡(也可利用求餘數 % 運算子計算)。

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

// Ex3_3.java

import java.util.Scanner;

public class Ex3_3 {    

    public static void main(String args[]){

        Scanner keyin = new Scanner(System.in);

        int total, recept, value, value1, handre, fifty, ten, five, one;

       

        System.out.printf("**** 超商找錢工具 ****\n");

        System.out.print("請輸入消費的金額 =>");

        total = keyin.nextInt();

        System.out.printf("請輸入繳納金額(大於消費額 %d =>", total);

        recept = keyin.nextInt();

 

        value = recept - total;

        value1 = value;

        handre = value / 100;

        value = value - handre * 100;

 

        fifty = value / 50;

        value = value - fifty * 50;

 

        ten = value / 10;

        value = value - ten * 10;

 

        five = value / 5;

        value = value - five * 5;

 

        one = value;

        System.out.printf("應找金額 = %d 各種零錢數量如下:\n", value1);

        System.out.printf("\t 100 元零錢 = %d \n", handre);

        System.out.printf("\t 50 元硬幣 = %d \n", fifty);

        System.out.printf("\t 10 元硬幣 = %d \n", ten);

        System.out.printf("\t  5 元硬幣 = %d \n", five);

        System.out.printf("\t  1 元硬幣 = %d \n", one);

   }

}

D)程式重點分析:

    • 17 :『hundre = value / 100;』。計算 100 元零錢的數目;整數相除僅得到整數,剩下的餘數則被取捨掉。

    • 18 :『value = value – hundre*100;』。計算找 100 元零錢數目後,剩下的找錢數目多寡;其實是求餘數的功能,讀者可將其改為 value = value % 100 執行看看,結果是否相同。

3-3-5 自我挑戰:超商收銀機系統

A)程式功能:PM3_2.java

請製作一套超商收費系統,假設客戶僅購買衛生紙(每包 32 元)、口香糖(每包 12 元)、可樂(每瓶 18 元)、與熱狗(每支 17 元),系統會依序顯示各項產品單價,要求輸入購買數量,輸入完成後系統顯示總金額多寡。接著系統要求輸入客戶繳交金額,再計算出應該找多少零錢(100501051   的數量)。期望系統操作介面如下:

*****  超商收銀機系統  *****

衛生紙(每包 32 ) 購買數量 =>3

口香糖(每包 12 ) 購買數量 =>5

可樂(每瓶 18 ) 購買數量 =>2

熱狗(每支 17 ) 購買數量 =>3

請輸入繳納金額(大於購買總金額 = 243) =>500

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

         100 元零錢 = 2

         50 元硬幣 = 1

         10 元硬幣 = 0

          5 元硬幣 = 1

          1 元硬幣 = 2

B)製作技巧提示:

此系統也需要累積計算來達成,吾人宣告一個累積變數 total=0(初始值為 0)。接著輸入購買產品數量,則計算該項金額(單價 * 數量)後累加到累積變數上(如 total = total + item * 32);最後計算出總購買金額,並要求輸入『繳納金額』。繳納金額扣除購買金額,剩下的即是應找金額,再參考範例 Ex3_3.java,計算出各個零錢數量多寡。重點提示如下

01

02

03

04

05

06

07

08

09

10

11

12

13

14

……

….

        System.out.printf("*****  超商收銀機系統  *****\n");

        System.out.printf("衛生紙(每包 32 ) 購買數量 =>");

        item = in.nextInt();

        total = total + item * 32;

        ……

       

        System.out.printf("請輸入繳納金額(大於購買總金額 = %d) =>", total);

        item = in.nextInt();

        value = item - total;

        value1 = value;

       …..

翻轉工作室:粘添壽

 

Java 程式設計(一) 含程式邏輯

 

 

翻轉電子書系列: