程序的流程控制.ppt

上传人:小飞机 文档编号:6230026 上传时间:2023-10-07 格式:PPT 页数:71 大小:1.44MB
返回 下载 相关 举报
程序的流程控制.ppt_第1页
第1页 / 共71页
程序的流程控制.ppt_第2页
第2页 / 共71页
程序的流程控制.ppt_第3页
第3页 / 共71页
程序的流程控制.ppt_第4页
第4页 / 共71页
程序的流程控制.ppt_第5页
第5页 / 共71页
点击查看更多>>
资源描述

《程序的流程控制.ppt》由会员分享,可在线阅读,更多相关《程序的流程控制.ppt(71页珍藏版)》请在三一办公上搜索。

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)(“*);(“*);(“*);,3.1 程序的流程控制,7,例2:上一个例子的变形,class DrawRect public static void main(String args)(“*);(“*);(“*);(“*n);(“*

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

4、类:选择、循环和跳转。块(即复合语句)是指由一对花括号括起来的若干条简单的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)statment1;statmen

5、t2;语句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不成立,则执行哪一组IF语句?,16,3.2 选择结构,if语句的嵌套形式,if();e

6、lse 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语句可存在多个分支。处理多种分支情况时,用switch语句代替if语句可以简化程序,使程序结构清晰明了,可读性增强。,3.2.3 switc

7、h语句,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;.case:;break;default:;执行流程如何?,实例:SwitchSample.java,3.2.3 switch语句,21,for语句的一般形式为:for(;)其中

8、:初始化部分设置控制循环的变量的初值。条件判断部分可以是任何布尔表达式。迭代因子控制循环变量递增或递减。,3.3.1 循环-for,22,for语句的执行过程为:执行初始化。判断条件的返回值。如果为真执行循环体语句;如果为假就跳出for语句循环。执行迭代因子,为下次循环做准备。返回。for语句是先执行,即先判断后执行,如果不满足判断条件,循环体可能一次都不能执行。,3.3.1 循环-for,23,for循环流程图,实例:ForTick.java doubleFor.java,流程图,进程,判断,输入输出,起始符,N,Y,Y,N,开始,结束,int i,=,0,i,3,?,i,+,i,4,?,j

9、,+,int j,=,0,打印,*,号,打印换行,符号,25,collection-based for循环采用for语句的基本格式在for循环语句的圆括号之间的第一个控制表达式中是循环变量,然后以冒号分隔,第二个控制表达式,确定了第一个控制表达式中声明的变量的取值来源的集合。程序:AverageGrade.java,3.3.1 循环-for,26,while语句的一般形式为:while();,实例:NumAdd.java,3.3.3 循环-while,27,while语句的执行过程为:初始化,为循环设置初始值。判断条件表达式的值,如果为真,就执行循环体语句;如果条件表达式的值为假,就跳出whi

10、le语句。执行迭代部分,为下次循环做准备。返回。while语句是先执行,即先判断后执行,如果不满足判断条件,循环体可能一次都不能执行。注意,在循环体中应该有使循环趋于结束的语句,否则循环将永远进行下去,形成死循环。,3.3.3 循环-while,28,while循环的流程图,实例:AverageGrade2.java,29,for循环与while循环的比较,for循环比while循环结构清晰。for循环的循环控制变量的定义、初始化,选换结束的条件,步长变量的控制都在一条语句中实现。while循环的循环控制变量是在循环之前定义的,循环控制条件与for相同,而步长变量是在循环体内部修改的。有时候用

11、while实现会方便很多。例如在程序中将在110之间产生一个随机数,当产生的数字为7的时候打印一个提示语句并结束程序,否则继续执行直到产生的数字为7。,30,while语句先判断后执行,while语句为“当型“循环do-while语句先执行后判断,循环体至少被执行一次,称do-while语句为”直到型“循环。,3.3.5 循环-do-while,31,do-while语句的一般形式为:do;while();注意:这里while()后面有一个“;”,3.3.5 循环-do-while,32,do-while语句的执行过程为:初始化,为循环设置初始值。执行循环体语句。执行跌代部分,为下次循环做准备

12、。判断条件表达式的值,如果为真,就返回;如果条件表达式的值为假,就跳出do-while语句。do-while语句是先执行循环体,再判断,循环体至少被执行一次。同样,在循环体中应该有使循环趋于结束的语句。,3.3.5 循环-do-while,33,do while循环流程图,程序见:IntTurn.java,34,嵌套循环:用户可以将任何一种循环嵌入到另一种循环中,并且可以进行任意多重的嵌套。例题:计算从1开始到给定数值之间所有整数的乘积。程序见:Factorial.java,3.3 循环,35,功能:结束本循环,跳到循环语句之后的第一条语句处执行。例题:BreakLoop1.java带标号的b

13、reak语句:允许程序跳转至有标号的外层块或循环之后的语句处继续执行,而不管这些嵌套块有多少层。程序见:BreakLoop2.java,3.4 跳转语句-break,36,功能:结束本次循环,进入下一次循环,例如:for(int i=1;i=limit;i+)if(i%3=0)continue;sum+=i;,3.4.2 continue,37,功能:可以停止执行内循环,并且可以直接跳转至包含本循环的外循环的下一轮迭代的起始处继续执行。程序见:MultiList.java,3.4.2 带标号的continue,3.5 数组,问题的提出 现有一班级共30人,想要计算全班参加英语考试的平均分数,应

14、如何设计程序实现?,问题的分析(1)程序结构?顺序,选择,循环(2)数据结构?单变量,数组,数组:是一个具有相同类型变量的指定的集合的对象。数组元素:数组中的每个变量,由数组名和一个int型的整数值表示。索引:数据名后的整数值,一般放在数组名后面的方括号中。注意:数组中第一个元素的索引值是0。,int age;age0=18;,数组名,索引,数组类型,3.5 数组,一、数组变量,数组变量和所引用的数组是两个分离的实体。为数组变量所分配的内存空间保存着对数组对象的引用,而不是数组对象本身。数组对象本身是一个存在于内存其它位置的独特实体。引用对象的变量中存储的是引用。引用记录着它所引用的对象的内存

15、地址。,41,基本数据类型一维数组内存分配,栈内存,堆内存,num,c,0,0,0,0088:4400,0088:4400,new int3产生的对象,数组的内存分配图,一、数组变量,42,基本数据类型一维数组内存分配,栈内存,堆内存,num,c,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产生的对

16、象,null,null,Student students;students=new Student3;,null,栈内存,一、数组变量,45,堆内存,students,c,0088:4400,0088:4400,new students3产生的对象,null,null,Student students;students=new Student3;students0=new Student(“lisi”,18);,student0标识的Student对象,lisi,18,0088:4660,0088:4660,栈内存,一、数组变量,二、数组定义,声明一维数组的两种格式:数组元素类型 数组名字;d

17、ouble anArray;数组元素类型 数组名字;double anArray;声明二维数组的两种格式:数组元素类型 数组名字;数组元素类型 数组名字;创建数组数组名字=new 数组元素的类型数组元素的个数,注意:声明时不能指定数组的大小!,举例:int primes;primes=new int10;或 int primes=new int10;注意数组的静态性:一旦创建就不能修改数组的长度!,二、数组定义,三、数组长度,利用数组对象的数据成员length可引用该数组的长度,即该数组中所包含的元素个数。若有:double myArray=new double100;则可使用myArray.

18、length来引用它的长度,即得到的数值为100。,double anArray;,anArray=new double3,三、数组长度,四、访问数组元素,访问数组元素:数组名索引值例如:对前面所声明的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,四、访问数组元素

19、,五、数组变量的重用,Java语言允许类型相同,而长度不同的两个数组互相赋值。赋值的结果是两个数组名指向同一数组。例如:int primes=new int10;primes=new int50;例如:double dub=new int10;/illegal注意:可以改变数组变量所引用的数组,但是不可以改变数组元素所存储的值的类型。,数组赋值只是对引用的复制,B=Aresults in:,A,B,NOT:,A,B,How can we make a copy of an array?,五、数组变量的重用,六、数组的初始化,定义数组时直接初始化:如:int primes=1,2,3,4,5,6

20、,7;/此数组为7个元素注意:初始化数组时,必须给出所有元素的值.若只对数组的部分元素指定初值,可以对这部分数组元素单独赋值,其它未赋值元素默认为0。例如:int primes=new int100;primes0=1;或 for(int i=0;iprimes.length;i)primesi=1;,使用实用方法初始化数组 import;Arrays.fill(primes,1);使用已有数组的引用来初始化数组变量 long even=2L,4L,6L,8L;long value=even;分析:创建了_个数组变量,创建了_个数组.解答:两个数组变量都引用同一个数组,而且通过两个变量名都可以

21、访问这个数组的元素。,六、数组的初始化,例如:对非基本数据类型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 double100;double output=new doub

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

23、uble 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;,八、多维数组,二维数组:根据两个索引值的变化,可以访问数组的行或列。声明格式:类型说明符 数组名;类型说明符 数组名;二维数组的初始化直接指定初值用new操作符,先声明数组再初始化数组数组名=new 类型说明符行数;数组名=new 类型说明符

24、行数 列数;例: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;temperature=new float10365;例题:气象迷 程序见WeatherFan.java,int arr=new int 4;是否正确?,八、多维数组,不同长度的嵌套数组 在Java中

25、,创建嵌套数组时,其中的各个数组的长度可以不同,例如: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=mat

26、1;,八、多维数组,分析如下代码的功能: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;jsamplesi.length;j+)samplesij=99.0f;,八、多维数组,多维数组 long beans=new long51030;数组beans被定义为一个三维数组,也可以说其具有5个元素,每个元素都保存了一个对二维数组的引用,这些二维数组又可以互不相同。多维数组的使用方法与二维数组相似。例如:lo

27、ng beans=new long2;beans0=new long4;beans1=new long2;,八、多维数组,字符数组 char message=new char10;字符数组的初始化方法如下:char vowels=a,e,i,o,u;也可以通过Arrays中的fill()方法进行填充,可以进行初始化。例如:Array.fill(vowels,a);,八、多维数组,68,本章小结,本章主要学习了Java语言的流程控制语句和Java语言中数组的使用方法。Java的分支语句主要有两种:分别是if语句和switch语句。在Java中,if语句是一个基本判定工具。它在给定的逻辑表达式为t

28、rue时选择执行一个语句块。当逻辑表达式为false时,通过使用else关键字选择执行另一个语句块。当一个条件表达式的值有多个时,可以使用switch语句从多个固定的选择项中选择。,69,本章小结,Java的循环控制语句主要有3种:它们分别是适用于循环次数已知的for循环,循环次数未知的while循环和do-while循环,其中do-while循环结构比while循环至少多执行一次语句体。Java 语言的跳转语句有三种:continue语句能让控制流程跳转到包含该语句的循环的下次迭代开始处执行;break语句能让控制流程退出循环或者是退出它所在的语句块;return语句可以控制流程返回到调用此方法的语句处。,70,本章小结,Java语言中对数组的介绍分为一维数组和多维数组。多维数组中以二维数组为例介绍。数组的使用过程分为声明、创建、初始化和访问。数组的声明只是对数组的定义过程,并不分配任何的存储空间,一定要在对数组初始化之后才可以访问数组中的数据元素。,71,谢谢!,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号