01-C語言流程控制-if和switch條件語句

流程控制

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

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

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

1. if條件語句

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

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

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

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


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

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

    • 從鍵盤輸入一個整數(shù),判斷其是否是偶數(shù)斋配,如果是偶數(shù)就輸出YES孔飒,否則輸出NO灌闺;
    #include <stdio.h>
    
    int main(){
        //從鍵盤輸入一個整數(shù),判斷其是否是偶數(shù)坏瞄,如果是偶數(shù)就輸出YES桂对,否則輸出NO;
        // 定義一個變量
        int num = -1;
        // 提示用戶如何輸入
        printf("請輸入一個整數(shù),以回車鍵結(jié)束;\n");
        // 接收用戶的輸入
        scanf("%i", &num);
        // if語句判斷是偶數(shù)則輸出YES ,否則輸出NO;
        if(0 == num % 2){
            // 偶數(shù)
             printf("YES");
        }else{
            //  奇數(shù)
            printf("NO");
        }
        return 0;
    }
    
    
    • 接收用戶輸入的1~7的整數(shù)鸠匀,根據(jù)用戶輸入的整數(shù)蕉斜,輸出對應(yīng)的星期幾
    #include <stdio.h>
    
    int main()
    {
        //接收用戶輸入的1~7的整數(shù),根據(jù)用戶輸入的整數(shù)缀棍,輸出對應(yīng)的星期幾
        // 定義變量
        int num = -1;
        // 提示用戶輸入
        printf("請輸入1~7的整數(shù):");
        // 接收用戶的輸入
        scanf("%i", &num);
        // 判斷對應(yīng)的值
        if(num < 1 || num > 7){
            printf("對不起,你輸入的數(shù)有誤! 請重新打開輸入\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;
    }
    
    
    • 接收用戶輸入的一個整數(shù)month代表月份宅此,根據(jù)月份輸出對應(yīng)的季節(jié)
    #include <stdio.h>
    
    int main()
    {
        // 接收用戶輸入的一個整數(shù)month代表月份,根據(jù)月份輸出對應(yīng)的季節(jié)
        // 定義變量
        int month = -1;
        // 提示用戶正確輸入
        printf("請輸入月份:");
        // 接收數(shù)據(jù)
        scanf("%i", &month);
       // 判斷輸入,輸出相應(yīng)的季節(jié)
        if(month < 1 || month > 12){
            printf("請重新輸入月份");
        }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;
    }
    
    • 接收用戶輸入的兩個整數(shù)爬范,判斷大小后輸出較大的那個數(shù)
    #include <stdio.h>
    
    int main()
    {
        // 接收用戶輸入的兩個整數(shù)父腕,判斷大小后輸出較大的那個數(shù)
        // 定義兩個變量;
        int a = -1, b = -1;
        // 提示用戶輸入兩個數(shù)
        printf("請輸入兩個數(shù), 以逗號隔開:\n");
        // 接收用戶輸入的兩個數(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;
    }
    
    • 接收用戶輸入的三個整數(shù),判斷大小后輸出較大的那個數(shù)
    // 定義三個變量:
    int a = -1, b = -1, c = -1;
    // 定義最大值
    int max =  -1;
    // 提示用戶輸入三個整數(shù);
    printf("請輸入三個整數(shù),以逗號隔開:\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);
    
    • 接收用戶輸入的三個整數(shù)坦敌,排序后輸出
    // 定義用戶輸入的三個數(shù)
    int a = -1, b = -1, c = -1;
    // 定義臨時變量
    int temp = -1;
    //提示用戶輸入格式:
    printf("請輸入三個整數(shù), 以逗號隔開, 最后以回車結(jié)束:\n");
    // 接收用戶輸入:
    scanf("%i,%i,%i", &a, &b, &c);
    // 進行兩個比較;
    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(表達式){
    case 常量表達式1:   // 相當于else if
        語句1;
        break;
    case 常量表達式2:
        語句2; 
        break;
    case 常量表達式n:
        語句n;
        break;
    default:   // 相當于else
        語句n+1;
        break;
}


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

switch注意點

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

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

  • case后面常量表達式的值不能相同

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

  • switch中default可以省略

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末狱窘,一起剝皮案震驚了整個濱河市杜顺,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蘸炸,老刑警劉巖躬络,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異搭儒,居然都是意外死亡穷当,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進店門淹禾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來馁菜,“玉大人,你說我怎么就攤上這事铃岔⊥舸” “怎么了?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵毁习,是天一觀的道長智嚷。 經(jīng)常有香客問我,道長纺且,這世上最難降的妖魔是什么盏道? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮载碌,結(jié)果婚禮上猜嘱,老公的妹妹穿的比我還像新娘衅枫。我一直安慰自己,他們只是感情好泉坐,可當我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布为鳄。 她就那樣靜靜地躺著,像睡著了一般腕让。 火紅的嫁衣襯著肌膚如雪孤钦。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天纯丸,我揣著相機與錄音偏形,去河邊找鬼。 笑死觉鼻,一個胖子當著我的面吹牛俊扭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播坠陈,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼萨惑,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了仇矾?” 一聲冷哼從身側(cè)響起庸蔼,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎贮匕,沒想到半個月后姐仅,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡刻盐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年掏膏,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片敦锌。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡馒疹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出乙墙,到底是詐尸還是另有隱情行冰,我是刑警寧澤,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布伶丐,位于F島的核電站,受9級特大地震影響疯特,放射性物質(zhì)發(fā)生泄漏哗魂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一漓雅、第九天 我趴在偏房一處隱蔽的房頂上張望录别。 院中可真熱鬧朽色,春花似錦、人聲如沸组题。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽梢褐。三九已至,卻和暖如春赵讯,著一層夾襖步出監(jiān)牢的瞬間盈咳,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工江滨, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人莫秆。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親摇展。 傳聞我的和親對象是個殘疾皇子咏连,可洞房花燭夜當晚...
    茶點故事閱讀 45,077評論 2 355

推薦閱讀更多精彩內(nèi)容

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