01-C语言流程控制-if和switch条件语句

流程控制

流程控制三种结构: 顺序结构, 选择结构, 循环结构

选择结构

  • C语言中提供了两大选择结构,分别是if 和switch;

1. if条件语句

  • if 的第一种表达式
    • 如果表达式为真,执行语句块1,否者不执行;
    if(条件表达式){  
    
        条件成立执行的语句;  

    }
if(age >= 18){
    printf("上网去\n");
}
printf("买饮料\n");
  • if的第二种表达式
    • 如果表达式为真,执行语句块1,否者执行语句块2;
    • else 不能脱离if单独使用;
if(条件表达式){
    条件成立执行的语句;
}else{
    条件不成立执行的语句;
}

if(num % 2 == 0){
    printf("num is 偶数");
}else{
    printf("num is 奇数");
}
  • if的第三种表达式
    • 从上到下依次判断条件跳大神,哪个表达式成立,就会执行那个条件表达式后面{}的内容;
    • 如果所有条件表达式都不成立,就执行else后面括号中的内容;
if(表达式1){
    条件满足执行语句块1;
}else if(表达式2){
    条件满足执行语句块2;
}else if(表达式3){
    条件满足执行语句块3;
}else{
    条件不成立执行的语句;
}

if(age > 18){
    printf("上大学");
}else if (age > 15){
    printf("上高中");
}else if(age > 12){
    printf("上初中");
}else if(age > 7){
    printf("上小学")
}else{
    printf("上幼儿园");
}


  • if嵌套
    • if中可以继续嵌套if, else中也可以继续嵌套;
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);   // 写了这个分号;{}中的内容就脱离if的控制
        {
            printf("该去上大学了");
        }
        return 0;
        
        // 条件不满足还是会执行{}中的内容;
        // 输出该去上学了
    }
    
    • 当if else后面只有一条语句时, if else后面的大括号可以省略,如果省略大括号,那么仅仅距离if最近的那个条语句受到if的控制
    • 当if else后面的大括号被省略时,** else会自动和距离最近的一个if匹配**
    • 如果if 省略了大括号, 那么后面不能定义变量
    #include <stdio.h>
    
    int main()
    {
        if(1)
            int num = 10;  // 系统会报错
        printf("num = %i", num);
        return 0;
    }
    
    #include <stdio.h>
    
    int main(){
        if(0){
            int num1 = 10;
    
        }else
            int num2 = 20;  // 系统报错
        printf("num2 = %i", num2);
        return 0;
    }
    
    
    • C语言中分号(;)也是一条语句, 称之为空语句
    • 但凡遇到比较一个变量等于或者不等于某一个常量的时候,把常量写在前面
    • 任何数值都有真假性;在企业开发中如果要判断是否相等,建议把常量写在前面,把变量写在后面
    • {}可以单独出现,{}出现的时候是一个代码块; 主要用于隔离变量使用;代码块外面是不能访问代码块内的变量;代码块里面可以访问代码块外面的变量;
    {
        int age = 18;
        printf("age = %i\n", age);
    }
    printf("age = %i\n",age);  //会报错
    
  • if 练习

    • 从键盘输入一个整数,判断其是否是偶数,如果是偶数就输出YES,否则输出NO;
    #include <stdio.h>
    
    int main(){
        //从键盘输入一个整数,判断其是否是偶数,如果是偶数就输出YES,否则输出NO;
        // 定义一个变量
        int num = -1;
        // 提示用户如何输入
        printf("请输入一个整数,以回车键结束;\n");
        // 接收用户的输入
        scanf("%i", &num);
        // if语句判断是偶数则输出YES ,否则输出NO;
        if(0 == num % 2){
            // 偶数
             printf("YES");
        }else{
            //  奇数
            printf("NO");
        }
        return 0;
    }
    
    
    • 接收用户输入的1~7的整数,根据用户输入的整数,输出对应的星期几
    #include <stdio.h>
    
    int main()
    {
        //接收用户输入的1~7的整数,根据用户输入的整数,输出对应的星期几
        // 定义变量
        int num = -1;
        // 提示用户输入
        printf("请输入1~7的整数:");
        // 接收用户的输入
        scanf("%i", &num);
        // 判断对应的值
        if(num < 1 || num > 7){
            printf("对不起,你输入的数有误! 请重新打开输入\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;
    }
    
    
    • 接收用户输入的一个整数month代表月份,根据月份输出对应的季节
    #include <stdio.h>
    
    int main()
    {
        // 接收用户输入的一个整数month代表月份,根据月份输出对应的季节
        // 定义变量
        int month = -1;
        // 提示用户正确输入
        printf("请输入月份:");
        // 接收数据
        scanf("%i", &month);
       // 判断输入,输出相应的季节
        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;
    }
    
    • 接收用户输入的两个整数,判断大小后输出较大的那个数
    #include <stdio.h>
    
    int main()
    {
        // 接收用户输入的两个整数,判断大小后输出较大的那个数
        // 定义两个变量;
        int a = -1, b = -1;
        // 提示用户输入两个数
        printf("请输入两个数, 以逗号隔开:\n");
        // 接收用户输入的两个数
        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;
    }
    
    • 接收用户输入的三个整数,判断大小后输出较大的那个数
    // 定义三个变量:
    int a = -1, b = -1, c = -1;
    // 定义最大值
    int max =  -1;
    // 提示用户输入三个整数;
    printf("请输入三个整数,以逗号隔开:\n");
    // 接收数据
    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);
    
    • 接收用户输入的三个整数,排序后输出
    // 定义用户输入的三个数
    int a = -1, b = -1, c = -1;
    // 定义临时变量
    int temp = -1;
    //提示用户输入格式:
    printf("请输入三个整数, 以逗号隔开, 最后以回车结束:\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;
    }
    // 输出结果
    printf("%i,%i,%i" , a, b, c);
    
    

2. 选择结构 switch

  • 格式:
switch(表达式){
    case 常量表达式1:   // 相当于else if
        语句1;
        break;
    case 常量表达式2:
        语句2; 
        break;
    case 常量表达式n:
        语句n;
        break;
    default:   // 相当于else
        语句n+1;
        break;
}


  • 执行流程:
    • 1.计算switch后面()中表达式的结果;
    • 2.利用计算的结果从上之下的和switch后面{}中的case的表达式的值依次比较;
    • 3.一旦发现switch 表达式的值和case表达式的值相同,就执行该case后面的语句;
    • 4.一旦某个case被执行,其他的case就不会执行了
    • 5.如果所有case表达式的值和switch表达式的值都不相等,那么执行default后面的语句;
int day = 3;
    switch (day){
    case 1:
        printf("星期一");
        break;
    case 2:
        printf("星期二");
        break;
    default :
        printf("Other");
        break;
    }
    // 执行结果为: Other;

switch注意点

  • switch中只要任意一个case匹配, 其它所有的case和default都会失效. 所以如果case和default后面没有break就会出现穿透问题,break在switch中的作用,就是跳出switch语句(结束当前的switch语句);
    image
  • switch条件表达式的类型必须是整型, 或者可以被提升为整型的值(char、short)

  • case的值只能是常量,不能是变量, 并且还必须是整型, 或者可以被提升为整型的值(char、short)

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

  • case后面不能定义变量要想定义变量,必须给case加上大括号

  • switch中default可以省略

  • switch中default的位置不一定要写到最后, 无论放到哪都会等到所有case都不匹配才会执行(穿透问题除外)记住一点: default永远写在最后;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容

  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,132评论 0 13
  • 一、快捷键 ctr+b 执行ctr+/ 单行注释ctr+c ...
    o_8319阅读 5,793评论 2 16
  • 各行各业都在搭上人工智能的快车,还要加上人脸识别,但高科技能解决面对面交流的眼神注视吗?[捂脸]
    qiao老胖阅读 103评论 0 0
  • 開始健身,網路上很多資訊,很希望自己可以徹底了解這一塊。我覺得自己好像背負著父親沒有完成的所有任務。這當然也包括戰...
    NCNeverland阅读 136评论 0 0
  • 走心 新的开始 披荆斩棘 祝成功
    静静_吖阅读 83评论 0 0