【深入浅出C#】章节 3: 控制流和循环:条件语句
条件语句是编程中一种常用的控制结构,用于根据给定的条件来执行不同的代码块。它基于条件的真假来决定程序的执行路径,使程序能够根据不同的情况采取不同的行动。条件语句的作用在于根据特定的条件来控制程序的行为,使程序能够根据不同的情况做出不同的决策和响应。
条件语句在程序中非常重要,它使程序具备了灵活性和可控性。通过使用条件语句,我们可以根据不同的条件执行不同的代码逻辑,从而实现更精确的控制和处理。它允许程序根据输入、状态或其他条件来动态地做出决策,适应不同的情况和需求。
条件语句的重要性还体现在错误处理、逻辑判断、流程控制和业务逻辑的实现上。它能够帮助我们处理边界条件、异常情况和不同的用户输入,使程序更加健壮和可靠。同时,条件语句也能够优化程序的执行效率,避免不必要的计算和重复操作。
一、if语句
1.1 语法和基本用法
if语句是C#中最基本的条件语句,用于根据给定的条件执行特定的代码块。它的语法结构如下:
if (条件)
{// 条件为真时执行的代码块
}
解释:
if关键字指示条件语句的开始。条件是一个布尔表达式,用于判断条件的真假。如果条件为真,那么代码块中的代码将被执行;如果条件为假,那么代码块中的代码将被跳过。
基本用法:
- 如果条件为真,if语句中的代码块将被执行;如果条件为假,则代码块将被跳过。
- if语句可以单独使用,也可以嵌套在其他条件语句或循环中。
- 在代码块中,可以编写需要根据条件执行的任意代码逻辑。
示例:
int x = 10;
if (x > 5)
{Console.WriteLine("x大于5");
}
在这个例子中,如果变量x的值大于5,那么控制台将输出"x大于5"。否则,代码块中的代码将被跳过。
1.2 条件表达式和布尔值的使用
在if语句中,条件表达式是一个用于判断真假的表达式,它可以是一个布尔表达式或返回布尔值的表达式。条件表达式的结果决定了代码块是否执行。
条件表达式通常由以下几种情况组成:
- 关系运算符:例如
>、<、>=、<=等,用于比较两个值的大小关系。 - 相等运算符:例如
==、!=等,用于比较两个值是否相等。 - 逻辑运算符:例如
&&、||、!等,用于组合多个条件或取反操作。
布尔值是一种只能取true或false的数据类型,它用于表示真假或逻辑判断的结果。在条件语句中,条件表达式的结果必须是布尔值,因为if语句根据条件的真假来决定是否执行代码块。
示例:
int x = 10;
bool condition = x > 5; // 条件表达式,判断x是否大于5
if (condition) // 使用条件表达式作为if语句的条件
{Console.WriteLine("x大于5");
}
在这个例子中,条件表达式x > 5将返回一个布尔值(true或false),根据该值来决定是否执行代码块。
Tip:在if语句中使用条件表达式和布尔值是为了实现根据不同的条件来控制程序的执行流程。通过合理地构建条件表达式,我们可以根据不同的情况执行相应的代码逻辑,提高程序的灵活性和可读性。
二、if-else语句
2.1 语法和基本用法
if-else语句是一种用于在程序中进行条件分支的控制结构。它允许根据条件的真假执行不同的代码块。if-else语句的基本语法如下:
if (condition)
{// 当条件为真时执行的代码块
}
else
{// 当条件为假时执行的代码块
}
其中,condition是一个条件表达式,用于判断条件的真假。如果条件为真,则执行if代码块中的语句;如果条件为假,则执行else代码块中的语句。
示例:
int x = 10;
if (x > 5)
{Console.WriteLine("x大于5");
}
else
{Console.WriteLine("x不大于5");
}
在这个例子中,如果x的值大于5,将输出"x大于5";否则,将输出"x不大于5"。
Tip:if-else语句允许根据不同的条件执行不同的代码逻辑,它在程序中的应用非常广泛。通过合理地使用if-else语句,我们可以根据不同的情况做出不同的处理,实现灵活的程序控制流程。
2.2 逻辑判断流程
if-else语句是一种逻辑判断结构,根据条件的真假决定执行不同的代码块。其逻辑判断流程如下:
- 首先,判断条件表达式的真假。条件表达式可以是任何返回布尔值的表达式,例如比较表达式、逻辑表达式等。
- 如果条件表达式为真,执行if代码块中的语句。if代码块是在条件为真时执行的代码块,它可以包含一个或多个语句。
- 如果条件表达式为假,跳过if代码块,执行else代码块中的语句(如果存在)。else代码块是在条件为假时执行的代码块,它也可以包含一个或多个语句。
- 执行完if或else代码块后,程序继续执行if-else语句之后的代码。
示例:
int x = 10;
if (x > 5)
{Console.WriteLine("x大于5");
}
else
{Console.WriteLine("x不大于5");
}
在这个例子中,首先判断x > 5的条件表达式。由于x的值为10,满足条件,因此执行if代码块中的语句,输出"x大于5"。如果x的值为3,则不满足条件,跳过if代码块,执行else代码块中的语句,输出"x不大于5"。
三、嵌套if语句
3.1 语法和基本用法
嵌套if语句是在一个if语句的代码块中嵌套使用另一个if语句,以实现更复杂的条件判断逻辑。它的语法和基本用法如下:
if (condition1)
{// 执行一些代码if (condition2){// 执行一些代码}else{// 执行一些代码}
}
else
{// 执行一些代码
}
嵌套if语句的结构可以包含多个if语句,每个if语句根据自己的条件表达式来进行判断。在嵌套if语句中,内层的if语句是根据外层if语句的条件表达式的真假来执行的。使用嵌套if语句,我们可以根据多个条件来进行复杂的逻辑判断。内层if语句的执行结果会根据外层if语句的条件表达式的真假来决定是否执行。这样可以根据不同的条件组合来执行不同的代码逻辑。
示例:
int x = 10;
int y = 5;if (x > 0)
{if (y > 0){Console.WriteLine("x和y都大于0");}else{Console.WriteLine("x大于0,但y不大于0");}
}
else
{Console.WriteLine("x不大于0");
}
在这个例子中,外层if语句判断x > 0的条件表达式。如果条件为真,则进入内层if语句,判断y > 0的条件表达式。如果内层if语句的条件也为真,则输出"x和y都大于0";如果内层if语句的条件为假,则输出"x大于0,但y不大于0"。如果外层if语句的条件为假,则直接输出"x不大于0"。
四、else if语句
4.1 语法和基本用法
else if语句是在if语句的条件不满足的情况下进行额外条件判断的一种结构。它的语法和基本用法如下:
if (condition1)
{// 执行一些代码
}
else if (condition2)
{// 执行一些代码
}
else if (condition3)
{// 执行一些代码
}
else
{// 执行一些代码
}
else if语句必须跟在if语句或上一个else if语句之后,并且可以根据需要连续添加多个else if语句。每个else if语句都有自己的条件表达式,只有在前面的条件不满足时才会执行。
使用else if语句,我们可以实现多个条件的判断,并根据不同的条件执行不同的代码逻辑。在多个else if语句中,只有满足第一个为真的条件时,其后的else if语句都会被忽略。
示例:
int num = 10;if (num > 0)
{Console.WriteLine("num大于0");
}
else if (num == 0)
{Console.WriteLine("num等于0");
}
else if (num < 0)
{Console.WriteLine("num小于0");
}
else
{Console.WriteLine("无法确定num的值");
}
在这个例子中,首先判断num > 0的条件是否为真,如果是,则输出"num大于0"。如果不是,则继续判断num == 0的条件是否为真,如果是,则输出"num等于0"。如果前两个条件都不满足,则执行最后一个else语句,输出"无法确定num的值"。
Tip:通过使用else if语句,我们可以根据多个条件进行逐一判断,并根据不同的条件执行相应的代码逻辑。这样可以实现更复杂的条件判断和控制流程。
五、switch语句
5.1 语法和基本用法
switch语句是一种用于根据不同的条件执行不同代码块的流程控制语句。它的语法和基本用法如下:
switch (expression)
{case value1:// 执行一些代码break;case value2:// 执行一些代码break;case value3:// 执行一些代码break;default:// 执行一些代码break;
}
在switch语句中,首先需要提供一个表达式(expression),它的值将被用来与每个case语句中的值进行比较。每个case语句后面跟着一个冒号,然后是一些要执行的代码。如果表达式的值与某个case语句的值匹配,那么该case语句中的代码将会被执行。
在每个case语句的末尾需要使用break语句来终止switch语句的执行。如果没有break语句,程序将会继续执行后续的case语句,直到遇到break语句或switch语句结束。
如果表达式的值与任何一个case语句的值都不匹配,那么将会执行default语句中的代码。default语句是可选的,用于处理未匹配的情况。
示例:
int dayOfWeek = 3;
string dayName;switch (dayOfWeek)
{case 1:dayName = "Monday";break;case 2:dayName = "Tuesday";break;case 3:dayName = "Wednesday";break;case 4:dayName = "Thursday";break;case 5:dayName = "Friday";break;default:dayName = "Invalid day";break;
}Console.WriteLine("Today is " + dayName);
在这个例子中,根据dayOfWeek的值,使用switch语句选择对应的dayName。当dayOfWeek的值为3时,与case 3匹配,执行其中的代码,将dayName设置为"Wednesday"。最后,输出"Today is Wednesday"。
5.2 条件匹配和执行流程
条件匹配和执行流程是指在条件语句中根据条件的不同进行匹配和执行的过程。具体流程如下:
- 条件匹配:首先,条件语句会根据给定的条件表达式进行匹配。条件表达式的结果应为布尔值(true或false)。
- 匹配成功:如果条件表达式的结果与某个条件匹配(比如if语句中的条件为true),那么与该条件相对应的代码块将会被执行。在if语句中,如果条件匹配,则执行if代码块中的语句。
- 匹配失败:如果条件表达式的结果与所有条件都不匹配(比如if语句中的条件为false),那么将会跳过与条件相对应的代码块。
- 可选的else语句:如果在条件语句中使用了else或else if语句,那么在所有条件都不匹配的情况下,将会执行与else语句关联的代码块。
- 执行流程:根据条件匹配的结果,程序会按照匹配的条件顺序执行对应的代码块。在执行完一个代码块后,程序将跳过其它条件的判断,并继续执行后续的代码。
Tip:通过条件匹配和执行流程,我们可以根据不同的条件选择不同的代码执行路径,从而实现程序的灵活性和逻辑控制。条件语句提供了一种在不同情况下执行不同代码的机制,使得程序能够根据特定的条件进行适当的处理。这在处理用户输入、业务逻辑判断等方面非常有用,为程序带来了更高的灵活性和可控性。
六、三元运算符
6.1 语法和基本用法
三元运算符是一种简洁的条件表达式,它允许根据条件的真假选择不同的值进行赋值。其语法形式为:
条件 ? 值1 : 值2
- 条件:一个布尔表达式,用于判断条件的真假。
- 值1:当条件为真时要返回的值。
- 值2:当条件为假时要返回的值。
三元运算符的基本用法是根据条件的真假来选择返回值。如果条件为真,表达式的结果将是值1;如果条件为假,表达式的结果将是值2。
示例:
int x = 10;
int y = 5;
int max = (x > y) ? x : y;
在上述示例中,如果x大于y,则max将被赋值为x的值(10);否则,max将被赋值为y的值(5)。
Tip:三元运算符常用于简单的条件判断和赋值操作,可以使代码更加简洁和易读。然而,过度使用三元运算符可能会导致代码可读性下降,因此在使用时应慎重考虑上下文和代码清晰度。
七、注意事项和最佳实践
在使用条件语句时,以下是一些注意事项和最佳实践:
- 简洁明确的条件:确保条件表达式简洁明确,避免过于复杂的逻辑判断。这有助于提高代码的可读性和维护性。
- 谨慎处理嵌套条件:嵌套条件可能导致代码的可读性下降。尽量使用逻辑运算符和布尔表达式将条件组合在一起,以减少嵌套的层级。
- 注意条件顺序:在if-else语句或switch语句中,条件的顺序非常重要。确保条件的顺序是符合逻辑的,以避免不必要的判断和重复代码。
- 使用恰当的比较操作符:根据需要选择适当的比较操作符,如相等(==)、不等(!=)、大于(>)、小于(<)、大于等于(>=)、小于等于(<=)等。确保使用正确的操作符来比较变量的值。
- 考虑默认情况:在使用条件语句时,确保考虑到所有可能的情况,并提供适当的处理或默认值。这可以避免潜在的错误或未处理的情况。
- 编写清晰的注释:对于复杂的条件语句,编写清晰的注释有助于其他开发人员理解代码的意图和逻辑。
- 小心处理代码重复:在使用条件语句时,尽量避免代码的重复。如果有多个条件需要判断相同的逻辑,可以考虑将重复的代码提取为函数或方法,以便重复使用。
- 单一职责原则:确保条件语句中的逻辑保持单一职责原则。如果一个条件语句涵盖了过多的逻辑,可以考虑将其拆分为多个条件语句或使用其他控制结构来提高代码的可读性。
八、总结
条件语句是编程中常用的控制结构,用于根据条件的满足与否执行不同的代码块。通过条件语句,我们可以根据程序运行时的情况来做出决策和控制程序的执行流程。在使用条件语句时,需要注意编写简洁明确的条件表达式、谨慎处理嵌套条件、注意条件顺序、使用恰当的比较操作符、考虑默认情况等。此外,应该编写清晰的注释,避免代码重复,并确保条件语句中的逻辑保持单一职责原则。通过遵循这些最佳实践,可以编写出高质量、可读性强且易于维护的条件语句。条件语句在程序开发中扮演着重要的角色,它使得我们能够根据不同的情况执行不同的代码逻辑,提高程序的灵活性和可靠性。
相关文章:
【深入浅出C#】章节 3: 控制流和循环:条件语句
条件语句是编程中一种常用的控制结构,用于根据给定的条件来执行不同的代码块。它基于条件的真假来决定程序的执行路径,使程序能够根据不同的情况采取不同的行动。条件语句的作用在于根据特定的条件来控制程序的行为,使程序能够根据不同的情况…...
Java框架学习--Spring
1.Spring概念【托管很多对象的框架】 一个包含了众多工具方法的IoC容器。 1.1 什么是容器? 容器是用来容纳各种物品的(基本)装置。--来自百度百科 之前常见的容器有: List/Map-》数据存储容器 Tomcat-》Web容器 1.2什么是IoC? IoCInve…...
【爬虫】Xpath和CSS信息提取的方法异同点
类似点: Xpath与css都有web页面定位元素的功能Xpath与css结构类似 区别: 1. Xpath比较强大,而css选择器在性能上更优,运行速度更快,语法更简洁 CSS再chrome,火狐查找速度快,效率高࿰…...
数字IC前端学习笔记:FIFO的Verilog实现(二)
相关文章 数字IC前端学习笔记:LSFR(线性反馈移位寄存器) 数字IC前端学习笔记:跨时钟域信号同步 数字IC前端学习笔记:信号同步和边沿检测 数字IC前端学习笔记:锁存器Latch的综合 数字IC前端学习笔记&am…...
2.2 搭建Spark开发环境
一、Spark开发环境准备工作 由于Spark仅仅是一种计算框架,不负责数据的存储和管理,因此,通常都会将Spark和Hadoop进行统一部署,由Hadoop中的HDFS、HBase等组件负责数据的存储管理,Spark负责数据计算。 安装Spark集群前…...
webpack指定输出资源的路径和名称
如图,在前面的章节我们打包后的文件默认都输出到了dist目录下,无论是图片、还是js都在同一级别目录,这里目前处理的资源比较少,如果资源一多,所有的资源都在同一级目录,看起来很费劲。 那么这节就介绍一下…...
Spring事务四
spring 事务的隔离级别 当多个事务同时访问数据库中的同一数据时,可能会出现数据不一致的情况,为了避免这种情况发生,就需要使用事务隔离机制。Spring框架中定义了5种事务隔离级别,分别为: DEFAULT(默认隔…...
项目管理专业人员能力评价等级证书(CSPM)的级别介绍
2021年10月,中共中央、国务院发布的《国家标准化发展纲要》明确提出构建多层次从业人员培养培训体系,开展专业人才培养培训和国家质量基础设施综合教育。建立健全人才的职业能力评价和激励机制。由中国标准化协会(CAS)组织开展的项…...
设计模式-创建型模式(单例、工厂、建造、原型)
Concept-概念前置 设计模式:软件设计中普遍存在(反复出现)的各种问题,所提出的解决方案。 面向对象三大特性:封装、继承、多态。 面向对象设计的SOLID原则: (1)开放封闭原则&#…...
用饭店来形象比喻线程池的工作原理
一、线程池解决的问题? 使用线程池主要解决在程序中频繁创建和销毁线程导致的资源浪费,线程池可以维护一定量的线程来执行所需要的任务,维护的线程也可以重复使用。 二、用形象的饭店来解释工作原理 线程池就相当于一家饭店, 任…...
GO学习笔记之表达式
GO学习笔记之表达式 保留字运算符优先级二元运算符位运算符自增指针 保留字 Go语言仅25个保留关键字(keyword),这是最常见的宣传语,虽不是主流语言中最少的,但也确实体现了Go语法规则的简洁性。保留关键字不能用作常量…...
005Mybatis返回值(ResultMap 一对多,多对多)
属性 id 应该总是指定一个或多个可以唯一标识结果的属性。 虽然,即使不指定这个属性,MyBatis 仍然可以工作,但是会产生严重的性能问题。 只需要指定可以唯一标识结果的最少属性。显然,你可以选择主键(复合主键也可以…...
把玩数据在内存中的存储
前言:时光如梭💦,今天到了C语言进阶啦😎,基础知识我们已经有了初步认识, 是时候该拔高拔高自己了😼。 目标:掌握浮点数在内存的存储,整形在内存的存储。 鸡汤:…...
Nginx运行原理与基本配置文件讲解
文章目录 Nginx基本运行原理Nginx的基本配置文件serverlocationroot 与 alias 的区别server 和 location 中的 rootnginx欢迎页 本文参考文章Nginx相关文章 Nginx基本运行原理 Nginx的进程是使用经典的「Master-Worker」模型,Nginx在启动后,会有一个master进程和多个…...
openGauss5 企业版之SQL语法和数据结构
文章目录 1.openGauss SQL 语法2. 数据类型2.1数值类型2.2 布尔类型2.3 字符类型2.4 二进制类型2.5日期/时间类型2.6 几何类型2.7 网络地址类型2.8 位串类型2.9 文本搜索类型2.10 UUID数据类型2.11 JSON/JSONB类型2.11 HLL数据类型2.12 范围类型2.13 索引2.14 对象标识符类型2.…...
TClientDataSet 模拟 EXCEL表
日常处理数据时,经常需要,从EXCEL表格中,批量导入数据,通过 XLSReadWriteII编程,会很快导入。 但是,客户提供的EXCEL表的字段,数据格式,字段的排序,有很大的区别。因此&a…...
Hazel游戏引擎(012)GLFW窗口事件
文中若有代码、术语等错误,欢迎指正 文章目录 前言如何确定GLFW窗口事件的回调函数参数Application接收事件回调流程原项目流程(12345)自己写的简单Demo与流程(123) 前言 此节目的 为了完成008计划窗口事件的接收glfw窗口事件以及回调部分 此节要完成 使用glfw函数…...
Nenu算法复习第六章
目录 补充知识点 1160: 6001 第几天? 1161: 6002 时间格式转换 1162: 6003 星期几? 1163: 6004 18岁生日、 补充知识点 闰年的判断方法: 能被四整除但是不能一百整除或者能被400整除 例题: 题目描述 经常会有人问你怎么判断闰年&…...
知识付费社群:最好的知识传播方式
知识付费是一种网络内容付费方式,它让知识传播者通过网络以付费的方式向社会大众或特定平台传递知识、技能和智力资源。 知识付费传播的成功离不开用户,他们是核心节点,也是受众和粉丝的重要组成部分。用户不仅可以生产和传播知识࿰…...
局域网内不同网段的设备互相连接设置
目录 介绍1、打开网络连接,找到本地网络->属性->ipv4->属性->高级:2、在高级设置页面,我们添加一个IP,这个IP和板子在一个网段,我这里设置的是192.168.253.101:3、设置完成即可生效,…...
华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...
中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...
Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...
BLEU评分:机器翻译质量评估的黄金标准
BLEU评分:机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域,衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标,自2002年由IBM的Kishore Papineni等人提出以来,…...
python爬虫——气象数据爬取
一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用: 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests:发送 …...
华为OD机试-最短木板长度-二分法(A卷,100分)
此题是一个最大化最小值的典型例题, 因为搜索范围是有界的,上界最大木板长度补充的全部木料长度,下界最小木板长度; 即left0,right10^6; 我们可以设置一个候选值x(mid),将木板的长度全部都补充到x,如果成功…...
永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器
一、原理介绍 传统滑模观测器采用如下结构: 传统SMO中LPF会带来相位延迟和幅值衰减,并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF),可以去除高次谐波,并且不用相位补偿就可以获得一个误差较小的转子位…...
