分支结构,你会了吗?(五千字超详细教程,带你快速复习)

在这里插入图片描述

本章目录

每篇前言

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 <stdio.h>
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 < c, -i - 2 * j >= 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,逻辑运算实例

实例代码:

//逻辑运算
#include<stdio.h>
int main()
{
	int a = 3;
	int b = 3;
	int c = 2;
	printf("%d\n", !a && !b && c);// 0&&0&&2
	printf("%d\n", !a || !b || c);// 0||0||2
	printf("%d\n", a >= b && b > c);// 1&&1
	int d = c-- || (b = 6) && a++;// c=1||1
	printf("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,条件运算实例

实例代码:

//条件运算
#include<stdio.h>
int 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语句
#include<stdio.h>
int 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语句
#include<stdio.h>
int 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 <stdio.h>
int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age < 18)
	{
		printf("少年\n");
	}
	else if (age >= 18 && age < 30)
	{
		printf("青年\n");
	}
	else if (age >= 30 && age < 50)
	{

		printf("中年\n");
	}
	else if (age >= 50 && age < 80)
	{
		printf("老年\n");
	}
	else
	{
		printf("老寿星\n");
	}
	return 0;
}

实例输出:

在这里插入图片描述


2.2,if语句的嵌套

  • 格式:

在这里插入图片描述

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

在这里插入图片描述


if嵌套执行实例:

//if语句嵌套
#include<stdio.h>
int 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 <stdio.h>
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语句
#include<stdio.h>
int 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子句。

由此返回目录

结语

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

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

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

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_64338546/article/details/124212939