第3章 流程控制与函数_第1页
第3章 流程控制与函数_第2页
第3章 流程控制与函数_第3页
第3章 流程控制与函数_第4页
第3章 流程控制与函数_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

1、主 编 鲁 立 张松慧中国水利水电出版社3.1 选择语句 C#语言提供了条件语句(即if语句)和多路分支语句(即switch语句)实现选择结构。 第3章 流程控制与函数 3.1.1 if语句条件语句即if语句, if语句的基本功能是:判断给定的条件是否满足,从而选择执行给出的对应操作。if语句有三种基本形式:if、if-else、if-else-if。 1. 双分支的if语句提供两种选择。格式:if(表达式) 语句1 else 语句2功能:先计算表达式的值,根据表达式的值提供两种选择,当表达式值为真(即非0),选择执行语句1;否则,选择执行语句2。使用此形式的if语句就可以根据表达式的值在语句

2、1和语句2中选择一个执行。例如:if(ab) Console.WriteLine(较大的是0,a); elseConsole.WriteLine(较大的是0,b);此程序段的功能是选择输出两个变量a和b中较大的值。 说明:(1)书写时表达式两侧的圆括号不可少。(2)表达式通常是逻辑表达式或关系表达式,也可以是任意类型的表达式(如整型、实型、字符型等)。(3) if 和else 是C#语言的关键字,且else 不是独立的语句,它是if语句的一部分。使用时else必须与if配对,共同组成一条if-else 语句。(4) “语句1”称为if子句 ,“语句2”称为else子句,可以是单条语句,也可以是

3、用“”括起来的复合语句,分别代表双分支选择结构的分支之一,不要把子语句理解为独立的语句。 2. 单分支的if语句如果只提供一种选择则构成了单分支的if语句。格式:if(表达式) 语句功能:先计算表达式的值,当表达式的值为真(即表达式的值非0),执行其后的语句;否则,无操作,顺序执行if语句后面的语句。如:if (a 0) a = -a; Console.WriteLine(结果为:0, a); 3. 多分支的if语句如果提供多种选择,则可以采用if-else-if形式的语句(即多分支选择结构)。格式:if(表达式1) 子语句1else if(表达式2) 子语句2else if(表达式3) 子语

4、句3else if(表达式n) 子语句nelse 子语句n+1功能:自上而下有序地判断条件表达式,一旦发现某个表达式的值为真,则执行该表达式后面的子语句,其余子语句不被执行。如果所有条件表达式的值均为假,执行最后一个else分支后的子语句n。 说明:(1)最后一个else常作为缺省条件,即当前面的所有条件表达式测试都失败后,执行它后面的子语句n+1。(2)无论有多少分支的if-else-if语句,它们都是一个if语句,在分析程序时尤其要注意这点,不要把一个语句理解为多个语句。(3)语句中的else和if之间均有空格,不要写成elseif形式。 3.1.2 switch语句switch语句,它的

5、功能和if-else-if类似,switch语句可以根据表达式的不同取值,直接进行多分支选择处理,使程序的结构清晰明了,减少一些嵌套错误。switch语句的格式为:switch(表达式)case 常量表达式1:语句1;case 常量表达式2:语句2; case 常量表达式n:语句n;default: 语句 n+1;功能:switch语句对表达式进行连续测试。先计算switch后表达式的值,然后将该值与各case后面的常量表达式的值进行比较。当其值与某一常量表达式的值相同时,就从该case后面的语句开始执行,直到switch语句结束时为止;若其值与所有的常量表达式的值都不相同,就执行defaul

6、t后面的语句,若不存在default,则不进行任何处理。 说明:(1)switch后面的“表达式”可以为任何类型。(2)switch语句与if语句不同,switch通过测试表达式的值与case常量表达式的值是否相等来进行分支的选择,而if语句是通过判断表达式的值是否为0(即真/假)来实现选择结构。(3)同一个switch语句中,每一个case常量表达式的值必须各不相同。(4)switch语句中表达式的类型必须与各case常量表达式的类型一致,否则无法进行匹配。(5)各个case和default的出现次序不影响执行结果。(6)switch语句中允许出现空的case语句,即多个case共用一组执行

7、语句。 (7)switch语句通常和break语句联合使用。break语句也称为间断语句,可以在switch语句中的case语句之后加上break语句。break语句的作用是跳过后面的case部分,结束switch语句。因此如果没有break语句,程序在执行完相应的case语句后不会退出,而是继续执行下一个case语句,直到switch语句结束,而有了break语句后每当执行到break语句时,立即跳出switch语句体,从而起到真正的分支作用。 3.1.3 嵌套条件的if语句在if语句中又包含一个或多个if语句称为if语句的嵌套。一般形式如下:if(表达式1)if (表达式2) 语句1els

8、e 语句2elseif (表达式3) 语句3else 语句4说明:(1)上面为嵌套的一般形式,其对应的N-S图为图4-5。注意,嵌套的if语句即可作为if的子语句,也可以作为else的子语句。(2)通过嵌套,上面的语句共包含三个条件表达式,对应为具有四个分支的选择结构。(3)此形式中包含外层的if语句和内层嵌套的if语句,嵌套也可以是两层以上。(4)注意嵌套语句中if与else的配对关系。原则是:从最内层开始,else总是与它上面离它最近的尚未配对的if配对。 3.2 循环语句循环语句可以重复执行一个程序模块,C#语言中的循环语句有while语句、do-while语句、for语句和foreac

9、h语句。其中foreach语句用于集合的循环操作。循环语句每次在执行前需要判断循环条件是否成立,如果满足则重复执行循环体语句,直到条件语句不成立才退出。循环结构可以看成是一个条件判断语句和一个回转语句的组合。这样就不用多次书写同一代码。 3.2.1 while语句while语句是一个条件循环语句,在条件为true的情况下,会重复执行循环体内的语句。直到条件为false为止。while语句一般用于循环次数不确定的场合,while语句语法如下:while(条件表达式)循环体循环体内的程序可能会执行多次,也可能一次也不执行。说明:(1)在整个循环过程中,需要有一个循环控制变量发生变化,使得循环趋向结

10、束;如果没有修改该变量的值或没有这个趋势,有可能导致循环无法终止。(2)在循环体中如果包含break语句,当程序执行到break语句时,就会结束循环;执行循环结构之后的语句。 3.2.2 do-while语句do-while语句与while语句类似,区别在于:它首先执行循环体代码,然后判断循环条件是否满足,也就是说,do-while循环不论条件是否满足,都至少要执行一次循环体内容;while循环如果条件不满足,循环体将不会执行。do-while语句的语法格式为:do循环体while(条件表达式) 3.2.3 for语句for循环是能控制循环次数的循环,for循环语句使用一个循环控制变量,通过将

11、该变量初始化、循环控制条件以及按规律修改的循环变量值都写在同一程序中。只要循环控制条件为true,则重复执行循环代码程序,直到循环控制条件为false时退出循环。for语句的语法格式为:for(初始值设定;循环条件; 循环控制)循环体说明:(1)执行for循环语句时,首先执行初始值设定。(2)判断循环条件值是true还是false,若循环条件表达式的值为false,则转到步骤(4)执行;若循环条件表达式的值为true,则执行循环体的语句,然后求循环控制表达式的值。(3)循环控制表达式的值为true,转回步骤(2)。(4)结束循环,执行程序中for循环之后的语句。 3.2.4 foreach语句

12、foreach语句特别适合对集合对象的存取。可以使用foreach语句逐个提取集合中的元素,并对集合中每个元素执行语句中的操作。foreach语句的语法格式为:foreach(数据类型 变量 in 表达式) 循环体说明:(1)数据类型是用来声明循环变量的;表达式对应于作为操作对象的一个集合。(2)循环变量是一个只读的局部变量,在循环体中不能改变它的值;循环变量的数据类型一定要与表达式包含的集合中元素的数据类型相同。 3.3 跳转语句C#中,可以使用跳转语句实现无条件地改变程序的执行流程,C#跳转语句包括break语句、continue语句、goto语句、return语句和throw语句。3.3

13、.1 break语句和continue语句1. break语句break语句功能是退出直接封闭它的switch、while、do-while、for或foreach语句。语法格式为:break; 2. continue语句continue语句功能是不再执行continue语句后面循环语句内剩余的语句,而是进入下一次循环,continue语句可以用在while、do-while、for或foreach语句的内部。语法格式为:continue; 3.3.2 goto语句goto语句用于在程序当前位置直接跳转到指定位置,指定位置应该设置标签。goto语句的语法格式为:goto ;需要说明的是,got

14、o语句这种无条件跳转语句会破坏程序的可读性;所以,在程序中应减少使用goto语句,避免程序逻辑出现混乱。 3.3.3 return语句return语句一般用于函数中,使用return语句后将不执行它后面的代码,而返回到调用函数的主程序中。使用时直接将其放在希望返回的位置即可。 3.4 异常处理异常是指在程序执行过程中出现不正常的情况。对程序的异常处理非常重要,一般情况下,一个比较完整的程序要尽可能考虑并处理可能出现的各种异常,如数据库操作的异常、文件操作的异常、运算时的异常等。3.4.1 trycatch语句trycatch语句可以在程序执行异常时,不但给用户提示异常信息,还会继续执行程序。t

15、ry子句用来尝试可能未成功的操作,包含可能产生异常的代码;而catch子句可以处理存在的异常,处理或响应异常的代码。trycatch语句的格式为: try 语句块catch(异常类型 标示符1)异常处理1catch(异常类型 标示符2)异常处理2.说明:一个try后可以跟一个或多个catch,可以在一段程序中处理多种异常情况。 3.4.2 trycatchfinally语句 trycatchfinally语句可以在finally子句中清除try子句中分配的任何资源,以及运行任何即使在发生异常时也必须执行的代码。finally也能与try组成tryfinally结构。trycatchfinall

16、y语句的格式为:try 语句块catch(异常类型 标示符)异常处理finally语句块3.5 函数的定义与使用 程序中某些功能可能会反复多次使用,比如数据的查询、修改等。如果每次应用都编写新的代码,又大大加重编程人员负担。而且,一般情况程序的所有功能并不会同时使用,如果都调入内存就加大了资源的负担。 因此,在编写程序时,可以将程序分为独立功能的模块,这些独立的程序模块就是函数。3.5.1 函数的定义 在使用函数前必须对函数进行定义,函数由函数首部和函数体组成。函数的语法格式为:修饰符 返回类型 函数名(形参列表) 函数体说明:(1)语法中“修饰符”是指存取修饰符,包括new、public、s

17、tatic、virtual、sealed、abstract和extern等。(2)“返回类型”规定了函数返回值的数据类型,如函数无返回值,则使用void表示;如有返回值,则在函数体中有return语句返回数据。(3)“形参列表”是函数传入值的参数格式,如果有多个不同的参数,则每个参数都需要声明类型。 3.5.2 函数的调用 函数在定义之后,就可以在程序中调用;可以通过类名或者对象名来进行调用。调用函数的语法为:对象名.函数名(参数1,参数2,参数3,.)在调用函数时,实参和形参必须完全匹配,形参和实参之间的类型、个数和顺序都要完全匹配。1.在单行语句中调用 函数作为单一的一行语句进行调用,例如

18、:static void max(int x,int y)max(x,y); 这种方法调用函数没有返回值,函数只是实现某种功能,如打印、报警等。 2.在表达式中调用 函数作为表达式的一部分来调用,如:static int max(int x,int y)k=max(x,y); 这种方式函数有返回值,将函数max的返回值赋值给变量k;函数返回值的数据类型与变量数据类型相同。 3.作为参数调用 可以将函数作为另一个函数的参数进行调用。这种情况需要函数有返回值,并将返回值传递给另一个函数的参数,这里要求它们的数据类型相同。如:static int max(int x,int y)main().Console.WriteLine(0, max(x,y);.3.5.3 函数的递归调用 1.函数递归调用的概念 在函数中,有一种特殊的用法:函数可以间接或直接地调用函数自身,这种调用称为函数的递归调用。 2.函数递归的条件一个有意义的递归算法应该满足以下条件。(1)可以将要解决的问题分解为一个新的问题,而这个新问题是原问题的一个子问题,即新问题和原问题的解法会形成一个有规律的通用公式。例如: 1+2+3+4+5连续累加的问题,可以看成f(5)=f(5-1)+5,而f(5-1)=f(4)=f(4-1)+4,依次类推到f(3)=f(3

温馨提示

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

评论

0/150

提交评论