1 of 21

副程式

function

2 of 21

副程式的好處—模組化

印出一個火箭,下空5行後,有一個男生,再空5行後,有一個女生,然後是一個男生

火箭

空5行

男生

空5行

女生

男生

由重覆的部件構成:

火箭:

男生:

女生:

模組化後只要寫一次

要修改也只要改一處

3 of 21

副程式範例—印長方形

副程式

主程式

4 of 21

副程式範例—印長方形

副程式的內容

主程式呼叫副程式來執行

利用debug的逐行執行來看程式執行順序

5 of 21

副程式範例—印長方形

回傳資料的型態

void 代表無回傳資料

副程式的名稱

輸入參數的型態和名稱

若無參數,則空白即可

呼叫時,以副程式的名稱呼叫

小括號內要按順序傳給對應參數變數

6 of 21

副程式範例—印長方形

length

主程式:

width

3

5

l

副程式draw_rectangle:

w

3

5

i

j

7 of 21

副程式範例—每月天數

副程式的內容

主程式呼叫副程式

副程式GetDay

用參數month執行運算

並回傳

回傳的資料

被存到day裡

回傳資料型態

為 整數 int

回傳資料

並離開副程式

8 of 21

副程式的位置

先行宣告

記得最後

要加 ;

9 of 21

副程式範例—組合C(n,m)

利用副程式Factorial(階乘)

進行計算

被 Combi 呼叫

需要放在 Combi 前面

回傳資料可計算、可指定給其他變數直接輸出

利用副程式模組化後

程式變得精簡,易讀(對debug有很大幫助)

10 of 21

印出一個火箭,下空5行後,有一個男生,再空5行後,有一個女生,然後是一個男生

void draw_rocket(void); /*畫火箭*/

void draw_female(void); /*畫女生*/

void draw_male(void); /*畫男生*/

void draw_circle(void); /*畫圓*/

void draw_intersect(void); /*畫交叉線*/

void draw_base(void); /*畫橫線*/

void draw_rectangle(void); /*畫正方形*/

void draw_triangle(void); /*畫三角形*/

void skip_5_lines(void); /*空5行*/

火箭

空5行

男生

空5行

女生

男生

11 of 21

12 of 21

開根號(square root)

double sqrt(double x);

回傳型態

輸入參數型態

a = sqrt(x);

a = sqrt(121);

🡺a 為11

🡺a 為x的平方根

#include <cmath>

13 of 21

次方(power)

double pow(double x, double y);

有2個輸入參數

a = pow(x,y);

a = pow(1.5,0.3);

🡺a 為1.50.3

🡺a 為x的y次方

底數

次方

14 of 21

對數(以10為底)

double log10(double x);

a = log10(x);

a = log10(1.5);

🡺a 為log101.5

🡺a 為log10x

15 of 21

不大於x的最大整數(首數)

double floor(double x);

a = floor(x);

a = floor(1.5);

🡺a 為1

🡺a 為x的首數

a = floor(2);

🡺a 為2

a = floor(-2.2);

🡺a 為-3

a = floor(-4);

🡺a 為-4

16 of 21

不小於x的最小整數

double ceil(double x);

a = ceil(x);

a = ceil(1.5);

🡺a 為2

🡺a 為不小於x的最小整數

a = ceil(2);

🡺a 為2

a = ceil(-2.2);

🡺a 為-2

a = ceil(-4);

🡺a 為-4

17 of 21

絕對值(整數)

int abs(int x);

a = abs(x);

a = abs(1);

🡺a 為1

🡺a 為|x|

a = abs(-2);

🡺a 為2

a = abs(2.2);

🡺錯誤

整數型態

18 of 21

絕對值(浮點數)

double fabs(double x);

a = fbs(x);

a = fbs(1.2);

🡺a 為1.2

🡺a 為|x|

a = fbs(-2.2);

🡺a 為2.2

19 of 21

j957: 月刊期數

輸入說明:

輸入兩個整數 Y、M (0<=Y<=150、1<=M<=12) 代表該期月刊出版的年度以及月份。

輸出說明:

請輸出它是第幾期的月刊,但如果該月份月刊還沒創刊( 90 年 7 月(含)以前)或是還沒發行( 101 年 8 月(含)以後),則請輸出 0。

輸入範例1:

輸入1:

92 1

輸出1:

18

輸入範例2:

輸入2:

88 8

輸出2:

0

20 of 21

j958: 停車費

某一停車場的停車費率規則如下:

前 30 分(含)鐘免費。

停車 31 ~ 60 分鐘 30 元。

停車 61 ~ 120 分鐘 60 元。

接下來每一小時增加 30 元,例如 121~ 180 分鐘 90 元、 181~ 240 分鐘 120 元,以此類推。

每日停車費最高為 210 元,例如停了 11 小時又 30 分鐘,原本應該是收費 30×12=360,但只要收 210 元就好。

輸入說明:

輸入四個整數 H1、M1、H2、M2 (0<=H1、H2<=23,0<=M1、M2<=59),

H1:M1 代表車子進場的時間,H2:M2 代表車子出場的時間,而且出場時間一定在進場時間之後。

輸出說明:

請輸出需要繳的停車費是多少(不用考慮跨日的情形)。

輸入範例1:

輸入1:

7 10 7 30

輸出1:

0

輸入範例2:

輸入2:

8 10 9 20

輸出2:

60

21 of 21

j959: 統一發票

頭獎:和頭獎中獎號碼完全相同者,可得 20 萬。

二獎:末七碼和頭獎中獎號碼末七位相同者,可得 4 萬元。

三獎:末六碼和頭獎中獎號碼末六位相同者,可得 1 萬元。

四獎:末五碼和頭獎中獎號碼末五位相同者,可得 4 千元。

五獎:末四碼和頭獎中獎號碼末四位相同者,可得 1 千元。

六獎:末三碼和頭獎中獎號碼末三位相同者,可得 2 百元。

輸入說明:

輸入資料有兩組八位數的號碼,第一組是頭獎中獎號碼,第二組是發票上的號碼。

輸出說明:

請你輸出這張發票可以得到多少獎金(沒中獎請輸出 0)。

輸入範例1:

輸入1:

12345678 12345678

輸出1:

200000

輸入範例2:

輸入2:

12345678 54321678

輸出2:

200