迴圈
loop
想想看
想想看
輸入十個數字,計算出其平均
宣告十個變數來存值?
並寫一個很長的算式?
若改為100個?
累加
int i,sum=0;
cin >> i;
sum=sum+i;
sum
i
0
1
1
若重複sum=sum+i很多次
2
3
迴圈的功能:使某段程式重複多次
要進行累加,初值必須為0
範例:整數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)計數重複
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;
對於
執行順序:
語法:
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
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)
範例:重覆輸出
範例:求最大值
題目描述:求N個整數的最大值
輸入格式:第1行為一個正整數N,第2行有N個整數,以空格相隔
範例:
輸入:
4
1 2 4 5
輸出:
5
範例:求最大值
作業6 h695: 一千遍我愛你
題目描述:輸入一個正整數 N。請輸出 N 行的「I love you.」。
輸入範例:
輸入:
3
輸出:
I love you.
I love you.
I love you.
作業6 h696: 倒數計時
題目描述:輸入一個正整數 N,請輸出從 N 到 0 之間的所有整數,兩個數字之間請空一格。
作業6 h697: 連續整數相加(一)
題目描述:輸入兩個正整數 A、B (其中 A<=B)。依照下面輸出範例的格式,輸出 A 到 B 之間所有整數相加的算式以及結果。
作業6 h698: 連續整數相加(二)
題目描述:
給你兩個正整數 A、B (A 和 B 不一定誰比較大),請你把 A 到 B 之間所有的整數加起來,並印出它的算式以及結果。
while-迴圈 (while-loop)
範例:程式先要求輸入密碼,當輸入密碼錯誤時,輸出 password is incorrect! ,並再要求輸入,直到輸入密碼正確為止。
要求輸入
密碼錯誤
再要求輸入
密碼再錯誤
密碼再錯誤
再要求輸入
再要求輸入
密碼正確
while-迴圈 (while-loop)
語法:
while(繼續重複條件){
重複敘述
}
繼續重複條件:
輸入密碼正不正確
重複敘述:
,不正確時重複
輸出password is incorrect!
要求再輸入
密碼
判斷
輸出錯誤訊息
要求再輸入
不正確
正確
輸入正確訊息
第一次
要求輸入
只要
while-迴圈 (while-loop)
語法:
while(繼續重複條件){
重複敘述
}
第一次要求輸入
判斷是否重複
重複敘述
do-while-迴圈 (do-while-loop)
範例:要求輸入整數,尋問是否繼續,直到不再繼續時,輸出之前輸入整數的總和
最少執行一次
do-while-迴圈 (do-while-loop)
語法:
do{
重複敘述
}while(繼續重複條件);
記錄是否繼續
做
只要
While-迴圈 v.s. do-while-迴圈
while(繼續重複條件){
重複敘述
}
do{
重複敘述
}while(繼續重複條件);
先判斷,再重複
先重複,再判斷
作業7 h700: 我討厭偶數
題目描述:輸入一個正整數 N,反覆把它除以二,直到這個數字變成奇數為止,輸出處理過後會變成多少
作業7 h701: 細菌繁殖
題目描述:輸入二個正整數 N、M,N 是一開始 X 菌的數量,而 M 則是預計要達到的量。每經過一分鐘數量會變為3倍,請輸出經過幾分鐘,X 菌才會達到 M 的量。
作業7 h702: 3N+1
題目描述:
有一個數列是這樣的:
第一項是一個大於一的正整數 N
如果這一項是奇數,則它的下一項是 3N+1
如果這一項是偶數,則它的下一項是 N/2
如此反覆,直到最後一項出現 1 為止
例如第一項是3,則這個數列為:3、10、5、16、8、4、2、1,共8項。
現在給你第一項的 N,請你求出這個數列有幾項。
作業7 h703: 所有位數和
題目描述:
給你一個正整數,請你求出所有位數的和是多少,
例如12345,因為1+2+3+4+5=15,則輸出15。
作業7 h704: 數字倒轉
題目描述:
給你一個正整數,請你將所有數字倒轉之後輸出,
例如給你12345,則輸出54321。
巢狀迴圈
執行6次
執行6*5=30次
每執行5次星號後執行1次
共執行6次
巢狀迴圈
執行6次
執行幾次?
執行6次
i=0
0次
i=1
1次
i=2
2次
i=3
3次
i=4
4次
i=5
5次
巢狀迴圈
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
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;
}
繼續下一個迴圈
直接離開迴圈
題目描述:
利用迴圈印出下列結果
題目描述:
輸入一個正整數n,利用迴圈印出n行的聖誕樹
題目描述:
利用迴圈印出下列結果
題目描述:
利用迴圈印出下列結果
題目描述:
利用迴圈印出下列結果
題目描述:
利用迴圈印出下列結果
進階挑戰:三重迴圈