《程序的流程控制》PPT课件.ppt_第1页
《程序的流程控制》PPT课件.ppt_第2页
《程序的流程控制》PPT课件.ppt_第3页
《程序的流程控制》PPT课件.ppt_第4页
《程序的流程控制》PPT课件.ppt_第5页
已阅读5页,还剩66页未读 继续免费阅读

下载本文档

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

文档简介

1、1,第3章 程序的流程控制,2,教学内容,3,参考文献,雍俊海. Java程序设计. 北京: 清华大学出版社, 2008. 雍俊海. Java程序设计教程(第2版). 北京: 清华大学出版社, 2007. 雍俊海. Java程序设计习题集(含参考答案). 北京: 清华大学出版社, 2006. 雍俊海. Java程序设计. 北京: 清华大学出版社, 2004.,4,教学目标,熟练掌握Java语言中的流程控制结构。 掌握Java中选择结构的基本原理及使用方法。 掌握Java中循环结构的基本原理及使用方法。 熟练掌握Java中数组的使用方法及能够熟练应用。,5,教学重点,流程控制构成了编程语言的逻辑

2、,而对这些控制语句的灵活运用又能有助于编程逻辑的清晰整理。 本章首先介绍了Java流程控制结构中的选择结构和循环结构,最后,介绍了跳转语句的基本原理。 掌握数组的声明,生成和初始化方法。 熟练掌握数组的使用,对于多维数据,要求学生主要掌握二维数组的声明、生成、初始化、及使用方法。,6,例1:打印一个3x4的矩阵,class DrawRect public static void main(String args) System.out.println(“*); System.out.println(“*); System.out.println(“*); ,3.1 程序的流程控制,7,例2:上

3、一个例子的变形,class DrawRect public static void main(String args) System.out.print(“*); System.out.print(“*); System.out.print(“*); System.out.println(“*n); System.out.print(“*); System.out.print(“*); System.out.print(“*);,System.out.println(“*n); System.out.print(“*); System.out.print(“*); System.out.pri

4、nt(“*); System.out.println(“*); ,问题:如何作出决策,提高程序的执行效率?,8,分析问题找出最佳解决方案,以上两种方法是初学者最容易想到的,但做了很多重复的工作,会使程序变得很繁琐,结构也不够清晰。在工作量少的时候似乎没那么明显,但当需要打印的矩阵比较大的时候就会显现出来(如:打印一个100 x60的矩阵)。 想解决这个问题我们可以通过循环来解决,讲到循环就要先介绍一下程序的结构化设计。,9,程序设计的三种结构,顺序结构 循环结构 选择结构 循环结构与选择结构所使用的语句又叫作流程控制语句,作用是改变程序的执行顺序。,10,Java的程序控制语句分为以下几类:选

5、择、循环和跳转。 块(即复合语句)是指由一对花括号括起来的若干条简单的Java语句。 块定义着变量的作用域(scope)。一个块可以嵌套在另一个块中。,3.1 程序的流程控制,11,3.1 程序的流程控制,public static void main(String args) int a; . int b; . / 变量b的作用域只在块内,到块外便失去作用。 . ,12,3.2 选择结构,if语句,if( expression) 语句1; 语句2;,练习:NumberTest .java,13,3.2 选择结构,if语句,语句块:用花括号括起来的语句。 if ( expression) st

6、atment1; statment2; 语句2;,左侧的语句也以下语句有什么不同? if ( expression) statment1; statment2; 语句2;,14,3.2 选择结构,提示: 合理采用缩进格式书写代码 坚持用左右大括号将if条件括起来的习惯,即使一条语句也括。 else子句 if (expression) statement1; else statement2; next_statement;,15,3.2 选择结构,if语句的嵌套形式,if() if() ; else ; else if() ; else ;,若条件1成立,则执行哪一组IF语句? 若条件1不成立,

7、则执行哪一组IF语句?,16,3.2 选择结构,if语句的嵌套形式,if () ; else if () ; else if () . else ;,17,3.2 选择结构,if语句的嵌套形式,if () ; else if () ; else if () . else ;,什么情况下会执行到语句2,什么情况下会执行到语句n? 语句1与语句2等是否可以都执行?,else总是和距 它最近的if配对,18,switch语句又称多分支选择语句 与if-else一样,是Java语言的条件选择语句,if 语句是判断条件的值,再从两个程序块中选择其中一块执行,只能出现两个分支,而switch语句可存在多个

8、分支。 处理多种分支情况时,用switch语句代替if语句可以简化程序,使程序结构清晰明了,可读性增强。,3.2.3 switch语句,19,switch语句的一般形式为: switch () case :; break; case :; break; . case :; break; default:; ,产生的结果值可以是char型,byte型,short型,int型或枚举型。,不加break语句,执行流程如何?,若条件值与case值均不匹配,而又没有此句,执行流程如何?,3.2.3 switch语句,20,switch () case : case : case :; break; .

9、case :;break; default :; 执行流程如何?,实例:SwitchSample.java,3.2.3 switch语句,21,for语句的一般形式为: for (; ; ) 其中: 初始化部分设置控制循环的变量的初值。 条件判断部分可以是任何布尔表达式。 迭代因子控制循环变量递增或递减。,3.3.1 循环-for,22,for语句的执行过程为: 执行初始化。 判断条件的返回值。如果为真执行循环体语句;如果为假就跳出for语句循环。 执行迭代因子,为下次循环做准备。 返回。 for语句是先执行,即先判断后执行,如果不满足判断条件,循环体可能一次都不能执行。,3.3.1 循环-f

10、or,23,for循环流程图,实例:ForTick.java doubleFor.java,流程图,进程,判断,输入输出,起始符,N,Y,Y,N,开始,结束,int i,=,0,i,3,?,i,+,i,4,?,j,+,int j,=,0,打印,*,号,打印换行,符号,25,collection-based for循环 采用for语句的基本格式 在for循环语句的圆括号之间的第一个控制表达式中是循环变量,然后以冒号分隔,第二个控制表达式,确定了第一个控制表达式中声明的变量的取值来源的集合。 程序:AverageGrade .java,3.3.1 循环-for,26,while语句的一般形式为:

11、while () ; ; ,实例:NumAdd.java,3.3.3 循环-while,27,while语句的执行过程为: 初始化,为循环设置初始值。 判断条件表达式的值,如果为真,就执行循环体语句;如果条件表达式的值为假,就跳出while语句。 执行迭代部分,为下次循环做准备。 返回。 while语句是先执行,即先判断后执行,如果不满足判断条件,循环体可能一次都不能执行。注意,在循环体中应该有使循环趋于结束的语句,否则循环将永远进行下去,形成死循环。,3.3.3 循环-while,28,while循环的流程图,实例:AverageGrade2 .java,29,for循环与while循环的比

12、较,for循环比while循环结构清晰。 for循环的循环控制变量的定义、初始化,选换结束的条件,步长变量的控制都在一条语句中实现。 while循环的循环控制变量是在循环之前定义的,循环控制条件与for相同,而步长变量是在循环体内部修改的。 有时候用while实现会方便很多。例如在程序中将在110之间产生一个随机数,当产生的数字为7的时候打印一个提示语句并结束程序,否则继续执行直到产生的数字为7。,30,while语句先判断后执行, while语句为“当型“循环 do-while语句先执行后判断,循环体至少被执行一次, 称do-while语句为”直到型“循环。,3.3.5 循环-do-whil

13、e,31,do-while语句的一般形式为: do ; ; while (); 注意:这里while()后面有一个“;”,3.3.5 循环-do-while,32,do-while语句的执行过程为: 初始化,为循环设置初始值。 执行循环体语句。 执行跌代部分,为下次循环做准备。 判断条件表达式的值,如果为真,就返回;如果条件表达式的值为假,就跳出do-while语句。 do-while语句是先执行循环体,再判断,循环体至少被执行一次。同样,在循环体中应该有使循环趋于结束的语句。,3.3.5 循环-do-while,33,do while循环流程图,程序见:IntTurn .java,34,嵌套

14、循环: 用户可以将任何一种循环嵌入到另一种循环中,并且可以进行任意多重的嵌套。 例题:计算从1开始到给定数值之间所有整数的乘积。 程序见:Factorial.java,3.3 循环,35,功能:结束本循环,跳到循环语句之后的第一条语句处执行。 例题:BreakLoop1 .java 带标号的break语句:允许程序跳转至有标号的外层块或循环之后的语句处继续执行,而不管这些嵌套块有多少层。 程序见:BreakLoop2 .java,3.4 跳转语句 -break,36,功能:结束本次循环,进入下一次循环,例如: for(int i=1; i=limit; i+) if(i%3 = 0) cont

15、inue; sum += i; ,3.4.2 continue,37,功能:可以停止执行内循环,并且可以直接跳转至包含本循环的外循环的下一轮迭代的起始处继续执行。 程序见:MultiList .java,3.4.2 带标号的continue,3.5 数组,问题的提出 现有一班级共30人,想要计算全班参加英语考试的平均分数,应如何设计程序实现?,问题的分析 (1)程序结构? 顺序,选择,循环 (2)数据结构? 单变量,数组,数组:是一个具有相同类型变量的指定的集合的对象。 数组元素:数组中的每个变量,由数组名和一个int型的整数值表示。 索引: 数据名后的整数值,一般放在数组名后面的方括号中。

16、注意:数组中第一个元素的索引值是0。,int age; age0=18;,数组名,索引,数组类型,3.5 数组,一、数组变量,数组变量和所引用的数组是两个分离的实体。 为数组变量所分配的内存空间保存着对数组对象的引用,而不是数组对象本身。 数组对象本身是一个存在于内存其它位置的独特实体。 引用对象的变量中存储的是引用。 引用记录着它所引用的对象的内存地址。,41,基本数据类型一维数组内存分配,栈内存,堆内存,num,c,0,0,0,0088:4400,0088:4400,new int3产生的对象,数组的内存分配图,一、数组变量,42,基本数据类型一维数组内存分配,栈内存,堆内存,num,c,

17、0,0,0,null,0088:4400,new int3产生的对象,数组的内存分配图,num=null;,0088:4400,一、数组变量,43,堆内存,students,null,Student students;,栈内存,一、数组变量,44,堆内存,students,c,0088:4400,0088:4400,new students3产生的对象,null,null,Student students; students=new Student3;,null,栈内存,一、数组变量,45,堆内存,students,c,0088:4400,0088:4400,new students3产生的对

18、象,null,null,Student students; students=new Student3; students0=new Student(“lisi”,18);,student0标识的Student对象,lisi,18,0088:4660,0088:4660,栈内存,一、数组变量,二、数组定义,声明一维数组的两种格式: 数组元素类型 数组名字 ;double anArray; 数组元素类型 数组名字; double anArray; 声明二维数组的两种格式: 数组元素类型 数组名字 ; 数组元素类型 数组名字; 创建数组 数组名字=new 数组元素的类型数组元素的个数,注意:声明时

19、不能指定数组的大小!,举例: int primes ; primes = new int10; 或 int primes = new int10; 注意数组的静态性:一旦创建就不能修改数组的长度!,二、数组定义,三、数组长度,利用数组对象的数据成员length可引用该数组的长度,即该数组中所包含的元素个数。 若有:double myArray = new double100; 则可使用myArray.length来引用它的长度,即得到的数值为100。,double anArray ;,anArray = new double3,三、数组长度,四、访问数组元素,访问数组元素: 数组名索引值 例如

20、: 对前面所声明的primes数组,其第一个元素的引用是primes0 若索引值小于0或大于最后一个的索引值,系统都会抛出一个异常(Exception)。,抛出异常只是指示运行时错误的一种方式,不同种类的错误就有不同类型的异常,当程序抛出异常时,通常会被终止。,E has length 6; E4 is 14; If i is 3, then Ei is -2; Assign a value: E5 = 6.,0,四、访问数组元素,五、数组变量的重用,Java语言允许类型相同,而长度不同的两个数组互相赋值。赋值的结果是两个数组名指向同一数组。 例如: int primes = new int1

21、0; primes = new int50; 例如:double dub = new int10; / illegal 注意:可以改变数组变量所引用的数组,但是不可以改变数组元素所存储的值的类型。,数组赋值只是对引用的复制,B = A results in:,A,B,NOT:,A,B,How can we make a copy of an array?,五、数组变量的重用,六、数组的初始化,定义数组时直接初始化: 如: int primes = 1, 2, 3, 4, 5, 6, 7; / 此数组为7个元素 注意: 初始化数组时,必须给出所有元素的值. 若只对数组的部分元素指定初值,可以对这

22、部分数组元素单独赋值,其它未赋值元素默认为0。 例如:int primes = new int100; primes0 = 1; 或 for(int i=0; iprimes.length; i) primesi = 1;,使用实用方法初始化数组 import java.util.Arrays; Arrays.fill(primes, 1); 使用已有数组的引用来初始化数组变量 long even = 2L, 4L, 6L, 8L; long value = even; 分析:创建了_个数组变量,创建了_个数组. 解答:两个数组变量都引用同一个数组,而且通过两个变量名都可以访问这个数组的元素。

23、,六、数组的初始化,例如:对非基本数据类型 MyDate dates; dates = new MyDate 3; dates 0 = new MyDate( 22, 7, 1964); dates 1 = new MyDate( 1, 1, 2000); dates 2 = new MyDate( 22, 12, 1964); 或: MyDate dates = new MyDate( 22, 7, 1964), new MyDate( 1, 1, 2000), new MyDate( 22, 12, 1964) ;,六、数组的初始化,数组交换的方法 double input = new d

24、ouble100; double output = new double100; double temp; temp = input; input = output; output = temp; 分析:是交换数组地址还是数组内容? 解答:此种方法只是交换了数组在内存中的地址,没有移动任何数组元素。若要复制数组,则需定义同样大小的数组,并把原数组中的元素逐个复制到新数组中。,六、数组的初始化,A = B is true,A = B is false,当两个数组之间进行比较和赋值的时候,只是两个数组的引用进行比较和赋值。(It is the references that are compare

25、d or assigned, not the arrays.),六、数组的初始化,七、数组的使用,double samples = new double50; double average = 0.0; for(int i=0;isamples.length;i+) samplesi=100.0*Math.random(); for(int i=0; isamples.length; i+) average += samplesi; average /= samples.length;,八、多维数组,二维数组:根据两个索引值的变化,可以访问数组的行或列。 声明格式: 类型说明符 数组名 ; 类

26、型说明符 数组名; 二维数组的初始化 直接指定初值 用new操作符,先声明数组再初始化数组 数组名=new 类型说明符行数 ; 数组名=new 类型说明符行数 列数; 例: int arra ; /声明二维数组 arra=new int34; /初始化二维数组 等价于: arra=new int3 ; arra0=new int4; arra1=new int4; arra2=new int4;,arra=new int3 for(int i=0;i3;i+) arrai=new int4; ,八、多维数组,定义二维数组也可以采用如下方式: float temperature; tempera

27、ture = new float10365; 例题:气象迷 程序见WeatherFan.java,int arr=new int 4; 是否正确?,八、多维数组,不同长度的嵌套数组 在Java中,创建嵌套数组时,其中的各个数组的长度可以不同,例如: float samples = new float6 ; 则变量samples引用了一个具有6个元素的数组,其中每个元素可以容纳一个对一维数组的引用,可以单独定义这些数组,例如: samples2 = new float3; samples5 = new float10;,八、多维数组,二维数组的各子数组元素的个数可以不同。 例1: int arr1=3, -9,8,0,1,10,11,9,8 ; 例2:,float mat=new float4 ; for(int i=0;imat.length;i+) mati=new floati+1; float vector2=mat1;,八、多维数组,分析如下代码的功能: float samples = new float6 ; for(int i=0; isamples.length; i+) samplesi = new floati+1; for(int i=0; isamples.length; i+) for(int j=0; jsam

温馨提示

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

评论

0/150

提交评论