第 5 節

程序流程結構

0瀏覽次數0訪問次數--跳出率--平均停留

程序流程結構

C/C++支持最基本的三種程序運行結構:==順序結構、選擇結構、循環結構==

  • 順序結構:程序按順序執行,不發生跳轉
  • 選擇結構:依據條件是否滿足,有選擇的執行相應功能
  • 循環結構:依據條件是否滿足,循環多次執行某段代碼

選擇結構

if語句

**作用:**執行滿足條件的語句

if語句的三種形式

  • 單行格式if語句
  • 多行格式if語句
  • 多條件的if語句
  1. 單行格式if語句:if(条件){ 条件满足执行的语句 }
    img
    示例:
    int main() {
    
        //选择结构-单行if语句
        //输入一个分数,如果分数大于600分,视为考上一本大学,并在屏幕上打印
    
        int score = 0;
        cout << "请输入一个分数:" << endl;
        cin >> score;
    
        cout << "您输入的分数为: " << score << endl;
    
        //if语句
        //注意事项,在if判断语句后面,不要加分号
        if (score > 600)
        {
            cout << "我考上了一本大学!!!" << endl;
        }
    
    
        return 0;
    }
    

注意:if條件表達式後不要加分號

  1. 多行格式if語句:if(条件){ 条件满足执行的语句 }else{ 条件不满足执行的语句 };

img

示例:

int main() {
    // 程序从 main 函数开始执行,下面的语句会按顺序运行。

    int score = 0;

    cout << "请输入考试分数:" << endl;

    cin >> score;

    if (score > 600)
    {
        cout << "我考上了一本大学" << endl;
    }
    else
    {
        cout << "我未考上一本大学" << endl;
    }


    // 返回 0 表示程序正常结束。
    return 0;
}

運行/觀察結果: 運行時需要按提示輸入數據,輸出結果會隨輸入內容和分支條件變化。

  1. 多條件的if語句:if(条件1){ 条件1满足执行的语句 }else if(条件2){条件2满足执行的语句}... else{ 都不满足执行的语句}

img

示例:

    int main() {
    // 程序从 main 函数开始执行,下面的语句会按顺序运行。

    int score = 0;

    cout << "请输入考试分数:" << endl;

    cin >> score;

    if (score > 600)
    {
        cout << "我考上了一本大学" << endl;
    }
    else if (score > 500)
    {
        cout << "我考上了二本大学" << endl;
    }
    else if (score > 400)
    {
        cout << "我考上了三本大学" << endl;
    }
    else
    {
        cout << "我未考上本科" << endl;
    }


    // 返回 0 表示程序正常结束。
    return 0;
}

運行/觀察結果: 運行時需要按提示輸入數據,輸出結果會隨輸入內容和分支條件變化。

嵌套if語句:在if語句中,可以嵌套使用if語句,達到更精確的條件判斷

案例需求:

  • 提示用户輸入一個高考考試分數,根據分數做如下判斷
  • 分數如果大於600分視為考上一本,大於500分考上二本,大於400考上三本,其餘視為未考上本科;
  • 在一本分數中,如果大於700分,考入北大,大於650分,考入清華,大於600考入人大。

示例:

int main() {
    // 程序从 main 函数开始执行,下面的语句会按顺序运行。

    int score = 0;

    cout << "请输入考试分数:" << endl;

    cin >> score;

    if (score > 600)
    {
        cout << "我考上了一本大学" << endl;
        if (score > 700)
        {
            cout << "我考上了北大" << endl;
        }
        else if (score > 650)
        {
            cout << "我考上了清华" << endl;
        }
        else
        {
            cout << "我考上了人大" << endl;
        }
        
    }
    else if (score > 500)
    {
        cout << "我考上了二本大学" << endl;
    }
    else if (score > 400)
    {
        cout << "我考上了三本大学" << endl;
    }
    else
    {
        cout << "我未考上本科" << endl;
    }


    // 返回 0 表示程序正常结束。
    return 0;
}

運行/觀察結果: 運行時需要按提示輸入數據,輸出結果會隨輸入內容和分支條件變化。

練習案例: 三隻小豬稱體重

有三隻小豬ABC,請分別輸入三隻小豬的體重,並且判斷哪隻小豬最重?三隻小豬

三目運算符

作用: 通過三目運算符實現簡單的判斷

語法:表达式1 ? 表达式2 :表达式3

解釋:

如果表達式1的值為真,執行表達式2,並返回表達式2的結果;

如果表達式1的值為假,執行表達式3,並返回表達式3的結果。

示例:

int main() {

    int a = 10;
    int b = 20;
    int c = 0;

    c = a > b ? a : b;
    cout << "c = " << c << endl;

    //C++中三目运算符返回的是变量,可以继续赋值

    (a > b ? a : b) = 100;

    cout << "a = " << a << endl;
    cout << "b = " << b << endl;
    cout << "c = " << c << endl;


    return 0;
}

運行/觀察結果: 運行後會按輸出語句打印對應內容,變量值可結合初始化、賦值和函數調用順序推導。

總結:和if語句比較,三目運算符優點是短小整潔,缺點是如果用嵌套,結構不清晰

switch語句

**作用:**執行多條件分支語句

語法:

switch(表达式)

{

    case 结果1:执行语句;break;

    case 结果2:执行语句;break;

    ...

    default:执行语句;break;

}

運行/觀察結果: 這段是語法片段,重點看寫法;補全上下文後再運行。

示例:

int main() {

    //请给电影评分 
    //10 ~ 9   经典   
    // 8 ~ 7   非常好
    // 6 ~ 5   一般
    // 5分以下 烂片

    int score = 0;
    cout << "请给电影打分" << endl;
    cin >> score;

    switch (score)
    {
    case 10:
    case 9:
        cout << "经典" << endl;
        break;
    case 8:
        cout << "非常好" << endl;
        break;
    case 7:
    case 6:
        cout << "一般" << endl;
        break;
    default:
        cout << "烂片" << endl;
        break;
    }


    return 0;
}

運行/觀察結果: 運行時需要按提示輸入數據,輸出結果會隨輸入內容和分支條件變化。

注意1:switch語句中表達式類型只能是整型或者字符型

注意2:case裏如果沒有break,那麼程序會一直向下執行

總結:與if語句比,對於多條件判斷時,switch的結構清晰,執行效率高,缺點是switch不可以判斷區間

循環結構

while循環語句

**作用:**滿足循環條件,執行循環語句

語法: while(循环条件){ 循环语句 }

解釋:==只要循環條件的結果為真,就執行循環語句==

img

示例:

int main() {
    // 程序从 main 函数开始执行,下面的语句会按顺序运行。

    int num = 0;
    while (num < 10)
    {
        cout << "num = " << num << endl;
        num++;
    }
    

    // 返回 0 表示程序正常结束。
    return 0;
}

運行/觀察結果: 運行後會按輸出語句打印對應內容,變量值可結合初始化、賦值和函數調用順序推導。

注意:在執行循環語句時候,程序必須提供跳出循環的出口,否則出現死循環

while循環練習案例:==猜數字==

**案例描述:**系統隨機生成一個1到100之間的數字,玩家進行猜測,如果猜錯,提示玩家數字過大或過小,如果猜對恭喜玩家勝利,並且退出遊戲。

猜數字

do...while循環語句

作用: 滿足循環條件,執行循環語句

語法: do{ 循环语句 } while(循环条件);

**注意:**與while的區別在於==do...while會先執行一次循環語句==,再判斷循環條件

img

示例:

int main() {
    // 程序从 main 函数开始执行,下面的语句会按顺序运行。

    int num = 0;

    do
    {
        cout << num << endl;
        num++;

    } while (num < 10);
    
    

    // 返回 0 表示程序正常结束。
    return 0;
}

運行/觀察結果: 運行後會按輸出語句打印對應內容,變量值可結合初始化、賦值和函數調用順序推導。

總結:與while循環區別在於,do...while先執行一次循環語句,再判斷循環條件

練習案例:水仙花數

**案例描述:**水仙花數是指一個 3 位數,它的每個位上的數字的 3次冪之和等於它本身

例如:1^3 + 5^3+ 3^3 = 153

請利用do...while語句,求出所有3位數中的水仙花數

for循環語句

作用: 滿足循環條件,執行循環語句

語法: for(起始表达式;条件表达式;末尾循环体) { 循环语句; }

示例:

int main() {
    // 程序从 main 函数开始执行,下面的语句会按顺序运行。

    for (int i = 0; i < 10; i++)
    {
        cout << i << endl;
    }
    

    // 返回 0 表示程序正常结束。
    return 0;
}

運行/觀察結果: 運行後會按輸出語句打印對應內容,變量值可結合初始化、賦值和函數調用順序推導。

詳解:

1541673704101

注意:for循環中的表達式,要用分號進行分隔

總結:while , do...while, for都是開發中常用的循環語句,for循環結構比較清晰,比較常用

練習案例:敲桌子

案例描述:從1開始數到數字100, 如果數字個位含有7,或者數字十位含有7,或者該數字是7的倍數,我們打印敲桌子,其餘數字直接打印輸出。

timg

嵌套循環

作用: 在循環體中再嵌套一層循環,解決一些實際問題

例如我們想在屏幕中打印如下圖片,就需要利用嵌套循環

1541676003486

示例:

int main() {

    //外层循环执行1次,内层循环执行1轮
    for (int i = 0; i < 10; i++)
    {
        for (int j = 0; j < 10; j++)
        {
            cout << "*" << " ";
        }
        cout << endl;
    }


    return 0;
}

運行/觀察結果: 運行後會按輸出語句打印對應內容,變量值可結合初始化、賦值和函數調用順序推導。

**練習案例:**乘法口訣表

案例描述:利用嵌套循環,實現九九乘法表

0006018857256120_b

跳轉語句

break語句

作用: 用於跳出==選擇結構==或者==循環結構==

break使用的時機:

  • 出現在switch條件語句中,作用是終止case並跳出switch
  • 出現在循環語句中,作用是跳出當前的循環語句
  • 出現在嵌套循環中,跳出最近的內層循環語句

示例1:

int main() {
    //1、在switch 语句中使用break
    cout << "请选择您挑战副本的难度:" << endl;
    cout << "1、普通" << endl;
    cout << "2、中等" << endl;
    cout << "3、困难" << endl;

    int num = 0;

    cin >> num;

    switch (num)
    {
    case 1:
        cout << "您选择的是普通难度" << endl;
        break;
    case 2:
        cout << "您选择的是中等难度" << endl;
        break;
    case 3:
        cout << "您选择的是困难难度" << endl;
        break;
    }


    return 0;
}

運行/觀察結果: 運行時需要按提示輸入數據,輸出結果會隨輸入內容和分支條件變化。

示例2:

int main() {
    //2、在循环语句中用break
    for (int i = 0; i < 10; i++)
    {
        if (i == 5)
        {
            break; //跳出循环语句
        }
        cout << i << endl;
    }


    return 0;
}

運行/觀察結果: 運行後會按輸出語句打印對應內容,變量值可結合初始化、賦值和函數調用順序推導。

示例3:

int main() {
    //在嵌套循环语句中使用break,退出内层循环
    for (int i = 0; i < 10; i++)
    {
        for (int j = 0; j < 10; j++)
        {
            if (j == 5)
            {
                break;
            }
            cout << "*" << " ";
        }
        cout << endl;
    }
    

    return 0;
}

運行/觀察結果: 運行後會按輸出語句打印對應內容,變量值可結合初始化、賦值和函數調用順序推導。

continue語句

**作用:**在==循環語句==中,跳過本次循環中餘下尚未執行的語句,繼續執行下一次循環

示例:

int main() {
    // 程序从 main 函数开始执行,下面的语句会按顺序运行。

    for (int i = 0; i < 100; i++)
    {
        if (i % 2 == 0)
        {
            continue;
        }
        cout << i << endl;
    }
    

    // 返回 0 表示程序正常结束。
    return 0;
}

運行/觀察結果: 運行後會按輸出語句打印對應內容,變量值可結合初始化、賦值和函數調用順序推導。

注意:continue並沒有使整個循環終止,而break會跳出循環

goto語句

**作用:**可以無條件跳轉語句

語法: goto 标记;

**解釋:**如果標記的名稱存在,執行到goto語句時,會跳轉到標記的位置

示例:

int main() {
    // 程序从 main 函数开始执行,下面的语句会按顺序运行。

    cout << "1" << endl;

    goto FLAG;

    cout << "2" << endl;
    cout << "3" << endl;
    cout << "4" << endl;

    FLAG:

    cout << "5" << endl;
    

    // 返回 0 表示程序正常结束。
    return 0;
}

運行/觀察結果: 運行後會按輸出語句打印對應內容,變量值可結合初始化、賦值和函數調用順序推導。

注意:在程序中不建議使用goto語句,以免造成程序流程混亂

音乐页