`
varsoft
  • 浏览: 2443930 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

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"语句跳到程序的另外一个部分。
分享到:
评论

相关推荐

    C#控制语句

    C#控制语句,循环语句等。C#控制语句,循环语句等。C#控制语句,循环语句等。C#控制语句,循环语句等。C#控制语句,循环语句等。

    第三章《C#流程控制语句-循环结构》.rar

    第三章《C#流程控制语句-循环结构》.rar

    C#语句控制

    有关C#的语句控制,C#顺序,条件,循环语句的语法。

    C#编程自学之流程控制语句

    本文主要介绍流程控制语句,主要包括条件控制语句和循环控制语句的使用。读者学习本文后,应该熟练掌握C#控制语句的主要用途和使用方法,了解这些控制语句的区别。

    alibaba#p3c#控制语句1

    【推荐】除常用方法(如getXxx/isXxx)等外,不要在条件判断中执行其它复杂的语句,将复杂逻辑判断的结果赋值给一个有意义的布尔变量名,以提高可读性。说明:

    第4章 C#控制语句.ppt

    C#入门ppt,一共16章

    C#教学课件:第3章 流程控制语句.ppt

    C#教学课件:第3章 流程控制语句.ppt

    C#教学课件:第三章 流程控制语句.ppt

    C#教学课件:第三章 流程控制语句.ppt

    c#上位机串口通讯控制stm32步进电机

    本历程用的是VS2012程序编写,用c#编程,本包为工程压缩包,非exe执行文件,历程实现串口实时控制stm32控制步进电机正转翻转,转动速度的控制,还有可固定角度转动,每一句的程序后均有解释语句,适合c#串口通信入门...

    C#编程从入门到精通

    控制语句——选择;控制语句——循环;方法;名称空间;类的入门;类的继承;多态性;属性;索引指示器。第二部分是本书的重点,精选了大量C#实用例程来让读者更深入地理解C#,同时这些C#例程都是经过专业程序员测试...

    100个C# 精选的实例 (C#时尚百例 随书光盘 )

    本书的主要内容有:C#初级编程、Windows程序设计、控制语句、网络编程、数据库编程、进程和线程、高级CGI、游戏和工具。在实例中,除了介绍Visual C#主要的知识点外,还重点介绍了Visual C#在网络编程、数据库编程和...

    C#中foreach语句使用break暂停遍历的方法

    主要介绍了C#中foreach语句使用break暂停遍历的方法,涉及C#中break语句跳出foreach循环的使用技巧,非常具有实用价值,是C#初学者必须掌握的重要技巧,需要的朋友可以参考下

    C#学习路线图:C#必须知道的300个问题 高清版[带完整书签]

    本书内容包括C#语言及其开发环境、掌握C#语言基础、流程控制语句、字符与字符串、数组和集合、C#面向对象程序设计、异常处理和程序调试、Windows窗体、Windows应用程序常用控件、Windows应用程序高级控件、c撑面向...

    C# 外部程序控制

    程序演示了C#程序如何启动一个外部程序,并且将其镶嵌在自己的程序...包含了SetWindowLong,ShowWindow,SendMessage,SetParent,MoveWindow 5个API函数的用法,以及C#中Process的用法,每条语句具有详细的说明解释

    C#常见错误--控制结构.

    C#常见错误--控制结构,c#中的控制语句中的常见的有所出路的地方。

    C#完整习题集.pdf

    C#习题集 含答案 期末复习 共10个章节 包含选择题、填空题、程序题、问答题 简单的C#程序设计 C#程序设计基础 C#控制语句 数组和集合 面向对象程序设计 继承和接口设计

    C#条件语句、循环语句(if、while)

    if … else …语句的语法:if (布尔表达式)执行操作的语句或if (布尔表达式)执行操作的语句else执行操作的语句switch 语句的格式:switch(控制表达式){case 常量表达式1:语句组1;[break;]case 常量表达式2:...

    C#从入门到精通-ppt

    本书既为入门者提供了简单教程,同时也为高级编程人员提供了大量的例程。由3部分组成: ...控制语句——选择;控制语句——循环;方法;名称空间;类的入门;类的继承;多态性;属性;索引指示器。

    [详细完整版]C#程序设计.pdf

    掌握 C#语法、数据类型、流程控制语句。 3.掌握面向对象的编程方法。 4.熟练应用 C#进行 Windows 窗体界面设计。 5.掌握 AD0.NET 与 SQL Server 数据库编程方法。 6.熟练应用 C#进行二维图形图像处理。 7....

    C#编程兵书(完整扫描版 )pdf格式 电子书

    内容包括语言的发展、环境配置、基本语法、流程控制语句、字符串处理、数组、图形界面设计、输入/输出、处理异常和连接数据库。本书运用大量示例,让读者在实战中体会编程的乐趣。本书适合想从事软件开发的入门人员...

Global site tag (gtag.js) - Google Analytics