01-C語(yǔ)言流程控制-if和switch條件語(yǔ)句

流程控制

流程控制三種結(jié)構(gòu): 順序結(jié)構(gòu), 選擇結(jié)構(gòu), 循環(huán)結(jié)構(gòu)

選擇結(jié)構(gòu)

  • C語(yǔ)言中提供了兩大選擇結(jié)構(gòu),分別是if 和switch;

1. if條件語(yǔ)句

  • if 的第一種表達(dá)式
    • 如果表達(dá)式為真,執(zhí)行語(yǔ)句塊1,否者不執(zhí)行;
    if(條件表達(dá)式){  
    
        條件成立執(zhí)行的語(yǔ)句;  

    }
if(age >= 18){
    printf("上網(wǎng)去\n");
}
printf("買飲料\n");
  • if的第二種表達(dá)式
    • 如果表達(dá)式為真,執(zhí)行語(yǔ)句塊1,否者執(zhí)行語(yǔ)句塊2;
    • else 不能脫離if單獨(dú)使用;
if(條件表達(dá)式){
    條件成立執(zhí)行的語(yǔ)句;
}else{
    條件不成立執(zhí)行的語(yǔ)句;
}

if(num % 2 == 0){
    printf("num is 偶數(shù)");
}else{
    printf("num is 奇數(shù)");
}
  • if的第三種表達(dá)式
    • 從上到下依次判斷條件跳大神,哪個(gè)表達(dá)式成立,就會(huì)執(zhí)行那個(gè)條件表達(dá)式后面{}的內(nèi)容;
    • 如果所有條件表達(dá)式都不成立,就執(zhí)行else后面括號(hào)中的內(nèi)容;
if(表達(dá)式1){
    條件滿足執(zhí)行語(yǔ)句塊1;
}else if(表達(dá)式2){
    條件滿足執(zhí)行語(yǔ)句塊2;
}else if(表達(dá)式3){
    條件滿足執(zhí)行語(yǔ)句塊3;
}else{
    條件不成立執(zhí)行的語(yǔ)句;
}

if(age > 18){
    printf("上大學(xué)");
}else if (age > 15){
    printf("上高中");
}else if(age > 12){
    printf("上初中");
}else if(age > 7){
    printf("上小學(xué)")
}else{
    printf("上幼兒園");
}


  • if嵌套
    • if中可以繼續(xù)嵌套if, else中也可以繼續(xù)嵌套;
if(表達(dá)式1){
    語(yǔ)句塊1;
    if(表達(dá)式2){
      語(yǔ)句塊2;
    }
}else{
    if(表達(dá)式3){
      語(yǔ)句塊3;
    }else{
      語(yǔ)句塊4;
    }
}
  • if注意點(diǎn)

    • if語(yǔ)句不用寫分號(hào);
    #include <stdio.h>
    
    int main()
    {
        int num = 10;
        // (;)也是一條語(yǔ)句, 稱之為空語(yǔ)句
        if(num >18);   // 寫了這個(gè)分號(hào);{}中的內(nèi)容就脫離if的控制
        {
            printf("該去上大學(xué)了");
        }
        return 0;
        
        // 條件不滿足還是會(huì)執(zhí)行{}中的內(nèi)容;
        // 輸出該去上學(xué)了
    }
    
    • 當(dāng)if else后面只有一條語(yǔ)句時(shí), if else后面的大括號(hào)可以省略,如果省略大括號(hào),那么僅僅距離if最近的那個(gè)條語(yǔ)句受到if的控制
    • 當(dāng)if else后面的大括號(hào)被省略時(shí),** else會(huì)自動(dòng)和距離最近的一個(gè)if匹配**
    • 如果if 省略了大括號(hào), 那么后面不能定義變量
    #include <stdio.h>
    
    int main()
    {
        if(1)
            int num = 10;  // 系統(tǒng)會(huì)報(bào)錯(cuò)
        printf("num = %i", num);
        return 0;
    }
    
    #include <stdio.h>
    
    int main(){
        if(0){
            int num1 = 10;
    
        }else
            int num2 = 20;  // 系統(tǒng)報(bào)錯(cuò)
        printf("num2 = %i", num2);
        return 0;
    }
    
    
    • C語(yǔ)言中分號(hào)(;)也是一條語(yǔ)句, 稱之為空語(yǔ)句
    • 但凡遇到比較一個(gè)變量等于或者不等于某一個(gè)常量的時(shí)候,把常量寫在前面
    • 任何數(shù)值都有真假性;在企業(yè)開(kāi)發(fā)中如果要判斷是否相等,建議把常量寫在前面,把變量寫在后面
    • {}可以單獨(dú)出現(xiàn),{}出現(xiàn)的時(shí)候是一個(gè)代碼塊; 主要用于隔離變量使用;代碼塊外面是不能訪問(wèn)代碼塊內(nèi)的變量;代碼塊里面可以訪問(wèn)代碼塊外面的變量;
    {
        int age = 18;
        printf("age = %i\n", age);
    }
    printf("age = %i\n",age);  //會(huì)報(bào)錯(cuò)
    
  • if 練習(xí)

    • 從鍵盤輸入一個(gè)整數(shù),判斷其是否是偶數(shù),如果是偶數(shù)就輸出YES,否則輸出NO;
    #include <stdio.h>
    
    int main(){
        //從鍵盤輸入一個(gè)整數(shù),判斷其是否是偶數(shù),如果是偶數(shù)就輸出YES,否則輸出NO;
        // 定義一個(gè)變量
        int num = -1;
        // 提示用戶如何輸入
        printf("請(qǐng)輸入一個(gè)整數(shù),以回車鍵結(jié)束;\n");
        // 接收用戶的輸入
        scanf("%i", &num);
        // if語(yǔ)句判斷是偶數(shù)則輸出YES ,否則輸出NO;
        if(0 == num % 2){
            // 偶數(shù)
             printf("YES");
        }else{
            //  奇數(shù)
            printf("NO");
        }
        return 0;
    }
    
    
    • 接收用戶輸入的1~7的整數(shù),根據(jù)用戶輸入的整數(shù),輸出對(duì)應(yīng)的星期幾
    #include <stdio.h>
    
    int main()
    {
        //接收用戶輸入的1~7的整數(shù),根據(jù)用戶輸入的整數(shù),輸出對(duì)應(yīng)的星期幾
        // 定義變量
        int num = -1;
        // 提示用戶輸入
        printf("請(qǐng)輸入1~7的整數(shù):");
        // 接收用戶的輸入
        scanf("%i", &num);
        // 判斷對(duì)應(yīng)的值
        if(num < 1 || num > 7){
            printf("對(duì)不起,你輸入的數(shù)有誤! 請(qǐng)重新打開(kāi)輸入\n");
        }else if(1 == num){
            printf("星期一\n");
        }else if(2 == num){
            printf("星期二\n");
        }else if(3 == num){
            printf("星期三\n");
        }else if(4 == num){
            printf("星期四\n");
        }else if(5 == num){
            printf("星期五\n");
        }else if(6 == num){
            printf("星期六\n");
        }else {
            printf("星期日");
        }
        return 0;
    }
    
    
    • 接收用戶輸入的一個(gè)整數(shù)month代表月份,根據(jù)月份輸出對(duì)應(yīng)的季節(jié)
    #include <stdio.h>
    
    int main()
    {
        // 接收用戶輸入的一個(gè)整數(shù)month代表月份,根據(jù)月份輸出對(duì)應(yīng)的季節(jié)
        // 定義變量
        int month = -1;
        // 提示用戶正確輸入
        printf("請(qǐng)輸入月份:");
        // 接收數(shù)據(jù)
        scanf("%i", &month);
       // 判斷輸入,輸出相應(yīng)的季節(jié)
        if(month < 1 || month > 12){
            printf("請(qǐng)重新輸入月份");
        }else if(month >= 3 && month <= 5){
            printf("春季\n");
        }else if(month >=6 && month <= 8){
            printf("夏季\n");
        }else if(month >= 9 && month <= 11){
            printf("秋季\n");
        }else{
            printf("冬季\n");
        }
    
        return 0;
    }
    
    • 接收用戶輸入的兩個(gè)整數(shù),判斷大小后輸出較大的那個(gè)數(shù)
    #include <stdio.h>
    
    int main()
    {
        // 接收用戶輸入的兩個(gè)整數(shù),判斷大小后輸出較大的那個(gè)數(shù)
        // 定義兩個(gè)變量;
        int a = -1, b = -1;
        // 提示用戶輸入兩個(gè)數(shù)
        printf("請(qǐng)輸入兩個(gè)數(shù), 以逗號(hào)隔開(kāi):\n");
        // 接收用戶輸入的兩個(gè)數(shù)
        scanf("%i,%i", &a, &b);
        // 判斷大小
        if(a > b){  // a>b,輸出a;
            printf("Max = %i", a);
        }else{
            // b > a,  輸出b;
            printf("Max = %i", b);
        }
        return 0;
    }
    
    • 接收用戶輸入的三個(gè)整數(shù),判斷大小后輸出較大的那個(gè)數(shù)
    // 定義三個(gè)變量:
    int a = -1, b = -1, c = -1;
    // 定義最大值
    int max =  -1;
    // 提示用戶輸入三個(gè)整數(shù);
    printf("請(qǐng)輸入三個(gè)整數(shù),以逗號(hào)隔開(kāi):\n");
    // 接收數(shù)據(jù)
    scanf("%i,%i,%i", &a, &b, &c);
    // 判斷大小
    if(a > b){
        if(a > c){
            max = a;
        }else{
            max = c;
        }
    }else{
        if(b > c){
            max = b;
        }else{
            max = c;
        }
    }
    // 輸入最大值;
    printf("max = %i", max);
    
    • 接收用戶輸入的三個(gè)整數(shù),排序后輸出
    // 定義用戶輸入的三個(gè)數(shù)
    int a = -1, b = -1, c = -1;
    // 定義臨時(shí)變量
    int temp = -1;
    //提示用戶輸入格式:
    printf("請(qǐng)輸入三個(gè)整數(shù), 以逗號(hào)隔開(kāi), 最后以回車結(jié)束:\n");
    // 接收用戶輸入:
    scanf("%i,%i,%i", &a, &b, &c);
    // 進(jìn)行兩個(gè)比較;
    if(a > b){
        temp = a;
        a = b;
        b = temp;
    }
    if(b > c){  // 得到最值c
        temp = b;
        b = c;
        c = temp;
    }
    
    if(a > b){  // 得到最值b
        temp = a;
        a = b;
        b = temp;
    }
    // 輸出結(jié)果
    printf("%i,%i,%i" , a, b, c);
    
    

2. 選擇結(jié)構(gòu) switch

  • 格式:
switch(表達(dá)式){
    case 常量表達(dá)式1:   // 相當(dāng)于else if
        語(yǔ)句1;
        break;
    case 常量表達(dá)式2:
        語(yǔ)句2; 
        break;
    case 常量表達(dá)式n:
        語(yǔ)句n;
        break;
    default:   // 相當(dāng)于else
        語(yǔ)句n+1;
        break;
}


  • 執(zhí)行流程:
    • 1.計(jì)算switch后面()中表達(dá)式的結(jié)果;
    • 2.利用計(jì)算的結(jié)果從上之下的和switch后面{}中的case的表達(dá)式的值依次比較;
    • 3.一旦發(fā)現(xiàn)switch 表達(dá)式的值和case表達(dá)式的值相同,就執(zhí)行該case后面的語(yǔ)句;
    • 4.一旦某個(gè)case被執(zhí)行,其他的case就不會(huì)執(zhí)行了
    • 5.如果所有case表達(dá)式的值和switch表達(dá)式的值都不相等,那么執(zhí)行default后面的語(yǔ)句;
int day = 3;
    switch (day){
    case 1:
        printf("星期一");
        break;
    case 2:
        printf("星期二");
        break;
    default :
        printf("Other");
        break;
    }
    // 執(zhí)行結(jié)果為: Other;

switch注意點(diǎn)

  • switch中只要任意一個(gè)case匹配, 其它所有的case和default都會(huì)失效. 所以如果case和default后面沒(méi)有break就會(huì)出現(xiàn)穿透問(wèn)題,break在switch中的作用,就是跳出switch語(yǔ)句(結(jié)束當(dāng)前的switch語(yǔ)句);
    image
  • switch條件表達(dá)式的類型必須是整型, 或者可以被提升為整型的值(char、short)

  • case的值只能是常量,不能是變量, 并且還必須是整型, 或者可以被提升為整型的值(char、short)

  • case后面常量表達(dá)式的值不能相同

  • case后面不能定義變量要想定義變量,必須給case加上大括號(hào)

  • switch中default可以省略

  • switch中default的位置不一定要寫到最后, 無(wú)論放到哪都會(huì)等到所有case都不匹配才會(huì)執(zhí)行(穿透問(wèn)題除外)記住一點(diǎn): default永遠(yuǎn)寫在最后;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第2章 基本語(yǔ)法 2.1 概述 基本句法和變量 語(yǔ)句 JavaScript程序的執(zhí)行單位為行(line),也就是一...
    悟名先生閱讀 4,556評(píng)論 0 13
  • 一、快捷鍵 ctr+b 執(zhí)行ctr+/ 單行注釋ctr+c ...
    o_8319閱讀 6,031評(píng)論 2 16
  • 各行各業(yè)都在搭上人工智能的快車,還要加上人臉識(shí)別,但高科技能解決面對(duì)面交流的眼神注視嗎?[捂臉]
    qiao老胖閱讀 117評(píng)論 0 0
  • 開(kāi)始健身,網(wǎng)路上很多資訊,很希望自己可以徹底了解這一塊。我覺(jué)得自己好像背負(fù)著父親沒(méi)有完成的所有任務(wù)。這當(dāng)然也包括戰(zhàn)...
    NCNeverland閱讀 172評(píng)論 0 0
  • 走心 新的開(kāi)始 披荊斬棘 祝成功
    靜靜_吖閱讀 176評(píng)論 0 0

友情鏈接更多精彩內(nèi)容