> 文档中心 > 【小杨带你玩转C语言】分支结构(详解篇)

【小杨带你玩转C语言】分支结构(详解篇)

在这里插入图片描述

本章目录

每篇前言

1.导语

2.目标

3.知识点

1,运算符or表达式
      1.1,关系运算符和关系表达式
         1.1.1,关系运算符
         1.1.2,关系表达式
         1.1.3,关系运算实例
      1.2,逻辑运算符和逻辑表达式
         1.2.1, 逻辑运算符
         1.2.2,逻辑表达式
         1.2.3,逻辑运算实例
      1.3,条件运算符和条件表达式
         1.3.1, 条件运算符
         1.3.2,条件表达式
         1.3.3,条件运算实例
2,if-else实现分支结构
      2.1,if-else语句
         2.1.1,单分支if语句
         2.1.2,双分支if分支语句
         2.1.3,多分支if语句
      2.2,if语句的嵌套
3,switch实现分支结构
     3.1,全部语句后加break
     3.2.部分语句加break
     3.3. default子句

4.结语


每篇前言

博客主页:小杨爱编程☆

作者简介:2022年博客萌新

作者专栏:小杨带你玩转C语言

作者格言:有志者立长志,无志者常立志!

作者请求:由于博主水平有限,难免会有错误和不准之处,希望各位小伙伴能够在留言区批评斧正。
在这里插入图片描述


导语

本篇博客主要向各位小伙伴们详细介绍C语言的分支结构。希望大家能够通过阅读这篇博客,受益良多!


目标

了解和掌握C语言的分支结构知识,对分支结构有全新的认识和理解


知识点

1,运算符or表达式

1.1,关系运算符和关系表达式

1.1.1,关系运算符

关系运算符:常用于判断两个操作数的大小关系

运算符 运算符释
> 大于
>= 大于等于
< 小于
<= 小于等于
== 等于
!= 不等于

注意:

(1)关系运算符都是双目运算符,其结合方式是向左结合。

(2)关系运算符的优先级低于算术运算符,但高于赋值运算符。

(3)关系运算符中,,=的优先级相同,==,!=的优先级相同,前者的优先级高于后者的。


1.1.2,关系表达式

关系表达式:用关系运算符将两个表达式连接起来的表达式。

1,格式:表达式1 关系运算符 表达式2

2,功能:比较两个表达式的大小,返回一个逻辑值

3,关系表达式中允许出现嵌套的情况

示例:“a>(b>c)” "a!=(c==b)"

注意:

(1)注意区分运算符“ = ”与“ == ”。"=“为赋值运算符,”=="则为关系运算符。

(2)对实数进行相等判断可能得不到正确结果,例如:"1.0/3*3.0==1"的结果是1。

(3)关系表达式中可以出现赋值运算符,如:a>(b=0),但不能写成"a>b=0"的形式。

(4)关系表达式主要用于分支结构中的条件判断。关系表达式的结果是一个逻辑值"真"(1)和"假"(0)。


1.1.3,关系运算实例

实例代码:

//关系运算#include int main(){char c = 'm';int i = 10;int j = 20;int k = 30;float x = 13e+5;float y = 10.85;printf("%d %d\n", '5' + 5 = k + 1);printf("%d %d\n", i < j < 5, x - 2.22 <= x + y);printf("%d %d\n", i + j + k == -2, k == j == i + 5);return 0;}

输出结果:

在这里插入图片描述


1.2,逻辑运算符和逻辑表达式

1.2.1,逻辑运算符

逻辑运算符:将若干个关系表达式连接起来描述某一关系。

运算符 名称 结合性 优先级
逻辑非 右结合
&& 逻辑与 左结合
|| 逻辑或 左结合

注意:

  • 非运算符!是单目运算符
  • 与运算符&&和或运算符||都是双目运算符。

1.2.2,逻辑表达式

逻辑表达式:用逻辑运算符将两个表达式连接起来的式子。

  • 格式:表达式1 逻辑运算符 表达式2 或者 逻辑运算符 表达式1
  • 逻辑表达式的结果是一个逻辑值"真"或"假",即为"1"或"0"。
  • 逻辑运算的真假值示意图:
x y !x x&&y x||y
0 0 1 0 0
0 非0 1 0 1
非0 0 0 0 1
非0 非0 0 1 1

  注意:

  • 参与逻辑运算的数据可以是1和0,也可以是非零值和0,还可以是任何类型的数据类型,但最终都是以非0和0来判断真假。
  • 在逻辑表达式中可以用赋值运算符,如"a&&(b=0)",但不能写成"a&&b=0"的形式,若写成,该表达式则相当于(a&&b)=0,程序报错。
  • C语言规定:只对决定整个表达式值所需要的最少数目的子表达式进行运算。(即:在逻辑表达式中,从左向右进行计算,当计算出一个子表达式的值就确定整个逻辑表达式的值,就不需要计算右边剩余的子表达式的值,这种情况也被称为”短路“。)
    • 对于逻辑与 (&&)运算,若”&&“左边的表达式的值为假,则可以得出整个表达式的值为假,那么"&&"右边的就不需要计算;只有当左边表达式为真时,才需要计算右边表达式的值。
    • 对于逻辑或(||)运算,若”||“左边的表达式的值为真,则可以得出整个表达式的值为真,那么"||"右边的就不需要计算;只有当左边表达式为假时,才需要计算右边表达式的值。

各种运算符的优先级列表:

运算符 结合性 优先级
右结合
算术运算符 左结合 较高
关系运算符 左结合
&&和|| 左结合 较低
赋值运算符 右结合

1.2.3,逻辑运算实例

实例代码:

//逻辑运算#includeint main(){int a = 3;int b = 3;int c = 2;printf("%d\n", !a && !b && c);// 0&&0&&2printf("%d\n", !a || !b || c);// 0||0||2printf("%d\n", a >= b && b > c);// 1&&1int d = c-- || (b = 6) && a++;// c=1||1printf("a=%d b=%d c=%d d=%d",a,b,c,d);return 0;}

代码输出:

在这里插入图片描述


1.3,条件运算符和条件表达式

1.3.1,条件运算符

条件运算符:由"?“和”:"两个符号组成,用于条件求值。

  • 条件运算符为三目运算符,需要三个操作数。
  • 条件运算符的优先级低于逻辑运算符却高于赋值运算符,结合性为右结合

1.3.2,条件表达式

条件表达式:由条件运算符将3个表达式连接起来的式子。

  • 格式:表达式1?表达式2:表达式3
  • 分析:条件表达式的执行流程为先计算表达式1的值,若值为非0,表示条件为真,则将表达式2的值作为整个条件表达式的值,否则将表达式3的值作为整个条件表达式的值。

  注意:

1. 条件表达式中表达式1的类型可以与表达式2和表达式3不同,表达式2和表达式3的类型也可以不同,此时系统会自动转换,结果为表达式2和表达式3中级别类型较高的,并将其作为条件表达式的类型。
2. 条件表达式中表达式2和表达式3不仅可以是数值表达式也可以是赋值表达式或者是函数表达式。
3. 条件表达式中允许嵌套。


1.3.3,条件运算实例

实例代码:

//条件运算#includeint main(){int a = 0;int b = 0;printf("请输入两个整数:");scanf("%d %d", &a, &b);printf("两个数的最大数:%d", a > b ? a : b);return 0;}

代码输出:

在这里插入图片描述


由此返回目录

2,if - else 实现分支结构

2.1,if - else语句

2.1.1, 单分支if语句
  • 格式:

    在这里插入图片描述

  • 单分支if语句流程图:

    在这里插入图片描述


单分支if语句实例:

//单分支if语句#includeint main(){float x = 0.0f;scanf("%f", &x);if (x < 0){x = -x;}printf("%.2f", x);return 0;}

代码输出:

在这里插入图片描述


2.2.2,双分支if 语句
  • 格式

    在这里插入图片描述

  • 双分支if语句流程图:

    在这里插入图片描述


双分支if实例:

//双分支if语句#includeint main(){int a = 0;int b = 0;printf("请输入两个整数:");scanf("%d %d", &a, &b);if (a > b)printf("两个整数中的最大值为:%d\n", a);else printf("两个整数中的最大值为:%d\n", b);return 0;}

实例输出

在这里插入图片描述


2.2.3,多分支if语句
  • 格式:

    在这里插入图片描述

  • if多分支语句的流程图:

    在这里插入图片描述


多分支if语句实例:

//多分支if语句#include int main(){int age = 0;scanf("%d", &age);if (age = 18 && age = 30 && age = 50 && age < 80){printf("老年\n");}else{printf("老寿星\n");}return 0;}

实例输出:

在这里插入图片描述


2.2,if语句的嵌套

  • 格式:

在这里插入图片描述

  • if语句嵌套执行流程图:

在这里插入图片描述


if嵌套执行实例:

//if语句嵌套#includeint main(){int a = 0;int b = 0;int c = 0;int max = 0;scanf("%d %d %d", &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=%d", max);return 0;}

实例输出:

在这里插入图片描述


由此返回目录

3,switch 实现分支结构

  • switch多分支执行流程图:

在这里插入图片描述

注意:

1,switch后的表达式可以是任何表达式,其值只能为整型,字符型,枚举型之一。
2,每个case后面的常量表达式的值互不相同,否则就会出现相互矛盾的现象。
3,各个case和default的出现次序不影响执行结果。
4,可以让多个case共用一组执行语句。
5,switch语句允许嵌套使用。


3.1,全部语句后加break

实例:

//switch语句#include int main(){    int day = 0;    switch(day)   { case 1:     printf("星期一\n");     break; case 2:     printf("星期二\n");     break; case 3:     printf("星期三\n");     break;     case 4:     printf("星期四\n");     break;     case 5:     printf("星期五\n");     break; case 6:     printf("星期六\n");     break; case 7:     printf("星期天\n");  break;      default:printf("输入错误\n");break;  }    return 0; }

实例输出:

在这里插入图片描述


3.2,部分语句后加break

实例:

//switch语句#includeint main(){int day =0;scanf("%d", &day);switch (day){case 1:case 2:case 3:case 4:case 5:printf("工作日\n");break;case 6:case 7:printf("休息日\n");break;default:printf("输入错误\n");break;}return 0;}

实例输出:

在这里插入图片描述


3.3,default子句
  • 写在任何一个 case 标签可以出现的位置。
  • 当 switch 表达式的值并不匹配所有 case 标签的值时,这个 default 子句后面的语句就会执行。
  • 每个switch语句中只能出现一条default子句。
  • 可以出现在语句列表的任何位置,而且语句流会像执行一个case标签一样执行default子句。

由此返回目录

结语

各位小伙伴们,【小杨带你玩转C语言】分支结构(详解篇篇)就介绍到这里,下期向各位小伙伴们讲解循环结构内容。敬请期待!

如果各位小伙伴们感觉写的不错,或者阅读后有些许收获的话,麻烦小伙伴们动动你们的小手,给个三连呗(✌关注,✌点赞,✌评论),多多支持一下!!
小伙伴们,切记!这些示例代码一定要记得自己实际操作一下,这样才能加深对这些知识的理解!

最后,感谢每一位小伙伴的阅读,让我们一起努力,一起加油,一起进步!

在这里插入图片描述