当前位置: 首页 > 编程日记 > 正文

C#选择控制语句

本节课将介绍如何使用C#选择控制语句,第三课将达到如下几个目的:
1.学会"if"语句的用法。

2.学会"switch"语句的用法。

3.学会在"switch"语句中如何使用"break"语句。

4.理解"goto"语句的正确用法。

在前面几节课中,你所看到的程序都是顺序执行的。你无法控制输入语句,你所能做的就是跟着程序执行直到终止。本节课中,将介绍基于条件进行判断,从而选择进入相应的逻辑分支中去执行。

我们所介绍的第一个选择语句是"if"语句,它有三种基本形式:单条选择, 如果/否则,以及多情形选择。

1.清单3-1. IF语句的格式:IfSelection.cs

using System;
class IfSelect {
public static void Main() {
string myInput;
int myInt;
Console.Write("Please enter a number: ");
myInput = Console.ReadLine();
myInt = Int32.Parse(myInput);
// Single Decision and Action with brackets
if (myInt > 0) {
Console.WriteLine("Your number {0} is greater than zero.", myInt);
}
// Single Decision and Action without brackets
if (myInt < 0)
Console.WriteLine("Your number {0} is less than zero.", myInt);
// Either/Or Decision
if (myInt != 0) {
Console.WriteLine("Your number {0} is not equal to zero.", myInt);
}
else {
Console.WriteLine("Your number {0} is equal to zero.", myInt);
}
// Multiple Case Decision
if (myInt < 0 || myInt == 0) {
Console.WriteLine("Your number {0} is less than or equal to zero.", myInt);
}
else if (myInt > 0 && myInt <= 10) {
Console.WriteLine("Your number {0} is between 1 and 10.", myInt);
}
else if (myInt > 10 && myInt <= 20) {
Console.WriteLine("Your number {0} is between 11 and 20.", myInt);
}
else if (myInt > 20 && myInt <= 30) {
Console.WriteLine("Your number {0} is between 21 and 30.", myInt);
}
else {
Console.WriteLine("Your number {0} is greater than 30.", myInt);
}
}
}

说明

1.清单3-1中的IF语句的各种格式都使用了同一个输入变量"myInt"。

这是从用户获得交互内容的另一种方式。我们首先输出一行信息:"Please enter a number:"到控制台。"Console.ReadLine()"语句使得程序等待来自用户的输入,一旦用户输入一个数字,按回车键之后,该数字以字符串的形式返回到"myInput"变量中,由于我们需要的是一个整数,所以需要转换变量"myInput"成整型数据。用命令"Int32.Parse(myInput)"即可完成。 (Int32 等数据类型将在后面的课程中加以介绍。) 转换结果放到"myInt"变量中,这是个整数类型。

2.有了我们所需要的类型的数据,就可以用"if"语句来进行条件判断了。

对于第一种形式的IF语句,格式为: if (boolean expression) { statements }。该语句必须以关键字"if"开始。之后,括号中为布尔表达式。该布尔表达式必须计算出一个true或者false值。在本例中,我们检查用户的输入,看看输入值是否大于0,如果表达式运算结果为true,就执行大括号中的语句。(我们把大括号之间的语句部分称为"block"。) 块中有一个或者多个语句。如果布尔表达式的值为false,我们就忽略块中的语句,直接执行块后面的语句。

3.除了没有块之外,第二种"if"语句的格式非常类似于第一种。

因此,如果布尔表达式为true,将会执行布尔表达式之后的第一条语句。当布尔表达式的值为false,布尔表达式之后的第一条语句将被忽略掉,而直接执行其后的程序语句。如果你只有一条语句需要执行,就用该格式的"if"语句。如果你打算在布尔表达式的值为true时,执行两条或者两条以上的语句,就必须把它们放到块中。我个人的建议是:无论需要执行几条语句,要养成把if语句放到块中的习惯, 这就使得你避免犯如下错误:当添加了一条语句之后,忘记了添加一对括号。

4.大多数时候,你需要作出如下选择:当条件满足时做一件事,否则做另外一件事。

清单3-1中,程序演示了这种if语句格式的用法。 当布尔表达式为true时, 就立刻执行"if"后面的那条语句, 而当布尔表达式为false时,就执行"else"关键字后面的语句。

5.当要计算多个布尔表达式时,你可以使用if/else if/else 这种格式,上面的例子程序演示了这种形式,从关键字"if"开始, 一旦布尔表达式为真,就执行if后面的块。但是,这一次,在组合关键字"else if"后面还可以进行多个条件的判断。"else if"语句后面也有个布尔表达式,一旦该布尔表达式的值为true,就会执行紧接其后的块。这种情形可以一直持续下去,直到所有的情况都已经计算出来,但是整个"if/else if"序列必须以"else"结束。当所有的"if"或者"else if" 后面的布尔表达式的值都为false时,就执行关键字"else"后面的块。 对于if/else if/else格式的语句,每次仅仅执行一个其中部分的语句 。

6.上面的例子中,布尔表达式 (myInt < 0 || myInt == 0)包含了条件OR (||)运算符。

对于常规OR (|)运算符和条件OR (||)运算符来说,只要有运算符两边的子表达式之一为真,整个布尔表达式的值就为真。两个运算符的区别在于:正规OR 运算符(|)每次都对运算符(|)两边的表达式进行计算。而条件运算符OR (||)只有当第一个子表达式的值为false时,才计算第二个子表达式的值。

7.布尔表达式 (myInt > 0 && myInt <= 10)包含了条件运算符AND。

对于常规AND (&) 运算符和条件AND (&&)运算符来说,只有当运算符两边的子表达式的值都为真时,整个布尔表达式的值为真。两种运算符的区别在于:正规AND (&)运算符每次都计算运算符两边的子表达式的值,但是对于条件AND运算符来说,只有当第一个子表达式的值为真时,才计算第二个表达式的值。条件运算符(&& 和 ||) 通常称为运算优化的运算符,因为有时不需要计算整个表达式的值。这样就可以忽略掉不必要的逻辑表达式的计算,可以生成有效的代码。

同if/else if/else 格式的"if"语句类似,"switch"语句的用法如下:

2.清单3-2. 分支选择语句: SwitchSelection.cs

using System;
class SwitchSelect {
public static void Main() {
string myInput;
int myInt;

begin:
Console.Write("Please enter a number between 1 and 3: ");
myInput = Console.ReadLine();
myInt = Int32.Parse(myInput);
// switch with integer type
switch (myInt) {
case 1:
Console.WriteLine("Your number is {0}.", myInt);
break;
case 2:
Console.WriteLine("Your number is {0}.", myInt);
break;
case 3:
Console.WriteLine("Your number is {0}.", myInt);
break;
default:
Console.WriteLine("Your number {0} is not between 1 and 3.", myInt);
}

decide:
Console.Write("Type /"continue/" to go on or /"quit/" to stop: ");
myInput = Console.ReadLine();
// switch with string type
switch (myInput) {
case "continue":
goto begin;
case "quit":
Console.WriteLine("Bye.");
break;
default:
Console.WriteLine("Your input {0} is incorrect.", myInput);
goto decide;
}
}
}

说明

1.清单3-2 演示了多分支选择语句switch的用法。

关键字"switch"后面是switch 表达式。Switch表达式必须是以下类型中的一种: sbyte,byte,short,ushort, int,uint,long,ulong,char,string,或者enum类型。(enum类型将在后面的课程中加以介绍)。在清单3-2的第一个"switch"语句中, switch 表达式计算的是整数类型的数据。

2.在switch表达式后面是个switch 块, 当Switch表达式的值同某一个case后面的常量表达式的值相匹配时,就执行此case后面的语句,直到遇到"break"语句或者"goto"语句为止。每个分支以关键字"case"作为标号,其后为常量表达式,然后是分号(:)。本例子程序中,我们有"case 1:","case 2:"和"case 3:"。

3.你可以在所有的分支选择的后面加上一个"default"分支。

如果没有匹配的常量表达式,就进入default分支,并执行该分支的语句。虽然default标号是可选的,我建议你加上该分支。这将有助于处理一些意外事件 ,使得你的程序能够捕捉和处理不可预见的事件,从而使得程序更加可靠。

4.每个"case"标号必须以"break"语句作为结束。

"break"语句将使得程序退出switch语句,并从switch块后面的一条语句开始执行。对于"default"标号来说,"break"语句是可选的,因为有"break"语句和没有"break"语句,其运行结果是一样的。如果你在switch块中放置了一个"goto"语句,情况就不一样了。

5.清单3-2中的第二个"switch"语句演示了"goto"语句的用法。

"goto"语句可以让程序跳到关键字"goto"后面的标号中去执行。程序执行过程中,如果用户打入"continue", switch语句就匹配case "continue" 中的常量表达式,并执行"goto begin:"语句。程序就会离开"switch"语句,开始执行标号"begin:"后的第一条语句。这是个有效的循环,可以让你多次重复执行同样一段代码。一旦用户打入字符串"quit",循环将会结束。此时,将进入case "quit" 分支。该分支将输出信息"Bye."到控制台上,之后跳出switch语句,再结束程序。

一旦输入的字符串既不是"continue"也不是"quit",就会进入"default:"分支。于是,将会输出一个出错信息到控制台上,之后执行"goto decide:"命令。这就使得程序转跳到"decide:" 标号后面的第一条语句, 该语句执行后,将会询问用户是否愿意continue(继续)还是 quit(退出)。这是个有效的循环。

显然,"goto"语句功能强大,在受控的场合下,"goto"语句是很有用途的。但是,必须指出的是,"goto"如果出现被滥用的趋势,程序的调试和维护将会变得很困难。想象一下,如果程序到处可见goto语句,其流程将会变得难以阅读和理解。下节课中,将介绍在程序中创建循环语句的更好方法。

小结
现在,你已经了解了如何使用"if"语句的各种格式,也了解了如何使用"switch"语句。你也了解了使用"break"语句可以从"switch"语句中推出。最后,你也了解了如何使用"goto"语句跳到程序的另外一个部分。

相关文章:

将博客搬至51CTO

将博客搬至51CTO转载于:https://blog.51cto.com/imace/1540730

腾讯国风AI虚拟人学会作诗书法,背靠开源模型SongNet

5月21日&#xff0c;腾讯AI虚拟人艾灵再秀出新技能&#xff0c;首次展示AI作诗、AI书法等国风才艺&#xff0c;并与青年歌手白举纲跨次元合作&#xff0c;共同演唱国风新歌《百川千仞》。 AI“艾灵”诞生于腾讯AI Lab&#xff0c;来自实验性、探索性技术项目“多模态虚拟人”。…

Windows10安装Mysql5.7.19.0 msi 版本报错

安装环境&#xff1a;Windows10安装版本&#xff1a;MySql 5.7.19.0 msi1.安装5.7.19.0 msi版本Mysql时报如下错误&#xff1a;2.根据日志分析是缺少visual Studio 2013 Redistributable3.下载完成后&#xff0c;安装仍然显示失败&#xff1a;4.在网上下载各种vs测试&#xff0…

C#简单的欢迎程序

本节课通过介绍几个简单的程序&#xff0c;使得你对C#有所入门。本节程要达到如下几个目的&#xff1a; 1.理解一个C#程序的基本结构。2.初步了解"名称空间"的概念。3.初步了解"类"的概念。4.了解"Main"方法所做的工作。5.学会如何读取命令行输入…

知乎联合清华:开放国内最大个性化推荐实际交互数据集

5月21日&#xff0c;知乎联合清华大学对外开放基于知乎的大规模富文本查询和推荐数据集“ZhihuRec”。该数据集包含了知乎上的1亿个行为数据&#xff0c;是目前为止&#xff0c;国内用于个性化推荐的最大的实际交互数据集。 作为一个大型数据集&#xff0c;ZhihuRec具有社交化问…

SQL Server 2014 许可证(五)降级与升级

“版本”一词对应的英文单词有两个&#xff1a;&#xff08;1&#xff09; Version是指不同历史时期发生的产品&#xff0c;或者指产品不同的“代”&#xff0c;例如&#xff0c;SQL Server 2014 版本。&#xff08;2&#xff09; Edition是指在发行同一代产品&#xff08;Vers…

OCM_第十二天课程:Section6 —》数据库性能调优_ 资源管理器/执行计划

注&#xff1a;本文为原著&#xff08;其内容来自 腾科教育培训课堂&#xff09;。阅读本文注意事项如下&#xff1a;1&#xff1a;所有文章的转载请标注本文出处。2&#xff1a;本文非本人不得用于商业用途。违者将承当相应法律责任。3&#xff1a;该系列文章目录列表&#xf…

赠书 | 联邦学习如何在视觉领域应用?

前言&#xff1a;联邦学习是如何应用在视觉领域的&#xff1f;本文将通过一个获得了2020年AAAI人工智能创新应用奖的案例来向大家介绍。本案例是联邦学习在视觉、物联网、安防领域的实际应用&#xff0c;对分散在各地的摄像头数据&#xff0c;通过联邦学习&#xff0c;构建一个…

AME_Oracle自带AME审批链详解AME Standard Handler(概念)

2014-05-30 Created By BaoXinJian Oracle 自带了3大类&#xff0c;13个子类的审批链Action Type, 对应了13个标准的AME Standard Handler 1. 按主管层次审批 absolute job level / chains of authority based on absolute job levelfinal approver only / chains of authorit…

c# 中如何定义和接收消息

在C#中目前我还没有找到发送消息的类成员函数&#xff0c;所以只能采用通过调用WIN 32 API 的 SendMessage() 函数实现。由于 SendMessage的参数中需要得到窗体的句柄(handler) &#xff0c;所以又要调用另一个API FindWindow(), 两者配合使用&#xff0c;达到在不同窗体之间的…

java如何读写json文件

java如何读写json文件 在实际项目开发中&#xff0c;有时会遇到一些全局的配置缓存&#xff0c;最好的做法是配置redis数据库作为数据缓存&#xff0c;而当未有配置redis服务器时&#xff0c;读取静态资源文件&#xff08;如xml、json等&#xff09;也是一种实现方式&#xff0…

C#数组篇讲解

数组是我们经常用到的&#xff0c;我来介绍一下&#xff1a;数组是具有相同类型的一组数据。当访问数组中的数据时&#xff0c;可以通过下标来指明。c#中数组元素可以为任何数据类型&#xff0c;数组下标从0开始&#xff0c;即第一个元素对应的下标为0&#xff0c;以后逐个递增…

Spring AOP详解(转载)所需要的包

上一篇文章中&#xff0c;《Spring Aop详解&#xff08;转载&#xff09;》里的代码都可以运行&#xff0c;只是包比较多&#xff0c;中间缺少了几个相应的包&#xff0c;根据报错&#xff0c;几经百度搜索&#xff0c;终于补全了所有包。 截图如下&#xff1a; 在主测试类里面…

Mendix 披露低代码方法论,解读真实技术趋势

作者 | 宋慧头图 | 下载于视觉中国出品 | AI 科技大本营&#xff08;ID:rgznai100&#xff09;在 2021年初正式宣布进入中国市场之后&#xff0c;Mendix 在近日向媒体重点披露了关于低代码的技术方法论&#xff0c;以及近四个月在中国市场的进展。Mendix 的低代码技术方法论对于…

PHP中foreach详细解读

oreach 语法结构提供了遍历数组的简单方式。foreach 仅能够应用于数组和对象&#xff0c;如果尝试应用于其他数据类型的变量&#xff0c;或者未初始化的变量将发出错误信息。有两种语法&#xff1a; foreach (array_expression as $value) statement foreach (array_expression…

Android ViewPager使用具体解释

这是谷歌官方给我们提供的一个兼容低版本号安卓设备的软件包&#xff0c;里面包囊了仅仅有在安卓3.0以上能够使用的api。而viewpager就是当中之中的一个利用它&#xff0c;我们能够做非常多事情&#xff0c;从最简单的导航&#xff0c;到页面菜单等等。那怎样使用它呢&#xff…

实时音视频的超级风口,开发者的机会在哪里?

2021年初因为Elon Musk“带货”而走红的音频社交App Clubhouse&#xff0c;又以肉眼可见的速度跌落神坛&#xff0c;下载量从2月的960 万/月跌至4月的92万/月。不过在5月&#xff0c;Clubhouse终于推出了安卓版&#xff0c;并表示接下来也会对所有用户开放。 另一边&#xff0c…

高可用集群之分布式文件系统

一、分布式文件系统和单机文件系统的区别&#xff1a;单机文件系统的分区只能被一台主机所挂载&#xff0c;不能同时被多台主机挂载使用&#xff0c;因为单机文件系统是通过系统内核层的锁机制来完成的&#xff0c;所以一个系统上可以有多个进程访问&#xff0c;但只能在一个时…

C#中基本知识

当数据转换到asp.net页面时&#xff0c;大部分都是以文本的形式存在的。有时候为了输出&#xff0c;单单使用显示或者隐式转换都是不行的&#xff0c;就需要本节说到的数据转换。 字符串输出&#xff1a; int intAge21; string strAgeintAge.ToString(); 转换DateTime值时&…

索引系列八--索引特性之有序难优化union

----UNION 是需要排序的drop table t1 purge;create table t1 as select * from dba_objects where object_id is not null;alter table t1 modify OBJECT_ID not null;drop table t2 purge;create table t2 as select * from dba_objects where object_id is not null;alter t…

OpenCV 实战:3 步实现图像降噪

来源 | 小白视觉志 头图 | 下载于视觉中国本文将展示如何通过三个简单的步骤来实现降噪。我们将使用机器学习训练的降噪模型&#xff0c;最好的降噪模型之一。程序可以判断图像是否有噪点吗&#xff1f;这应该是一个很有创意的想法&#xff0c;因为我们的降噪模型不够智能&…

一条数字链路连接的端口无法UP及后续相应故障的排除

故障现象1&#xff1a; 运营商检测线路正常&#xff0c;但是端口无法up。 解决办法&#xff1a; 1、翻转端口 2、将端口速率强制为1000M&#xff0c;全双工#speed 1000 #dup full 端口正常UP。 故障现象2&#xff1a; 线路丢包5%。 解决办法&#xff1a; 1、检查端口光功率&…

华为:HarmonyOS 即将开源!

整理 | 晋兆雨出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;5 月 24 日&#xff0c;在鸿蒙开发者创新大赛颁奖典礼上&#xff0c;华为消费者业务软件部总裁王成录宣布&#xff1a;HarmonyOS 将会开源开放&#xff0c;并在武汉大学等15个学校开展 HarmonyOS 课程。…

C#实现网段扫描

摘要 想必大家对小榕时光等扫描器都非常熟悉了&#xff0c;有没有自己写一个的冲动。最近微软推实施了.NET战略方案&#xff0c;C#是主推语言&#xff0c;你们是否有兴趣用C#来实现对局域网IP地址的扫描&#xff0c;尝试一下自己写的快乐&#xff0c;那么请跟我来。 正文 1.先介…

sbt配置nexus仓库

2019独角兽企业重金招聘Python工程师标准>>> 最近学习Scala&#xff0c;不可避免的要用到sbt。爱折腾的我把原本比较简单的事情搞的复杂了&#xff0c;来来回回搞了好久&#xff0c;记录下来&#xff0c;有同样爱折腾的盆友可以参考下。 sbt在windows下如果是默认安…

C#编程(十二)----------函数

类和结构 类和结构实际上都是创建对象的模板 ,每 个对象都包含数据 ,并 提供了处理和访问数据的方法。 类定义了类的每个对象 (称 为实例 )可 以包含什么数据和功能 。 例如 ,如 果 一 个类表示 一 个顾客 ,就可以定义字段 CustomerID、 FirstName、 LastNane和 Address,以 包含…

Linux很实用的命令查找软件安装目录

#whereis php #which php #php -v 查看版本号 差异自己去体会

Python 库突发 PyPI 危机!

‍‍整理 | 梦依丹出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;据 BleepingComputer 报道&#xff0c;Python 官方软件包存储库 PyPI 遭受了黑客攻击&#xff0c;攻击者通过注入垃圾邮件包的形式发起了洪水攻击。这些垃圾邮件及软件包用电影、电视节目名称命名&…

scala入门之代码补全

为什么80%的码农都做不了架构师&#xff1f;>>> 在scala的shell命令行中&#xff0c;我们可以使用像Linux那样的代码补全功能。Linux中是使用Tab键补全&#xff0c;scala的shell命令行也是使用这个键。例如&#xff0c;我们在“ssss”这个字符串上调用toUpperCase方…

pycharm第一个Python程序

print ("Hello word!"); 这是Python3.xx的语法&#xff01;