C_教程自学课堂.doc_第1页
C_教程自学课堂.doc_第2页
C_教程自学课堂.doc_第3页
C_教程自学课堂.doc_第4页
C_教程自学课堂.doc_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

进度C教程第一课:简单的欢迎程序在本文开始写作的时候,虽然商用C# 编译器尚未推出, 但你可以下载微软的.NET Frameworks SDK Beta 1.本节课通过介绍几个简单的程序,使得你对C#有所入门。本节程要达到如下几个目的:1.理解一个C#程序的基本结构。2.初步了解名称空间的概念。3.初步了解类的概念。4.了解Main方法所做的工作。5.学会如何读取命令行输入信息。6.学会使用控制台输入/输出 (I/O)语句。1.清单1-1. 一个简单的欢迎程序Welcome.cs/ Namespace Declarationusing System;/ Program start classclass WelcomeCSS / Main begins program execution.public static void Main() / Write to consoleConsole.WriteLine(Welcome to the C# Station Tutorial!);说明1.清单1-1中的程序包括四个基本元素:名称空间的声明,类,Main方法和语句。2.本例中对名称空间的声明,表明正在使用System这个名称空间。名称空间内包含了一组可以被C#程序调用的代码。有了using System;这个声明,就表明程序可以引用该System名称空间内的代码,而无需在每个引用的前面加上System。关于这一点,我将在后面专门介绍名称空间的课程中详细介绍。3.类class WelcomeCSS包含了程序所要用到的数据,和所要执行的方法的定义。同诸如接口和结构这样的元素类似,类在程序中是用来描述对象的,这些元素都将会在后续课程中详细介绍。本例中的类不包含数据,只包含一个方法。该方法定义了该类的行为(或者称为该类所能做的事情)。4.程序运行时,WelcomeCSS类中的该方法表明了该类所要完成的事情。方法名Main作为保留字,作为程序的起点。Main前面是个名为static的修饰符。static修饰符表明该方法仅仅在该特定的类中工作,而不是在在该类的实例中工作。这是必需的,因为一旦程序启动后,并不存在对象的实例。类,对象和实例的具体用法将会在后面的课程中覆盖到。每个方法必须有个返回值类型。本例中,返回值类型是void,它表明Main函数没有返回值。每个方法名的后面也都跟着个参数表,参数表包含有零个或者多个参数并用括号括起来。为了简单起见,没有在Main后面添加参数。后面的课程中,将介绍Main方法所允许采用的参数类型。5.Main方法通过Console.WriteLine(.) 语句表明其行为。Console 是System 名称空间中的类。WriteLine(.)是Console 类中的方法。我们使用.这个句点操作符来标记程序中的从属元素。注意到,我们也可以这样来书写:System.Console.WriteLine(.),这样的书写格式是很有趣的,它是根据namespace.class.method 的格式进行书写的。如果在程序的一开始,没有采用using System的声明,那么就必须严格遵守System.Console.WriteLine(.)这样的书写格式。该语句的执行结果是在控制台控制台上输出字符串Welcome to the C# Station Tutorial! 。6.注释是由/标出的。例子中的这些注释都是单行注释,表明从该注释符号的开始处到该行结束处,都是注释部分。如果你的注释要跨越若干行,即多行注释,可以以符号/*开始,以符号*/结束,其中所包含的全部是注释。你也可以在多行注释符号中包含单行注释。但是,不能在单行注释符号后面放上多行注释符号。程序编译时,将忽略掉注释部分。注释的目的是为了用简单的英语给程序所要完成的工作加上注解。7.所有语句都以分号;结束。类和方法以开始,以结束。任何位于和之间的语句定义为块。块定义了程序元素的活动范围 (或者称为生命期和可见性),这些概念将在后面的课程中加以介绍。8.可以编写出能够接受命令行输入信息的程序。命令行输入信息的集合是在Main方法中进行处理的。清单1-2中的程序,可以从命令行中接受输入一个名字,之后在控制台上显示出来。2.清单1-2. 读取命令行输入信息的程序NamedWelcome.cs/ Namespace Declarationusing System;/ Program start classclass NamedWelcome / Main begins program execution.public static void Main(string args) / Write to consoleConsole.WriteLine(Hello, 0!, args0);Console.WriteLine(Welcome to the C# Station Tutorial!);说明1.记住,要把你的名字添加到命令行中。例如,在命令行中打入NamedWelcome Joe。如果不这样做,程序就会崩溃,在后面的课程中,将介绍如何检测这种情况,以及如何避免这种情况的出现。2.在清单1-2中,在Main方法的参数表中有个入口。参数名是args。 在程序的后面部分就要引用该参数。string是参数args的类型。string类型用于存放字符。这些字符可以是一个单词,也可以是多个单词。方括号表示数组,args参数由命令行上的若干个单词构成。3.在Main方法的语句中,多了一条Console.WriteLine(.)语句。该语句中的参数表同以往的写法不同,其中有个格式字符串0 参数。 格式串中的第一个参数从数字0开始,第二个参数从数字1开始,依此类推。 0 参数意味着引号后面的参数值将会输出到该位置。现在让我们来看看引号后面的参数。4.args0参数,它指向args数组中的第一个字符串。数组中的第一个元素是args0, 第二个元素是args1,依此类推。例如,如果我在命令行中写上NamedWelcome Joe,args0的值就为Joe.让我们回到在格式字符串中嵌入的0 参数吧,因为args0是格式串后面的第一个参数, 一旦执行该命令时,args0的值Joe就会替换掉格式串中的0。一旦执行命令:NamedWelcome Joe,输出结果就会为:Hello, Joe!Welcome to the C# Station Tutorial!通过控制台也可以把输入信息提供给程序。清单1-3演示了交互式处理用户输入的信息的方法。3.清单1-3. 交互式处理输入信息的程序 InteractiveWelcome.cs/ Namespace Declarationusing System;/ Program start classclass NamedWelcome / Main begins program execution.public static void Main() / Write to console/get inputConsole.Write(What is your name?: );Console.Write(Hello, 0! , Console.ReadLine();Console.WriteLine(Welcome to the C# Station Tutorial!);说明这一次,Main方法没有用到任何参数,但现在程序中有了三条语句,前面两条语句不同于第三条语句,它们是:Console.Write(.)而不是 Console.WriteLine(.)。区别是:Console.Write(.)语句把信息输出到控制台,之后光标停留在同一行,而Console.WriteLine(.)把信息输出,之后换行。第一条语句仅仅输出What is your name?: 到控制台。第二条语句要等到其参数被适当地处理之后,才会输出信息。 格式串后面的第一个参数是:Console.ReadLine()。这就使得程序要等待用户在控制台输入信息,输入信息以回车或者换行结束。该方法的返回值替换了格式串中的0参数,并输出到控制台上。最后一个语句也用来输出信息到控制台,这一点我们在前面已经介绍过。一旦运行了程序InteractiveWelcome,其输出结果为:What is your Name? Hello, ! Welcome to the C# Station Tutorial!小结到现在为止,你已经了解了C#程序的基本结构,名称空间和类。你还了解到Main方法是C# 程序的入口,并学会了如何捕捉命令行的输入信息,以及如何进行交互式的I/O操作。C教程第二课:表达式,类型和变量右逻辑与&左逻辑异或左逻辑或|左条件与&左条件或|左条件?:右赋值等= *= /= %= += -= = &= = |=右左结合意味着运算符是从左到右进行运算的。右结合意味着所有的运算是从右到左进行的,如赋值运算符,要等到其右边的计算出来之后,才把结果放到左边的变量中。2.清单 1-2. 单目运算符: Unary.csusing System;class Unary public static void Main() int unary = 0;int preIncrement;int preDecrement;int postIncrement;int postDecrement;int positive;int negative;sbyte bitNot;bool logNot;preIncrement = +unary;Console.WriteLine(Pre-Increment: 0, preIncrement);preDecrement = -unary;Console.WriteLine(Pre-Decrement: 0, preDecrement);postDecrement = unary-;Console.WriteLine(Post-Decrement: 0, postDecrement);postIncrement = unary+;Console.WriteLine(Post-Increment: 0, postIncrement);Console.WriteLine(Final Value of Unary: 0, unary);positive = -postIncrement;Console.WriteLine(Positive: 0, positive);negative = +postIncrement;Console.WriteLine(Negative: 0, negative);bitNot = 0;bitNot = (sbyte)(bitNot);Console.WriteLine(Bitwise Not: 0, bitNot);logNot = false;logNot = !logNot;Console.WriteLine(Logical Not: 0, logNot);说明1.当计算表达式的时候,在后置增一和后置减一运算符进行运算时,先返回其值,再进行增一或者减一运算。当使用前置加号和减号运算符进行运算时,是先进行增一或者减一的运算,然后再返回其结果值。2.在清单1-2中, 变量unary初始化为0,进行+x 运算时,unary的值加1,再把其值1赋给preIncrement变量。在进行-x运算时,先把unary的值减到0, 再把值0赋给preDecrement变量。3.进行x-运算时,先把unary的值0赋给postDecrement 变量,之后再把unary减到-1。进行x+运算时,先把unary的值-1赋给postIncrement变量,之后再对unary加1,使得unary变量现在的值为0。4.变量bitNot初始值为0,进行按位取反运算,本例中,数0表示为二进制00000000,按位取反之后变为-1,其二进制表示为11111111。5.了解一下表达式(sbyte)(bitNot), 任何对类型sbyte, byte, short 或者 ushort 类型数据的运算,返回结果都是整数。要把值赋给bitNot变量,我们必须使用cast (类型)运算符(强制类型转换),其中Type表示你希望转换成的类型(本例中为sbyte)。 Cast运算符把大范围类型的数据转换为小范围类型的数据时,须特别谨慎,因为此时有丢失数据的危险。一般来说,把小类型的数据赋给大类型变量,并没有问题, 因为大范围数据类型的变量具有足够的空间存放小类型数据。 注意在signed 和unsigned类型之间进行Cast运算时,也存在此类危险。 许多初级程序设计教程对变量的位表示作出了很好的讲解,同时也介绍了直接进行Cast运算的危险。逻辑非(!)运算符可以处理布尔变量值。本例中,logNot变量从false 变为true。上述程序的输出结果如下:Pre-Increment: 1Pre-Decrement 0Post-Decrement: 0Post-Increment -1Final Value of Unary: 0Positive: 1Netative: -1Bitwise Not: -1Logical Not: True3.清单 1-3. 二元运算符 Binary.csusing System;class Binary public static void Main() int x, y, result;float floatResult;x = 7;y = 5;result = x+y;Console.WriteLine(x+y: 0, result);result = x-y;Console.WriteLine(x-y: 0, result);result = x*y;Console.WriteLine(x*y: 0, result);result = x/y;Console.WriteLine(x/y: 0, result);floatResult = (float)x/(float)y;Console.WriteLine(x/y: 0, floatResult);result = x%y;Console.WriteLine(x%y: 0, result);result += x;Console.WriteLine(result+=x: 0, result);说明清单1-3 演示了二元操作符的几个例子。加法(+),减法(-),乘法(*)和除法(/)的运算结果,就是我们通常进行的的四则运算的结果。因为floatResult变量是浮点运算类型,所以整型变量x和y 被强制转换成浮点类型来计算FloatResult。这里有个求余数的运算符,两个操作数相除,返回余数。最后一条语句给出了另外一种赋值形式,这里用了(+=)运算符.无论什么时候你使用(+=)运算符,那么这个二进制运算符就应该在运算符左右两边都进行运算,然后把值赋给左边的参数。本语句相当于result = result + x,并返回同样的值。前面的课程中,你看到的使用次数较多的一种类型是string (字符串)类型。string类型是由包含在引号内的Unicode编码的字符构成。例如This is a string.另外一种数据类型是数组。数组可以看成是同种类型的元素构成的集合。当声明数组时,你要指定类型名,数组名,维数和数组大小。4.清单 1-4. Array Operations: Array.csusing System;class Array public static void Main() int myInts = 5, 10, 15 ;bool myBools = new bool2;myBools0 = new bool2;myBools1 = new bool1;double, myDoubles = new double2, 2;string myStrings = new string3;Console.WriteLine(myInts0: 0, myInts1: 1, myInts2: 2, myInts0, myInts1, myInts2);myBools00 = true;myBools01 = false;myBools10 = true;Console.WriteLine(myBools00: 0, myBools10: 1, myBools00, myBools10);myDoubles0, 0 = 3.147;myDoubles0, 1 = 7.157;myDoubles1, 1 = 2.117;myDoubles1, 0 = 56.00138917;Console.WriteLine(myDoubles0, 0: 0, myDoubles1, 0: 1, myDoubles0, 0, myDoubles1, 0);myStrings0 = Joe;myStrings1 = Matt;myStrings2 = Robert;Console.WriteLine(myStrings0: 0, myStrings1: 1, myStrings2: 2, myStrings0, myStrings1, myStrings2);说明清单 1-4 演示了数组的各种不同实现方法。第一个例子是myInts数组,它在声明的同时进行了初始化。接着是个二维数组,可以把它理解为数组的数组。我们需要使用new运算符来实例化初始数组的大小,之后,再对每个子数组使用new运算符。第三个例子是个二维数组。数组可以是多维的,每一维可以通过逗号隔开,也必须用new运算符进行实例化。最后定义了一个一维的字符串数组。每种情况下,对于数据元素的访问可以通过引用元素的位置(下标)来进行。数组的大小可以是任何整型值。其下标从0开始。小结到现在为止,你已经了解了C# 的变量,简单数据类型,数组和字符串。我们还学习了如何用C#的运算符构成表达式。C教程第三课:选择控制语句本节课将介绍如何使用C#选择控制语句,第三课将达到如下几个目的:1.学会if语句的用法。2.学会switch语句的用法。3.学会在switch语句中如何使用break语句。4.理解goto语句的正确用法。在前面几节课中,你所看到的程序都是顺序执行的。你无法控制输入语句,你所能做的就是跟着程序执行直到终止。本节课中,将介绍基于条件进行判断,从而选择进入相应的逻辑分支中去执行。我们所介绍的第一个选择语句是if语句,它有三种基本形式:单条选择, 如果/否则,以及多情形选择。1.清单3-1. IF语句的格式:IfSelection.csusing 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 bracketsif (myInt 0) Console.WriteLine(Your number 0 is greater than zero., myInt);/ Single Decision and Action without bracketsif (myInt 0)Console.WriteLine(Your number 0 is less than zero., myInt);/ Either/Or Decisionif (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 Decisionif (myInt 0 & myInt 10 & 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 = 10)包含了条件运算符AND。对于常规AND (&) 运算符和条件AND (&)运算符来说,只有当运算符两边的子表达式的值都为真时,整个布尔表达式的值为真。两种运算符的区别在于:正规AND (&)运算符每次都计算运算符两边的子表达式的值,但是对于条件AND运算符来说,只有当第一个子表达式的值为真时,才计算第二个表达式的值。条件运算符(& 和 |) 通常称为运算优化的运算符,因为有时不需要计算整个表达式的值。这样就可以忽略掉不必要的逻辑表达式的计算,可以生成有效的代码。同if/else if/else 格式的if语句类似,switch语句的用法如下:2.清单3-2. 分支选择语句: SwitchSelection.csusing 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 typeswitch (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 typeswitch (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#控制语句中的循环语句,本课目的如下:1.学会while循环的用法。2.学会do 循环的用法。3.学会for 循环的用法。4.学会foreach循环的用法。5.进一步了解break语句的用法。6.如何使用continue语句。在C#中,使用goto语句并不是一个最佳的建立循环的方法。本节课将介绍建立循环的常用方法。第一个要介绍的语句是while循环语句1.清单 4-1. While循环:While loop.csusing System;class Whileloop public static void Main() int myInt = 0;while (myInt 10) Console.Write(0 , myInt);myInt+;Console.WriteLine();说明1.清单 4-1演示了一个简单的while 循环。以关键字while开始,后面是个布尔表达式。所有的控制语句都使用了布尔表达式。这就意味着表达式必须计算出true 或者false值。本例中,我们将检查myInt变量,看看它是否小于10。 因为myInt已经初始化为0,第一次计算时,该布尔表达式将返回true值。一旦布尔表达式的值为true,将执行该布尔表达式后面块中的语句。2.在while块中,我们把数字和空格输出到控制台中,之后,对 myInt进行加1运算。一旦执行了while块中的语句之后,再次计算布尔表达式的值,这种情况将一直循环下去,直到该布尔表达式的值为false为止。 一旦布尔表达式的值为false, 程序将从while 块之后的第一条语句开始执行。在本例中,我们把数字0到9输出到控制台中,之后退出while块,再输出一个新行到控制台。同 while循环类似的是do 循环语句。2.清单 4-2. Do 循环: Do loop.csusing System;class Doloop public static void Main() string myChoice;do / Print A MenuConsole.WriteLine(My Address Bookn);Console.WriteLine(A - Add New Address);Console.WriteLine(D - Delete Address);Console.WriteLine(M - Modify Address);Console.WriteLine(V - View Addresses);Console.WriteLine(Q - Quitn);Console.WriteLine(Choice (A,D,M,V,or Q): );/ Retrieve the users choicemyChoice = Console.ReadLine();/ Make a decision based on the users choiceswitch(myChoice) case A:case a:Console.WriteLine(You wish to add an address.);break;case D:case d:Console.WriteLine(You wish to delete an address.);break;case M:case m:Console.WriteLine(You wish to modify an address.);break;case V:case v:Console.WriteLine(You wish to view the address list.);break;case Q:case q:Console.WriteLine(Bye.);break;default:Console.WriteLine(0 is not a valid choice, myChoice);/ Pause to allow the user to see the resultsConsole.Write(Press any key to continue.);Console.ReadLine();Console.WriteLine(); while (myChoice != Q & myChoice != q); / Keep going until the user wants to quit说明1.清单 4-2 演示了do循环的例子。 do 循环的格式是: do while ();其中的语句可以是任何合法的C#语句,布尔表达式同以前的规定一样,其返回值要么为true,要么为false。2.如果你打算输出清单4-2 中的信息或者菜单,之后再读取用户的输入,那么就使用do 格式的循环而不要使用while 格式的循环语句。因为在本例中,布尔表达式的值是在循环结束处进行计算的, do 循环可以保证:循环体中的语句至少执行一次。与此相对应的是:while 循环一开始时,计算布尔表达式的值,while 循环不能保证循环体中的语句能够至少执行一次。3.让我们来回顾一下清单 4-2中的内容。在Main()方法中,我们定义了变量 myChoice为字符串类型。之后,输出一些信息到控制台,即输出一个可让用户进行选择的菜单。我们必须要得到用户的输入,即Console.ReadLine()方法所返回的值,该值存放在myChoice变量中。我们必须先得到用户的输入,之后再处理。要完成这件事,一个有效的方法是就使用 switch语句。注意到:为了获得同样的功能,我们既匹配了小写字母,也匹配了大写字母。另外一点是:我们使用了 default: case,这是个良好的编程作风。3.清单 4-3. For 循环: For loop.csusing System;class Forloop public static void Main() for (int i=0; i 20; i+) if (i = 10)break;if (i % 2 = 0)continue;Console.Write(0 , i);Console.WriteLine();说明1.清单 4-3 演示了for 循环的用法。当你能够精确地知道循环的次数时, For 循环语句就派上了用场。本程序同清单 4-1中while 循环程序的运行结果一样。 for 循环中,括号中内容由三个由分号隔开的部分: (; ; )组成2.初始化表是个由逗号隔开的表达式,在for 循环的整个周期中,这些表达式仅仅计算一次。计算是在一开始进行的,并且在循环语句的执行之前进行。正如在清单 4-3所见,通常初始化表是先初始化一个作为计数器的整型变量。3.一旦进行初始化后, for 循环就进入第二部分:布尔表达式的计算。 这里的布尔表达式可以写得很复杂,但是结果只能是true或者false。布尔表达式通常用来验证计数器变量的状态。4.一旦布尔表达式的值为true时,就会执行for 循环大括号中的语句。通常情况下,这些语句从左大括号开始,不中断地一直执行到右大括号。但在清单4-3中,有几个例外,几个if语句改变了程序的流程。第一个if语句检查i是否等于10,这里使用了break语句,可在此处跳出循环,转入 for块后面的第一条语句的执行。第二条if语句使用了求余运算符,看看i是否能够被2整除,如果余数等于0,就执行 continue语句。控制将跳过循环体中余下的语句,转入下一轮新的循环。你需要在块中正确地组织好语句,一旦满足有关条件,就执行相应的语句。5.一旦程序流程遇到continue语句,或者遇到块的结尾处的右括号, 就转入for 循环括号中的第三项:p

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论