《C#教学课件:第3章 流程控制语句》由会员分享,可在线阅读,更多相关《C#教学课件:第3章 流程控制语句(48页珍藏版)》请在金锄头文库上搜索。
1、第3章流程控制语句1内容简介 和Java、C+、Pascal等其他编程语言一样,C#语言也是由各种各样的语句有序构建而成的,它提供了控制程序步骤的基本手段。如果没有流程控制语句,整个程序将按照线性的顺序来执行,不能根据用户的输入条件来决定执行的顺序。本章将详细介绍C#语言中的流程控制语句,包括基本语句、选择语句、循环语句和跳转语句等内容。 学习本章后,用户能够熟练掌握流程控制语句的语法形式和使用规则,为后面的程序开发奠定基础。2本章学习要点 熟悉空语句、语句块、声明语句和表达式语句的作用 掌握if语句、if else语句和嵌套if语句的使用方法 掌握for循环语句的使用方法 掌握while循环
2、语句的使用方法 掌握do while语句的使用方法 掌握foreach语句的使用方法 熟悉while语句和do while语句的异同点 熟练使用多重语句输出各种图形 了解各种跳转语句的作用33.1.33.1.43.1基本语句3.1.23.1.1 C#语句中包含多种常用的基本语句,如空语句、声明语句和语句块等。本节详细介绍这些语句的使用方法。空语句语句块声明语句表达式语句43.1.1空语句 只有分号“;”组成的语句就称为空语句,它在应用程序中什么都不做,且不包含任何实际性的语句。如果要求有语句的上下文中不执行任何操作时,使用空语句。 上述代码中无论isCheck的值是什么,while语句都不执行
3、任何操作。class Program static bool isCheck = false; public static void Test() while (isCheck) ; public static void Main(string args) Test(); Console.ReadLine(); 53.1.2语句块 语句块中可以包含多个语句,一个语句块可以看作是多个语句的组合。它的语法形式如下所示:statement-list/语句列表 上面语法中statement-list表示一个或多个语句组成的列表,如果不存在statement-list,则称该块是空的。 语句块的执行规则
4、如下:l如果语句块的内容为空,控制转到块的结束点l如果语句块的内容不为空,控制转到语句列表。l当控制到达语句列表的结束点时,控制转到块的结束点63.1.2语句块例:例:创建一个语句块,该语句块包含4条语句。第一条语句声明3个int类型的变量;中间两条语句分别为变量firstnum和secondnum赋值。最后将这两个变量的值相乘,结果保存到total变量中。 intfirstnum,secondnum,total;firstnum=100;secondnum=10;total=firstnum*secondnum;73.1.3声明语句 声明语句主要用来声明常量或者变量。static strin
5、g name = Jack“; /声明字符型的静态变量double money = 300.23; /声明double类型的实例变量const double Radius = 3.14;/声明double类型的常量const int Size = 100;/声明整型的常量 例如下面语句演示了常量和变量的声明:83.1.4表达式语句 表达式语句是C#语言中最常见的语句之一。实际上它的值只是一个中间结果,常用的表达式语句主要包括7类,如下所示:l赋值表达式 如“num=2002”l创建对象表达式 如“object obj = new object()”l前缀递增表达式 如“+num”l前缀递减表达
6、式 如“-num”l后缀递增表达式 如“num+”l后缀递减表达式 如“num-”l调用表达式 如“count()”93.2.33.2.43.2选择语句3.2.23.2.1 选择语句是指根据表达式的值从若干个给定的语句中选择一个来执行的语句。 本节介绍常用的判断语句,如if语句、if else语句和switch语句等。if语句ifelse语句ifelseifelse语句嵌套if语句3.2.5switch语句103.2.1if语句 if语句是使用最多的条件分支结构,它属于选择语句,也可以称为条件语句。根据布尔表达式的值判断是否执行语句块的内容。if ( 表达式 ) 语句块其中表达式可以是任何一种
7、逻辑表达式。if语句的执行流程如图所示。11/ 如果只有一条语句if ( 表达式 ) 语句;/ 如果只有一条语句if ( 表达式 ) 语句;Console.Write(请输入用户名:);string userName = Console.ReadLine();Console.Write(请输入用户密码:);string userPass = Console.ReadLine();if (userName.Contains() Console.WriteLine(对不起,您的用户名包含非法字符!);if (string.IsNullOrEmpty(userPass) | userPass.Len
8、gth 4 & dt.Hour 9) Console.WriteLine(早晨好!); else Console.WriteLine(努力工作吧!); Console.ReadLine(); 143.2.3if-elseif-else 无论是if语句还是if else语句,它们给应用程序只提供了一个分支。但是,C#中的应用程序分支可以有多个,这时候可以使用if else if else语句,它由多个if else语句组合而成。if (if (表达式表达式1)1) 语句块语句块1 1else if(else if(表达式表达式2)2) 语句块语句块2 2 else if (else if (表达
9、式表达式n)n) 语句块语句块n n elseelse 语句块语句块n+1n+1 l首先判断表达式1的值,如果它的值为true则执行语句块1;否则依次判断else if中表达式的值。l当某个条件表达式的值为true时则执行该分支相应的语句块。l如果所有分支的值都为false则执行语句块n+1,然后继续执行程序后面的代码。1516public static void Main(string args) Console.WriteLine(请选择你的身份:); Console.WriteLine(1、普通管理员 2、超级管理员 3、游客 ); int i = int.Parse(Console.R
10、eadLine(); if (i = 1) Console.WriteLine(你好,普通管理员可以查看系统全部信息。); else if (i = 2) Console.WriteLine(你好,超级用户可以查看和修改、删除。); else if (i = 3) Console.WriteLine(你好,游客只能查看自己的信息。请注册!); else Console.WriteLine(选择的编号错误); Console.ReadLine(); 17173.2.4嵌套if语句嵌套if语句就是指在if语句或else语句中,嵌套了多个if else语句。if语句、if else语句和if els
11、e if else语句之间可以相互嵌套,并且可以嵌套多个if语句。if (表达式1) if (表达式2) 语句块1 else 语句块2 else if (表达式3) 语句块3 else 语句块4 183.2.4嵌套if语句 上述语法中if else语句又分别嵌套了一个if else语句。在执行嵌套if语句时程序会首先执行外层的if else语句,然后再执行内层的if else语句。嵌套if语句的执行流程如图所示。193.2.5switch语句 switch语句提供多路分支。可以把它看作是if else语句的另一种实现方式。如果需要比较有很多值的变量,可以使用switch语句。 switch (
12、表达式) case 常量1: 语句块1; break; case 常量2: 语句块2; break; . case 常量n: 语句块n; break; default: 语句块n+1; break;l表达式将和每个case子句的值进行比较,如果匹配成功则执行相关语句块。l如果都不匹配则执行default中的语句块。l每个语句块以break语句结尾,否则编译错误。l可以没有default语句块。203.2.5switch语句21 public static void Main(string args) Console.Write(请输入出生的月、日(MMDD):); int monthday =
13、 Convert.ToInt32(Console.ReadLine(); int month = monthday / 100; int day = monthday % 100; string xingzuo=; switch (month) case 1: xingzuo = day 21 ? 魔蝎座 : 水瓶座; break; case 2: xingzuo= day 20 ? 水瓶座:双鱼座; break; Console.WriteLine(xingzuo); Console.ReadLine(); 例:例:输入出生的月、日,计算出星座22下面程序执行时,若输入2,则输出结果是? i
14、nt i = Convert.ToInt32(Console.ReadLine(); switch (i+) case 1: Console.WriteLine(1:+i); break; case 2: Console.WriteLine(2: + i); break; 23找错:switch i*3 case 1 Console.WriteLine(1:+i); case 2 Console.WriteLine(2: + i); ( ) : break; : break; 243.3.33.3.43.3循环语句3.3.23.3.1 循环语句也叫迭代语句,它可以重复执行嵌入语句的语句块。被重
15、复执行的语句称之为循环体,能否继续重复执行取决于循环条件。本节就详细介绍C#中的4种循环语句。for语句while语句dowhile语句foreach语句253.3.1for语句 for循环语句通常用在确定循环次数的情况下,语法格式如下: 上述语法格式中程序首先执行执行初始化表达式的代码,然后判断判断是否满足条件表达式,如果满足条件则执行语句块的代码。执行语句块完毕后执行执行迭代表达式的代码,如果条件表达式仍然成立则继续执行语句块的代码,再重新执行迭代表达式。重复上面的步骤直到不满足条件表达式为止。for (初始化表达式; 条件表达式; 迭代表达式) 语句块26例:例:计算1100所有整数的和
16、、所有奇数的和、所有偶数的和。 public static void Main(string args) int totalSum=0,eventSum = 0,oddSum = 0; for (int i = 1; i = 100;i+ ) totalSum += i; if (i % 2 = 0) eventSum += i; else oddSum += i; Console.WriteLine(“总和0,奇数和1,偶数和2,totalSum,oddSum,eventSum); Console.ReadLine(); 27长语句可书写成多行 Console.WriteLine(“总和0,
17、奇数和1,偶和2,totalSum,oddSum,eventSum); Console . WriteLine ( “总和0, 奇数和1, 偶和2“ , totalSum , oddSum ,eventSum);28for语句可以单独使用,也可以嵌套使用,构成多重循环。例:例:根据输入的行数和列数,绘制长方形。 public static void Main(string args) Console.WriteLine(请分别输入行数、列数:); int row = Convert.ToInt32(Console.ReadLine(); int col = Convert.ToInt32(Co
18、nsole.ReadLine(); for ( int i = 1; i = row; i+ ) for (int j = 1; j = col; j+) Console.Write(*); Console.WriteLine(); Console.ReadLine(); 293.3.2while语句 for语句是用户确定循环次数时使用的循环语句。如果不知道程序要循环的次数,怎么办?在C#中有另外一种循环:while循环。while循环语句能够按照不同的条件执行一个嵌入语句零次或多次。语法如下: 在while语句的语法中首先判断表达式是否满足条件,如果满足条件则执行语句块的内容。否则直接执行w
19、hile语句后面的内容。while (条件表达式) 语句块30 public static void Main(string args) int i = 1 , sum =0; while (i= 0); Console.ReadLine(); 例:例:猜数游戏,电脑生成03的随机数。与输入数做比较。若输入负数结束。33Random的用法的用法int Next() ; 返回大于等于零且小于Int32.MaxValue 的 32 位带符号整数。 int Next( int maxValue ); 返回大于等于零且小于 maxValue 的 32 位带符号整数。 int Next( int min
20、Value, int maxValue ) ; 返回一个大于等于 minValue 且小于 maxValue 的 32 位带符号整数。34 int k; Random rnd = new Random(); k = rnd.Next(); /返回非负随机数,整数 k = rnd.Next(20); / 返回非负随机数,整数,0= k 20 k = rnd.Next(-11, 3); /返回两值之间的随机整数, -11= k 33.3.4foreach语句 foreach语句是一个特殊的for循环语句,它用于枚举一个集合元素,迭代出集合中的每一项,但是不能修改集合中的每一项(即:循环体内不能修改
21、item的值)。foreach (type item in collection) 语句块35public static void Main() string numbers = new string 4one,two,three,four; foreach(string s in numbers) foreach(char ch in s) Console.WriteLine(ch); Console.WriteLine(-); Console.ReadLine();可用于数组、Arraylist等363.4.33.4.43.4跳转语句3.4.23.4.1 除了基本语句、选择语句和循环语句外
22、,C#中还有另外的一种语句:跳转语句。跳转语句用于无条件的转移,主要包括break、goto、return和continue等语句。break语句continue语句return语句goto语句373.4.1break语句 break语句从最近层的循环语句中(switch、while、do 、for 、foreach)跳出,从而执行循环语句下面的语句。 (与if语句无关)static void Main(string args) string famous = 红楼梦, 三国演义, 水浒传, 西游记 ; foreach (string fam in famous) if (fam = 水浒传)
23、 break; else Console.Write(fam); Console.WriteLine(!); Console.ReadLine(); 控制台输出的结果是?383.4.2continue语句 continue语句只能出现在循环体中,它表示跳出本次循环,继续执行下一次循环。continue语句只能用在while、do、for、foreach语句中,否则会发生编译时错误。 continue语句和break语句相似,但是它们最大的区别在于:continue语句是跳过循环体中剩余的语句而强制执行下一次循环,而break语句是直接跳出循环语句。 continue语句的在for循环语句中的执
24、行流程:39static void Main(string args) string famous = 红楼梦, 三国演义, 水浒传, 西游记 ; foreach (string fam in famous) if (fam = 水浒传) continue; else Console.Write(fam); Console.WriteLine(!); Console.ReadLine(); 把上例的break改成continue:403.4.3return语句return语句用于终止其执行的方法,并将控制返回给调用方法。1.如果方法没有返回类型,可以省略return语句。2.如果方法有返回类型
25、,return语句必须返回这个类型的值。 例:例:裴波那契数列又称黄金分割数列,它指的是这样的数列:1、1、2、3、5、8、13、21。数列中后一个数值总是等于前两个数字的和。下面实现裴波那契数列:41public static int Fibonacci(int number) if (number = 1 | number = 2) return 1; else return Fibonacci(number - 1) + Fibonacci(number - 2);static void Main(string args) int inputnum = Fibonacci(14); Co
26、nsole.WriteLine(第14个数字的值应该是: + inputnum); 运行输出的结果是:第14个数字的值应该是:3771、1、2、3、5、8、13、21423.4.4goto语句goto语句也叫无条件转移语句,它可以跳转到指定的标签位置。goto 语句标号; goto语句多用于switch语句,实现由某个switch的case标签或default标签跳转到另一个case标签或default标签。goto也可以用在嵌套语句中,使程序跳出多层循环。goto不能跳出类的范围。goto不能跳到类似于for循环那样的语句块中。43static void Main(string args)
27、Choose: Console.WriteLine(下列四个选项中,哪项不是中国古代四大发明?); Console.WriteLine(A.造纸术 B.指南针 C.医药 D.火药 E.印刷术); Console.Write(您选择:);string answer = Console.ReadLine(); if (answer = C) goto Right; else Console.WriteLine(选择答案错误,请重新选择!); goto Choose; Right: Console.WriteLine(恭喜您,回答正确!); Console.ReadLine();例:例:如果选择的不
28、是C则goto跳转到Choose标签,否则跳转到Right标签。443.5实现简单的计算器本节将前几节所讲的部分内容相结合实现一个简单的计算器。首先提示用户输入两个操作数,然后输入操作符根据用户输入的操作符输出操作的结果。45 static void Main(string args) OperNum: Console.Write(请输入第一个操作数:); double num1 = Convert.ToDouble(Console.ReadLine(); Console.Write(请输入第二个操作数:); double num2 = Convert.ToDouble(Console.Rea
29、dLine(); Console.Write(请输入运算符号(+、-、*、/、%):); string oper = Console.ReadLine(); switch (oper) case +: Console.WriteLine(0加上1等于2, num1, num2, num1 + num2); break; / 省略其他情况 default: Console.WriteLine(您输入的操作符号不合法!); goto OperNum; break; /此句执行不到,可省略 Console.Read(); 463.6百钱买百鸡static void Main(string args)
30、 for (int gong = 0; gong = 25; gong+) for (int mu = 0; mu = 50; mu+) int xiao = 100 - gong - mu; if ( 100 - mu *2 - gong*4) * 2 = xiao) Console.WriteLine(公鸡:0只,母鸡:1只,小鸡:2只, gong, mu, xiao); 100100元钱买元钱买100100只鸡只鸡。小鸡1元2只、母鸡2元1只、公鸡4元1只。如果100元钱单独买公鸡能买25只,单独买母鸡能买50只。把公鸡数量作外循环,母鸡数量作内循环。471、编写控制台程序,利用循环输出9*9乘法表。2、循环输入班里每个人的英语成绩,输入-1时结束。最终输出全班平均分。3、本文件第17页的程序,把if改为switch实现。作业作业:发至 ,在主题里写明:班级、学号、姓名48