《C Sharp 3.0从基础到项目实战》课件第5章 流程控制语句与函数_第1页
《C Sharp 3.0从基础到项目实战》课件第5章 流程控制语句与函数_第2页
《C Sharp 3.0从基础到项目实战》课件第5章 流程控制语句与函数_第3页
《C Sharp 3.0从基础到项目实战》课件第5章 流程控制语句与函数_第4页
《C Sharp 3.0从基础到项目实战》课件第5章 流程控制语句与函数_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

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

文档简介

第5章流程控制语句与函数5.1控制程序流程5.2使用选择语句5.3使用循环语句5.4使用goto语句5.5嵌套使用流程控制语句5.6函数5.7常用内部函数5.8小结5.1控制程序流程控制程序流程的方法很多,主要有如下3种。选择语句:如同考试中的单选题目,选择执行了某条语句,另一条就不会再执行。循环语句:在需要将一个表达式进行多次重复运算时,可以使用循环语句,指定其循环次数或者界定其退出循环的条件。goto语句:即标记语句,使程序自动跳到标记语句处执行,标记语句执行完毕又直接回到调用标记语句处。需要注意的是,在程序中最好不使用goto语句,因为该语句会使得程序代码可读性很差。5.2使用选择语句5.2.1if语句用if语句实现单分支选择结构

if(表达式)语句;语句中的表达式通常用于表示条件,应为关系表达式或逻辑表达式。语句只是一条语句,如果在条件满足时需要执行多条语句,应使用花括号({})括起来,使之成为语句块。“(表达式)”中的括号不能省略。5.2.1if语句示例:staticvoidMain(string[]args){doublescore;score=Convert.ToDouble(Console.ReadLine());if(score>=60)Console.WriteLine("恭喜你,通过了这次考试!");Console.Read();}5.2.1if语句用if语句实现双分支选择结构

if(表达式)

语句1;else

语句2;5.2.1if语句用if语句实现多分支选择结构if(表达式1)语句1;elseif(表达式2)语句2;elseif(表达式3)语句3;……else语句n;5.2.2switch语句在C#语言中,除了可以使用if语句实现多分支外,也可以使用switch语句。switch(表达式){case常量表达式1:

语句1;break;case常量表达式2:

语句2;break;……case常量表达式n:

语句n;break;default:

语句n+1;break;}5.2.2switch语句switch表达式的类型为sbyte、byte、short、ushort、int、uint、long、ulong、char、string、枚举或用户自定义类型。每个case分支中的常量表达式必须能隐式转换为switch表达式的类型,且常量表达式的值不能相同,从而保证分支选择的唯一性。如果某个分支有多条语句,可以用花括号括起来,也可以不加花括号。default分支可有可无,但是每个switch语句最多只能有一个default分支。当default语句缺省时,如果switch后面的表达式值与任意常量表达式值不相等,将不执行任何语句,直接退出switch语句。各分支语句中的break不可省略,否则将会出现错误。使用switch语句时一定要注意,case后面必须是常量表达式,以冒号结束而不是分号,且case语句后一定要跟break语句,这一点跟Java和C++不同。5.2.2switch语句示例:staticvoidMain(string[]args){doublescore;charclass1;inti;Console.WriteLine("请输入你的成绩:");score=Convert.ToDouble(Console.ReadLine());i=(int)score/10;switch(i){case10:case9:class1='A';break;case8:class1='B';break;case7:class1='C';break;case6:class1='D';break;default:class1='E';break;}Console.WriteLine("你的成绩等级为:{0}",class1);}5.2.3switch语句的控制类型switch语句的控制可以按case语句的排列先后顺序进行,也可以通过跳转语句来实现。示例:实现switch语句的跳转语句。

staticvoidMain(string[]args){intdays=0;intmonth=3;switch(month){case1:case3:case5:case7:case8:case10:case12:days=31;break;case2:days=28;break;case4:case6:case9:case11:days=30;break;default:days=0;break;}Console.WriteLine("thismonthhas{0}days",days);}5.3使用循环语句5.3.1while语句while语句是用来实现循环的语句,该类循环先测试循环条件再执行循环体,按照不同条件执行循环体部分零次或多次。它的语法形式如下。while(表达式)循环体部分;5.3.1while语句注意:循环体如果包含一条以上的语句,应以花括号括起来作为复合语句。在循环体中,通常应包含改变循环条件表达式值的语句,否则便会造成无限循环。由于先判断条件,可能出现第一次测试条件时,表达式的值就为false。此种情况下循环体将一次也不执行,又称“允许0次循环”。5.3.1while语句示例:

classTestWhile{staticvoidMain(string[]args){intnumber=1,sum=0;while(number<=10){sum+=number;number++;}Console.WriteLine("thesumis{0}",sum);Console.Read();}}执行上述代码,运行结果为:thesumis55。5.3.2do语句do循环语句实现的是直到型循环,该类循环先执行循环体再测试循环条件。do循环体语句while(表达式);5.3.2do语句示例:

classTestWhile{staticvoidMain(string[]args){intnumber=1,sum=0;do{sum+=number;number++;}while(number<=10);Console.WriteLine("thesumis{0}",sum);Console.Read();}}执行上述代码,运行结果为:thesumis55。5.3.3for语句for(表达式1;表达式2;表达式3)语句;5.3.3for语句表达式1、2、3都可以省略,分号不能省略。如果表达式1、2、3都省略,则将无终止地执行循环体。表达式2是循环控制条件,如果省略,循环将无终止地进行下去。表达式1一般用于为循环控制条件赋初值,也可以是与循环变量无关的其他表达式。如果表达式1省略或者是与循环条件无关的其他表达式,则应该在for语句之前给循环控制条件赋初值。表达式3一般用于改变循环控制条件的值。如果表达式3省略或者是其他与循环条件无关的表达式,则应该在循环体中另有语句改变循环条件,以保证循环能正常结束。5.3.4foreach语句foreach(类型标识符in表达式)嵌入语句;示例:staticvoidMain(string[]args){int[]list={10,20,30,40,50,60};foreach(intminlist)Console.Write("{0,-5}",m);Console.Read();}5.3.5break语句和continue语句break语句用于跳出包含它的switch、while、do、for、foreach语句,如果break不是在switch、while、do、for、foreach语句块中,将发生编译错误。当switch、while、do、for、foreach语句相互嵌套时,break语句只是跳出直接包含它的语句块。5.3.5break语句和continue语句

classTestBreak{staticvoidMain(string[]args){for(inti=0;i<10;i++){Console.Write("enteraword:");strings=Console.ReadLine();if(s=="end")break;Console.WriteLine("youentered:{0}",s);}Console.Read();}}5.3.5break语句和continue语句continue语句类似于break语句,也必须用于while、dowhile、for、foreach语句,它只从循环的当前迭代中退出,然后在循环的下一次迭代开始重新执行,而不是退出循环。需要注意如下事项。continue语句的目标地址为直接包含它的while、dowhile、for或者foreach语句的嵌套语句结尾。假如continue语句不能被while、dowhile、for或者foreach语句包含,将发生编译错误。当有while、dowhile、for或者foreach语句相互嵌套时,continue语句只适用于直接包含它的语句块。如果要在多个嵌套语句中完成转移,必须使用goto语句。5.3.5break语句和continue语句示例staticvoidMain(string[]args){for(inti=0;i<10;i++){Console.Write("enteraword:");strings=Console.ReadLine();if(s=="end")continue;Console.WriteLine("youentered:{0}",s);}Console.Read();}5.4使用goto语句

goto语句是除选择语句、循环语句之外的控制程序流程的语句,常用于将程序流程转移出嵌套范围。goto语句的常见用法为gotolable语句。其中,lable为一个标签,其语法形式为:标签1:5.4使用goto语句示例:staticvoidMain(string[]args){intn=1,sum=0;lable:if(n<=5){sum=sum+n;n++;gotolable;}Console.WriteLine("sum={0}",sum);Console.Read();}5.5嵌套使用流程控制语句选择结构的嵌套:if(表达式1)if(表达式2)

语句1else

语句2elseif(表达式3)

语句3else

语句45.5嵌套使用流程控制语句循环结构的嵌套示例:staticvoidMain(string[]args){inti=1,a=0;for(;i<=5;i++){do{i++;a++;}while(i<3);i++;}Console.WriteLine("a的值为{0},i的值为{1}",a,i);Console.ReadLine();}5.6函数5.6.1函数的定义与使用函数在使用之前必须先定义,函数定义的形式如下。函数修饰符数据类型标识符函数名(形式参数说明列表){

变量、数组的定义语句;

其他可执行部分}函数的返回值是需要返回给主调函数的处理结果,由return语句给出。对于无返回值的函数,其类型标识符为void,不需要return语句5.6.1函数的定义与使用示例:编写一个函数,用于求任意两个整数之间所有数的平方和。classProgram{privatestaticintpfh(intx,inty){inti,sum=0;for(i=x;i<=y;i++)sum=sum+i*i;return(sum);}}5.6.1函数的定义与使用函数的使用在类中的某个函数中,调用本类中由“函数名”指定的函数,其语法形式如下:函数名([实际参数列表])调用由另一个类的对象指定的函数,其语法形式如下:对象名.方法名([实际参数列表])只能调用非本类的另一个类的静态方法,其语法形式如下:类名.方法名([实际参数列表])5.6.2函数的参数传递参数传递中的类型转化示例:classProgram{staticfloatSqr(floatk){return(k*k);}staticvoidMain(string[]args){inty;floatyy;y=6;yy=Sqr(y);Console.WriteLine("{0}的平方是{1}",y,yy);

Console.ReadLine();}}5.6.2函数的参数传递参数传递的类型值传递时参数的语法形式如下:参数类型参数名引用传递参数的语法形式如下:ref参数类型参数名输出引用类型参数的语法形式如下:out参数类型参数名参数数组:使用params关键字声明参数的个数为不确定。5.6.2函数的参数传递引用传递参数示例:classProgram{staticvoidswap(refinta,refintb){inti;i=a;a=b;b=i;}staticvoidMain(string[]args){intx,y;Console.WriteLine("请输入x和y的值:");x=Convert.ToInt32(Console.ReadLine());y=Convert.ToInt32(Console.ReadLine());

swap(refx,refy);Console.WriteLine("转换后x和y的值为:{0},{1}",x,y);Console.ReadLine();}}5.6.2函数的参数传递输出引用类型参数示例:classProgram{staticvoidswap(outinta,outintb){inti;a=Convert.ToInt32(Console.ReadLine());b=Convert.ToInt32(Console.ReadLine());i=a;a=b;b=i;}staticvoidMain(string[]args){intx,y;swap(outx,outy);Console.WriteLine("转换后x和y的值为:{0},{1}",x,y);Console.ReadLine();}}5.6.2函数的参数传递参数数组示例:classProgram{publicstaticfloatAverage(paramslong[]array){longtotal,i;for(i=0,total=0;i<array.Length;++i){total=total+array[i];}return((float)total/array.Length);}staticvoidMain(string[]args){floatx=Average(1,2,3,5);Console.WriteLine("1、2、3、5的平均值为{0}",x);x=Average(10,20,35,52);Console.WriteLine("10、20、35、52的平均值为{0}",x);Console.ReadLine();}}5.6.3内联函数对于一些功能简单、规模较小又使用频繁的函数,CLR会做出是否使用内联函数的判断。内联函数不在调用时发生控制转移,而是在编译时将函数体嵌入在每一个调用处,这样就节省了参数传递、控制转移等消耗。注意:在何处内联代码完全由CLR判断得出,无法使用诸如C++中inline的关键字来控制哪些方法是内联的。5.6.4函数重载函数重载允许一个类中有同名的函数存在,即一个类中可以存在两个以上的函数名称相同。重载函数的形参必须不同,可以个数不同或者类型不同。示例:intadd(intx,inty);intadd(inta,intb); //错误!编译器不以形参名来区分函数intadd(intx,inty);voidadd(intx,inty); //错误!编译器不以返回值来区分函数5.6.4函数重载示例:classProgram{publicstaticintAdd(inti,intj){returni+j;}publicstaticstringAdd(strings1,strings2){returns1+s2;}publicstaticlongAdd(longx){returnx+5;}staticvoidMain(string[]args){Console.WriteLine(Add(1,2));Console.WriteLine(Add("1","2"));Console.WriteLine(Add(10));Console.ReadLine();}}5.7常用内部函数5.7.1随机函数介绍在C#中要生成随机数需要使用Random类。该类的主要方法是Next方法,它生成一个介于两个整数之间的随机数,其语法形式如下:publicvirtualintNext([intminValue,intmaxValue]);5.7.1随机函数介绍示例:

classProgram{staticvoidMain(string[]args){Randomop1=newRandom(10);Randomop2=newRandom();intresult;result=op1.Next(10,99)+op2.Next(0,9);Console.WriteLine(result);Console.Read();}}由于结果是随机值,所以这里不再描述运行结果,5.7.2格式化函数介绍.NET为处理数字、日期以及字符串的格式化提供了WriteLine方法、Format方法和ToString方法。通过WriteLine方法和Format方法可对多个变量进行格式化,ToString方法只能对一个变量进行格式化。对于使用WriteLine方法和Format方法格式化字符串,规定格式的一般语法形式如下。{N,[M][:格式码精度]}对于使用ToString方法格式化字符串,规定形式的一般语法如下。格式码精度5.7.2格式化函数介绍[]:表示其中的内容为可选项。N:表示要格式化的参数的索引。M:可选参数,表示格式化后的参数所占的宽度。如果M是负数,那么格式化后的值就是左对齐的;如果M是正数,那么格式化后的值是右对齐的;如果未指定M,则默认为零。格式码:可选的格式化代码字符串。精度:格式化输出的有效位数或小数位数。5.7.3日期函数介绍用于处理时间和日期的对象为DateTime结构和TimeSpan类。DateTime结构用于表示日期和时间,表示范围在0001年1月1日午夜12:00:00到9999年12月31日晚上11:59:59之间的日期和时间,最小时间单位等于100纳秒。TimeSpan类可以表示一个时间间隔,表示范围可以在Int64.MinValue到Int64.MaxValue之间。5.7.3日期函数介绍DateTime结构的常用方法如下:AddYears、AddMonths、AddDays、AddHours、AddMinutes、AddSeconds方法,用于将指定的年、月、日、时、分、秒加到DateTime上。Substract方法:日期相减。

温馨提示

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

评论

0/150

提交评论