《C#程序设计课件》(资料全集)c#.ppt

上传人:za****8 文档编号:13190478 上传时间:2020-06-07 格式:PPT 页数:29 大小:273.01KB
返回 下载 相关 举报
《C#程序设计课件》(资料全集)c#.ppt_第1页
第1页 / 共29页
《C#程序设计课件》(资料全集)c#.ppt_第2页
第2页 / 共29页
《C#程序设计课件》(资料全集)c#.ppt_第3页
第3页 / 共29页
点击查看更多>>
资源描述
第三章流程控制,C#.net程序设计,本章主要内容,选择语句(if语句和switch语句)循环语句(while,do-while,for,foreach循环语句)跳转语句(break,continue,return,goto语句)异常处理(try-catch-Finally)和throw语句,条件选择语句,选择语句根据某个条件是否为true来将程序控制权移交给特定的语句流程。选择语句分为if语句和switch语句两种。,if语句,if语句是条件选择语句,根据布尔表达式的值选择要执行的语句。其常用的表达形式有:if(布尔表达式)语句组(块);或if(布尔表达式)语句组(块)1;else语句组(块)2;流程图如下:,条件选择语句,if语句,例:使用if-else条件选择语句对一个浮点数x进行四舍五入,结果保存到一个整数i中,代码如下:if(x(int)x=0.5)/x(int)x=0.5条件成立执行代码i=(int)x+1;Else/x(int)x=0.5条件不成立执行代码i=(int)x;例:使用if条件选择语句将i除j,结果保存y中(要判断j不等于0),代码如下:if(j!=0)y=i/j;,条件选择语句,if语句嵌套,if语句可以嵌套使用,每一条else与离它最近且没有其它else与之对应的if相搭配。使用elseif方法处理多个条件形式如下:if(布尔表达式1)语句组1;elseif(布尔表达式2)语句组2;elseif(布尔表达式n)语句组n;else语句组n+1;,条件选择语句,例:检查输入字符是否是小写字符、大写字符或数字,或其他。usingSystem;publicclassIfTeststaticvoidMain()Console.Write(Enteracharacter:);charc=(char)Console.Read();/读一个字符if(Char.IsUpper(c)/用于判断c是否为大写字符Console.WriteLine(Characterisuppercase.);elseif(Char.IsLower(c)/用于判断c是否为小写字符Console.WriteLine(Characterislowercase.);elseif(Char.IsDigit(c)/用于判断c是否为数字Console.WriteLine(Characterisanumber.);Else/除字母数字以外的字符Console.WriteLine(Characterisnotalphanumeric.);,switch语句,switch语句的一般格式为:switch(控制表达式)case常量表达式1:语句组1break;case常量表达式2:语句组2break;case常量表达式n:语句组nbreak;default:语句组n+1break;,条件选择语句,switch语句,switch语句的控制类型,即其中控制表达式的数据类型可以是整数如(byte、short、int、long等),char,string或枚举类型,每个case标签中的常量表达式(constant-expression)必须属于或能隐式转换成控制类型。下面例子说明switch语句是如何实现程序的多路分支的。假设考查课的成绩按优,良,中,及格和不及格分为五等分别用5、4、3、2、1来表示,但实际的考卷为百分制分别对应的分数为90-100、80-89、70-79、60-69、60分以下。下面的程序将考卷成绩x转换为考查课成绩y。SwitchSample项目代码如下:,条件选择语句,inty;doublegrade=double.Parse(Console.ReadLine();/控制台输入分数intx=(int)(grade/10);/除,去掉小数点取整。switch(x)case10:/100/10=10case9:y=5;break;/99-90/10=9case8:y=4;break;/80-89/10=8case7:y=3;break;/70-79/10=7case6:y=2;break;/60-69/10=6default:y=1;break;/其余Console.WriteLine(百分制0,转换为1,grade,y);,switch语句可以包括任意数目的case实例,但是任何两个case语句都不能具有相同的值。在每一个case块(无论case语句还是default语句)的后面,都必须有一个跳转语句(如break)。但有一个例外是当case语句中没有代码时。如上例:case10:。如果没有任何case表达式与开关值匹配,则控制传递给跟在可选default标签后的语句。如果没有default标签,则控制传递到switch以外。,循环语句,循环语句实现一个程序模块的重复执行。C#提供了四种循环语句:while语句do-while语句for语句foreach语句它们分别适用于不同的情形。,while循环语句,while语句循环执行一个语句或语句块,直到指定的表达式计算为false。while语句的流程图如下:while语句的格式为:while(布尔表达式)循环体语句组使用break语句结束while循环,执行后续语句。使用continue语句停止循环体的执行,重新回到while循环表达式判断,开始下一次迭代但不退出循环。,循环语句,例:使用While循环语句,在给定数组中查找一个指定的值,遇到不等的正数在屏幕显示,找到指定的值就返回数组下标并在屏幕显示找到。未找到返回-1。下面是WhilSample项目的代码:staticintFind(intvalue,intarray)inti=-1;while(+iarray.Length)/array.Length是数组长度if(arrayi=value)Console.WriteLine(在数组第0个元素找到:1,i,value);break;/找到,结束while循环if(arrayi=0)continue;/数组元素为负数时,不执行下句回到while循环表达式判断Console.WriteLine(arrayi);if(i=array.Length)/未找到时i=array.Lengthi=-1;Console.WriteLine(在数组未找到:0,value);returni;,do-while循环语句,do-while循环语句,语句格式如下:do循环体while(布尔表达式);do语句重复执行括在里的一个语句或语句组,直到while指定的表达式计算为false。同样允许使用break语句结束while循环,和使用continue语句停止循环体的执行开始下一次迭代但不退出循环。do-while语句与while语句不同的是:内嵌循环体语句执行至少一次,例如intx=0;/如果x=6,输出6,doConsole.Write(x+”,”);x+;while(xintMax)txtMin.Text=txtMax.Text;txtMax.Text=intMin.ToString();txtResult.Text=GetPrime(intMin,intMax);,privatestringGetPrime(intintMin,intintMax)/程序主要代码intcount=0;StringBuildersbResult=newStringBuilder();for(inti=intMin;i=intMax;i+)/对区间内每一个整数循环判断是否是素数boolblnPrime=true;for(intj=2;ji/2+1;j+)/判断i是否被2一直到i/2+1整除if(i%j=0)/出现整除说明不是素数blnPrime=false;break;if(blnPrime)/是素数count+;sbResult.AppendFormat(0,i);sbResult.AppendFormat(共0个素数。,count);returnsbResult.ToString();,foreach语句,foreach语句为数组或对象集合中的每个元素重复执行一个循环体。foreach语句用于循环访问集合以获取所需信息,但不应用于更改集合内容,循环变量是一个只读型局部变量,如果试图改变它的值将引发编译时错误,如需要更改集合内容,使用其他循环语句。foreach循环语句的格式为:foreach(变量类型循环变量vin集合表达式e)循环体其中集合表达式e是,可枚举的集合,指实现System.Collections.IEnumerable接口的一个集合。如数组,ArrayList类等,foreach循环收集可枚举的集合中的各元素。,循环语句,对数组使用foreach的ForeachSample项目的部分代码如下:,intnumbers=4,5,6,1,2,3,-2,-1,0;foreach(intiinnumbers)System.Console.Write(0,i);/输出“56123-2-10”int,numbers2D=newint3,29,99,3,33,5,55;foreach(intiinnumbers2D)System.Console.Write(0,i);/输出“999333555”,跳转语句,跳转语句有以下几种:break语句用于终止最内层的while、do-while、for和switch等语句的执行。当程序遇到这一语句后,跳出所在循环语句或switch语句,执行后面的语句。continue语句,当程序循环遇到这一语句后,停止当前进行的这次循环并把控制返回到当前循环的的布尔表达式判断是否继续循环,以便于进行下一次循环。return语句终止方法的执行并将控制返回给调用该方法的语句。不能在finally块中使用return语句。它还可以返回一个可选值,如。return表达式。如果方法为void类型,则可以省略return语句。goto语句将程序控制直接传递给标记语句。语法格式为:goto标号;gotocase表达式;gotodefault;goto语句可用来跳出循环和switch语句。它无条件地转移程序的执行控制,其转移目的地是一标号,因此要求标号与goto语句处在同一个方法中。goto语句例子如下:,switch(n)case1:cost+=25;break;case2:cost+=25;gotocase1;/转到case1语句for(inti=0;ix;i+)for(intj=0;jy;j+)if(arrayi,j.Equals(myNumber)gotoFound;/转到标号FoundConsole.WriteLine(Thenumber0wasnotfound.,myNumber);Found:Console.WriteLine(Thenumber0isfound.,myNumber);,异常处理,异常是程序运行程序时遇到的任何错误情况或意外行为。例如数据类型从字符串转换整型intintA=int.Parse(strA);如果strA不是整数的字符串如strA=”A”则有引发FormatException异常。在语句intResult=(int)(100/intA);如果intA是0,则有引发DivideByZeroException零除数异常。异常处理使用try、catch和finally关键字来尝试可能未成功的操作,处理可能发生的异常,以及在事后清理资源。代码如下:tryintintResult=(int)(100/intA);catch(DivideByZeroExceptionerr)Console.WriteLine(零除数异常);,异常处理语句try-catch语句,将可能引发异常的代码节放在try块中,而将处理异常的代码放在catch块中。catch块是一系列以关键字catch开头的语句,语句后跟异常类型和要执行的操作。如果能确定在try语句块中可能发生的异常类型,那么catch语句可以捕捉相应的异常类型;如果事先并不知道try语句块中会引起哪一种异常,则在catch语句中可以忽略异常的类型。如果是多个异常,可以用多个catch语句块,格式如下:try/try语句块catch(类型1参数1)/针对类型1的异常处理catch(类型2参数2)/针对类型2的异常处理catch(类型n参数n)/针对类型n的异常处理,异常处理,staticvoidCopyArray()intarray1=0,0;intarray2=0,0;tryArray.Copy(array1,array2,-1);/数组array1拷贝到array2,-1是复制长度-错Console.WriteLine(本语句因上句出错而无发执行);catch(ArgumentOutOfRangeExceptione)Console.WriteLine(Error:0,e);/*finallyConsole.WriteLine(Thisstatementisalwaysexecuted.);*/,下面是使用Try-Catch的CopyArray()方法(TryCatch项目):,方法执行结果将显示“Error:System.ArgumentOutOfRangeException:要求非负数。”,使用Finally块,异常发生时,执行将终止,并且控制交给最近的异常处理程序。这通常意味着不执行希望总是调用的代码行。有些资源清理(如关闭文件)必须总是执行,即使有异常发生。为实现这一点,可以使用Finally块。Finally块总是执行,不论是否有异常发生。格式有两种:try语句块-finally语句块和try语句块-catch(s)语句块-finally语句块。如上例:Finally块注释关闭了,去掉注释就是try-catch-finally,如果去掉catch块就是tryfinally。,异常处理,throw语句,可以以两种不同的方式引发异常:C#语句和表达式执行过程中激发了某个异常的条件使得操作无法正常结束从而引发异常,如整数除法操作分母为零时将抛出一个System.DivideByZeroException异常等。throw语句无条件主动抛出异常。throw语句用于在程序执行期间主动发出异常的信号。throw语句格式:throw;或throwexpression;其中expression是System.Exception类或派生类的对象。throw语句例子:classMyException:System.ExceptionthrownewMyException();if(s=null)thrownewArgumentNullException();,异常处理,下面是包含了各种创建和引发异常及异常处理的TryCatch项目的例子的代码:,classProgramstaticvoidMain(stringargs)tryinvertStr(adc);/FormatExceptioninvertStr(0);/DivideByZeroExceptioninvertStr(45);/正常invertStr(-1);/主动抛出一个异常invertStr(3);/因前句异常,该句无法执行catch(Exceptionerr)/捕捉invertStr()方法未处理或重新抛出的异常Console.WriteLine(在Main()出错:+err.Message);staticvoidinvertStr(stringstrA)intintResult;tryintintA=int.Parse(strA);if(intA100)/主动抛出一个异常thrownewException(string.Format(输入0不在0,100之间,intA);intResult=(int)(100/intA);Console.WriteLine(未发生异常,100/0=1,strA,intResult);,catch(FormatExceptionerr)Console.WriteLine(在invertStr(0)出错:1,strA,err.Message);catch(DivideByZeroExceptionerr)Console.WriteLine(在invertStr(0)出错:1,strA,err.Message);catch(Exceptionerr)Console.WriteLine(在invertStr(0)出错:1,strA,err.Message);throw;/重新主动抛出err异常finallyConsole.WriteLine(invertStr(0)方法finally块结束,strA);Console.WriteLine(invertStr(0)方法try-catch-finally后的语句,strA);,
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!