本章目录

每篇前言

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″。
  • 逻辑运算的真假值示意图:
xy!xx&&yx||y
00100
0非0101
非00001
非0非0011

  注意:

  • 参与逻辑运算的数据可以是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子句。

由此返回目录

结语

各位小伙伴们,分支结构就介绍到这里,下期给各位小伙伴们总结循环结构内容。敬请期待!!!

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

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