changed 2 years ago
Published Linked with GitHub

C++ 流程控制


目錄

  1. if / else / else if
  2. while
  3. for
  4. break
  5. continue

if


當條件(condition)成立(True)時,執行裡面的程式碼

if (condition){ // do something }

可以簡單理解成
如果條件成立, ___


else

需與 if 一起使用

if (condition){ // do something } else{ // do another something }

可以簡單理解成
如果條件成立, ___, 否則___


else if

需與 if 一起使用

if (condition1){ // do something } else if (condition2){ // do another something }

可以簡單理解成
如果條件1成立, ___
或是
如果
條件2成立, ___


如果{}中的程式碼只有一句
則大括號可以省略


sample

if (true) cout<<"hello world";

所以條件要放什麼 ?


能生出布林值的東西


記得關係運算子邏輯運算子
那就對了


三個放一起


sample

int n = 4; if (n==1)cout<<"n=1"; else if (n==2)cout<<"n==2"; else if (n==3)cout<<"n==3" else cout<<"n != {1, 2, 3}";

else if 可以有無數個
else可有可無但只能有一個且只能放在最後


小結論

if 語法結構:
if + \(n\)else if + \(0\sim1\)else


小試身手

ZJ a003. 兩光法師占卜術


參考答案


while


重複執行直到條件不成立

while (condition){ // do something }

可以簡單理解成
只要條件成立就___


sample

int n=0; while (n>3) cout<<"*";

請問以上的程式會輸出幾個 *


sample

int n=0; while (n<3){ cout<<"*"; n++; }

請問以上的程式會輸出幾個 *


for


for迴圈的語法稍微複雜些

for (init; condition; increment){ // do something }
  1. for迴圈的開始會先進行初始化(init)
  2. 接著判斷條件(condition)是否成立
    2-1. 如果成立就執行區塊中的程式碼
    2-2. 執行遞增(increment)
    2-3. 回到 2.
  3. 條件(condition)不成立 結束迴圈


sample

for (int i=1; i<6; i++) cout<<i;

依剛剛講的流程
思考看看輸出會是多少


輸出為

12345


初始化(init)遞增(increment)


初始化可用來定義只做用在迴圈中的變數
遞增通常用來改變該變數的值但不一定是增加

這兩個可以不用存在


sample

int i=3; for ( ; i>0;) cout<<i--;

有沒有很像前面講的某個語法


for迴圈沒有初始化遞增的部份時
可以當while迴圈使用

怎麼不直接寫while就好

巢狀迴圈

簡單說就是在一個迴圈當中還有好幾層的迴圈

for (int i=0; i<10; i++){ for (int j=0; j<10; j++){ // do something } }

sample

for (int i = 0; i < 4; i++) { for (int j = 0; j < 3; j++) cout << "*"; cout << endl; }

請推測輸出為何


***
***
***
***


牛刀大試

Zerojudge c013. 00488 - Triangle Wave


c013. 00488 - Triangle Wave


break

break在英文中有打破 打斷的意思
在C++中用於跳出一個迴圈


sample

int n=0; while (n<10){ cout<<n; if (n==2) break; n++; }

試問輸出值為何


解答


012


小試身手

Zerojudge a004. 文文的求婚


a004. 文文的求婚


continue

continue用於直接進入下一次迴圈


sample

for (int i=0; i<5; i++){ if (i==3) continue; cout<<i; }

output: 0124


sample

for (int i=10; i>0; i--){ if (i%4 == 0) continue; if (i == 3) break; cout<<i; }

想想看輸出為何


解答


109765


補充: switch

因為我比較少用所以是補充

switch 用於判斷單一條件且多個分支的狀況
用於比對一個物件的值是否為特定值


語法

switch (expression) { case constant1: // do something break; // optional case constant2: // do something break; // optional ... default: // optional // do something }

比對表達式(expression)的值是否為特定值(case),若有其中一項case符合, 則執行往下所有程式碼直到break或是switch結束


switch + \(1\sim n\)case + \(0\sim 1\)default
casedefault中至少包含一個break


sample


int n=2; switch (n%3){ case 1: cout<<"n%3 = 1"; break; case 2: cout<<"n%3 = 2"; break; default: cout<<"n%3 = 0"; break; }

sample

int n = 1; switch (n){ case 0: cout<<0; case 1: cout<<1; case 2: cout<<2; default: cout<<"=="; }

想想看輸出為何


12==


試使用switch再完成一次

Zerojudge a003. 兩光法師占卜術


#include<iostream> using namespace std; signed main(){ int M, D; cin>>M>>D; switch ((M*2+D)%3){ case 0: cout<<"普通"; break; case 1: cout<<"吉"; break; case 2: cout<<"大吉"; break; } return 0; }
Select a repo