本章目录每篇前言
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子句。
由此返回目录
结语
各位小伙伴们,分支结构就介绍到这里,下期给各位小伙伴们总结循环结构内容。敬请期待!!!
如果各位小伙伴们感觉写的不错,或者阅读后有些许收获的话,麻烦小伙伴们动动你们的小手,给个三连呗(✌关注,✌点赞,✌评论),多多支持一下!!
小伙伴们,切记!这些示例代码一定要记得自己实际操作一下,这样才能加深对这些知识的理解!
最后,感谢每一位小伙伴的阅读,让我们一起努力,一起加油,一起进步!