建電大社課[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
例題演練
先做這些吧~
例題演練
你有辦法 不使用到根號 嗎 (?
嘗試用數字型態解解看~
小小的挑戰題... or... too easy for ya?
大家來報名 10/14 ㄉ小迎新la><
報名ㄉgoogle表單