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

題目描述

利用迴圈印出下列結果

進階挑戰:三重迴圈