C#程序设计教程ppt课件_第1页
C#程序设计教程ppt课件_第2页
C#程序设计教程ppt课件_第3页
C#程序设计教程ppt课件_第4页
C#程序设计教程ppt课件_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

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

文档简介

1、主讲:倪步喜,第3章 控制流程,C#程序设计教程,C#程序设计教程,书名:C#程序设计教程 书号:978-7-111-56027-2 作者:倪步喜 主编 出版社:机械工业出版社,第3章 控制流程,3.1 分支结构 1. if语句 2. 单步调试 3. switch语句 3.2 循环结构 1. while循环语句 2. 一维数组初步 3. break和continue语句 4. dowhile循环语句 5. for循环语句 3.3 巩固训练 3.4 穷举法 3.5 本章小结,3.1 分支结构if语句,1) 单分支if语句 语法如下: if(条件) 语句序列 说明: 只有条件成立,语句序列才被执行

2、;条件如果“语句序列”只有一条语句,“”可以省略。 若是不成立,那么语句序列不被执行。 例如: if (Score 100) Console.WriteLine(输入数据错误!);,3.1 分支结构if语句,实例 3-1】从键盘输入两个整数,要求从小到大输出它们,1 using System; 2 class Program 3 4 static void Main(string args) 5 6 int a, b, t; 7 Console.Write(a=); 8 a = int.Parse(Console.ReadLine(); 9 Console.Write(b=); 10 b =

3、int.Parse(Console.ReadLine(); 11 if (a b) 12 t = a; a = b; b = t; /交换两变量的值 13 Console.WriteLine(0 1, a, b); 14 15,3.1 分支结构if语句,2) 二分支if语句 语法如下: if(条件) 语句序列1 /当条件成立时执行 else 语句序列2 /当条件不成立时执行 例如: if (Score 100 | Score 0) return; /终止本方法的执行并将控制返回给调用方法 else Console.WriteLine(数据正确,3.1 分支结构if语句,实例 3-2】从键盘输入

4、一个整数,判断其是奇数还是偶数。 1 using System; 2 class Program 3 4 static void Main(string args) 5 6 int n; 7 Console.Write(n=); 8 n = Convert.ToInt32(Console.ReadLine(); 9 if (0 = n % 2) 10 Console.WriteLine(偶数); 11 else 12 Console.WriteLine(奇数); 13 14,3.1 分支结构if语句,3) 多分支if语句 即多选一if语句,语法格式如下: if(条件1) 语句序列1 /当满足条

5、件1时执行,不再判断条件2,本if语句执行结束 else if(条件2) 语句序列2 /否则,当满足条件2时执行,然后,本if语句执行结束 else if(条件3) 语句序列3 /否则,当满足条件3 时执行 /还可以加任意个“else if(条件)语句序列” else 语句序列n+1 /当所有条件都不满足时执行,3.1 分支结构if语句,实例 3-3】检查输入字符是否是小写字符、大写字符或数字,如果都不是,则输出“输入字符不是字母字符,也不是数字,1 using System; 2 class Program 3 4 static void Main() 5 6 Console.Write(输

6、入一个字符: ); 7 char c = (char)Console.Read(); 8 if (char.IsUpper(c) 9 10 Console.WriteLine(大写字母); 11 12 else if (char.IsLower(c) 13 14 Console.WriteLine(小写字母); 15 16 else if (char.IsDigit(c) 17 18 Console.WriteLine(数字); 19 20 else 21 22 Console.WriteLine(输入字符不是字母字符,也不是数字); 23 24 25,3.1 分支结构单步调试,单步调试是最常

7、见的调试方法之一。单步调试即一步一步跟踪程序执行的流程,在单步执行过程中,程序员可以监视变量值的变化,观察变量的值与预期的值是否一致,这样可以帮助发现程序中的逻辑错误。 【实例 3-4】编写一个评价成绩的程序,成绩与评价之间关系如表所示。调试运行程序,观察程序的单步执行过程,观察程序中相关变量的值,3.1 分支结构单步调试,程序主要代码如下所示。 6 static void Main(string args) 7 8 double Score; 9 Console.Write(请输入成绩:); 10 Score = Convert.ToDouble(Console.ReadLine(); 11

8、 if (Score 100) 12 Console.WriteLine(输入数据错误!); 13 else if (Score = 0 22,3.1 分支结构单步调试,开始调试前,首先要准备好测试数据,做到心中有数,测试用例考虑了边界数据,3.1 分支结构单步调试,单步调试的执行过程因人而异,下面是本实例单步调试执行的一种情形。 (1) 按F10功能键,启动单步执行。此时,程序调试状态如图所示。图中黄色箭头于第7行处。黄色箭头指示将要执行的下一条语句,3.1 分支结构单步调试,2)再按一次F10,黄色箭头如图所示。程序执行跳过了“double Score;”语句,因为该语句用来声明变量,是非

9、执行性语句。 (3)再按两次F0功能键,单步执行第10行,程序要求从键盘读取数据,程序员此时在控制台窗口中输入测试数据-1并回车后,调试状态如下图所示。本步骤要注意,当黄色箭头在“ReadLine()”行上时,不能在控制台窗口上输入-1。因为此时还未执行第10行,读键盘功能的“ReadLine()”方法尚未被执行,3.1 分支结构单步调试,4)在变量Score上右击,在弹出的快捷菜单中选择【添加监视】,便可以将Score变量添加到监视窗口,如图所示。监视图中所示的变量Score值为-1.0,类型为double,正和预期的一致。在监视窗口中,可以编辑变量的值,以察看新值下后续的执行过程,但此处不

10、人为更改变量Score的值。 (5)继续按一次F10功能键,执行状态如下图所示。第11行中的条件成立,即将执行第12行,3.1 分支结构单步调试,6)继续按一次F10功能键,下一个要执行的语句是“Console.ReadKey();”,执行状态如下图 所示。此时,多选一if语句已经结束执行。 (7)继续按F10功能键,单步执行后续过程,3.1 分支结构单步调试,在单步执行过程中,还可以进行其他的操作,常见的操作说明如下: 1)按F11功能键,逐语句执行。它与F10功能键的区别是会进入到自定义方法内部去执行。在调试本实例时,F10与F11没有区别。 2)按Shift+F11组合键,跳出由F11进

11、入的方法。 3)按F9功能键,在光标所在行设置或取消断点,调试运行时,会在断点处暂停运行。 4)按F5功能键,连续调试运行,但会在断点处暂停。 5)按Shift+F5组合键,停止调试。 6)按Ctrl+F10组合键,运行到光标处。但事先选择的光标位置很关键,若光标处于一个不可能到达的分支上时,执行过程不会暂停于光标处,而会继续执行。 7)拖动黄色箭头,更改下一步要执行的语句。但是,这可能导致预料不到的运行结果。 8)选择【调试】|【快速监视】命令,在打开的快捷监视对话框中监视一个表达式的值。如图 所示,图中监视一个逻辑表达式的值,其值为true,3.1 分支结构switch语句,1) swit

12、ch语句格式 当一个表达式有多个取值情形时,可以用switch语句测试表达式的值等于何种情形的值。switch语句的语法如下: switch(表达式) case 可能性的值1: 语句序列1 break; case 可能性的值2: 语句序列2 break; /还可以加任意个类似上方的case段 default: 语句序列n+1 break;,3.1 分支结构switch语句,1) switch语句格式 在使用switch语句时,必须要注意以下几方面的规定: (1) 表达式的类型可以是sbyte、byte、short、ushort、uint、long、ulong、char、bool、string或

13、枚举类型。 (2) 每个case中的常量表达式必须属于或能隐式转换成(1)中所指类型。 (3) 如果有两个或两个以上的case标签中的常量表达式相同,编译时将会报错。 2) switch语句执行过程 当执行switch语句时,先计算表达式的值,然后将表达式的值与case 后面“可能性的值”逐个匹配,如果与某个“可能性的值”匹配成功,则进入相对应的case 代码段执行,如果匹配都不成功,则进入default部分执行。当执行到break 语句时,就终止执行当前的switch语句。 【实例 3 5】将实例3_4用switch语句实现,3.2 循环结构,1. while循环语句 2. 一维数组初步 3

14、. break和continue语句 4. dowhile循环语句 5. for循环语句,1. while循环语句,while 循环的语法: while(条件) 语句块 只要给定的条件为真,while循环语句会重复执行语句块。 语句块中必须要有改变条件的措施与方法,使最终能从循环执行中退出来。 【实例 3-6】编程求1+2+3+100的和。 分析:可以设计一个100次的循环,每次循环把一个加数累计到和中。因此,可设计一个计数变量i来控制循环的退出。思路如下: i=1; /初值 while(i=100) /终值 /把i累加到和中,因为每次循环计数变量的值与表达式中的加数相同。 i+; /这就是改

15、变循环条件的措施。步长为1,1. while循环语句,本例代码如下: 1 using System; 2 class Program 3 4 static void Main(string args) 5 6 int i = 1, s = 0; 7 while (i = 100) 8 9 s += i; 10 i+; 11 12 Console.WriteLine(s= + s.ToString(); 13 14 说明:本例循环控制中,计数变量的初值为1,终值为100,每次循环计数变量的步长值为1,2. 一维数组初步,一维数组由包含若干相同类型的数组元素(简称元素)组成,这些元素可以通过索引进

16、行访问。 元素的个数称为数组的长度。 数组中的每个元素都具有唯一的索引与其相对应,元素的索引从零开始。 一维数组的数组元素的索引只有一个,所有数组元素可排成连续的一行或一列。 数组变量是引用类型,System.Array类是所有数组的基类,该类有Length属性,表示数组长度。 数组变量位于栈(stack)中,而它引用的数组(即数组实例)在堆(heap)中。数组实例需要使用new关键字来创建,2. 一维数组初步,1) 声明数组 语法: 类型 数组变量名; 如: int candidates = new int3; 上面定义了整型数组变量candidates,如图 3-9所示。它引用一个具有三个

17、整型元素的数组,这三个元素是candidates0、candidates1、candidates2,它们在空间上是连续的,它们具有默认值0。 现给第一个元素赋值,可采用如下语句: candidates0=1,2. 一维数组初步,1) 声明数组 再如: int arr1,arr2; arr1 = new int 1, 2, 3 ; arr2 = arr1; 上面定义了两个整型数组变量,再让arr1引用一个有3个元素的数组实例,最后让arr2也引用相同的数组实例,2. 一维数组初步,2) 初始化数组 初始化数组指的是为数组变量指定一个数组实例,并为数组实例中的数组元素指定初始值。数组是一个引用类型

18、,所以需要使用new关键字来创建数组的实例。例如: int scores = new int45;/声明数组变量scores,并初始化,元素默认值为0 string names = new string10;/声明数组变量names,并初始化,元素默认值为null int numbers = new int 1, 2, 3, 4, 5, 6 ;/中为元素的初始值,元素个数确定了数组长度,可访问的元素为numbers0 numbers5,2. 一维数组初步,实例 3-7】输出十个两位随机整数。主要代码如下所示。 6 static void Main(string args) 7 8 int i;

19、 9 System.Random random = new Random(); 10 int numbers = new int10; 11 i = 0; 12 while (i numbers.Length) 13 14 numbersi = random.Next(10, 100); 15 Console.Write(0,4, numbersi); 16 i+; 17 18 Console.ReadKey(); 19,代码分析: 第9行,System.Random类对象用于产生随机数字。 第10行,声明整型数组变量numbers,它引用一个具有10个整型元素的数组。 第12行,Length

20、是数组变量的一个属性,表示数组长度。 第14行,Random对象的Next方法产生10,100)的整数,3. break和continue语句,break语句用在switch语句中,其作用是终止当前switch语句的执行。 break语句也可以用在循环语句中,其作用是终止当前的循环的执行,或者说,它使程序的执行跳出当前循环语句。 continue语句仅用在循环语句中。其作用是跳过当前这次循环中的后续代码,强制开始下一次循环。对于while和do.while循环,continue语句会导致程序控制回到条件测试上,3. break和continue语句,实例 3-8】分析如下代码的输出结果。 4

21、static void Main(string args) 5 6 int i = 1; 7 while (true) 8 9 Console.Write(0,3, i); 10 i+; 11 if (i % 5 = 0) 12 13 i+; /略过5的倍数 14 15 if (i 10) 16 break; /超过10不输出 17 else 18 continue; 19 20 Console.ReadKey(); 21,代码分析: 变量i值从1开始输出,但遇到5的倍数时,i值增1,略过输出其值,但i值超过10时,终止循环。所以输出结果为: 1 2 3 4 6 7 8 9,4. dowhil

22、e循环语句,1)dowhile循环语句语法: do 语句块 while(条件); 初学者容易忘写上面语法中的分号。 执行过程 :do-while语句先执行循环体语句一次,再判别表达式的值,若为true,则继续循环,否则终止循环,4. dowhile循环语句,实例 3-9】给定一个正整数n,求它的二进制表示中1的个数。 1 using System; 2 namespace Example3_9 3 4 class Program 5 6 static void Main(string args) 7 8 int n, count = 0; 9 Console.Write(请输入一个正整数:);

23、 10 n = int.Parse(Console.ReadLine(); 11 do 12 13 if (n % 2) = 1) 14 count+; 15 n /= 2; 16 while (n 0); 17 Console.WriteLine(二进制表示中1的个数为0, count); 18 19 20,5. for循环语句,1)for循环的语法如下: for (表达式1;表达式2;表达式3) 语句块 2)执行for语句的步骤为: (1) 计算表达式1的值。 (2) 计算表达式2的值,若值为true,则执行语句块一次,否则终止循环。 (3) 计算表达式3的值,转回第(2)步重复执行。 3

24、)说明: (1) 表达式1通常用来给循环变量赋初值,一般是赋值表达式。也允许在for语句外。给循环变量赋初值,此时可以省略该表达式。 (2) 表达式2通常是循环条件,一般为关系表达式或逻辑表达式。 (3) 表达式3通常可用来修改循环变量的值,一般是赋值语句。 (4) 在整个for循环过程中,表达式1只计算一次,表达式2和表达式3则可能计算多次。语句块可能执行多次,也可能一次都不执行,5. for循环语句,实例 3-10】编程求1+2+3+100的和。 1 using System; 2 namespace Example3_10 3 4 class Program 5 6 static voi

25、d Main(string args) 7 8 int i, s = 0; 9 for (i = 1; i = 100; i+) 10 s += i; 11 Console.WriteLine(s=0, s); 12 Console.ReadKey(); 13 14 15,5. for循环语句,实例 3 11】编程判断从键盘输入的大于1的正整数n是否为素数。素数指在一个大于1的自然数中,除了1和此整数自身外,没法被其他自然数整除的数。最小的素数为2。 分析: 显然,这是一个循环作除法的问题。容易想到的是设置除数变量i,也作循环变量,取值从2到n-1,每次增1。但是,这里需要说明的是,i的终值取

26、n即可(数学上证明可行),这样可以减少循环次数。 程序代码如下: 6 static void Main(string args) 7 8 int n, intfinal, i; 9 Console.Write(输入一个大于1的正整数:); 10 n = int.Parse(Console.ReadLine(); 11 intfinal = (int)(Math.Sqrt(n); 12 i = 2; 13 /for循环有两个出口 14 for (; i intfinal) 20 Console.WriteLine(0是素数 , n); 21 else 22 Console.WriteLine(0

27、不是素数 , n); 23,值得一提的是,类似本例,一个循环有多个出口时,经常在循环结束后作判断,以确定是哪种情形的退出循环,以便作出不同的处理的编程方法,初学者要仔细领会,熟练掌握,5. for循环语句,实例 3 12】编写一个为三位候选人统计选票的程序,三位候选人分别用代号1、2、3表示。输入数据1表示投1号候选人一票,输入2时,表示投2号候选人,输入3时,表示投3号候选人一票。输入1-3以外的数据视为废票。输入-999时,表示投票结束,时要输出各候选人的得票数、总票数及废票数。 分析: 通过问题描述可知,投票意味着输入数据,但投票的次数并不确定,投票进程用一个特殊的数据(-999)来控制

28、,当输入的是的是-999时,投票的结束,接着就可以输出投票的结果。因此,这里的特殊数据-999可以看成是结束标志。所以,输入的数值数据有三类:结束标志、有效票、废票。下面逐步细化分析过程。 (1) 确定程序框架 static void Main(string args) /. /循环输入数据 /分结束标志和票号分别处理输入的数据 /处理结束标志 /识别并分类处理票 /输出结果,5. for循环语句,2) 循环控制结构 for(;)/永真 /输入数据 if (是-999吗?) break; /识别并分类处理票 (3) 识别并分类处理票 switch (票号) case 1: /1号候选人票数加1 break; case 2: /2号候选人票数加1 break; case 3: /3号候选人票数加1 break; default: /累计废票 break;,3.3 巩固训练,1编程求1+2+3+.+n之和小于等于3478时最大的n值。 思路分析:

温馨提示

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

评论

0/150

提交评论