Loop

While Loop & Do-While Loop & For Loop

- 葉子齊 -

#1 介紹迴圈 #2    While迴圈
&Do-While迴圈
#3 For迴圈
#4 比較 #5   應用—巢狀,
break&continue
#6 kahoot!

INDEX

介紹迴圈

Let’s take a look at what a loop is.

action🎬

成功電研36屆某教學學長

action🎬

\ 罰寫100遍「我不該在校長室前睡覺」/

\ zzz /

迴圈

重複執行

  • 賴床
    • 媽媽還沒生氣時,就再睡㇐下
  •  背英文單字 
    • 把英文單字寫10

WHILE迴圈

while

while(條件式){
	達成條件時執行;
    //迴圈主體
}
條件成立
執行
迴圈主體
跳出迴圈
while -> 當

while

int height;
cin>>height;
while(height>165){
  cout<<"你好高"<<endl;
}
Q: 輸入170會發生什麼事?
無窮迴圈

!

你好高
你好高
你好高
你好高
你好高
你好高
.

.

.

while

int height;
cin>>height;
while(height>165){
  cout<<"你好高"<<endl;
  cin>>height;
}
解決無窮迴圈
- - - - - - - - - - - - - - - - - - - - - - - -

while

try try 看
用while迴圈
輸出五次「我不該在校長室前睡覺」

1.5 mins.

while

    int N=0;
    while(N<5){
        cout<<"我不該在校長室前睡覺"<<endl;
        N=N+1;
    }

輸出:

我不該在校長室前睡覺

我不該在校長室前睡覺

我不該在校長室前睡覺

我不該在校長室前睡覺

我不該在校長室前睡覺
1
2
3
4
5
answer

while

	int N=0;
    while(N<5){
        cout<<"我不該在校長室前睡覺"<<endl;
        N=N+1;
    }
0<5 N=0 N=1
1<5 N=1 N=2
2<5 N=2 N=3
3<5 N=3 N=4
4<5 N=4 N=5
1
2
3
4
5
5<5

6

while(N<5)
cout<<"我不該在校長室前睡覺";
N=N+1;
不成立
跳出迴圈

while

try try 看 - 上次的回家作業

5 mins.

review

try try see

answer
#include <iostream>
using namespace std;
int main()
{
    int year;
    while(cin>>year){ //當輸入year時,執行以下程式:
    
    if( year%4==0 && year%100!=0 || year%400==0 ) 
        cout<<"閏年"<<endl;
    else
        cout<<"平年"<<endl;
	}
}

 

如果

year被4整除year不被100整除

year能被400整除」

% -> 取餘數

year除以4取餘數等於0 -> year能被4整除

ex: 20 100 5052

while(cin>>變數)
常用!

do - while

億點點小補充
  • 執行程式檢查條件
int vacation;
cin>>vacation;
while(vacation>2){
  cout<<"yeah";
  cin>>vacation;
}
int vacation;
do{
  cout<<"yeah";
  cin>>vacation;
}while(vacation>2);
[While]
[Do-While]
默認條件符合 直接執行程式

for迴圈

for

for(起始值; 條件式; 更新值){
        達成條件時執行;
  }
for(int i=1;i<=5;i++){
        cout<<i<<" ";
    }
輸出:
1 2 3 4 5

for

for(int i=1;i<=5;i++){
        cout<<i<<" ";
    }
i = 1 i = 2
i = 2 i = 3
i = 3 i = 4
i = 4 i = 5
i = 5 i = 6
1
2
3
4
5
i  = 6

6

i = ?
i <= 5
i++
不成立
跳出迴圈
1. 設定變數 i=1;
2. 檢查 i<= 5 是否成立,不成立則跳出迴圈
3. 執行 cout << i << endl;
4. 執行 i++ ( 即 i=i+1 )
5. 檢查 i<= 5 是否成立,不成立則跳出迴圈
6. 執行 cout << i << endl;
cout<<i<<" ";

for

int money=0,day=30,time=2;
for(money=10;day<=60;time++){
        //舉例用
}
  • 小提醒

不一定都是同一個變數,只要符合公式都可以,不要被限制住

COMPARE

  • For跟While都是迴圈 兩者可互換
for(int i=1;i<=5;i++){
        cout<<i<<" ";
    }
輸出:
1 2 3 4 5

[For迴圈]

[While迴圈]

int i=1;
while(i<=5){ //或用i<6
	cout<<i<<endl;
    i+=1; //i=i+1
}
1 2 3 4 5

應用

巢狀迴圈,break&continue

巢狀迴圈

  • 迴圈裡面又包了一個迴圈
  • 常見使用時機:某件事需要做 m 次,而這m當中,每㇐次又另外有 n 件事要做
for(int i=0; i<m; i++){ //外(層)迴圈
  for(int j=0; j<n; j++){ //內(層)迴圈
  這邊會得到所有的 i,j 組合 
  }
}
注意大括號要成對哦!

巢狀迴圈

  • 九九乘法表
for(int i=1; i<10; i++){
    for(int j=1; j<10; j++){
        cout << i*j << " ";
    }
    cout << endl;
}
  • i -> 1 ~9
  • j -> 1 ~9

1 2 3 4 5 6 7 8 9
2 4 6 8 10 12 14 16 18
3 6 9 12 15 18 21 24 27
4 8 12 16 20 24 28 32 36
5 10 15 20 25 30 35 40 45
6 12 18 24 30 36 42 48 54
7 14 21 28 35 42 49 56 63
8 16 24 32 40 48 56 64 72
9 18 27 36 45 54 63 72 81

輸出:
注意空格(Tab)差異
cout<<endl; 是i迴圈的
...

i =1

j = 1  i*j =1*1

j = 2  i*j =1*2

. . .

j = 9  i*j =1*9

endl;

i =9

j = 1  i*j =9*1

j = 2  i*j =9*2

. . .

j = 9  i*j =9*9

endl;

巢狀迴圈

5 mins.

try try 看

巢狀迴圈

answer
一個 n 層的三角形,第 i 層就要有 i 個 *
int n;
cin>>n;
for(int i=1;i<=n;i++){
    for(int j=1;j<=i;j++){
    cout<<"*";
    }
    cout<<endl;
}
i = j =
1 1
2 1 2
3 1 2 3
4 1 2 3 4
5 1 2 3 4 5
輸入: 5
*
**
***
****
*****
輸出: 

j<=i

break&continue

  • 可用在while迴圈跟for迴圈
  • 搭配條件判斷使用
  • 表強制跳出該迴圈
  • 可用在while迴圈跟for迴圈
  • 搭配條件判斷使用
  • 表強制結束此次迴圈循環
[Break]
[continue]

break&continue

  • 表強制跳出該迴圈
  • 表強制結束此次迴圈循環
[Break]
[continue]
for(int i=0;i<5;i++){
     if(i==2)
        break;
     cout<<i<<" ";
 }
for(int i=0;i<5;i++){
     if(i==2)
        continue;
     cout<<i<<" ";
 }

0 1 3 4

0 1 

i=0     i=1     i=2     break;

i=0     i=1     i=2     continue;     i=3     i=4 

跳出整個迴圈,不再執行
只跳出那一次迴圈
輸出:

kahoot!

5分40秒

while(條件式){
	達成條件時執行;
    //迴圈主體
}
while(更新值){
	達成條件時執行;
    //迴圈主體
}
while(初始值){
	達成條件時執行;
    //迴圈主體
}
while(飢餓值){
	達成條件時執行;
    //迴圈主體
}

A

B

C

D

A

B

D

for(條件式; 起始值; 更新值){
        達成條件時執行;
  }
for(起始值; 更新值; 條件式){
        達成條件時執行;
  }
for(起始值; 條件式; 更新值){
        達成條件時執行;
  }
for(飢餓值; san式; 生命值){
        達成條件時執行;
  }
int n=4;
for(int i=1;i<n;i++){
    for(int j=1;j<i;j++){
    cout<<"+";
    }
    cout<<endl;
}
i迴圈 i = 1 i = 2 i = 3
判斷 j < i 判斷 j < i 判斷 j < i
j迴圈        1沒有<1 j = 1 j = 1 和 j = 2
cout<< + ++
i迴圈 (endl) (endl) (endl)

輸出:

(空行)

+

++

9/26 C++ LOOP

By strange_swing

9/26 C++ LOOP

  • 367