首页 > 其他分享 >C语言:分支语句详解

C语言:分支语句详解

时间:2025-01-19 17:28:51浏览次数:3  
标签:语句 ... else 运算符 case 详解 C语言 表达式

       所谓分支,就是在不同情况下输出不同结果。下面我们来学习分支语句:

1. if 语句

1.1 if

       if语句的书写方法如下:

if (表达式)
   语句

       如果表达式值为真,那么我们就执行语句,若表达式值不为真(为假),就不执行。在C语言中,我们说 非0 为真,0 为假。我们举一个判断奇偶数的例子:

       我们可以看到,当输入 3 时,因为 3 是奇数,所以 if 中的表达式值为真,所以执行 if 下面的语句,当输入 6 时,因为 6%2 != 1 if中表达式的值为假,所以不执行 printf() ;

       如果我们想输出 6 是偶数呢?这就要用到 else。

1.2 else

       我们可以用 if...else...  来完成这个代码,if...else... 的形式如下

if (表达式)
    语句1
else
    语句2

       让我们完成判断奇偶数的完整代码:

       当我们加上 else 后,如果输入 6,首先从 if 开始执行,6%2==1 的值为假,则跳过 if 下面的语句,从 else 执行,则输出”6是偶数“。

1.3 分支中包含多条语句

       C语言中默认 if...else... 只能控制一条语句,但如果我们想控制多条语句呢?这时我们就需要用大括号括起来,if 和 else 后面都可跟上大括号 {}。

       上大学一般都满足十八岁,我们假设满足十八岁的人都上了大学,小于18岁的人没有上大学,如果在输入年龄后我们既要判断他有没有成年,也要判断他有没有上大学,代码该怎么写呢?如图:

在加了一个 {} 后我们就可以在判断后执行多条语句。

1.4 关于嵌套

       在 if...else... 语句中,else 可以和另一个 if 连用,构成多重判断。例如我们要判断一个数是正数、0、负数,我们可以写如下代码

       

       其中上图中蓝色背景的代码就是嵌套在前⾯的 else ⼦句中的,构成了嵌套的if语句。

       注意:如果有多个 if 和 else ,可以记住这样⼀条规则, else 总是跟最接近的 if 匹配。

 #include <stdio.h>
 int main()
 {
     int a = 0;
     int b = 2;
     if(a == 1)
        if(b == 2)
         printf("hehe\n");
     else
         printf("haha\n");
     return 0;
 }

       像这个代码,很多人感觉会输出 haha 但是 else 其实是与第二个 if 匹配,因为 a=0,第一个表达式的值为假,所以不会继续执行。什么也不输出。

 2.关系操作符

       C语⾔⽤于⽐较的表达式,称为“关系表达式”,⾥⾯使⽤的运算符就称 为“关系运算符”,主要有下⾯6个:

       > :大于运算符;

       < :小于运算符;

       >= :大于等于运算符;

       <= :小于等于运算符;

       == :等于运算符;

       != :不等于运算符。

       注意:== 和 = ,是不一样的,= 是赋值运算符(比如 a=3 就是将3赋给a)( a == 3 是判断 a 与 3 是否相等)

       而且关系操作符尽量不要连用,比如尽量写成(a>b && a<c) 而不是(b<a<c)。(&&后面逻辑操作符会介绍)

3.条件操作符

       条件操作符也叫三⽬操作符,需要接受三个操作数的,其形式如下:

exp1 ? exp2 : exp3

       它的意思是:如果 exp1 为真,那么计算 exp2;如果 exp1 为假,则计算 exp3;当我们要输出两个数中大的那个数时,我们看看以前的代码和用上此操作符的代码:

        我们可以发现代码量明显减少了。

4. 逻辑操作符 &&,||,! 

       !:逻辑取反运算符(改变单个表达式的真假);

       &&:逻辑与运算符,就是并且的意思.。当 && 两边表达式都为真时,该整体才值为真;

       ||:逻辑或运算符,就是或者的意思。当 || 两边表达式都为假时,该整体值才为假;

一个小练习

       让我们写一个判断闰年的代码。我们知道被4整除而不被100整除或者能直接被400整除的年份就是闰年。让我们用逻辑操作符来实现这个代码:

        我们其实可以用 || 将两个条件连在一块,如下:

#include <stdio.h>
int main()
{
	int year;
	scanf("%d", &year);
	if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
	{
		printf("%d是闰年", year);
	}
	return 0;
}

关于逻辑操作符的短路问题

       我们要知道,计算机在执行逻辑运算时,是从左到右计算的,计算机会先算出左侧的真假后再算操作符右侧的真假。但是如果左边的表达式满⾜逻辑运算符的条件,就不再对右边的表达式求值。这种情况称为“短路”。如下举例:

       如图大家可能认为a,b,c,d 分别是1,3,3,5,但结果并不是这样。首先 a++ 是对 a 使用后 +1 ,所以 a 的值一定为 1 ,但是 a 传入该表达式的值为 0 ,因此 i = 0 && ++b && ++c ;0已经使得第一个 && 左侧的值为假,后面不管是什么该表达式也一定为假。因此计算机在计算完 a++ 后就直接结束计算跳到下一个语句,因此输出的 a,b,c,d 应为 1,2,3,4 。那我如果把 && 改成 ||呢,大家可以思考一下(答案是 1,3,3,4)。

5. switch 语句

       除了 if 语句外,C语言还提供了 switch 语句来实现分支结构。witch 语句是⼀种特殊形式的 if...else 结构,⽤于判断条件有多个结果的情况。其形式如下:

switch (expression) {
 case value1: statement
 case value2: statement
 ...
 default: statement
 }

       上⾯代码中,根据表达式 expression 不同的值,执⾏相应的 case 分支,如果找不到对应的值,就执⾏ default 分⽀。注意: expression 必须是整型表达式 ;case 后的值必须是整形常量表达式。

5.1 if 和 switch 的比较

       我们再以判断奇偶数为例,其 switch 代码如下:

       上述的代码中,我们要注意的点有:

       1. case 和后边的数字之间必须有空格;

       2. 每⼀个 case 语句中的代码执⾏完成后,需要加上 break ,才能跳出这个switch语句。不然会继续执行下面的语句。

5.2 braek 的说明

       如果我们没有 braek 时,会发生什么呢?我们来看下图:

        因此在进入符合条件的 case 时,会一直执行,知道执行完 switch 或遇到 break 时才能跳出switch 语句。

5.3 default的说明

       如果我们在 switch 语句中没有找到符合条件的 case 语句怎么办呢?这时候我们就会用到 default 语句,我们以工作日和休息日来举例,如下图:

        

       当输入8时,我们在 case 中每日找到复合的条件,就会执行 default 语句

       注意 :switch 语句中的 case 和 default 语句是没有顺序要求的。default 可以放在前面和后面。

       相信看到这,你对分支语句有了深刻的了解。

标签:语句,...,else,运算符,case,详解,C语言,表达式
From: https://blog.csdn.net/2402_87092155/article/details/145238627

相关文章

  • 1.MySql基础架构之SQL语句的执行
    1.MySQL数据库的整体架构(i)连接器:连接器负责与客户端建立连接,获取权限、维持和管理连接。连接命令中的mysql是客户端工具,用来建立服务端连接。在完成经典的TCP握手后,连接器就要开始认证你的身份,这个时候用的就是你输入的用户名和密码。​ 如果用户名密码认证通过,连接器会到权限......
  • C语言的应用|猜数字游戏
    目录1.引言2.rand(包含在中)3.srand(包含在中)4.time(包含在中)5.游戏代码showtime1.引言  哈喽,大家好,好久不见。今天小邓儿,将带咱们用C语言,来写一个小游戏——猜数字。不过,编写游戏之前。先给大家拓展一些相关知识点(●'◡'●)2.rand(包含在<stdlib.h>中)1.1 ......
  • Spring,Spring Ioc,Bean详解
    Spring框架Spring框架是Java应用最广的框架,其的成功来自于理念,并非是技术,其中几个理念非常重要,例如IoC(控制反转),AOP(面向切面编程)Spring的优势低耦合/低侵入(解耦)Spring通过IoC(控制反转)和DI(依赖注入)来实现低耦合高内聚声明式事务管理Spring基于AOP的方......
  • 初识C语言
    1.什么是c语音C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个......
  • 卷积加法自注意力CASAtt详解及代码复现
    自注意力机制简介自注意力机制(Self-Attention)是一种特殊的注意力机制,允许模型在处理序列数据时考虑每个元素与其他所有元素的关系。这种机制通过计算查询、键和值向量,帮助模型更好地理解序列中的上下文信息。自注意力机制的核心在于计算每个元素的权重,反映元素之间的相互关......
  • Swift Parameter-free Attention Network模型详解及代码复现
    研究动机在深度学习领域,超分辨率技术的发展面临着模型复杂度与推理速度之间的权衡。传统的基于注意力的超分辨率网络虽然能提高性能,但往往需要较大的感受野和参数化的注意力图,这可能导致推理速度下降。为了解决这一问题,研究人员提出了SwiftParameter-freeAttentionNetwo......
  • Web安全攻防入门教程——hvv行动详解
    Web安全攻防入门教程Web安全攻防是指在Web应用程序的开发、部署和运行过程中,保护Web应用免受攻击和恶意行为的技术与策略。这个领域不仅涉及防御措施的实现,还包括通过渗透测试、漏洞挖掘和模拟攻击来识别潜在的安全......
  • Web安全攻防入门教程——hvv行动详解
    Web安全攻防入门教程Web安全攻防是指在Web应用程序的开发、部署和运行过程中,保护Web应用免受攻击和恶意行为的技术与策略。这个领域不仅涉及防御措施的实现,还包括通过渗透测试、漏洞挖掘和模拟攻击来识别潜在的安全问题。本......
  • Web安全攻防入门教程——hvv行动详解
    Web安全攻防入门教程Web安全攻防是指在Web应用程序的开发、部署和运行过程中,保护Web应用免受攻击和恶意行为的技术与策略。这个领域不仅涉及防御措施的实现,还包括通过渗透测试、漏洞挖掘和模拟攻击来识别潜在的安全问题。本教程......
  • 医疗肠胃内窥镜主机技术详解及实现路线(方案)
    医疗肠胃内窥镜主机技术详解及实现路线(基于MCU、FPGA与ARM处理器的实现)摘要肠胃内窥镜主机是现代消化系统疾病诊断与治疗中关键的电子控制与图像处理单元。随着微控制器单元(MCU)、现场可编程门阵列(FPGA)和高性能ARM处理器(如RK3588)的广泛应用,内窥镜主机在图像处理、光源控制和用......