建電大社課[4]

迴圈

Lecturer: 先帝、立葉

什麼是迴圈?

來舉例~

如果今天要你輸出下面五行一模一樣的字,

你會怎麼做ㄋ(?

#include<iostream>
using namespace std;

int main(){

  cout<<"Hello CKEISC!\n";
  cout<<"Hello CKEISC!\n";
  cout<<"Hello CKEISC!\n";
  cout<<"Hello CKEISC!\n";
  cout<<"Hello CKEISC!\n";
  
  return 0;
}

太麻煩ㄌ

於是,迴圈為了解決重複的問題而誕生。

就算你有Ctrl + C與Ctrl + V的功能也不夠有效率!

如果他沒事先告訴你要印幾次,你也拿他沒轍!

while迴圈

如果條件有一直達成,就一直幹嘛幹嘛幹嘛

while迴圈的格式

while(/*布林條件式*/){
    //要重複執行的程式 
} 

每次要進入迴圈前,會判斷條件式成不成立

如果成立,就會執行迴圈內的程式

如果不成立,就跳出迴圈

思考時間

#include<iostream>
using namespace std;

int main(){
	
	int sum=0,i=0;
	while(i<=10){
		sum+=i;
		i++;
	}
	
	cout<<sum<<'\n';
	
	return 0;
}

想想看,這個程式最後會輸出什麼?

do-while 迴圈格式

do{
    //要執行的程式 
}while(/*布林條件式*/);
  //不要忘了後面要括號+;啦哈哈 

每次會先進入迴圈,再判斷條件式成不成立

如果成立,就會進入下一個迴圈

如果不成立,就跳出迴圈

我想要製造永動機(???

while(true){
    cout << "I'm invincible\n";
}

這個迴圈永遠停不下來ㄟ

溫馨提示:若要結束程式,可以按視窗右上角的X。

或者Ctrl + C

或者...還有其他方法(?

break

#include<iostream>
using namespace std;

int main(){
	
	int i=0;
	while(i<=10){
		i++;
		if(i==5) break;
		cout<<i<<'\n';
	}
	
	return 0;
}

break會讓電腦跳出這個指令所在最內圈的迴圈!

continue

#include<iostream>
using namespace std;

int main(){
	
	int i=0;
	while(i<10){
		i++;
		if(i==5) continue;
		cout<<i<<'\n';
	}
	
	return 0;
}

continue會讓電腦回到迴圈頭重新執行!

(包括條件)

for迴圈

初始化、條件判斷、然後看看要變什麼

for迴圈的格式

for(/*初始化*/;/*進行條件*/;/*更新*/){
	//要執行的程式
}

可以在起始的地方宣告一個變數!

但這個變數是僅限於這個迴圈內的區域變數

然後跟while迴圈一樣,放一個條件讓它判斷要不要進入迴圈

更新則是每次迴圈跑完之後,需要更改什麼東東

範例

#include<iostream>
using namespace std;

int main(){
	
	for(int i=1;i<=5;i++){
		cout<<i<<'\n';
	}
	
	return 0;
}

continue & break也能用

#include<iostream>
using namespace std;

int main(){
	
	for(int i=1;i<=100;i*=2){
		if(i==8) continue;
	cout<<i<<'\n';
	}
	
	return 0;
}

如果不需要用任何一項就留 ; 就好

#include<iostream>
using namespace std;
 
int main()
{
   	int a,b=0;
    cin >> a;
   	for(;b<a;)
    {
    	cout<<1<<'\n'; //不創造&定義變數、不更新
        a--;
    }
    int c=10;
    for(;;c++)cout<<c<<'\n'; //會更新的無限loop
    for(;;)cout<<"OuO"<<'\n'; //無限loop
}

巢狀/多維迴圈(迴圈裡放迴圈)

#include<iostream>
using namespace std;

int main(){
	int n=3,m=5;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cout<<i<<'-'<<j<<' ';
		}
		cout<<'\n';
	}
	return 0;
}

思考時間🥳

假設我今天輸入一個n,

而你要做的,是輸出 n*n 的九九乘法表

要怎麼做呢 (?

int n;cin>>n;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            cout<<i<<'*'<<j<<'='<<i*j<<' ';
        }
        cout<<'\n';
    }

巢狀迴圈類題

zj a696

補充:EOF

好 其實也不太算補充

想要一直輸入咚咚(?

int a;
while(true){
	cin>>a;
	if(a==0) break;
	//想執行的程式
}

第一種:主動終止

想要一直輸入咚咚(?

int a;
while(cin>>a){
	//想執行的程式
}

第二種:測資會一直給你輸入,輸入結束即跳出迴圈

這時候如果想自己斷掉迴圈,

可以輸入Ctrl + Z,就能跳出來了w

例題演練

ZJ a004 (EOF)

先做這些吧~

例題演練

你有辦法 不使用到根號 嗎 (?

嘗試用數字型態解解看~

小小的挑戰題... or... too easy for ya?

大家來報名 10/14 ㄉ小迎新la><

報名ㄉgoogle表單