版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第4章 结构化程序设计,内容提要: 结构化程序的三种基本结构 算法、流程图、 if语句、 分支语句 循环语句、跳转语句 异常处理的概念 try/catch语句、throw语句和finally语句 目的要求: 理解算法的概念 掌握 if语句、switch分支语句、循环语句和异常处理语句的含义 重点难点: if语句、循环语句和异常处理语句,4.1 结构化程序设计的概念 4.1.1结构化程序设计的概念及算法的概念 结构化程序设计方法,是比较广泛使用的程序设计方 法。 用这种方法编制的程序具有结构清晰,可读性强,易 查错等特点。 结构化程序设计有三种基本结构,即:顺序结构、选择 结构、循环结构。每种基
2、本结构可以包含若干条语句。,程序设计的主要步骤: 分析问题。 确定算法。 (3) 画出程序流程图。 (4) 编写程序。 (5) 调试程序。 (6) 建立健全的文档资料。 最关键的是第2个步骤,即“算法设计”。 所谓“算法”,粗略地讲,是为解决一个特定问题而采取的确定的有限 的步骤。,4.1.2 流程图 流程图(Flowchart),亦称框图,它是用一些几何框图、流向线和文字说明表示各种类型的操作。 计算机算法可以用流程图来表示。,图2-2-1 程序控制结构的流程图,4.2 顺序结构 4.2.1 顺序结构的概念: 有些简单的程序是按程序语句的编写顺序依次执行的,这种结构称为顺序结构。,例:编写程
3、序计算圆的周长和面积。,using System; class Circle static void Main( ) const double PI= 3.141; double R, L, S; Console.Write(请输入圆的半径值:); R=double.Parse(Console.ReadLine( ); L=2*PI*R; S=PI*R*R; Console.WriteLine(圆的周长为:0,L); Console.WriteLine(圆的面积为:0 ,S); ,4.2.2 顺序结构的实例,Parse( )方法: 主要用于将数字的字符串表示形式转换为它的等效的其他基本数字类型
4、。 例:string s=“18”; int a=int.Parse(s)-10; /a=8 int b=a+int.Parse(Console.ReadLine();,4.3 选择结构 4.3.1 选择结构的概念 选择结构,是一种常用的主要基本结构,是计算机根据所给定选择条件为真与否,而决定从各实际可能的不同操作分支中执行某一分支的相应操作。,【案例5】计算方程的根 本例将实现通过输入一元二次方程的系数,计算方程的根的程序,效果如图2-2-8所示。,图2-2-8 计算方程的根,在本例的实现过程中,将学习使用if语句的应用。案例的实现方法如下。 1创建项目 2界面设计 3代码编辑 (1)算法流
5、程分析 (2)算法代码实现,【案例6】用户登录 本例将实现一个可以验证用户登录的程序,效果如图2-2-11所示。,图2-2-11 用户登录,在本例的实现过程中,将学习使用if语句的应用。案例的实现方法如下。 1创建项目 2界面设计 3代码编辑 (1)算法流程分析 (2)算法代码实现,4.3.2 条件语句 1if语句 语法形式: if (表达式) 语句; 说明:如果表达式的值为true,则执行后面if语句所控制的语句;如果表达式的值为false,则不执行if语句控制的语句,而直接跳转执行后面的语句。 注意:如果if语句块中只有一条语句,则大括号“ ”可以省略。,编程:计算下面公式中的b的值。 2
6、a+1 (a 100) b= a (a 100),using System; class value static void Main( ) Console.Write(请输入a的值:); int a=int.Parse(Console.ReadLine(); int b=a; if(a=100) b=2*a+1; Console.WriteLine(b=0,b); ,编程:输入三个数,将它们从大到小排序 int a, b, c, t=0; Console.Write(“请输入第一个数:”); a= int.Parse(Console.ReadLine(); Console.Write(“请输
7、入第二个数:”); b= int.Parse(Console.ReadLine(); Console.Write(“请输入第三个数:”); c= int.Parse(Console.ReadLine(); if (a =b t = a; a = b; b = t; if (a =c t = a; a = c; c = t; if (b =c t = b; b = c; c = t; Console.WriteLine(“排序结果为: 0,1,2”,a,b,c);,2ifelse语句 语法: if (表达式) 语句块1; else 语句块2; 说明:如果表达式的值为true,则执行if语句所控制
8、的语句块1;如果表达式的值为false,则执行else语句所控制的语句块2。,例:输入一个数,对该数进行四舍五入。 using System; class Value static void Main( ) Console.WriteLine(“请输入a的值:”); double a=double.Parse(Console.ReadLine( ); int b; if(a-(int)a=0.5) b=(int)a+1; else b=(int)a; Console.WriteLine(0进行四舍五入后的值为:1 ,a,b); ,在ifelse语句中可以嵌套使用多层ifelse语句,如: if
9、 (表达式1) if(表达式2) if(表达式3) 语句1; else 语句2; else 语句3; else 语句4; 在使用这种结构时,要注意else和if的配对关系,其原则是:从第1个else开始,一个else总和它上面离它最近的可配对的if配对。,例: int a=int.Parse(Console.ReadLine( ); if (a0) if (a100) a=a-50; else a=a+10; /这个else与if (a100)相配 else a=-a; / 这个else与if (a0)相配 Console.WriteLine(“a=”,a);,练习: 1.若int m, n,
10、 r; 则以下正确的是( ) Aif (mn) r-; Bif (m= =n) r-; Cif (!m) r-; Dif (m=n) r-; 2. 程序改错。 if(x=1) y+=5; else; y+=10;,思考与练习 1.为铁路编写计算运费的程序。假设铁路托运行李,规定每张客票托运费的计算方法是: 行李重量不超过 50 kg时,每千克0.25元;超过 50 kg而不超过 100 kg时,其超过部分每千克0.35元;超过 100 kg时,其超过部分每千克0.45元。 (编写完整的程序,上机实现) 分析:托运费的分段函数是什么?,答:设行李重量为w公斤,应付托运费为x元,则托运费的分段函数
11、是: (1)w100时,x=0.25*50+0.35*50+0.45*(w-100),double w,x=0; Console.Write(“请输入重量”); w = double.Parse(Console.ReadLine() if (w 50 ,/不能写成: 50w=100,3else if语句 else if语句是if语句和ifelse语句的组合,其一般形式如下: if (表达式1) 语句1; else if (表达式2) 语句2; else if (表达式n-1) 语句n-1; else 语句n;,例:编写一个实现如下函数值的程序 -1, x0,using System; clas
12、s Test static void Main( ) Console.Write(“请输入x的值: ); double x=double.Parse(Console.ReadLine( ); int y; if (x0) y=1; else if (x=0) y=0; else y=-1; Console.WrteLine(“Y=0“,y); ,【案例7】计算运费 在进行货物托运时,按货物重量的不同有不同的计费方式,其计费公式如下:,其中,n为货物重量(单位为公斤),y为应付的运费(单位为元/公斤)。本案例中将实现对运费的计算,效果如图2-2-13所示。 在本例的实现过程中,将学习使用swit
13、ch语句的应用。案例的实现方法如下。 1创建项目 2界面设计 3代码编辑 (1)算法流程分析 (2)算法代码实现,4.3.3 分支语句 格式:switch(表达式) case 常量表达式1: 语句1; break; case 常量表达式2: 语句2; break; default: 语句n; break; ,注意: C#要求每个case后使用break语句或跳转语句goto。所有常量表达式的值不能相同。,编程:查询学生姓名,输入一个字符,如输入“k”时,显示Kate;输入“m”时,显示Mary;输入“r”时,显示Rose;输入“T”时,显示Tom ;输入其他字符时,显示Other Studen
14、ts。,Console.Write(“Enter a character:); char Name=(char)Console.Read(); switch(Name) case k: Console.WriteLine(Kate.); break; case m: Console. WriteLine(Mary.); break; case r: Console. WriteLine(Rose.); break; case T: Console. WriteLine(Tom.); break; default: Console.WriteLine(Other students. ); bre
15、ak; ,例: using System; class Demo public static void Main() Console.Write(enter i=); int i=int.Parse(Console.ReadLine(); switch(i) case 1: case 2: case 3: Console.WriteLine(“i is 1,2 or 3.); break; case 4: Console.WriteLine( i is 4. ); break; ,注意:在C#中,两个或更多的case语句可以共用同一程序代码:,4.4 循环结构 循环是指在指定的条件下多次重复执
16、行一组语句。被重复执行的一组语句称为循环体。 采用循环结构可以解决一些按一定规则重复执行的问题。例如,统计一个班几十名学生,甚至全校几千名学生的学期成绩,如求平均分、不及格人数等。 4.4.1 循环结构的概念 循环结构按其循环体是否嵌套从属的子循环结构,可分为单循环结构和多重循环结构。,【案例8】成绩统计 本例将编写一个控制台程序,程序运行时提示输入学生成绩,能够对多个学生的成绩进行统计分析,计算各个等级的人数。程序效果如图2-3-2所示。,图2-3-2 成绩统计,在本例的实现过程中,将学习While循环语句的应用。 1创建项目 2代码编辑 (1)算法流程分析 (2)算法代码实现,4.4.2
17、while语句和dowhile语句 1while语句 语法格式: while (条件表达式) 循环体 ,using System; class Sumw static void Main( ) int n=1; while (n6) Console.WriteLine(“n=0”, n); n+; ,例:写出下列程序的运行结果。,结果:,例:使用while语句,编程计算1+2+1000。,using System; class Sumw static void Main( ) int i=1, sum=0; while (i=1000) sum+=i; i+; Console.WriteLin
18、e(“1+2+1000=0”,sum); ,思考与练习 (1)如果要实现 sum=1+2+3+10 , 怎样修改程序? (2)如果要实现 sum=30+31+32+50 , 怎样修改程序?,while(i=10),int i = 30; While(i=50),using System; class Value static void Main( ) int i=10; long x=1; while (i0) x*=i; i-; Console.WriteLine(“10!=0”, x); ,例:使用while语句,编程计算10的阶乘值。,1. 下列程序所计算的数学式是( ) int a=0
19、, i=2; while(i100) a+=i; i+=2; A. a=1+2+4+98 B. a=1+2+4+100 C. a=2+4+6+98 D. a=2+4+6+100,练习:,例:写出下列程序的运行结果。 using System; class example static void Main( ) int i=1,j,s=0; while(i=3) j=1; while(j=2) s+; j+; i+; Console.WriteLine(“s=0”, s); ,循环语句允许嵌套,即while语句里面还可以再套while语句。,1.以下程序段的循环次数为( ) int i=0, j
20、=0; while(i3) while(j2) j+; i+; ,练习:,2do-while语句 语法格式: do 循环体; while(条件表达式);,dowhile执行过程 while执行过程,例:写出下列程序的运行结果。 using System; class TestDoWhile static void Main( ) int x, y=0; do x=y+; Console.WriteLine(x); while(y5); ,结果:,using System; class EvenSum static void Main( ) int i=5, esum=0; do esum+=5
21、; i+=5; while(i=100); Console.WriteLine(esum=0 , esum); ,例:编程利用do-while语句实现100以内的能被5整除的数累加。,using System; class Sum static void Main( ) int i=1, j; long m, sum=0; do m=1; j=1; do m*=j; j+; while(j=i); sum+=m; i+; while (i=10); Console.WriteLine(“1!+2!+10!=0”, sum); ,例:使用do-while语句,编程计算1!+2!+10!。,练习:
22、 1.while语句循环结构和do.while语句循环结构的区别在于( ) Awhile语句的执行效率较高 Bdo.while语句编写程序较复杂 C无论条件是否成立,while语句都要执行一次循环体 Ddo.while循环是先执行循环体,后判断条件表达式是否成 立,而while语句是先判断条件表达式,再决定是否执行循环 体,【案例9】乘法表 本案例中将编写一个控制台程序,通过程序中的循环打印出一个乘法表,如图2-3-4所示。,图2-3-4 乘法表,在本例的实现过程中,将学习for循环的应用。 1创建项目 2代码编辑 (1)算法流程分析 (2)算法代码实现,【案例10】素数 本案例中将编写一个控
23、制台程序,计算指定范围内的所有素数,效果如图2-3-6所示。,图2-3-6 素数,在本例的实现过程中,将学习for循环语句和流程转向语句的应用。 1创建项目 2代码编辑 (1)算法流程分析 (2)算法代码实现,4.4.3 for语句和foreach语句 1for语句 语法格式: for(表达式1;表达式2;表达式3) 循环体; 执行过程: (1)首先计算表达式1的值 (2)判断表达式2的值是true还是false,若表达式2的值为false,则转而执行步骤(4),若表达式的值是true,则执行循环体中的语句,然后求表达式3的值 (3)转回步骤2 (4)结束循环,执行程序的下一条语句,例:使用f
24、or循环语句,编程输出120的每个奇数的平方。,using System; class square static void Main( ) int s; for (int i=1;i20;i+=2) s=i*i; Console.Write(0t , s); ,结果:,for语句的几点说明: (1) 如果对循环变量在for语句前已赋初值,则在for语句中可省略表达式1,但要保留其后的分号。 . int i=1; for( ;i=20;i+) .,(2)for语句可以省略表达式2,即不判断表达式条件是否成立,循环将一直进行下去,但应保留表达式2后面的分号。此时,需要在循环体中添加跳出循环的控制
25、语句。 例: for(int i=1; ;i+) s=i*i; Console.WriteLine(0t , s); if (i=10) break; ,(3) for中可以省略表达式3。此时应在循环体中添加改变循环变量值的语句,以结束循环。 例: for( int i=1; i=10; ) s=i*i; Console.WriteLine(0t , s); i+; ,(3) for语句中的3个表达式可同时省略。 int i=1; for( ; ; ) s=i*i; Console.WriteLine(0t , s); i+; if (i=10) break; ,using System; c
26、lass Test static void Main( ) int i=1; long m=1; for(i=1;i=10;i+) m*=i; Console.WriteLine(0!=1,i-1,m); ,编程:用for语句输出10!的值:,结果:,for循环语句也可以嵌套。 例:利用for循环嵌套语句,求1!+2!+3!+.+10!的和。,using System; class MultiSum static void Main( ) long s=0, m=1; for (int i=1; i=10; i+) m=1; for (int j=1;j=i; j+) m*=j; s=s+m;
27、 Console.WriteLine(1!+2!+3!+.+10!=0 , s); ,结果:,2foreach语句 foreach语句用于列举集合中的每一个元素,并且通过执行循环体对每一个元素进行操作。foreach语句只能对集合中的元素进行循环操作。 foreach语句的一般语法格式如下: foreach (数据类型 标识符 in 表达式) 循环体 ,using System; class Test static void Main( ) double Array=16,12,31,8,21; int intArray=1,2,3; foreach(int i in intArray) Co
28、nsole.WriteLine(Arrayi ); ,例:写出下列程序段的结果:,结果:,练习: 1以下程序段的循环次数为( ) int a=new int 1,2,3 ,4,5; foreach(int i in a) Console.WriteLine(t); A0 B4 C5 D6 2. 以下程序运行后,变量a的值为( ) int a=100; for(int j=10;j0;j-=2) a-=j*3; A100 B16 C13 D10,4.4.4 跳转语句 在C#中还可以用跳转语句来改变程序的执行顺序。 1break语句 在switch语句中,break用来使程序流程跳出switch语
29、句,继续执行switch后面的语句;在循环语句中,break用来从当前所在的循环内跳出。 语法格式: break;,using System; class Prime static void Main() Console.Write(输入n的值:); int i=1,n; n=int.Parse(Console.ReadLine(); while(+in) if(n%i=0) Console.WriteLine(0不是素数,n); break; if(i=n) Console.WriteLine(0是素数,n); ,编程: 任意给定一个整数n,判定其是否为素数(即只能被1和自身整除)。,2.
30、continue语句 continue语句用于循环语句中。continue语句并不是跳出当前的循环,它只是终止一次循环,接着进行下一次循环是否执行的判定。 语法格式: continue;,1. int x=0,y=0; 2. for(int i=1;i10;i+) do Console.Write(i+ “ ”); if (i%2=0) x=x+1; continue; if (x%2!=0) Console.WriteLine( ); continue; y=y+1; while(x=10); Console.WriteLine(“y=0”,y);,写出下列程序段的运行结果:,结果:,结果:
31、,using System; class Output public static void Main() for(int j=1;j=100;j+) if(j%7!=0) continue; Console.Write(“0t”,j); ,用continue语句编程:输出100以内所有能被7整除的数。,3goto语句 C#中,goto语句是无条件跳转语句。当程序流程遇到goto语句时,就跳到它指定的位置。 操作时,goto需要一个标签,标签是后跟冒号(:)的合法的C#标识符,标签放在goto语句要跳转到的那一条语句的前面。 例如: end: a=i+8 语法格式: goto 标签; 例:go
32、to end; 标签必须和goto用在同一个方法中。,例: using System; class Test static void Main() goto H; W:Console.WriteLine(“world”); goto X; H: Console.Write(“world”); goto W; X:Console.WriteLine(“Good bye!”); ,注意:goto语句这种无条件跳转程序执行流程的功 能,破坏了程序的可读行,在现在的程序设 计中,已不提倡使用goto语句。,异常:就是程序运行时发生的错误或某种意想不到的状态。如溢出、被零除、数组下标超出界限以及内存不够
33、等。 通过使用C#异常处理系统就可以处理这些错误。 C#为常见的程序错误定义了许多标准的异常,如除0错误(divide-by-zero)、访问越界(index-out-of-range)等。 例如:当企图除以0(即除数是0)时,就会产生一个DivideByZeroException异常。,4.5.1 异常处理的概念,4.5 异常处理,C#通常在两种情况下产生异常: (1)在C#语句和表达式的处理过程中激发了某个异常的 条件,使得操作无法正常结束,引发异常。 (2)throw语句抛出异常 。,例如:当企图除以0(即除数是0)时,就会产生一个DivideByZeroException异常。,usi
34、ng System; class NotHandled static void Main() int a=0, b=5; Console.WriteLine(Before exception is generated. ); /产生除0异常 b=b/a; ,当程序有异常发生时,C#运行系统会捕获到它,这时C#运行系统报告错误,并结束程序。 例如:using System; class NotHandled public static void Main() int nums=new int4; Console.WriteLine(“Before exception is generated.”
35、); /产生数组越界访问异常 nums 7=10; 当发生数组越界错误时,程序停止执行,并显示如下错误信息:,捕获异常并处理的好处是不用把那些令人讨厌的系统默认的异常消息提示给用户,而且能使产生异常的应用程序能够继续执行。 在C#中用四个关键字:try、catch、throw、finally来管理C#异常处理。,4.5.2 异常的处理,使用try和catch语句来捕获异常 异常处理的核心是try和catch。但这两个关键字得配合使用,不可以单独用 catch。 当try中的一个异常被抛出时,它被相应的catch语句捕获,该语句然后处理异常。,例如:using System; class ExcDemo1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年四川甘孜州遴选公务员笔试真题
- 2025年广东茂名职业技术学院招聘教师笔试真题
- 黑龙江齐齐哈尔大学招聘教学助理考试真题2025
- 产后恢复营销的方案(3篇)
- 设备监理师《设备监理实务操作》案例题(带评分标准)
- 2026年陕西(中考)数学考试试题含答案
- 2026年山西高考物理真题附答案
- 广西壮族自治区梧州市2026年重点学校初一入学语文分班考试试题及答案
- 2026年新疆(高考)物理真题及答案
- 2026年西藏小升初数学(真题)试卷(含答案)
- 2026交管12123学法减分题库200题(含标准答案)
- 工程总承包(EPC)合同
- 2026年一级注册消防工程师考试模拟题(含3科)题库及答案(松原)
- 2025年中国邮政集团有限公司四川省分公司春季招聘笔试历年参考题库附带答案详解
- 期货从业资格《期货基础知识》真题及解析(2026年)
- 2025年度中国美术馆社会公开招聘笔试参考题库附带答案详解
- (2025年)陕西省西安市员额法官遴选面试考题及答案
- 2026年高等学校教师岗前培训暨教师资格笔题库高频重点提升及答案详解(名校卷)
- 自动扶梯安装施工工艺及质量控制要点
- (2026年)ICU中皮肤衰竭识别与护理课件
- 2025年富滇银行公开招聘(12人)参考题库附答案
评论
0/150
提交评论