C#第5章控制结构与算法12H.ppt_第1页
C#第5章控制结构与算法12H.ppt_第2页
C#第5章控制结构与算法12H.ppt_第3页
C#第5章控制结构与算法12H.ppt_第4页
C#第5章控制结构与算法12H.ppt_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

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

文档简介

高级编程技术 Visual C#.NET Programming,聊城大学 理工学院 曹银杰 ,第五章:控制结构与算法1,5.1 算法基础 5.2 顺序结构 5.3 选择结构程序设计 5.4 循环结构,5.1 算法基础,5.1.1 算法定义及特征 5.1.2 ANSI流程图算法 5.1.3 结构化程序设计方法,5.1.1 算法定义及特征,什么是算法:是为完成一项任务所应当遵循的一步一步的规则的、精确的、无歧义的描述,它的总步数是有限的。 算法举例:辗转相除法写出求两个自然数的最大公约数 Step1: 输入两个自然数m,n Step2: rm mod n Step3: mn;nr Step4: 若r0 则重复Step2、Step3步(循环) 否则Step5 Step5:输出m,m即为m和n的最大公约数 算法的特征: 确定性、可行性、有穷性、输入性、输出性 算法的描述方法很多: 自然语言(如英语、汉语等)、图形或符号等描述。,开始、结束点,数据输入、输出,处理,判断,流线,连接点,5.1.2 ANSI流程图描述算法,ANSI规定的常用流程图符号,具有直观,易懂特点。,例1:辗转相除法写出求两个自然数的最大公约数,例2: Ax2+Bx+C=0的实根解,Ax2+Bx+C=0的实根解 分析: 如何求解 求解步骤,Ax2+Bx+C=0的实根解,开始 输入A、B、C的值 B2-4*A*C0? 否 是 求方程根 输出结果 结束,例3:求sum=n!,分析: 如何求解 求解步骤,求sum=n!,可以看出,流程图可很清楚的表示出解决问题的步骤,编程人员按照流程图的思路编写代码就可以了。 编程之前,先用流程图表示算法!,5.1.3 结构化程序设计方法,结构化的基本思路是将问题进行有效分解,使大问题转化为小问题(模块),自上而下、逐步细化,从而使问题简化、便于解决。 结构化程序的每个模块内部必须由若干个基本的程序结构组成,使程序的结构更加清晰,易读易改。,结构化程序设计方法,1966年Bohra和Jacopin提出了结构化算法的3种基本结构单元: 顺序结构 选择结构 循环结构 由以上三种基本结构构成的程序,称为结构化程序。 结构化程序以及三种基本结构都具有以下特点: 只有一个入口 只有一个出口 无死语句-每个框内语句均有可能执行 无死循环 由三种基本结构组成的算法结构,可以解决任何复杂问题。,顺序结构,顺序结构是一种最简单、最基本的结构,在顺序结构内,各块是按照它们出现的先后顺序依次执行。,选择结构,选择结构中包含一个判断框,根据给定的条件p是否成立而选择执行A框或B框(单分支无B)。,循环结构,在一定条件下反复执行一个程序块的结构。根据先、后执行循环体的方式分为两种循环。,while 循环:先执行条件,p成立时执行循环体,否则退出循环。,dowhile 循环 :先执行循环体,再执行条件,p不成立时执行循环,否则退出循环。,5.1.4用N-S流程图表示算法,N-S结构化流程图:全部算法写在一个矩形框内,去掉了带箭头的流程线。,当条件p满足时,执行循环中指令,5.2 顺序结构,顺序结构是程序设计中最简单的结构,也是最基本的结构,它就是按照程序书写的顺序逐句执行程序中的指令。 如赋值语句、输入/输出等: 给变量赋值语法: 变量名表达式 设置对象的属性语法: 对象名.属性=表达式 获取对象的属性语法: 变量名对象名.属性,private void button1_Click(object sender, EventArgs e) int r = 5;/圆的半径 double area = 3.14 * r * r;/计算圆的周长 /显示圆的周长 MessageBox.Show(area.ToString(); ,5.3 选择结构程序设计,人们面临选择的时候精神会变得脆弱,这就是为什么我们总是轻信偷看来的答案。因此,选择对于人类来说是一件复杂的事情,而对于计算机来说,则非常简单。它头脑简单,因而永远不会象人一样遇到棘手事情时犹豫不决。 选择结构解决的是程序流向问题,即在某种条件满足时,程序分别执行那些语句。包括多种格式的IF语句和switch语句,可方便地实现各种程序分支。 5.3.1 单分支的IF语句 5.3.2 二分支的if 语句 5.3.3 多分支的if 语句 5.3.4 多分支switch语句 5.3.5 分支嵌套举例,5.3.1 单分支的if 语句,条件表达式“()”不能省略,结果必须是一个逻辑值,为true时执行语句块A,为false时直接执行该结构下面的语句。 语句块A只有一句时“ ”可省略。,if (条件表达式) ,5.3.2 二分支的if 语句,条件表达式值为true时执行语句块A,否则执行语句块B,然后继续执行该结构下面的语句。,if (条件表达式) else ,若语句块只有一句,大括号可省略。,三元运算符等价二分支语句,例: s = x != 0.0 ? Math.Sin(x)/x : 1.0; 等价于 private void button1_Click(object sender, EventArgs e) double x=0.1, s=0; if (x != 0.0) s = Math.Sin(x) / x; else s = 1.0; MessageBox.Show(s.ToString(),“标题“); ,二分支举例:MessageBox应用,消息框语法:,MessageBoxIcon.Information 共9种消息提示图,caption消息框的标题,MessageBoxButtons.YesNo,text显示的消息,MessageBox.Show( text,caption, MessageBoxButtons, MessageBoxIcon);,共有8种按钮Abort、Cancel、Ignore、No、None、 Ok、Retry 、Yes 的6种组合形式。,MessageBox.Show()方法 返回一个 MessageBoxResult 值,该值指定用户单击了消息框上的哪个按钮。 DialogResult有8个属性值对应的各个按钮,与Show方法返回值配合使用即可。,二分支的if 语句举例:,private void button1_Click(object sender, EventArgs e) if (MessageBox.Show(“保存文件“, “保存“, MessageBoxButtons.YesNo, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1) = = DialogResult.Yes) /保存文件所用的代码 MessageBox.Show(“你按了Yes按钮!“); else /不保存文件所用的代码 MessageBox.Show(“你按了No按钮!“); ,5.3.3 多分支的if 语句,即可做出多次判断,又保证计算机至少执行一些代码。,if (条件表达式1) ; else if (条件表达式2) ; else if (条件表达式n) ; else ; ,最后一个else子句没有if 。,多分支的if 语句举例,private void button1_Click(object sender, EventArgs e) int score = Convert.ToInt32(textBox1 .Text ); if (score 100 | score 90) label3.Text = “A“; else if (score 80) label3.Text = “B“; else if (score 70) label3.Text = “C“; else if (score 60) label3.Text = “D“; else label3.Text = “E“; ,成绩分级:,5.3.4 多分支switch 语句,switch 流程图:,switch 语法,switch (表达式) case : ; break; case : ; break; . . . default: ; break; ,表达式值可以是整型或字符串。 常量表达式值可以是直接常量,也可是一个符号常量。 case子句必须用break语句中断语句组的执行。 空case子句可不加break 。 Default块是可以省略。,switch举例1:,string grade = “良“; switch (grade) /空的 case 子句间不加 break: case “优“ : case “良“ : case “中“ : textBox1.Text = “通过“; break; case “差“ : textBox1.Text = “不通过“; break; default: textBox1.Text = “未知“ ; break; ,switch举例2:,在 switch 语句中,可使用 goto case 的方式控制 case 子句的执行。,switch (grade) case “优“: goto case “通过“; case “良“: goto case “通过“; case “中“ : goto case “通过”; case “差“ : textBox1.Text = “不通过.“; break; case “通过“ : textBox1.Text = “通过.“; break; default: textBox1.Text = “未知.“; break; ,5.3.5 选择嵌套,求一元二次方程的根 一元二次方程的根有下列三种情况: (1)当a=0、b=0时,方程无解; (2)当a=0、b0时,方程只有一个实根; (3)当a0时,方程有两个根(两个实根或两个虚根) 在窗体上添加5个文本框分别为a、b、c的输入,x1、x2的输出,再添加5个标签注释每个框,添加一个命令按钮,在其Click事件过程中编写代码。,求一元二次方程的根,private void button1_Click(object sender, EventArgs e) int a = Int16.Parse(textBox1.Text); int b = Int16.Parse(textBox2.Text); int c= Int16.Parse(textBox3.Text); Single sing1 = b * b - 4 * a * c; double sing2 = Math.Sqrt(Math.Abs(sing1) / (2 * a); if (a = 0) if (b = 0) textBox4.Text = “方程无解“; textBox5.Text = “方程无解“; else Single x1 = -c/b; textBox4.Text = x1.ToString(); textBox5.Text = “只有一个解“; ,else Single sing0 = -b / (2 * a); if (sing1 0) textBox4.Text = sing0.ToString() + “+“ + sing2.ToString()+ “i“; textBox5.Text = sing0.ToString() + “-“ + sing2.ToString() + “i“; else textBox4.Text = (sing0 + sing2).ToString() ; textBox5.Text = (sing0 - sing2).ToString(); ,5.4 循环结构,循环就是重复执行一些语句,C#提供了4种不同的循环机制: 5.4.1 while 循环 5.4.2 do 循环 5.4.3 for 循环 5.4.4 foreach循环 5.4.5 循环的中断与无限循环,5.4.1 while 循环,while 循环:当循环条件成立时才执行的循环。先执行条件,p成立时执行循环体,否则退出循环。,while () ; ,while 循环示例,/计算 1 到 100 的累加, 结果保存在变量 sum 中。 private void button1_Click(object sender, EventArgs e) int iteratorCount = 0; long sum = 0; while (iteratorCount 100) iteratorCount+; sum += iteratorCount; textBox1 .Text=“1到100的累加和:“+sum.ToString(); ,5.4.2 do 循环,dowhile 循环:与 while 略有不同,先执行循环体,再执行条件,p不成立时执行循环,否则退出循环。,do ; while ();,do 循环示例,/计算 1 到 100 的累加, 结果保存在变量 sum 中。 private void button1_Click(object sender, EventArgs e) int iteratorCount = 0; long sum = 0; do iteratorCount+; sum += iteratorCount; while (iteratorCount 100); textBox1 .Text=“1到100的累加和为:“+sum.ToString(); /从结果可以看出与while 循环有同样的结果。,5.4.3 for 循环,for语句用于重复执行特定次数的循环: for(; ; ) ; 小括号必有; 可在初始化计数器的同时定义计数器变量,如int i=1; 循环条件,如i10; 计数器增量,如i+。,for 循环举例:打印九九乘法表,private void button1_Click(object sender, EventArgs e) / int i,j; /可在初始化计数器的同时定义计数器变量: for ( int i=1; i10; i+) for ( int j=1; j=i; j+) textBox1.Text += j.ToString()+“*“+i.ToString ()+“=“ +(i*j).ToString ()+“ “; textBox1.Text +=“r“+ “n“; /回车换行符 ,5.4.4 foreach循环,foreach循环为数组或对象集合中的每个元素重复一个循环体。对象集合如System.Collection命名空间中的集合类、以及用户定义的集合类。 语法: foreach ( in ) /循环体 数据类型与数组或对象集合的元素对象一致; 循环次数就是数组或对象集合的元素个数; 循环体含有变量,就是数组或对象集合的每个元素; foreach块的任何点使用break 、goto、return 或 throw 语句退出循环,用continue直接进入循环的下一轮迭代。,foreach循环举例,private void button1_Click(object sender, EventArgs e) string strs = new string “AB“,“CD“,“EF“,“GH“; foreach (string i in strs) textBox1.Text = textBox1.Text + i+“ “; ,5.4.5 循环的中断与无限循环,当需要更为精细的控制循环的执行时,可使用如下语句对循环进行控制: break :终止循环。 Continue:终止当前的循环(继续执行下一次循环)。 goto :可以跳出循环,到己标记好的位置上。 return :跳出循环及其包含的函数。,1、循环的中断break,break语句立即跳出当前循环,转去执行循环体后的一条语句。 private void button1_Click(object sender, EventArgs e) int i = 1; while (i = 10) if (i = 6) break; textBox1.Text = textBox1.Text + i.ToString()+“ “; i+; textBox1.Text = textBox1.Text + “i=“ + i.ToString(); ,2、循环的中断contin

温馨提示

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

评论

0/150

提交评论