Java面向对象程序设计(第二版)课件第5章-基本控制结构与实现_第1页
Java面向对象程序设计(第二版)课件第5章-基本控制结构与实现_第2页
Java面向对象程序设计(第二版)课件第5章-基本控制结构与实现_第3页
Java面向对象程序设计(第二版)课件第5章-基本控制结构与实现_第4页
Java面向对象程序设计(第二版)课件第5章-基本控制结构与实现_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

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

文档简介

第5章基本控制结构与实现教学内容选择结构程序设计循环结构程序设计控制转移语句递归算法及其应用教学目标理解程序控制结构根据程序需要设计合理的布尔表达式掌握选择语句和循环语句的语法结构应用选择语句、循环语句实现选择结构、循环结构的程序设计掌握break语句、continue语句和return语句实现程序执行流程的转移具备初步描述算法的能力5.1引例(一)例5.1计算任意两个整数的乘积。分析:要计算任意两个整数的乘积,需要从键盘输入两个整数。从键盘输入数据的方法很多,此程序中应用Java输入输出流中的BufferedReader及InputStreamReader类声明并创建字符输入流对象,应用readLine()方法获得一个字符串,要使用Integer类中的parseInt方法将字符串转换为整型。关于Java输入输出流的详细应用请参考第10章。程序源代码如下:例5.1程序源代码例5.1程序说明以上Java程序是按照书写的顺序,从第一条语句顺序执行到最后一条语句。这种R程序结构称之为“顺序结构”。不是所有的问题都能通过顺序执行解决的,例如有这样的问题:判断某个学生的成绩是否及格?首先要设定一个及格分数线(假定60分是及格分数线),如果某个学生的成绩大于或等于60分,则该学生成绩及格,否则不及格,这类问题采用选择结构可以解决。在许多实际问题中,经常遇到具有规律性的重复运算,因此在程序设计中就需要将某些语句重复执行,这种重复处理的过程采用另一种重要的基本结构——循环结构可以实现。5.1引例(二)例5.2编写程序,判断某个学生的成绩是否及格分析:上述问题实际分两种情况:及格或不及格,应用选择结构中的if…else语句可以解决此类问题。设计if布尔表达式score>=60,若其值为true,则成绩及格,否则成绩不及格。程序源代码如下:例5.2程序源代码程序运行结果如下:67.0及格!5.1引例(三)例5.3计算s=1+2+3+…+10。分析:上述问题可以用迭代方法实现,迭代法也称辗转法,是一种不断用变量的旧值递推新值的过程。如s=0+1,s=1+2,s=3+3,s=6+4…,这里,我们总是用前一次计算的和s作为下一次的一个加数进行累加,那么,在程序中是否要使用10个表达式来求和呢?显然是不可取的,可以在程序设计中用一种循环结构来实现这种重复操作。以下程序中,应用循环语句中的for(inti=1;i<=10;i++)控制i的值分别取1、2、3、…、10,i的值每变化一次,都执行语句s=s+i;执行10次,每次总是用前一次的值s与i累加。程序源代码如下:例5.3程序源代码程序运行结果如下:1+2+3+...+10=55程序总结以上案例中分别应用了程序设计中的三种基本结构:顺序结构、选择结构和循环结构。在解决具体问题时,通常采用选择语句、循环语句实现上述三种结构的程序设计,实现相应的算法。顺序结构程序的执行完全按照程序书写顺序执行,是最简单的一种基本结构。在前面的章节中,程序的结构采用的基本上是顺序结构,下面将详细介绍选择结构和循环结构的编程方法。5.2选择语句选择语句用于判断给定的条件是否满足(条件值为true或false),以决定执行某个分支程序段。Java有几种类型的选择语句:单分支if语句、双分支if…else语句、嵌套if语句、if…elseif语句、多分支switch语句等。5.2.1单分支if语句单分支if语句格式如下:if(布尔表达式){语句块;}程序执行流程图如图5-1所示。执行过程是,如果布尔表达式值为true,则执行语句块,否则,不执行语句块,程序执行流程转移到if后面的语句。如:if(x>0) y=1;表示当x>0的值为true时,执行语句“y=1;”。布尔表达式语句块语句truefalse说明(1)布尔表达式可以是布尔类型的常量、变量、关系表达式或逻辑表达式等,如果是其他类型,则编译出错。布尔表达式必须写在()中(2)语句块的语句可以是Java中的任何语句,若只有一条语句,可以省略{},若为复合语句,则必须使用{}说明(续)例如,定义intx=-5;,在以下两个程序段中,x>0的值为false,if语句块均不执行。程序段一inty=0;if(x>0)y=1;System.out.println("y="+y);程序段二inty=0;if(x>0){y=1;System.out.println("y="+y);}在程序段一中,单语句y=1;为if语句块,该语句不执行;y的值仍然为0,跳出if语句后执行输出语句,输出结果为:y=0在程序段二中没有输出结果,{y=1;System.out.println("y="+y);}为if语句块,输出语句不执行。单分支if语句示例例5.4从键盘输入一个整数,判断该整数是否是偶数。分析:判断输入的整数是否能被2整除,设置判断的布尔表达式为num%2==0。若条件成立,则输出提示信息。程序源代码如下:例5.4程序源代码5-2例5.2输入对话框程序运行后首先出现如图5-2所示的对话框,如果输入240,则输出“240是偶数。”。5.2.2双分支if…else语句单分支if语句在指定条件为true时执行语句,否则不执行任何操作。如果要执行双选择操作,可以应用双分支if…else语句来实现。if…else语句的格式如下:if(布尔表达式) {语句块1;}else {语句块2;}程序执行流程图如图5-3所示。执行过程是,如果布尔表达式值为true,执行语句块1;否则执行语句块2。布尔表达式语句块1语句truefalse

语句块25.2.2双分支if…else语句(续)例如,下面求绝对值的函数可以用以下的程序段实现:if(x>=0)y=x;elsey=-x;注意:以上函数也可以用第2章的条件表达式实现:y=(x>=0)?x:―xy=x(x>=0)-x(x<0)双分支if…else语句示例例5.5用Math类的random()方法产生一个0~1之间的一个实数,若该数大于或等于0.5,则输出“num>=0.5”,否则输出“num<0.5”。分析:random()方法产生的随机数在0.0和1.0之间。判断该数是否大于或等于0.5,此处设置判断的布尔表达式为num>=0.5。若布尔表达式值为true,则输出“nmu>=0.5”,否则,即布尔表达式值为false,则输出“num<0.5”。程序源代码如下:例5.5程序源代码5.2.3嵌套if语句if语句或if…else语句中的语句块可以是任何合法的Java语句,包括if或if…else语句。我们称之为嵌套if语句。嵌套可以一层一层展开,原则上没有深度的限制。但是,嵌套的层数不宜过多。例如,下面就是一个嵌套的if语句。if(score1>80){if(score2>80)System.ou.println("score1和score2都大于80。");elseSystem.ou.println("score1大于80,score2小于或等于80。");}5.2.3嵌套if语句(续)嵌套的if语句可以实现多重选择。例如下面的程序段,要求根据加、减、乘、除运算符计算表达式的值。intx=5,y=4,z; charch='+';if(ch=='+')

z=x+y;elseif(ch=='-')

z=x-y;elseif(ch=='*')

=x*y;else(ch=='/')

z=x/y;System.out.println(z);5.2.3嵌套if语句(续)这个程序段的执行过程是,从第一个if语句开始依次判断布尔表达式的值,当出现某个值为true时,则执行其对应的语句;如果所有的布尔表达式的值为false,则执行else后的语句。只要一个条件满足,执行相应语句后if语句就结束,而不再对后面的布尔表达式进行判断。如当前运算符是“+”,则进行加法运算。以上if…elseif语句可以实现多重条件选择。5.2.4switch语句过多使用嵌套的if语句,会增加程序阅读的困难,Java提供了switch语句来实现多重条件选择。switch语句根据表达式(整型或字符型)的值来选择执行多分支语句,一般格式如下:switch(整型或字符型表达式){case常量表达式1:语句序列;[break;]case常量表达式2:语句序列;[break;]….case常量表达式N:语句序列;[break;][default:语句序列;] }执行过程是,计算整型或字符型表达式的值,并依次与case后的常量表达式值相比较,当两者值相等时,即执行其后的语句。switch语句说明(1)整型或字符型表达式必须为byte、short、int或char类型。(2)每个case语句后的常量表达式值必须是与表达式类型兼容的一个常量(它必须为一个常量,而不是变量),重复的case值是不允许的。(3)关键字break为可选项,放在case语句的末尾。执行此语句后,将终止当前switch语句。若没有break语句,将继续执行下面的case语句,直到switch语句结束或者遇到break语句。(4)default为可选项。当指定的常量表达式都不能与switch表达式的值匹配时,将选择执行default后的语句序列。case语句和default语句次序无关,但习惯上将default语句放在最后。switch语句示例例5.6将以上根据加、减、乘、除运算符计算表达式值的问题用switch语句实现。分析:从键盘输入运算符所引用的类和例5.1相同,方法read()的功能是从输入流中读取一个字节的数据。程序源代码如下:例5.6程序源代码5.3循环语句循环结构是程序设计中实现重复操作的一种结构。其特点是,在给定条件成立时,反复执行某程序段,直到条件不成立终止。给定的条件称为循环条件,反复执行的程序段称为循环体。Java提供了三种形式的循环结构:while循环、do….while循环以及for循环。5.3.1while循环while循环又称当型循环,它的格式如下:while(布尔表达式){循环体;}执行过程是,判断布尔表达式的值,当其为true时,执行循环体;当布尔表达式的值为false时,循环结束。while循环的程序执行流程如图5-4所示。falsetrue布尔表达式

循环体下一条语句

图5-4while循环程序执行流程图5.3.1while循环(续)例如,以下程序段在同一行输出10个A。inti=1;while(i<=10){System.out.print("A");i++;}以上程序段的循环条件是布尔表达式i<=10,循环体是{}中两条语句。程序段执行时根据i的值判断i<=10的值为true,则执行循环体;否则退出循环。循环体被执行10次,当i=11时,退出循环。while循环说明(1)若循环体语句为单语句,{}可以省略。否则,不能省略{}。(2)若首次执行时循环条件为false,则循环体一次也不执行;若循环条件永为true,则循环体一直执行,称为死循环。在循环体中应包含使循环结束的语句,以避免死循环。(3)允许while语句的循环体又是while语句,从而形成循环的嵌套。while循环示例例5.7计算1-2+3-4...-100。分析:一组有规律的数据的计算一般都用循环程序来解决。程序中定义整型变量sum和i,其中sum用于存放和,初值为0,i用做循环控制变量及其第二个加数,初值为1。该算式中奇数项是加法,偶数项是减法,可以给第二个加数乘以标志变量来实现各项运算符的变化。程序源代码如下:例5.7程序源代码程序运行结果如下:1-2+3-4...-100=-505.3.2do-while循环do-while循环语句的特点是先执行循环体,再判断循环条件是否成立,格式如下:do{

循环体;}while(布尔表达式);执行过程是,首先执行一次循环体语句,然后判断布尔表达式的值,当其值为true时,返回重新执行循环体语句,如此反复,直到表达式的值为false,循环结束。其流程图如图5-5所示。循环体语句布尔表达式truefalse图5-5do…while循环程序执行流程图5.3.2do-while循环(续)do-while循环首先执行循环体,再判断循环条件。如果条件成立,则重复执行循环体;条件不成立,则结束循环,循环体至少被执行一次。而while循环首先判断循环条件,若条件不成立,则循环体一次也不执行,直接退出循环。这是do-while循环和while循环最大的区别。do-while循环语句可以组成多重循环,而且也可以和while语句相互嵌套。例5.8用do-while循环计算1-2+3-4...-100。注意:在do-while语句的while(表达式)后必须加分号。

总结通过上面两例,我们发现,对同一个问题可以用while循环语句处理,也可以用do-while循环语句处理。一般情况下,可以用两种语句处理同一问题,但要注意循环控制条件有些情况下可能不同。5.3.3for循环for循环的使用最为灵活,可以用于循环次数已经确定的情况,也可以用于循环次数不确定但循环结束条件已知的情况。它可以取代while循环和do-while循环。for循环语句的一般格式如下:for(表达式1;表达式2;表达式3){循环体;}说明(1)()内的三个表达式之间用分号分隔。其中,表达式1是for循环的初始化部分,一般用来设置循环控制变量的初值。表达式1允许并列多个表达式,之间用逗号分隔,表达式1仅在循环开始时执行一次;表达式2一般为条件表达式,结果为布尔型,当值为false时,退出循环,值为true时,则重复执行循环体。表达式3一般是增量表达式,该式决定循环控制变量的变化方式。(2)每执行循环体一次,就要重新计算表达式3,然后由表达式2判断,决定循环体是否继续执行。循环体若为一条语句,{}可以省略;若为多条语句,{}不可省略。例5.9用for循环计算1-2+3-4...-100。注意:for循环、while循环以及do-while循环都允许嵌套,并且可以相互嵌套,构成多重循环结构。for循环的使用方式for循环的使用方式比较灵活,可以有以下几种形式。1.在for语句的表达式1中,允许定义多个变量,这些变量的数据类型相同并且它们的作用域仅限于循环体内。例如,计算5!。for(inti=1,p=1;i<=5;i++)p*=i;2.在for语句中可以省略表达式1。例如,计算5!。inti=1,p=1;for(;i<=5;i++)p*=i;for循环的使用方式(续)3.在for语句中可以省略表达式2,不对循环条件进行判断,将会造成无限循环。一般可以采用在循环体内设置转移语句break来跳出循环。例如,计算5!。intp=1;for(inti=1;;i++){if(i>5)break;//结束循环p*=i;}

循环体内的if(i>5)break;语句表示,当i的值大于5时,则跳出循环,它代替了原来表达式2所起的作用。break语句将在第5.4节作将详细介绍。for循环的使用方式(续)4.在for语句中可以省略表达式3。例如,计算5!。intp=1;for(inti=1;i<=5;){p*=i;i++;}//改变循环变量i的值5.for语句中的各表达式都可以为空,但分号不能少。例如, for(;;)

在这种形式中,循环体内外应有相关语句实现各表达式的功能。6.for循环体可以是空语句,即循环过程什么也不做,仅仅产生一个时间延迟的效果。例如:for(inti=10;i>=1;i--);5.4控制转移语句控制转移可以有条件地改变程序的执行顺序。Java支持三种控制转移语句:break语句,continue语句和return语句。5.4.1break语句break语句的作用是使程序的执行流程从一个语句块内部转移出去。它只在switch语句和循环语句中使用,允许从switch语句的case子句中跳出,或从循环体内跳出。break语句分为带标号和不带标号两种形式,break;break标号名;其中,标号名用标识符表示,用来标识break语句欲跳出的语句块,它必须位于break语句所在的封闭语句块的开头处;标号名用冒号与其后面的语句分开。带标号的break语句可以从多重循环体的最内部跳出所有的循环,而不带标号的break语句只能跳到当前循环外层。例5.10break语句应用实例。分析:以下程序中当i的值为0、1、2、3、4时,i==5的值为false,不执行break语句,而是执行输出语句;当i的值变化到5时,i==5的值为true,执行break语句而中断循环,循环结束。本程序循环执行的次数为5。程序源代码如下:程序运行结果如下:i=0i=1i=2i=3i=45.4.2continue语句continue语句只能用在循环语句中,它的作用是终止当前这一轮循环,跳过本轮剩余的语句,直接进入下一轮循环。continue语句具有带标号和不带标号两种形式,

continue;continue[标号名];这个标号名必须放在循环语句之前,用于标志这个循环体。在while和do-while循环中,不带标号的continue语句使程序流程直接跳到循环条件的判断上;在for循环中,不带标号的continue语句直接计算表达式3的值,再根据表达式2的值决定是否继续循环。例5.11continue语句应用实例分析:以下程序中,当i的值为0、1、2、3、4时,i==5的值为false,不执行continue语句,而是执行输出语句;当i的值变化到5时,i==5的值为true,执行continue语句,跳过输出语句,然后转向执行for语句中的i++,开始下一轮循环。程序运行结果如下:

i=0i=1i=2i=3i=4i=6i=7i=8i=95.4.3return语句return语句用在方法中。当程序执行到这条语句时,终止当前方法的执行,返回到调用这个方法的位置之后。return语句有带参数和不带参数的两种形式,return;return(表达式);带参数的形式也可以为:return表达式;5.4.3return语句(续)不带参数的return语句被执行时,不返回任何值。这种方法的返回值类型为void类型。在没有返回值的方法体中,也可以不用return语句,程序执行完方法体的最后一条语句后,遇到方法的结束标志“}”时,程序流程将自动返回到调用这个方法的程序中。带参数的return语句后面跟一个表达式,当程序执行到这个语句时,就计算这个表达式,然后将其值返回到调用该方法的程序中。当表达式值的数据类型与方

温馨提示

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

评论

0/150

提交评论