• 沒有找到結果。

程式流程控制 (上)

N/A
N/A
Protected

Academic year: 2022

Share "程式流程控制 (上)"

Copied!
32
0
0

加載中.... (立即查看全文)

全文

(1)

講師: 李根逸 (Ken-Yi Lee), E-mail: feis.tw@gmail.com

程式流程控制 (上)

【第三講】

!89

(2)

課程⼤大綱

條件判斷 :

if (

表⽰示式

) { ... }

[P.91]

如果表⽰示式成⽴立就 ...

if (

表⽰示式

) { ... } else { ... }

[P.93]

如果表⽰示式成⽴立就 ... 否則就 ..

C / C++ 的複合指定與遞增遞減運算⼦子 [P.96]

重複執⾏行 (迴圈) :

while (

表⽰示式

) { ... }

[P.99]

當表⽰示式成⽴立就⼀一直執⾏行 ...

!90

(3)

if ( ) {


}






int main() {










return 0;


}

#include <stdio.h>


#include <stdlib.h>


int grade;


scanf(“%d”, &grade);







system(“pause”);






if (

[?]

) { ... }

如果 [?] 成⽴立 (為真 / 值⾮非零) 就 ...

printf(“PASSED !\n”);

if 關鍵字

成⽴立

不成⽴立

...

[?]

成⽴立

不成⽴立

printf(“PASSED !\n”);

grade >= 60 grade >= 60

!91

(4)

【範例】簡單計算

試寫⼀一程式讓使⽤用者輸⼊入⾥里程數 (公尺),計算後顯

⽰示應付的計程⾞車資

計程⾞車資計算公式

1.25 公⾥里內是 70 元 (起跳 70 元)

超過 1.25 公⾥里後,每 250 公尺多 5 元 [不⾜足者以 250 公尺計) 1.25 公⾥里要付 70 元, 1.26 公⾥里要付 75 元, 2.00 公⾥里要付 85 元

試寫⼀一程式讓使⽤用者做簡單的兩整數計算 [+, - , *, /] (精確到⼩小數點後兩位) [%.2f]

3+5
ANS: 8.00

3-5
ANS: -2.00

3*5
ANS: 15.00

3/5
ANS: 0.60

!92

【範例】 calc.cpp

【範例】 taxi.cpp

(5)

if ... else ... [1]

if (

[?]

) { ... } else { ... }

如果 [?] 成⽴立就 ... 否則就 ...

!

巢狀 if-else 敘述 :

成⽴立

不成⽴立

...

...

[?]

if (a > b) {


printf(“a > b”);


} else {


if (a < b) {


printf(“a < b”);


} else {


printf(“a == b”);


}
} if (a > b) {


printf(“a > b”);


}
if (a < b) {


printf(“a < b”);


}
if (a == b) {


printf(“a == b”);


}

!93

(6)

if ... else ... [2]

if (

[?]

) { ... } else { ... }

如果 [?] 成⽴立就 ... 否則就 ...

!

多層 if-else 敘述 :

成⽴立

不成⽴立

...

...

[?]

if (a > b) {


printf(“a > b”);


} else if (a < b) {
 printf(“a < b”);


} else {


printf(“a == b”);


} if (a > b) {


printf(“a > b”);


}
if (a < b) {


printf(“a < b”);


}
if (a == b) {


printf(“a == b”);


}

!94

⼀一種較精簡省略的寫法

(7)

【範例】⽐比較⼤大⼩小與排序

試寫⼀一個程式讓使⽤用者輸⼊入三個數字後顯⽰示最⼤大的值 給使⽤用者看 :






!

!

!

試寫⼀一個程式讓使⽤用者輸⼊入三個數字後將數字由⼩小⾄至

⼤大依序印出

Please enter the first integer : 3
 Please enter the second integer : 4
 Please enter the third integer : 2
 The largest integer is 4.

!95

【範例】 sort3.cpp

【範例】 max3.cpp

(8)

複合指定與遞增遞減運算⼦子

複合指定運算⼦子 加等於

+=

減等於

-=

乘等於

*=

除等於

/=

求餘等於

%=

遞增遞減運算⼦子 遞增

++

遞減

--

複合指定運算⼦子:

a+=2 相等於 a=a+2 a*=2 相等於 a=a*2

遞增與遞減運算⼦子:

++a 會將 a 的值加⼀一並 回傳新值

--a 會將 a 的值減⼀一並回 傳新值

a++ 會回傳 a 原有的值 後再將 a 值加⼀一

a-- 會回傳 a 原有的值後 再將 a 值減⼀一

!96

(9)

【範例】 ++i 與 i++

判斷下⾯面程式執⾏行過程中 a 與 b 的值:

int a = 1;


int b = 2;


a = a+1;


a += 1;


a++;


a+1;


b = ++a;


b = a++;


a = a++; /* 未定義⾏行為:同⼀一句內多次指定同個變數的值 */


!97

【範例】 inc.cpp

『未定義⾏行為』: 具有未定義⾏行為的程式碼之執⾏行結果是不可以預期的

(10)

【範例】⽐比較數字

試寫⼀一程式讓使⽤用者輸⼊入⼀一個六位正整數,並判斷這 整數內含有多少個數字 7 後顯⽰示給使⽤用者看:

!

!

提⽰示 :

a = a + 1 會將 a 的值加⼀一後存回 a

Please enter a 6-digit number : 378717
 The count of 7s is 3.

/ 100000 == ?
 / 10000 % 10 == ?
 / 1000 % 10 == ?
 / 100 % 10 == ?
 / 10 % 10 == ?
 % 10 == ?

!98

【範例】 lucky7.cpp

(11)

while (

[?]

) {

... }

當 [?] 成⽴立時就 ...

!

!

!

!

while 語法會⼀一直重複執⾏行內容 直到

[?]

不成⽴立時才結束

請謹慎使⽤用,確保迴圈會正常結束

while 關鍵字

while (a < 100) {
 a = a + 1;


}

START:


if (a < 100) {
 a = a + 1;


goto START;


}

成⽴立

[?] 不成⽴立

...

成⽴立

不成⽴立

a=a+1 a < 100

if (a < 100) {
 a = a + 1;


}

!99

(12)

【範例】猜數字

試寫⼀一個程式,在程式內部預設⼀一個整數作為猜數字 遊戲的答案。當使⽤用者執⾏行程式後,需要輸⼊入⼀一個整 數,如果該整數與程式預設的答案不同,請顯⽰示是⽐比 較⼤大或者⽐比較⼩小;如果該整數與程式預設的答案相同,

請恭喜使⽤用者。⽽而遊戲重複進⾏行問答直到使⽤用者猜到 答案後才結束。

請猜⼀一個整數: 5
 太⼤大了喔.

請猜⼀一個整數: 3
 太⼩小了喔.

請猜⼀一個整數: 4
 你真是天才!

!100

【範例】 guess.cpp

(13)

【範例】統計資料

試寫⼀一程式,讓使⽤用者可以輸⼊入任意多筆的正整數後,

顯⽰示這些數字的個數、和、平均值與最⼤大值

當使⽤用者輸⼊入負數時表⽰示資料輸⼊入完畢

請輸⼊入⼀一個正整數 [負數則結束]: 3
 請輸⼊入⼀一個正整數 [負數則結束]: 4
 請輸⼊入⼀一個正整數 [負數則結束]: 5
 請輸⼊入⼀一個正整數 [負數則結束]: -1
 共輸⼊入 3 個數字.


總和是 12


平均是 4.000000
 最⼤大值是 5


!101

【範例】 sts.cpp

(14)

【範例】迴圈的基本

試寫⼀一程式,印出由 1 ⾄至 100 間的整數

!

!

!

!

!

試寫⼀一程式,讓使⽤用者輸⼊入⼀一正整數 N 後,印出 1

⾄至該正整數 N 間的整數

1
2
 3
4
 5
6
 ...
100

!102

【範例】 int.cpp

【範例】 int100.cpp

(15)

習題 [1]

[E0301] 試寫⼀一程式,輸⼊入⼀一個 0 ~ 100 分的成 績,輸出成績的等第:(A: 80~100, B: 70~79, C:

60~69), F (0 ~ 59)

!

!

[E0302] 試寫⼀一個程式,讓使⽤用者輸⼊入四個數字後 印出最⼤大與最⼩小值

[E0303] 試寫⼀一個程式,讓使⽤用者輸⼊入四個數字後 將數字由⼩小⾄至⼤大排列顯⽰示

範例輸⼊入⼀一: 90 範例輸出⼀一: A 範例輸⼊入⼆二: 40 範例輸出⼆二: F 範例輸⼊入三: 70 範例輸出三: B

!103

(16)

習題 [2]

[E0304] 試寫⼀一程式,輸⼊入⽉月份,顯⽰示該⽉月份的季 (春[3.4.5⽉月]、夏[6.7.8⽉月]、秋[9.10.11⽉月]或 [12.1.2]⽉月)

[E0305] 試寫⼀一程式,讓使⽤用者輸⼊入⼀一⻄西元年份 (<5000),輸出該年是否是閏年

每四年⼀一閏、每百年不閏、每四百年⼀一閏、每四千年不 閏

[E0306] 試寫⼀一程式,輸⼊入平⾯面上某點的 x 座標值 y 座標值,顯⽰示該點是位於原點、第幾象限或者 位於哪個座標軸上

!104

(17)

習題 [3]

[E0307] 試寫⼀一程式,讓使⽤用者輸⼊入⼀一正整數 N 後,顯⽰示 1 ⾄至 N 之間的所有偶數

[E0308] 試寫⼀一程式,計算某⼈人跑 100 公尺,每秒 鐘會跑剩下距離的⼀一半,要過幾秒鐘才會跑到接近終 點⼩小於 1 公尺

[E0309] 試寫⼀一程式,印出所有 1 ~ 100 間所有 3 的倍數

[E0310] 試寫⼀一程式,輸⼊入⼀一個整數,印出所有該 整數的因數 (因數表⽰示所有可以整除該整數的數字)

範例輸⼊入: 10 範例輸出: 1 2 5 10

!105

(18)

習題 [4]

[E0311] 試寫⼀一程式,讓使⽤用者依序輸⼊入賣出商品 編號後,顯⽰示商品賣出的總⾦金額。(商品可以重複) (輸⼊入編號 0 的商品代表輸⼊入完畢)

商品編號 商品⾦金額

1 90

2 75

3 83

4 89

5 71

範例輸⼊入:


1
5
 5
4
 1
0

範例輸出:


共 411 元

!106

(19)

習題 [5]

[E0312] 試寫⼀一程式,印出所有 1 ~ 100 間所有 3 的倍數且不是 5 的倍數的整數

[E0313] (韓信點兵) 韓信要算操場上的兵,三個⼀一 數發現剩下⼀一個,五個⼀一數發現剩下三個,七個⼀一數 發現剩下兩個。試寫⼀一程式去找出到底操場上有多少 兵 ?(輸出最⼩小值)

[E0314] 試寫⼀一程式,計算個位數為 6 且可被 3 整 除的五位正整數有幾個

[E0315]* 試寫⼀一程式,找出⼀一個四位正整數,他 的反序數正好是這個四位正整數的 9 倍

反序數: 1325 的反序數是 5231

!107

(20)

習題 [6]

[E0316] [質數檢驗] 試寫⼀一程式,輸⼊入某個正整數 N,判斷 N 是不是質數

質數表⽰示除了 1 跟本⾝身以為沒有其他的因數

[E0317] [列出質數] 試寫⼀一程式,顯⽰示 1 到 1000 間所有的質數

!108

(21)

習題 [7]

[E0318] 試寫⼀一程式,輸⼊入⼗十個 0 ~ 100 分的成 績,輸出各等第的統計⼈人數:(A: 80~100, B:

70~79, C: 60~69), F (0 ~ 59)

[E0319*] 試寫⼀一程式,讓使⽤用者輸⼊入⼗十個成績 (0~100) 後,印出將最⼤大與最⼩小值去掉後的其他⼋八 個成績的總和與平均值

[E0320] 試寫⼀一程式,印出所有英⽂文字⺟母 [E0321] 輸⼊入⼀一整數,顯⽰示其為幾位數

[E0322]* 試寫⼀一程式,讓使⽤用者輸⼊入⼀一整數後將 順序顛倒顯⽰示。

範例輸⼊入:


39861

範例輸出:


16893

!109

(22)

習題 [8]

[E0323] 試寫⼀一程式,讓使⽤用者輸⼊入⼗十個數字後,

顯⽰示最⼤大的數字

[E0324] 試寫⼀一程式,讓使⽤用者輸⼊入⼗十個數字後,

依序顯⽰示最⼤大的兩個數字

[E0325] 試寫⼀一程式,讓使⽤用者輸⼊入⼗十個數字後,

依序顯⽰示最⼤大的三個數字

!110

(23)

習題 [9]

[E0326] 試寫⼀一程式,讓使⽤用者輸⼊入五位整數後,

判斷該整數是否是回⽂文

回⽂文指的是該數字由左⾄至右或由右⾄至左的數字是⼀一樣的

例如 : 12321,11911,39893 等...

!

!

!

[E0327]* 試寫⼀一程式,讓使⽤用者輸⼊入任意位整數 後,判斷該整數是否為回⽂文

Please enter an integer: 86312
 No.


Please enter an integer: 12321
 Yes.

!111

(24)

習題 [10]

[E0328] 試寫⼀一程式,讓使⽤用者分別輸⼊入每個學⽣生 的成績,輸⼊入負數則代表結束。輸⼊入完後,顯⽰示學⽣生 成績的統計圖:

級距為 (0~59, 60~69, 70~79, 80~89, 90~100)

請輸⼊入 1 號成績: 80
 請輸⼊入 2 號成績: 85
 請輸⼊入 3 號成績: 90
 請輸⼊入 4 號成績: 95
 請輸⼊入 5 號成績: 75
 請輸⼊入 6 號成績: -1 0~ 59 :


60~ 69 :
 70~ 79 : *
 80~ 89 : **


90~100 : ** 


!112

(25)

習題 [11]

[E0329] 試寫⼀一程式,讓使⽤用者輸⼊入⼀一整數後將每 位數分開顯⽰示

!

!

!

[E0330*] 試寫⼀一程式,讓使⽤用者輸⼊入⼀一個整數後,

將該整數⽤用⼆二進位表⽰示

範例輸⼊入:


49556 範例輸出:


4
9
 5
5
 6

範例輸⼊入⼀一:


5

範例輸出⼀一:


101 範例輸⼊入⼆二:


3

範例輸出⼆二:


11

!113

(26)

習題 [12]

[E0331] 試寫⼀一程式,讓使⽤用者輸⼊入⻑⾧長⽅方形的⻑⾧長與 寬後,⽤用⽂文字⽅方式畫出實⼼心與空⼼心的⽅方塊:

**********


* *


* *


**********

範例輸出:

**********


**********


**********


**********

範例輸⼊入:

請輸⼊入寬度 : 10
 請輸⼊入⾼高度 : 4

!114

(27)

習題 [13]

[E0332] 試寫⼀一程式,印出下列結果:

!

!

!

[E0333] 試寫⼀一程式,輸⼊入⼀一個在 1 跟 9 間的整 數,印出下列結果:

*
**


***
****


*****

範例輸⼊入⼀一:


5 範例輸出⼀一:


*
**


***
****


*****

範例輸⼊入⼆二:


3 範例輸出⼆二:


*
**


***

!115

(28)

[E0334*] 試寫⼀一程式,讓使⽤用者輸⼊入某個⽉月份後,

顯⽰示⻄西元 2011 該⽉月份的⽇日曆

2012 年 1 ⽉月 1 ⽇日是星期⽇日,2 ⽉月有 29 天

Please enter the month: 3


Su Mo Tu We Th Fr Sa
 1 2 3
 4 5 6 7 8 9 10
 11 12 13 14 15 16 17
 18 19 20 21 22 23 24
 25 26 27 28 29 30 31


習題 [14]

!116

(29)

習題 [15]

[E0335] 試寫⼀一猜數字遊戲,輸⼊入四個 1 ⾄至 9 各不 相同的數字後,如果某個數字的位置與號碼都正確則 算⼀一個 A,如果號碼正確但是位置不正確則算⼀一個 B,將 A 與 B 的次數顯⽰示給使⽤用者看後,讓使⽤用者 猜到猜對為⽌止!

!117

請輸⼊入答案: 1234


請輸⼊入你的猜測: 4321
 0A4B


請輸⼊入你的猜測: 1324
 2A2B


請輸⼊入你的猜測: 6789
 0A0B


請輸⼊入你的猜測: 1234
 4A


恭喜你答對了!

(30)

!118

(31)

!119

(32)

!120

參考文獻

相關文件

下列何者不歸屬於系統呼叫的行程控制(Process

專案導向應用程式開發 階梯程式編輯畫面 狀態的監視與控制 階梯程式助憶碼輔助顯示 階梯程式註解功能

[r]

電子 、 機械系 、 環工系 、 高分子、光電、電腦與通訊 本學程共計 7 學科, 18 學分,必須修畢全部學分,始

可程式控制器 (Programmable Logic Controller) 簡稱 PLC,是一種具有微處理機功能的數位電子 設備

藍牙 Android 遙控程式

 for…迴圈自初值開始判斷 &lt;條件判斷&gt; 是否為 true,若為 true 則執行 for 迴圈內的敘述,並依 &lt;增量值&gt;,每次增 加 (或減少) 指定的增量值,直至 &lt;條件判斷&gt;

[r]