1 of 36

迴圈

loop

2 of 36

想想看

3 of 36

想想看

輸入十個數字,計算出其平均

宣告十個變數來存值?

並寫一個很長的算式?

若改為100個?

4 of 36

累加

int i,sum=0;

cin >> i;

sum=sum+i;

sum

i

0

1

1

若重複sum=sum+i很多次

2

3

迴圈的功能:使某段程式重複多次

要進行累加,初值必須為0

5 of 36

範例:整數1加到5

int i,sum=0;

for(i=1;i<=5;i++){

sum=sum+i;

}

cout<<sum;

範例:整數1加到5

int sum=0;

sum=sum+1;

sum=sum+2;

sum=sum+3;

sum=sum+4;

sum=sum+5;

cout<<sum;

和if的敘述相同,若是沒有使用

{} 則只重複一行敘述

所以請養成使用{}的習慣

for-迴圈 (for-loop)計數重複

6 of 36

for-迴圈 (for-loop)計數重復

語法:

for(初值設定;繼續重複條件;遞增敘述){

重複敘述

}

…

1

2

3

4

1

🡺2

🡺3

🡺4

🡺2

🡺3

🡺4

🡺...🡺4

🡺2

若不成立

5

🡺5

for(i=1;i<=100;i++){

sum=sum+i;

}

cout<<sum;

對於

執行順序:

7 of 36

語法:

for(初值設定;繼續重複條件;遞增敘述){

重複敘述

}

範例:整數1加到5

int i,sum=0;

for(i=1;i<=5;i++){

sum=sum+i;

}

cout<<sum;

當i為5時,i++執行完後變為6

i<=5 不成立🡺離開迴圈

故離開迴圈時i的值為6

1

2

3

4

for-迴圈 (for-loop)計數重複

sum

i

0

1

1

2

3

3

6

4

10

5

15

6

8 of 36

for-迴圈 (for-loop)計數重複

int i,sum=0;

for(i=1;i<=100;i++){

sum=sum+i;

}

cout<<sum;

int i,n,sum=0;

cin >> n;

for(i=1;i<=n;i++){

sum=sum+i;

}

cout<<sum;

整數1加到100

整數1加到n

int i,n,sum=0;

cin >> n;

for(i=n;i>=1;i--){

sum=sum+i;

}

cout<<sum;

整數n加到1

int i,a,b,sum=0;

cin >> a >> b;

for(i=a;i<=b;i++){

sum=sum+i;

}

cout<<sum;

整數a加到b (a<=b)

int i,a,b,sum=0;

cin >> a >> b;

for(i=a;i>=b;i--){

sum=sum+i;

}

cout<<sum;

整數a加到b (a>=b)

9 of 36

範例:重覆輸出

10 of 36

範例:求最大值

題目描述:求N個整數的最大值

​

輸入格式:第1行為一個正整數N,第2行有N個整數,以空格相隔

範例:

輸入:

4

1 2 4 5

​

輸出:

5

11 of 36

範例:求最大值

12 of 36

作業6 h695: 一千遍我愛你

題目描述:輸入一個正整數 N。請輸出 N 行的「I love you.」。

​

輸入範例:

輸入:

3

​

輸出:

I love you.

I love you.

I love you.

13 of 36

作業6 h696: 倒數計時

題目描述:輸入一個正整數 N,請輸出從 N 到 0 之間的所有整數,兩個數字之間請空一格。

​

14 of 36

作業6 h697: 連續整數相加(一)

題目描述:輸入兩個正整數 A、B (其中 A<=B)。依照下面輸出範例的格式,輸出 A 到 B 之間所有整數相加的算式以及結果。

​

15 of 36

作業6 h698: 連續整數相加(二)

題目描述:

給你兩個正整數 A、B (A 和 B 不一定誰比較大),請你把 A 到 B 之間所有的整數加起來,並印出它的算式以及結果。

16 of 36

while-迴圈 (while-loop)

範例:程式先要求輸入密碼,當輸入密碼錯誤時,輸出 password is incorrect! ,並再要求輸入,直到輸入密碼正確為止。

要求輸入

密碼錯誤

再要求輸入

密碼再錯誤

密碼再錯誤

再要求輸入

再要求輸入

密碼正確

17 of 36

while-迴圈 (while-loop)

語法:

while(繼續重複條件){

重複敘述

}

繼續重複條件:

輸入密碼正不正確

重複敘述:

,不正確時重複

輸出password is incorrect!

要求再輸入

密碼

判斷

輸出錯誤訊息

要求再輸入

不正確

正確

輸入正確訊息

第一次

要求輸入

只要

18 of 36

while-迴圈 (while-loop)

語法:

while(繼續重複條件){

重複敘述

}

第一次要求輸入

判斷是否重複

重複敘述

19 of 36

do-while-迴圈 (do-while-loop)

範例:要求輸入整數,尋問是否繼續,直到不再繼續時,輸出之前輸入整數的總和

最少執行一次

20 of 36

do-while-迴圈 (do-while-loop)

語法:

do{

重複敘述

}while(繼續重複條件);

記錄是否繼續

做

只要

21 of 36

While-迴圈 v.s. do-while-迴圈

while(繼續重複條件){

重複敘述

}

do{

重複敘述

}while(繼續重複條件);

先判斷,再重複

先重複,再判斷

22 of 36

作業7 h700: 我討厭偶數

題目描述:輸入一個正整數 N,反覆把它除以二,直到這個數字變成奇數為止,輸出處理過後會變成多少

23 of 36

作業7 h701: 細菌繁殖

題目描述:輸入二個正整數 N、M,N 是一開始 X 菌的數量,而 M 則是預計要達到的量。每經過一分鐘數量會變為3倍,請輸出經過幾分鐘,X 菌才會達到 M 的量。

24 of 36

作業7 h702: 3N+1

題目描述:

有一個數列是這樣的:

第一項是一個大於一的正整數 N

如果這一項是奇數,則它的下一項是 3N+1

如果這一項是偶數,則它的下一項是 N/2

如此反覆,直到最後一項出現 1 為止

例如第一項是3,則這個數列為:3、10、5、16、8、4、2、1,共8項。

​

現在給你第一項的 N,請你求出這個數列有幾項。

25 of 36

作業7 h703: 所有位數和

題目描述:

給你一個正整數,請你求出所有位數的和是多少,

例如12345,因為1+2+3+4+5=15,則輸出15。

26 of 36

作業7 h704: 數字倒轉

題目描述:

給你一個正整數,請你將所有數字倒轉之後輸出,

例如給你12345,則輸出54321。

27 of 36

巢狀迴圈

執行6次

執行6*5=30次

每執行5次星號後執行1次

共執行6次

28 of 36

巢狀迴圈

執行6次

執行幾次?

執行6次

i=0

0次

i=1

1次

i=2

2次

i=3

3次

i=4

4次

i=5

5次

29 of 36

巢狀迴圈

i=0

i=1,j=0

i=2,j=0,1

i=3,j=0,1,2

i=4,j=0,1,2,3

i=5,j=0,1,2,3,4

30 of 36

continue 和 break

int i;

for(i=1;i<10;i++){

if(i%3==0){

continue;

}

cout << i;

}

int i;

for(i=1;i<10;i++){

if(i%3==0){

break;

}

cout << i;

}

繼續下一個迴圈

直接離開迴圈

31 of 36

題目描述:

利用迴圈印出下列結果

32 of 36

題目描述:

輸入一個正整數n,利用迴圈印出n行的聖誕樹

33 of 36

題目描述:

利用迴圈印出下列結果

34 of 36

題目描述:

利用迴圈印出下列結果

35 of 36

題目描述:

利用迴圈印出下列結果

36 of 36

題目描述:

利用迴圈印出下列結果

​

進階挑戰:三重迴圈