Ch04程序流程和异常处理_第1页
Ch04程序流程和异常处理_第2页
Ch04程序流程和异常处理_第3页
Ch04程序流程和异常处理_第4页
Ch04程序流程和异常处理_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

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

文档简介

Ch04程序流程和异常处理2024/3/12Ch04程序流程和异常处理4.1顺序结构C#程序中语句执行的基本顺序按各语句出现位置的先后次序执行【例4.1】顺序结构示例:已知三角形的三条边(为简单起见,假设这三条边可以构成三角形),求三角形的面积Ch04程序流程和异常处理4.2选择结构C#包括两种控制分支的条件语句:if语句和switch语句if条件语句包含多种形式:单分支、双分支和多分支Ch04程序流程和异常处理1.单分支结构if(条件表达式)语句/语句块statement(s);该语句的作用是当条件表达式的值为真(True)时,执行if后的语句(块),否则不做任何操作,控制将转到if语句的结束点【例4.2】单分支结构示例:产生两个0~100之间的随机数a和b,比较两者大小,使得a大于bCh04程序流程和异常处理2.双分支结构if(条件表达式)语句/语句块1;else语句/语句块2;语句的作用是当条件表达式的值为真(True)时,执行if后的语句(块)1,否则执行else后的语句(块)2【例4.3】计算分段函数Ch04程序流程和异常处理3.多分支结构if(条件表达式1)语句/语句块1;elseif(条件表达式2)语句/语句块2;…elseif(条件表达式n)语句/语句块n;[else语句/语句块n+1;]【例4.4】已知某课程的百分制分数mark,将其转换为五级制(优、良、中、及格、不及格)的评定等级grade【例4.5】已知坐标点(x,y),判断其所在的象限Ch04程序流程和异常处理4.if语句的嵌套if(条件表达式1)if(条件表达式11)内嵌if语句1;

[else语句2;][elseif(条件表达式21)内嵌if语句3;

[else语句4;]]【例4.6】计算分段函数【例4.7】已知字符变量ch中存放了一个字符,判断该字符是字母字符(并进一步判断是大写字母还是小写字母)、数字字符还是其他字符,并给出相应的提示信息【例4.8】输入三个数,按从大到小的顺序排序【例4.9】编程判断某一年是否为闰年Ch04程序流程和异常处理4.2.2switch语句switch语句是一个控制语句,它通过将控制传递给其体内的一个case语句来处理多个选择和枚举说明1~9Ch04程序流程和异常处理4.3循环结构C#提供了4种不同的循环机制forwhiledo...whileforeachCh04程序流程和异常处理4.3.1for循环for循环语句是计数型循环语句,一般用于已知循环次数的情况,所以也称为定次循环for(initializer;condition;iterator){循环体语句序列;}说明1~8【例4.10】利用for循环求1~100中所有奇数的和、偶数的和【例4.11】显示Fibonacii数列:1、1、2、3、5、8、……的前20项Ch04程序流程和异常处理4.3.2while循环while(条件表达式){循环体语句序列;}说明1~4【例4.12】利用while循环求1+2+…+100,以及1~100中所有奇数的和、偶数的和【例4.13】求1+2+……的和,直至和>3000为止【例4.14】用近似公式求自然对数的底数e的值,直到最后一项的绝对值小于10-6为止Ch04程序流程和异常处理4.3.3do…while循环do...while循环是while循环的后测试版本,该循环的测试条件在执行完循环体之后执行,而while循环的测试条件在执行循环体之前执行。因此do...while循环的循环体至少执行一次,而while循环的循环体可能一次也不执行do{循环体语句序列;}while(条件表达式);【例4.15】利用do......while循环求1+2+…+100,以及1~100中所有奇数的和、偶数的和【例4.16】求任意两个正整数的最大公约数和最小公倍数Ch04程序流程和异常处理4.3.4foreach循环foreach语句用于循环访问数组或集合以获取所需信息。当为数组或集合中的所有元素完成迭代后,控制传递给foreach块之后的下一个语句foreach(类型名称变量名称in数组或集合名称){循环体语句序列;}【例4.17】使用foreach显示整数数组的内容Ch04程序流程和异常处理4.3.5循环的嵌套在一个循环体内又包含另一个完整的循环结构,成为循环的嵌套。这种语句结构称为多重循环结构【例4.18】利用嵌套循环打印九九乘法表Ch04程序流程和异常处理4.4跳转语句使用跳转语句执行分支,该语句导致立即传递程序控制gotobreakcontinuereturnthrowCh04程序流程和异常处理4.4.1goto语句goto语句将程序控制直接转到由标签标记的语句gotoidentifier;gotocase常量表达式;gotodefault;说明1~5【例4.19】使用if语句和goto语句构成循环,计算1+2+…+100Ch04程序流程和异常处理4.4.2break语句break语句在多分支选择switch结构中的作用是跳出switch结构,继续执行switch语句的后继语句。break语句还可以用于退出for、foreach、while或do...while循环,即提前结束循环,接着执行循环语句的后继语句【例4.20】编程判断所输入的任意一个正整数是否为素数Ch04程序流程和异常处理4.4.3continue语句continue语句类似于break,也必须在for、foreach、while或do...while循环中使用。但它结束本次循环,即跳过循环体内自continue下面尚未执行的语句,返回到循环的起始处,并根据循环条件判断是否执行下一次循环continue语句与break语句的区别在于:continue语句仅结束本次循环,并返回到循环的起始处,循环条件满足的话就开始执行下一次循环;而break语句则是结束循环,跳转到循环的后继语句执行与break语句相类似,当多个while、do、for或foreach语句彼此嵌套时,continue语句只应用于最里层的语句。若要穿越多个嵌套层转移控制,必须使用goto语句【例4.21】显示100~200之间不能被3整除的数。要求一行显示10个数Ch04程序流程和异常处理4.4.4return语句return语句终止它出现在其中的方法的执行并将控制返回给调用方法。如果方法有返回类型,return语句必须返回这个类型的值。如果方法为void类型,应使用没有表达式的return语句,当然也可以省略return语句【例4.22】return语句示例:通过调用方法计算圆的面积Ch04程序流程和异常处理4.5异常处理理解异常的概念运用try块、catch块和finally块处理异常C#中异常类的继承体系结构运用多重catch块处理异常运用嵌套try/catch块处理异常运用关键字throw处理异常用户自定义异常Ch04程序流程和异常处理什么是异常程序中出现的错误被称为异常;异常可分为两大类:编译时异常和运行时异常;编译时异常一般是指语法错误,可以通过编译器的提示加以修正,这里我们不予讨论;运行时异常包括:运行错误:如数组下标越界,除数为0等;逻辑错误:如年龄超过200岁等。Ch04程序流程和异常处理产生异常的原因产生异常的原因多种多样,大致有:系统资源不可用:如内存分配失败,文件打开失败,数据源连接失败等等;程序控制不当:如被零除,负数开方,数组下标越界等等。Ch04程序流程和异常处理产生异常后的反应当异常发生时,程序一般会作出如下反应:发生异常的部分产生系统定义的错误信息;程序意外终止,并将控制权返回操作系统;程序中所有已分配资源的状态保持不变,这样将会导致资源泄漏。那么我们就必须对有可能产生的异常进行处理。Ch04程序流程和异常处理try块和catch块try块:一般用来监视有可能产生异常的代码部分;catch块:当异常产生后,catch块捕捉异常,并在其中对异常进行处理。Ch04程序流程和异常处理C#中的异常类(MSDN:异常层次结构)异常说明Exception异常层次结构的根类SystemException系统异常,许多异常的基类DeriveByZeroException除数为0ArgumentNullException空指针异常IndexOutOfRangeException数组下标越界OverflowException内存溢出异常FormatException字符串转换数字失败FileNotFoundException访问磁盘上不存在的文件失败IOExceptionI/O异常的根类ApplicationException应用程序异常,自定义异常的基类Ch04程序流程和异常处理异常类体系结构图Ch04程序流程和异常处理finally块无论try/catch块中发生了什么,finally块都一定会执行;当异常发生时,程序可能会意外中断,有些被占用的资源就得不到清理。finally块可以确保执行所有的清理工作;无论是否发生异常,finally块都将执行;finally块是可选的,可视具体情况决定是否添加;finally块必须和try块一起使用,不能单独存在。Ch04程序流程和异常处理try/catch/finally执行流程try块finally块catch块

无异常发生异常Ch04程序流程和异常处理try/catch/finally应用模型try{//可能引发异常的语句}catch(异常类型异常变量){//在异常发生时执行的代码}finally{//最终必须执行的代码(即使发生异常),如释放资源等}Ch04程序流程和异常处理异常类中的常用属性Ch04程序流程和异常处理多重catch块有时候,在try块中的代码段将有可能产生多种不同类型的异常,而我们又需要针对不同的异常类型进行不同的处理方式,那么我们就可以使用多重catch块,来分别捕获不同类型的异常。虽然多重catch块可以同时监视多个不同类型的异常,但是try块中一旦有某个异常产生,程序就会跳转到与之异常类型最匹配的catch块中执行,然后执行finally块(如果有finally块的话)或之后的语句;也就是说,多重catch块只会捕捉到最先产生的异常,而不是把所有的异常全部捕捉完;即:不论有多少个catch块,最多只会执行其中的一个;请注意catch块的书写顺序:类层次越低的越往上写,越高的越往下写。Ch04程序流程和异常处理嵌套try/catch块有时候,整个语句块可以产生异常,而其中的某个部分又可能产生另外的异常,而我们需要分别进行处理;这样,就可以通过嵌套try/catch块来完成;嵌套try/catch块就是在一个try/catch块中包含有另外的try/catch块。Ch04程序流程和异常处理在C#程序中,引发异常共有以下两种方式使用显式throw语句来引发异常。在此情况下,控制权将无条件转到处理异常的部分代码使用语句或表达式在执行过程中激发了某个异常的条件,使得操作无法正常结束,从而引发异常Try...Catch...FinallySystem.ExceptionCh04程序流程和异常处理throw语句示例public

classThrowDemo{ static

voidMain(string[]args) {

try{

intage=int.Parse(Console.ReadLine());

if(age<0||age>100){

//创建一个异常实例,并将其手工抛出

throw(newException("您输入的年龄无效。"));}Console.WriteLine("您的年龄是:"+age+"岁。");}

catch(Exceptione)//捕捉异常{

//打印出异常信息Console.WriteLine(e.Message);}}}Ch04程序流程和异常处理用户自定义异常Exception类和其子类都是系统内置的异常,这些异常不一定总能捕获程序中发生的逻辑异常;有时候,我们可能要创建用户自定义的异常类;用户自定义异常类应该是ApplicationException类的子类;类似于:

classMyException:

ApplicationException { …… }Ch04程序流程和异常处理自定义异常示例classAgeException:Exception{//用户自定义年龄异常类

publicAgeException():base("年龄无效。")//构造方法{}}public

classTest{

public

static

voidMain(string[]args){

温馨提示

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

评论

0/150

提交评论