• C-12 分支语句


    C语言是结构化的程序设计语言,这无非也就包含了三种结构,分别是顺序结构、选择结构、循环结构。这三种结构从字面上来看都不难理解,

    所谓顺序结构就是有先后之分,要先干什么,后干什么,比如我要写代码就要先打开电脑。

    选择结构就是有不同的选择,比如我今天可以选择努力学习写代码,也可以躺平摆烂睡大觉,这就是选择。

    最后的循环结构可以用一些实际的例子来理解,这就好像学习一样,需要日复一日,不断重复。

    在C语言中,代码是有顺序的,不需要着重讲解。而分支语句和循环语句是接下来要着重讲解的,他们分别对应着选择结构和循环结构。

    在C语言中由一个分号隔开的就是一条语句。比如:

    1. printf("Hello,world\n");
    2. 1+2;
    3. ; //空语句

    分支语句包括 if 语句和 switch 语句。 

    =========================================================================

    if 语句

    语法结构

    在C语言中 0 表示假,非零表示真

    if (表达式)

        语句;

    这个第一种写法中,表达式中的内容如果为真,则执行下面的语句。如果为假,则不执行。

    if (表达式)

        语句1;

    else

        语句2;

    这种写法中相比第一种多了 else ,相当于是多了一条路可以走。如果 if 后的表达式为真,则执行语句1,如果为假,则执行语句2。

    当然也可以实现多分支:

    if (表达式1)

         语句1;

    else if (表达式2)

        语句2;

    else

        语句3;

    当表达式1为真,则执行语句1。如果表达式1为假,则继续向下看表达式2,如果表达式2为真,则执行语句2,否则就只能执行语句3。

    ---------------------------------------------------------------------------------------------------------------------------------

    写法注意

    1. #include
    2. int main()
    3. {
    4. int age = 20;
    5. if (age >= 18)
    6. printf("成年\n");
    7. else
    8. printf("未成年\n");
    9. printf("不能谈恋爱\n");
    10. //成年
    11. //不能谈恋爱
    12. return 0;
    13. }

    当这种写法运行时得到的结果是:

    成年

    不能谈恋爱

    这和最开始设想的是不相符的。原因在于 if else 都指默认执行后面的一条语句,而这段代码中第二个打印被认为是独立的。实际是这样的

    1. #include
    2. int main()
    3. {
    4. int age = 20;
    5. if (age >= 18)
    6. printf("成年\n");
    7. else
    8. printf("未成年\n");
    9. printf("不能谈恋爱\n");
    10. return 0;
    11. }

    如果想要打印两条,那么就需要加入大括号括起来,这样括起来的部分就会被整体执行了。

    1. #include
    2. int main()
    3. {
    4. int age = 20;
    5. if (age >= 18)
    6. {
    7. printf("成年\n");
    8. }
    9. else
    10. {
    11. printf("未成年\n");
    12. printf("不能谈恋爱\n");
    13. }
    14. //成年
    15. return 0;
    16. }

    这样写出来的代码执行起来输出的就是最开始想要的那样了。

    这是对于语句需要注意的地方,另外还有表达式中需要注意的。

    1. #include
    2. int main()
    3. {
    4. int age = 60;
    5. if (age < 29)
    6. printf("青年\n");
    7. else if (29 <= age < 30)
    8. printf("中青年\n");
    9. //中青年
    10. return 0;
    11. }

     这时60岁得出的结果却是中青年,显然是不对的。原因在于 else if 表达式判断逻辑中,是先判断前部分 60 >= 29 ,得出结果为真,真就是1,然后判断后半段 1 < 30 得出结果为真,执行下面语句,最终输出为中青年。所以这种写法是不对的,要想表达原本的效果,应该使用操作符 && 来完成操作。

    1. #include
    2. int main()
    3. {
    4. int age = 60;
    5. if (age < 29)
    6. printf("青年\n");
    7. else if (age >= 29 && age < 39)
    8. printf("中青年\n");
    9. else if (age >= 39 && age < 49)
    10. printf("中年\n");
    11. else if (age >= 49 )
    12. printf("中老年");
    13. //中老年
    14. return 0;
    15. }

    这里用到了操作符 && 后,表达的含义就是大于29且小于39...这样就可以如预想的那样执行了。同时也可以借助这段代码了解到,可以出现多个 else if 从而实现多分支的目的。

    ---------------------------------------------------------------------------------------------------------------------------------

    if 与 else 匹配问题

    1. #include
    2. int main()
    3. {
    4. int a = 0;
    5. int b = 2;
    6. if (a == 1)
    7. if (b == 2)
    8. printf("hello\n");
    9. else
    10. printf("world\n");
    11. return 0;
    12. }

    这段代码最终输出的结果是什么呢?答案是什么都没有。

    else 只与距离最近的 if 匹配,也就是说这段代码的逻辑应该是这样的

    1. #include
    2. int main()
    3. {
    4. int a = 0;
    5. int b = 2;
    6. if (a == 1)
    7. if (b == 2)
    8. printf("hello\n");
    9. else
    10. printf("world\n");
    11. return 0;
    12. }

    这也从侧面反映了,代码的书写是需要规范的。甚至可以更清晰一些,给上大括号。 

    1. #include
    2. int main()
    3. {
    4. int a = 0;
    5. int b = 2;
    6. if (a == 1)
    7. {
    8. if (b == 2)
    9. {
    10. printf("hello\n");
    11. }
    12. else
    13. {
    14. printf("world\n");
    15. }
    16. }
    17. return 0;
    18. }

    ========================================================================= 

    switch 语句

    当想要实现多分支时,一直重复使用 else if 太过于繁琐了,这时就可以使用 switch 语句。

    ---------------------------------------------------------------------------------------------------------------------------------

    语法结构

    switch (整形表达式)

    {

        语句项;

    }

    而语句项中都是一些 case 语句

    case 整形常量表达式:

        语句;

    ---------------------------------------------------------------------------------------------------------------------------------

    break

    在 switch 语句中,case 就代表了入口,而 break 就代表了出口。

    1. #include
    2. int main()
    3. {
    4. int day = 0;
    5. scanf("%d", &day);
    6. switch (day)
    7. {
    8. case 1:
    9. printf("星期一\n");
    10. case 2:
    11. printf("星期二\n");
    12. case 3:
    13. printf("星期三\n");
    14. case 4:
    15. printf("星期四\n");
    16. case 5:
    17. printf("星期五\n");
    18. case 6:
    19. printf("星期六\n");
    20. case 7:
    21. printf("星期日\n");
    22. }
    23. return 0;
    24. }

    这时当输入1,得到的输出结果会是

    星期一

    星期二

    星期三

    星期四

    星期五

    星期六

    星期日

    当输入2,得到

    星期二

    星期三

    星期四

    星期五

    星期六

    星期日

    这样达不到选择分支的目的。所以要在每个 case 语句项最后加上 break 跳出去,是相当于出口的作用,这样就可以达成目标了。

    1. #include
    2. int main()
    3. {
    4. int day = 0;
    5. scanf("%d", &day);
    6. switch (day)
    7. {
    8. case 1:
    9. printf("星期一\n");
    10. break;
    11. case 2:
    12. printf("星期二\n");
    13. break;
    14. case 3:
    15. printf("星期三\n");
    16. break;
    17. case 4:
    18. printf("星期四\n");
    19. break;
    20. case 5:
    21. printf("星期五\n");
    22. break;
    23. case 6:
    24. printf("星期六\n");
    25. break;
    26. case 7:
    27. printf("星期日\n");
    28. break;
    29. }
    30. return 0;
    31. }

    这样就不会将后面 case 语句项一起顺序执行出来了。

    case 语句项后面需不需要加 break 不是必须要求的,是根据需求决定的。例如下段代码:

    1. #include
    2. int main()
    3. {
    4. int day = 0;
    5. scanf("%d", &day);
    6. switch (day)
    7. {
    8. case 1:
    9. case 2:
    10. case 3:
    11. case 4:
    12. case 5:
    13. printf("工作日\n");
    14. break;
    15. case 6:
    16. case 7:
    17. printf("休息日\n");
    18. break;
    19. }
    20. return 0;
    21. }

    如果在其他 case 语句项中加入了 break 反而达不到想要的效果。

    -------------------------------------------------------------------------------------------------------------------------------- 

    default

    依旧以上段代码为例,只有1-7的入口,但如果输入其他数,程序就不会反应,default 就可以解决。

    1. default:
    2. printf("输入错误");
    3. break;

  • 相关阅读:
    双位置继电器XJLS-8G/220
    python入门教程基础篇:数据类型
    PHP刷leetcode第一弹: 两数之和
    shouldComponentUpdate 是做什么的?
    大模型概念解析 | Prompt Engineering
    【UE5 C++基础 04】UHT基础
    【计算机网络】网络基础(三)
    Docker理论— 虚拟化技术分类
    互联网医院系统开发中的移动端应用设计
    以一个实例看Mule3.0中的Flow
  • 原文地址:https://blog.csdn.net/ZEBKD_UFXKD/article/details/133025966