C语言入门-选择结构
在编程中,我们经常需要根据不同的条件执行不同的操作。C语言为此提供了几种非常实用的选择结构:条件运算符、逻辑运算、if
语句和switch
语句。接下来,让我们深入探讨这些重要的知识点,帮助你更好地理解和掌握C语言的选择结构。
1. 条件运算符
条件运算符,又称三元运算符,是C语言中唯一的三目运算符,形式为:
condition ? expression1 : expression2;
它的意思是:如果条件condition
为真,则执行expression1
,否则执行expression2
。
示例:
int a = 5, b = 10;
int max = (a > b) ? a : b;
printf("The maximum value is %d\n", max);
在这个例子中,如果a
大于b
,max
的值将是a
,否则是b
。因此,程序会输出b
的值,即10
。
2. 条件和逻辑运算符
在C语言中,我们经常使用条件运算符来比较两个值,这些运算符包括:
-
>
:大于 -
<
:小于 -
>=
:大于等于 -
<=
:小于等于 -
==
:等于 -
!=
:不等于
逻辑运算符用于将多个条件组合在一起,主要包括:
-
&&
(逻辑与):只有当两个条件都为真时,结果才为真。 -
||
(逻辑或):只要有一个条件为真,结果就为真。 -
!
(逻辑非):将条件的真假取反。
示例:
int a = 5, b = 10;
if (a < b && b > 0) {printf("b is greater than a and positive.\n");
}
在这个例子中,条件a < b && b > 0
同时满足,程序会输出b is greater than a and positive.
。
3. 混合运算示例
在编写代码时,条件运算、逻辑运算、算术运算和赋值运算常常会结合在一起使用。例如:
int x = 5, y = 10, z;
z = (x < y && y != 0) ? (x + y) : (x - y);
printf("The value of z is %d\n", z);
在这个例子中,x < y && y != 0
的条件为真,因此z
的值为x + y
,即15
。
更复杂的混合运算示例
在实际编程中,不同运算符的优先级会影响运算结果,因此理解优先级非常重要。以下是一些混合运算的例子:
示例 1:逻辑运算与算术运算的结合
int a = 4, b = 3, c = 2;
int result = a + b * c > 10 || b - c < 1;
printf("The result is %d\n", result);
在这个例子中,优先级的顺序是:
-
先进行乘法
b * c
,得到3 * 2 = 6
。 -
然后进行加法
a + 6
,得到4 + 6 = 10
。 -
判断
10 > 10
,结果为假。 -
接下来计算
b - c
,得到3 - 2 = 1
。 -
判断
1 < 1
,结果为假。 -
最后使用逻辑或
||
进行判断,两个条件均为假,结果为0
。
因此,程序会输出 The result is 0
。
示例 2:赋值运算与条件运算结合
int x = 5, y = 10;
int result = (x > y) ? (x = y + 2) : (y = x + 3);
printf("x = %d, y = %d, result = %d\n", x, y, result);
在这个例子中,x > y
为假,因此执行 y = x + 3
,得到 y = 8
,并将 8
赋值给 result
。程序会输出 x = 5, y = 8, result = 8
。
示例 3:混合算术、逻辑和条件运算
int a = 3, b = 4, c = 5;
int result = (a + b > c) && (b - c < a) ? (a * b) : (c / a);
printf("The value of result is %d\n", result);
在这个例子中:
-
先计算
a + b
,得到3 + 4 = 7
。 -
判断
7 > c
,即7 > 5
,结果为真。 -
然后计算
b - c
,得到4 - 5 = -1
。 -
判断
-1 < a
,即-1 < 3
,结果也为真。 -
逻辑与
&&
的结果为真,因此执行(a * b)
,得到3 * 4 = 12
。
最终,程序输出 The value of result is 12
。
运算符优先级的影响
在C语言中,不同运算符有不同的优先级,这些优先级会直接影响表达式的计算顺序。下表列出了常见运算符的优先级,按照从高到低的顺序:
优先级 | 运算符 | 描述 | ||
---|---|---|---|---|
1 | () | 括号,明确运算顺序 | ||
2 | ! | 逻辑非 | ||
3 | * , / , % | 乘、除、取余 | ||
4 | + , - | 加、减 | ||
5 | < , <= , > , >= | 关系运算符 | ||
6 | == , != | 等于、不等于 | ||
7 | && | 逻辑与 | ||
8 | || | 逻辑或 | ||
9 | ? : | 条件运算符(三目运算) | ||
10 | = , += , -= , *= 等 | 赋值运算符 |
示例 4:优先级问题的详细分析
int x = 2, y = 3, z = 4;
int result = x + y > z && y * z < 20 || x - y > 0;
printf("The value of result is %d\n", result);
在这个例子中,计算顺序如下:
-
先计算
x + y
,得到2 + 3 = 5
。 -
判断
5 > z
,即5 > 4
,结果为真。 -
计算
y * z
,得到3 * 4 = 12
。 -
判断
12 < 20
,结果为真。 -
使用逻辑与
&&
,两个条件都为真,因此结果为真。 -
接下来计算
x - y
,得到2 - 3 = -1
。 -
判断
-1 > 0
,结果为假。 -
最后使用逻辑或
||
,由于前面的逻辑与结果为真,因此整个表达式的结果为真,result
为1
。
程序会输出 The value of result is 1
。
4. if
语句
if
语句是最基本的选择结构,用于根据条件是否成立来执行不同的代码块。其基本形式如下:
if (condition) {// 当条件为真时执行的代码
} else {// 当条件为假时执行的代码
}
if
语句的多种变形
-
简单
if
语句int num = 5; if (num > 0) {printf("Positive number\n"); }
如果
num
大于0,程序将输出Positive number
。 -
if-else
语句int score = 85; if (score >= 90) {printf("Excellent\n"); } else {printf("Not excellent\n"); }
在这个例子中,如果
score
大于等于90,输出Excellent
,否则输出Not excellent
。 -
if-else if-else
语句int score = 85; if (score >= 90) {printf("Excellent\n"); } else if (score >= 60) {printf("Pass\n"); } else {printf("Fail\n"); }
根据
score
的值,程序会输出相应的结果。 -
嵌套
if
语句int a = 5, b = 10; if (a > 0) {if (b > a) {printf("b is greater than a, and a is positive\n");} }
在这个例子中,
if
语句是嵌套的,只有当a > 0
且b > a
时,程序才会输出结果。
5. switch
语句
switch
语句通常用于多个可能值的情况选择,尤其是当你有很多if-else
分支时,switch
语句会使代码看起来更简洁。switch
语句的基本结构如下:
switch (variable) {case value1:// 当 variable 等于 value1 时执行的代码break;case value2:// 当 variable 等于 value2 时执行的代码break;default:// 当没有匹配的值时执行的代码break;
}
详细分析:
-
switch
语句中,variable
必须是一个整数类型或字符类型。 -
每个
case
分支后需要使用break
语句来防止程序继续执行后续的case
。 -
default
部分是可选的,用于处理所有不符合已定义情况的输入。
示例:
char grade = 'B';
switch (grade) {case 'A':printf("Excellent\n");break;case 'B':printf("Good\n");break;case 'C':printf("Average\n");break;case 'D':printf("Below Average\n");break;case 'F':printf("Fail\n");break;default:printf("Invalid grade\n");break;
}
在这个例子中,程序会根据grade
的值执行相应的分支。如果grade
的值是B
,程序将输出Good
。default
部分用于处理所有不符合已定义情况的输入。
6. 易错点总结
-
条件运算符和逻辑运算符的混淆:要注意条件运算符(如
>
、<
、==
等)与逻辑运算符(如&&
、||
)的区别和使用场景。 -
缺少
break
语句:在switch
语句中,忘记写break
会导致程序继续执行后续的case
,即“贯穿效应”。 -
if
语句中的赋值错误:在if
条件中,使用=
而不是==
可能会导致逻辑错误。int a = 5; if (a = 10) { // 错误:这里应该使用 ==printf("a is equal to 10\n"); }
这段代码会将
a
赋值为10
,然后判断条件是否为真,容易导致意想不到的行为。 -
逻辑运算的短路效应:当使用
&&
或||
时,要注意短路效应。例如,在a != 0 && b / a > 2
中,如果a
为0,第二个条件将不会被执行,这样可以避免除以零的错误。
小结
在C语言中,选择结构让程序具有更大的灵活性,使其能够根据不同的条件执行不同的操作。通过学习条件运算符、逻辑运算、if
语句和switch
语句,你可以编写出更加智能和复杂的程序。
相关文章:
C语言入门-选择结构
在编程中,我们经常需要根据不同的条件执行不同的操作。C语言为此提供了几种非常实用的选择结构:条件运算符、逻辑运算、if语句和switch语句。接下来,让我们深入探讨这些重要的知识点,帮助你更好地理解和掌握C语言的选择结构。 1.…...
Legion拯救者 刃7000K-26IAB联想台式机T5 26IAB7(90SU,90SV,90SW,90SX)原厂Windows11系统镜像下载
适用机型:【90SW、90SX、90SU、90SV】 链接:https://pan.baidu.com/s/1gJ4ZwWW2orlGYoPk37M-cg?pwd4mvv 提取码:4mvv lenovo联想原装WIN系统自带所有驱动、出厂主题专用壁纸、系统属性联机支持标志、系统属性专属LOGO标志、Office办公软…...
代码随想录算法训练营第二十四天|Day24 回溯算法
93.复原IP地址 题目链接/文章讲解:https://programmercarl.com/0093.%E5%A4%8D%E5%8E%9FIP%E5%9C%B0%E5%9D%80.html 视频讲解:https://www.bilibili.com/video/BV1XP4y1U73i/ 思路 char** result; int resultTop; int segments[3]; int isValid(char* s…...
vue elementui table编辑表单时,弹框增加编辑明细数据
需求: 前端进行新增表单时,同时增加表单的明细数据。明细数据部分,通过弹框方式增加或者编辑。 效果图: 代码: <!-- 新增主表弹窗 Begin --><el-dialog:title"titleInfo"top"5vh"centerwidth"…...
springboot集成Redisson做分布式消息队列
这里演示Redisson做分布式消息队列。首先引入 Redisson依赖,官方github <dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId><version>3.17.6</version> </dependen…...
如何通过Lua语言请求接口拿到数据
文章目录 概要http客户端通过请求下载数据 概要 当某个需求是需要在模块内请求接口拿到数据,需要使用http客户端调用接口 http客户端 LuaSOC请求接口官方文档 调用:http.request(method,url,headers,body,opts,ca_file,client_ca, client_key, clien…...
Android 13 SystemUI 隐藏下拉快捷面板部分模块(wifi,bt,nfc等)入口
frameworks/base/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSFactoryImpl.java createTileInternal(tileSpec)方法注释想隐藏的模块即可。...
自由学习记录(14)
unity操作问题 位置:子物体的位置是相对于父物体的。如果你移动父物体,子物体会保持相对于父物体的相对位置,跟着一起移动。 旋转:子物体的旋转也是相对于父物体的。旋转父物体会导致子物体围绕父物体的原点旋转。 缩放…...
疯狂Spring Boot讲义[推荐1]
《疯狂Spring Boot讲义》是2021年电子工业出版社出版的图书,作者是李刚 《疯狂Spring Boot终极讲义》不是一本介绍类似于PathVariable、MatrixVariable、RequestBody、ResponseBody这些基础注解的图书,它是真正讲解Spring Boot的图书。Spring Boot的核心…...
vue中$nextTick的作用是什么,什么时候使用
$nextTick 是 Vue 提供的一个方法,用于在下一次 DOM 更新周期之后执行回调函数。它通常用于在 Vue 完成数据更新后,需要访问更新后的 DOM 状态时,保证操作的是更新后的 DOM。 工作原理: Vue 是异步更新 DOM 的,当数据…...
Redis实现全局ID生成器
全局ID生成器 为什么要用全局ID生成器 1.当我们使用数据库自增来实现id的生成时,规律过于明显,会给用户暴露很多信息 2.当我们订单量过大时无法用数据库的一张表来存放订单,如果两张表的id都是自增的话,id就会出现重复 什么是全局ID生成器 全局ID生成器,是一种在分布式系统…...
Xshell远程连接工具详解
Xshell是一款在Windows平台上运行的远程连接工具,它支持SSH1、SSH2以及Microsoft Windows平台的TELNET协议。Xshell通过互联网实现对远程主机的安全连接,帮助用户在复杂的网络环境中享受他们的工作。本文将详细介绍Xshell的溯源、最新版本以及它的优势。…...
如何在verilog设计的磁盘阵列控制器中实现不同RAID级别(如RAID 0、RAID 1等)的切换?
以下是一种在Verilog设计的磁盘阵列控制器中实现不同RAID级别(以RAID 0和RAID 1为例)切换的方法: 添加控制信号 在磁盘阵列控制器模块中添加一个输入信号,例如raid_mode,用于选择RAID模式。假设raid_mode = 0表示RAID 0模式,raid_mode = 1表示RAID 1模式。module raid_co…...
基于元神操作系统实现NTFS文件操作(十)
1. 背景 本文补充介绍文件遍历操作的部分附加内容,譬如,过滤掉系统元文件、过滤掉重复的文件项、过滤掉隐藏文件等,并提供了基于元神操作系统的部分实现代码。 2. 方法 (1)过滤掉系统元文件 NTFS文件系统的前16个元…...
Qt的几个函数方法
void receiveInfo1() {// 假设这是从串口接收到的字符串QString receivedString "23.5C,45%,1012hPa";// 使用逗号分隔符分割字符串QStringList parts receivedString.split(,);// 检查分割后的列表是否有足够的部分if (parts.size() > 3) {QString part1 part…...
openpnp - bug - 散料飞达至少定义2个物料
文章目录 openpnp - bug - 散料飞达至少定义2个物料笔记END openpnp - bug - 散料飞达至少定义2个物料 笔记 散料飞达上定义的物料个数用完了,现在只需要一个料就可以。 用顶部相机去找编带上是否还有一个单独的料,找到了。 定义散料飞达的料为1个&…...
HDFS异常org.apache.hadoop.hdfs.protocol.NSQuotaExceededException
HDFS异常org.apache.hadoop.hdfs.protocol.NSQuotaExceededException 异常信息: Hive:org.apache.hadoop.hdfs.protocol.NSQuotaExceededException: The NameSpace quota (directories and files) of directory /xxxdir is exceeded: quota10000 file count15001N…...
数据库的构成与手写简单数据库的探索
一、引言 在当今数字化的时代,数据库扮演着至关重要的角色。无论是企业管理系统、电子商务平台还是各种移动应用,都离不开数据库的支持。数据库是存储和管理数据的核心工具,它的高效性、可靠性和安全性对于数据的处理和应用至关重要。本文将…...
基于STM32的智能晾衣架设计
引言 随着智能家居的普及,智能晾衣架成为了提升生活便利性的重要设备。智能晾衣架通过集成多个传感器,能够自动感知天气变化、湿度、光照等环境因素,实现自动升降、风干和报警功能,帮助用户更加高效地晾晒衣物。本项目基于STM32设…...
【MAUI】模糊控件(毛玻璃高斯模糊亚克力模糊)
文章目录 XAML.CSToBytes方法使用效果 常试过AcrylicView.MAUI和Sharpnado.MaterialFrame,对于二者教程很少,使用直接写控件然后调属性,没有报错但也并没有效果所幸就自己写一个 XAML <?xml version"1.0" encoding"utf-…...
深度学习:pandas篇
1. Pandas 基础 Pandas 是一个帮助你处理和分析数据的工具 安装 Pandas pip install pandas 导入 Pandas,我们用 pd 来代替 Pandas 的全称,这样以后写代码的时候更简洁 import pandas as pd 建 Series 和 DataFrame Pandas 最基本的两个数据结构是…...
Redis学习文档(Redis基本数据类型【Hash、Set】)
Hash(哈希) 介绍 Redis 中的 Hash 是一个 String 类型的 field-value(键值对) 的映射表,特别适合用于存储对象,后续操作的时候,你可以直接修改这个对象中的某些字段的值。 Hash 类似于 JDK1.…...
15分钟学Go 第9天:函数的定义与调用
第9天:函数的定义与调用 欢迎来到第9天的Go语言学习模块!今天我们将深入探讨函数的定义与调用,帮助你掌握如何编写和使用函数。学习函数不仅是Go语言的基础,也是程序设计的核心概念之一。这一节将详细介绍函数的结构、参数传递、…...
Java虚拟机:JVM介绍
1024 程序员节日快乐!愿您我的代码永远没有 bug ,人生永远没有 bug ! JVM 概述JVM 架构 概述 JVM( Java Virtual Machine ,Java 虚拟机),是 Java 语言的运行环境,是运行所有 Java 程…...
R数据科学 16.5.3练习题
(1) 编写代码以使用一种映射函数完成以下任务。 a. 计算 mtcars 数据集中每列的均值。 b. 确定 nycflights13::flights 数据集中每列的类型。 c. 计算 iris 数据集中每列唯一值的数量。 d. 分别使用 μ -10、0、10 和 100 的正态分布生成 10 个随机数。 library(purrr) # 计算…...
通过conda install -c nvidia cuda=“11.3.0“ 安装低版本的cuda,但是却安装了高版本的12.4.0
问题 直接通过 conda install -c nvidia cuda"11.3.0"安装得到的却是高版本的 不清楚原理 解决方法 不过我们可以分个安装 runtime toolkit 和 nvcc 安装指定版本的 cudatoolkit 和 nvcc conda install -c nvidia cuda-cudart"11.3.58" conda instal…...
简易CPU设计入门:验证取指令模块
项目代码下载 还是请大家首先准备好本项目所用的源代码。如果已经下载了,那就不用重复下载了。如果还没有下载,那么,请大家点击下方链接,来了解下载本项目的CPU源代码的方法。 下载本项目代码 准备好了项目源代码以后ÿ…...
【MySQL数据库】MySQL主从复制
文章目录 MySQL主从复制MySQL主从复制的分类MySQL主从复制原理MySQL主从复制的配置步骤MySQL主从复制的同步模式 MySQL主从复制实验环境准备关闭防火墙和 SELinux时间同步主服务器设置从服务器设置 MySQL 主从复制配置主服务器配置从服务器配置(以 Slave1 为例&…...
CDC变更数据捕捉技术是什么?和ETL有什么不同?
一、什么是CDC技术? 变更数据捕获(Change Data Capture,简称 CDC)是一种用于识别和跟踪数据源中发生变化的数据的技术。 工作原理: 1.监测数据源:CDC 工具会持续监测指定的数据源,如数据库表、文件系统…...
一种用于推进欧洲临床中心中风管理的联邦学习平台即服务
论文标题:A Federated Learning Platform as a Service for Advancing Stroke Management in European Clinical Centers 作者信息: Diogo Reis Santos, Albert Sund Aillet, Antonio Boiano, Usevalad Milasheuski, Lorenzo Giusti, Marco Di Gennaro…...
网站怎么可以被收录/优化关键词推广
营销的本质是什么?就是赚钱! 不想当将军的士兵,不是好士兵。不以赚钱为目的的营销,同样不是好营销。 什么叫营销?有人可能会说,这有什么不懂得,不就是推销嘛。其实不然,真正意义上…...
企业展示网站/搜狗收录查询
日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) 用户画像 总文章 用户访问模型表 用户上网轨迹表 SQL目的:以同一个用户ID作为同一个分组的情况下,同时可根据sessio…...
城市文明建设网站/关键词权重查询
一.js事件和对象 1.1JavaScript的事件 1.1.1 onclick事件 鼠标单击产生onclick事件,同时onclick指定的事件处理程序或代码将被调用执行 eg: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title…...
怎么做学校网站/关键词排名优化公司外包
机器学习是一个涉及面很广的领域。多亏了互联网,可以从网上找到大量的资源,从书本到博客再到视频博客。到目前为止,《 Analytics India》杂志一直在为ML社区收集机器学习相关的学习资源。在本文中,整理了8本机器学习算法实战和应用…...
网站模型怎么做/日照网络推广
使用前需要确保被连接端已启动VNC iewer程序. 安装Remmina sudo apt install remmina使用Remmina基于VNC协议远程连接 启动remmina: remmina点击左上角的: 修改协议为VNC, 填写服务器, 用户名和密码, 保存即可; 双击连接即可. 成功截图 成功连接到远程端~...
网站警察备案/苏州网站建设方案
在项目中遇到了一个性能问题vueelementUI table表格展示数据,当数据很多的时候,不能一页显示完,同时一次请求数据量太大,会增加网页渲染的时间,影响体验,这个时候常常有两种方法处理,1、分页&am…...