程序的流程控制_第1页
程序的流程控制_第2页
程序的流程控制_第3页
程序的流程控制_第4页
程序的流程控制_第5页
已阅读5页,还剩65页未读 继续免费阅读

下载本文档

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

文档简介

关于程序的流程控制1第1页,讲稿共70页,2023年5月2日,星期三2教学目标熟练掌握Java语言中的流程控制结构。掌握Java中选择结构的基本原理及使用方法。掌握Java中循环结构的基本原理及使用方法。熟练掌握Java中数组的使用方法及能够熟练应用。第2页,讲稿共70页,2023年5月2日,星期三3教学重点流程控制构成了编程语言的逻辑,而对这些控制语句的灵活运用又能有助于编程逻辑的清晰整理。本章首先介绍了Java流程控制结构中的选择结构和循环结构,最后,介绍了跳转语句的基本原理。掌握数组的声明,生成和初始化方法。熟练掌握数组的使用,对于多维数据,要求学生主要掌握二维数组的声明、生成、初始化、及使用方法。第3页,讲稿共70页,2023年5月2日,星期三4例1:打印一个3x4的矩阵classDrawRect{ publicstaticvoidmain(String[]args) { System.out.println(“****"); System.out.println(“****"); System.out.println(“****"); }}3.1程序的流程控制第4页,讲稿共70页,2023年5月2日,星期三5例2:上一个例子的变形classDrawRect

{publicstaticvoidmain(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.print(“*");System.out.println(“*"); }}问题:如何作出决策,提高程序的执行效率?第5页,讲稿共70页,2023年5月2日,星期三6分析问题找出最佳解决方案以上两种方法是初学者最容易想到的,但做了很多重复的工作,会使程序变得很繁琐,结构也不够清晰。在工作量少的时候似乎没那么明显,但当需要打印的矩阵比较大的时候就会显现出来(如:打印一个100x60的矩阵)。想解决这个问题我们可以通过循环来解决,讲到循环就要先介绍一下程序的结构化设计。第6页,讲稿共70页,2023年5月2日,星期三7程序设计的三种结构顺序结构循环结构选择结构

循环结构与选择结构所使用的语句又叫作流程控制语句,作用是改变程序的执行顺序。第7页,讲稿共70页,2023年5月2日,星期三8Java的程序控制语句分为以下几类:选择、循环和跳转。块(即复合语句)是指由一对花括号括起来的若干条简单的Java语句。块定义着变量的作用域(scope)。一个块可以嵌套在另一个块中。3.1程序的流程控制第8页,讲稿共70页,2023年5月2日,星期三93.1程序的流程控制publicstaticvoidmain(Stringargs[]){inta; ......

{ intb; ......}//变量b的作用域只在块内,到块外便失去作用。

......}第9页,讲稿共70页,2023年5月2日,星期三103.2选择结构if语句if(expression)

语句1;语句2;练习:NumberTest.java条件判断执行语句或代码块真假第10页,讲稿共70页,2023年5月2日,星期三113.2选择结构if语句expression==true语句2语句块语句块:用花括号括起来的语句。if(expression){statment1;statment2;……}语句2;左侧的语句也以下语句有什么不同?if(expression)statment1;statment2;……

语句2;第11页,讲稿共70页,2023年5月2日,星期三123.2选择结构提示:合理采用缩进格式书写代码坚持用左右大括号将if条件括起来的习惯,即使一条语句也括。else子句if(expression){statement1;}else{statement2;}next_statement;条件判断执行语句2或代码块2假执行语句1或代码块1真第12页,讲稿共70页,2023年5月2日,星期三133.2选择结构if语句的嵌套形式if(<条件1>)

if(<条件2>)<语句1>;

else<语句2>;else

if(<条件3>)<语句3>;

else<语句4>;若条件1成立,则执行哪一组IF语句?若条件1不成立,则执行哪一组IF语句?第13页,讲稿共70页,2023年5月2日,星期三143.2选择结构if语句的嵌套形式if(<条件1>)<语句1>;elseif(<条件2>)<语句2>;elseif(<条件3>)………..else<语句n>;判断条件1执行语句1或代码块1判断条件2执行语句2或代码块2............判断条件N执行语句N或代码块N执行语句N+1或代码块N+1真真真假假假假第14页,讲稿共70页,2023年5月2日,星期三153.2选择结构if语句的嵌套形式if(<条件1>)<语句1>;elseif(<条件2>)<语句2>;elseif(<条件3>)………..else<语句n>;什么情况下会执行到语句2,什么情况下会执行到语句n?语句1与语句2等是否可以都执行?else总是和距它最近的if配对第15页,讲稿共70页,2023年5月2日,星期三16switch语句又称多分支选择语句与if-else一样,是Java语言的条件选择语句,if语句是判断条件的值,再从两个程序块中选择其中一块执行,只能出现两个分支,而switch语句可存在多个分支。处理多种分支情况时,用switch语句代替if语句可以简化程序,使程序结构清晰明了,可读性增强。3.2.3switch语句第16页,讲稿共70页,2023年5月2日,星期三17switch语句的一般形式为:

switch(<条件>){case<常量值1>:<语句1>;break; case<常量值2>:<语句2>;break; ……….. case<常量值n>:<语句n>;break; [default:<缺省语句>;]}产生的结果值可以是char型,byte型,short型,int型或枚举型。不加break语句,执行流程如何?若条件值与case值均不匹配,而又没有此句,执行流程如何?3.2.3switch语句第17页,讲稿共70页,2023年5月2日,星期三18switch(<条件>){ case<值1>: case<值2>: case<值3>:<语句3>;break; ……….. case<值n>:<语句n>;break; [default:<缺省语句>;]}执行流程如何?实例:SwitchSample.java3.2.3switch语句第18页,讲稿共70页,2023年5月2日,星期三19for语句的一般形式为:for(<初始化>;<条件>;<迭代因子>){ <循环体语句>}其中:初始化部分设置控制循环的变量的初值。条件判断部分可以是任何布尔表达式。迭代因子控制循环变量递增或递减。3.3.1循环---for第19页,讲稿共70页,2023年5月2日,星期三20for语句的执行过程为:执行初始化。判断条件的返回值。如果为真执行循环体语句;如果为假就跳出for语句循环。执行迭代因子,为下次循环做准备。返回②。for语句是先执行②,即先判断后执行,如果不满足判断条件,循环体可能一次都不能执行。3.3.1循环---for第20页,讲稿共70页,2023年5月2日,星期三21for循环流程图实例:ForTick.javadoubleFor.java前续代码及循环控制变量的定义循环体中的程序循环控制条件TrueFalse后续代码步长变量的改变第21页,讲稿共70页,2023年5月2日,星期三流程图进程判断输入输出起始符NYYN开始结束inti=0i<3?i++i<4?j++intj=0打印*号打印换行符号第22页,讲稿共70页,2023年5月2日,星期三23collection-basedfor循环采用for语句的基本格式在for循环语句的圆括号之间的第一个控制表达式中是循环变量,然后以冒号分隔,第二个控制表达式,确定了第一个控制表达式中声明的变量的取值来源的集合。程序:AverageGrade.java3.3.1循环---for第23页,讲稿共70页,2023年5月2日,星期三24while语句的一般形式为:[<初始化部分>]while(<条件表达式>){ <循环体语句>; [<迭代部分>;]}实例:NumAdd.java3.3.3循环---while终止条件?执行循环体假初始化执行步长部分真第24页,讲稿共70页,2023年5月2日,星期三25while语句的执行过程为:初始化,为循环设置初始值。判断条件表达式的值,如果为真,就执行循环体语句;如果条件表达式的值为假,就跳出while语句。执行迭代部分,为下次循环做准备。返回②。while语句是先执行②,即先判断后执行,如果不满足判断条件,循环体可能一次都不能执行。注意,在循环体中应该有使循环趋于结束的语句,否则循环将永远进行下去,形成死循环。

3.3.3循环---while第25页,讲稿共70页,2023年5月2日,星期三26while循环的流程图前续代码及循环控制变量的定义循环体中的程序循环控制条件TrueFalse后续代码实例:AverageGrade2.java第26页,讲稿共70页,2023年5月2日,星期三27for循环与while循环的比较for循环比while循环结构清晰。for循环的循环控制变量的定义、初始化,选换结束的条件,步长变量的控制都在一条语句中实现。while循环的循环控制变量是在循环之前定义的,循环控制条件与for相同,而步长变量是在循环体内部修改的。有时候用while实现会方便很多。例如在程序中将在1~10之间产生一个随机数,当产生的数字为7的时候打印一个提示语句并结束程序,否则继续执行直到产生的数字为7。第27页,讲稿共70页,2023年5月2日,星期三28while语句先判断后执行,while语句为“当型“循环do-while语句先执行后判断,循环体至少被执行一次,称do-while语句为”直到型“循环。3.3.5循环---do-while第28页,讲稿共70页,2023年5月2日,星期三29do-while语句的一般形式为:[<初始化部分>]do{<循环体语句>;[<迭代部分>;]}while(<条件表达式>);注意:这里while()后面有一个“;”3.3.5循环---do-while终止条件?执行循环体假初始化执行步长部分真第29页,讲稿共70页,2023年5月2日,星期三30do-while语句的执行过程为:初始化,为循环设置初始值。执行循环体语句。执行跌代部分,为下次循环做准备。判断条件表达式的值,如果为真,就返回②;如果条件表达式的值为假,就跳出do-while语句。do-while语句是先执行循环体,再判断,循环体至少被执行一次。同样,在循环体中应该有使循环趋于结束的语句。3.3.5循环---do-while第30页,讲稿共70页,2023年5月2日,星期三31dowhile循环流程图程序见:IntTurn.java前续代码及循环控制变量的定义循环体中的程序循环控制条件TrueFalse第31页,讲稿共70页,2023年5月2日,星期三32嵌套循环:用户可以将任何一种循环嵌入到另一种循环中,并且可以进行任意多重的嵌套。例题:计算从1开始到给定数值之间所有整数的乘积。程序见:Factorial.java3.3循环第32页,讲稿共70页,2023年5月2日,星期三33功能:结束本循环,跳到循环语句之后的第一条语句处执行。例题:BreakLoop1.java带标号的break语句:允许程序跳转至有标号的外层块或循环之后的语句处继续执行,而不管这些嵌套块有多少层。程序见:BreakLoop2.java3.4跳转语句---break第33页,讲稿共70页,2023年5月2日,星期三34功能:结束本次循环,进入下一次循环,例如:for(inti=1;i<=limit;i++){if(i%3==0){continue;}sum+=i;}3.4.2continue第34页,讲稿共70页,2023年5月2日,星期三35功能:可以停止执行内循环,并且可以直接跳转至包含本循环的外循环的下一轮迭代的起始处继续执行。程序见:MultiList.java3.4.2带标号的continue第35页,讲稿共70页,2023年5月2日,星期三3.5数组问题的提出现有一班级共30人,想要计算全班参加英语考试的平均分数,应如何设计程序实现?问题的分析(1)程序结构?顺序,选择,循环(2)数据结构?单变量,数组第36页,讲稿共70页,2023年5月2日,星期三数组:是一个具有相同类型变量的指定的集合的对象。数组元素:数组中的每个变量,由数组名和一个int型的整数值表示。索引:数据名后的整数值,一般放在数组名后面的方括号中。注意:数组中第一个元素的索引值是0。intage[];age[0]=18;数组名索引数组类型3.5数组第37页,讲稿共70页,2023年5月2日,星期三一、数组变量数组变量和所引用的数组是两个分离的实体。为数组变量所分配的内存空间保存着对数组对象的引用,而不是数组对象本身。数组对象本身是一个存在于内存其它位置的独特实体。引用对象的变量中存储的是引用。引用记录着它所引用的对象的内存地址。第38页,讲稿共70页,2023年5月2日,星期三39基本数据类型一维数组内存分配栈内存堆内存numc0000088:44000088:4400newint[3]产生的对象数组的内存分配图一、数组变量第39页,讲稿共70页,2023年5月2日,星期三40基本数据类型一维数组内存分配栈内存堆内存numc000null0088:4400newint[3]产生的对象数组的内存分配图num=null;0088:4400一、数组变量第40页,讲稿共70页,2023年5月2日,星期三41堆内存studentsnullStudent[]students;栈内存一、数组变量第41页,讲稿共70页,2023年5月2日,星期三42堆内存studentsc0088:44000088:4400newstudents[3]产生的对象nullnullStudent[]students;students=newStudent[3];null栈内存一、数组变量第42页,讲稿共70页,2023年5月2日,星期三43堆内存studentsc0088:44000088:4400newstudents[3]产生的对象nullnullStudent[]students;students=newStudent[3];students[0]=newStudent(“lisi”,18);student[0]标识的Student对象lisi180088:46600088:4660栈内存一、数组变量第43页,讲稿共70页,2023年5月2日,星期三二、数组定义声明一维数组的两种格式:数组元素类型数组名字[];doubleanArray[];数组元素类型[]数组名字;double[]anArray;声明二维数组的两种格式:数组元素类型数组名字[][];数组元素类型[][]数组名字;创建数组数组名字=new数组元素的类型[数组元素的个数]注意:声明时不能指定数组的大小!第44页,讲稿共70页,2023年5月2日,星期三举例:intprimes[];primes=newint[10];或

int[]primes=newint[10];注意数组的静态性:一旦创建就不能修改数组的长度!二、数组定义第45页,讲稿共70页,2023年5月2日,星期三三、数组长度利用数组对象的数据成员length可引用该数组的长度,即该数组中所包含的元素个数。若有:double[]myArray=newdouble[100];则可使用myArray.length来引用它的长度,即得到的数值为100。第46页,讲稿共70页,2023年5月2日,星期三double[]anArray;anArray=newdouble[3]anArray:???length3012anArray:nullHere,thearrayisnotdefined.Here,thearrayisdefined,buttheelementsinthearrayareNOTdefined.三、数组长度第47页,讲稿共70页,2023年5月2日,星期三四、访问数组元素访问数组元素:数组名[索引值]例如:对前面所声明的primes数组,其第一个元素的引用是primes[0]若索引值小于0或大于最后一个的索引值,系统都会抛出一个异常(Exception)。抛出异常只是指示运行时错误的一种方式,不同种类的错误就有不同类型的异常,当程序抛出异常时,通常会被终止。第48页,讲稿共70页,2023年5月2日,星期三E

haslength

6;E[4]

is

14;If

i

is

3,thenE[i]

is

-2;Assignavalue:

E[5]=6.0Elength:6473-2146123450四、访问数组元素第49页,讲稿共70页,2023年5月2日,星期三五、数组变量的重用Java语言允许类型相同,而长度不同的两个数组互相赋值。赋值的结果是两个数组名指向同一数组。例如:int[]primes=newint[10];

primes=newint[50];例如:double[]dub=newint[10];//illegal注意:可以改变数组变量所引用的数组,但是不可以改变数组元素所存储的值的类型。第50页,讲稿共70页,2023年5月2日,星期三数组赋值只是对引用的复制B=Aresultsin:ABNOT:AB03length203length203length2Howcanwemakeacopyofanarray?五、数组变量的重用第51页,讲稿共70页,2023年5月2日,星期三六、数组的初始化定义数组时直接初始化:

如:int[]primes={1,2,3,4,5,6,7};

//此数组为7个元素注意:初始化数组时,必须给出所有元素的值.若只对数组的部分元素指定初值,可以对这部分数组元素单独赋值,其它未赋值元素默认为0。例如:int[]primes=newint[100];

primes[0]=1;

或for(inti=0;i<primes.length;i)primes[i]=1;第52页,讲稿共70页,2023年5月2日,星期三使用实用方法初始化数组

importjava.util.Arrays;

Arrays.fill(primes,1);使用已有数组的引用来初始化数组变量

long[]even={2L,4L,6L,8L};

long[]value=even;分析:创建了____个数组变量,创建了____个数组.解答:两个数组变量都引用同一个数组,而且通过两个变量名都可以访问这个数组的元素。六、数组的初始化第53页,讲稿共70页,2023年5月2日,星期三例如:对非基本数据类型MyDate[]dates;dates=newMyDate[3];dates[0]=newMyDate(22,7,1964);dates[1]=newMyDate(1,1,2000);dates[2]=newMyDate(22,12,1964);或:MyDate[]dates={newMyDate(22,7,1964),newMyDate(1,1,2000),newMyDate(22,12,1964)};六、数组的初始化第54页,讲稿共70页,2023年5月2日,星期三数组交换的方法double[]input=newdouble[100];double[]output=newdouble[100];double[]temp;temp=input;input=output;output=temp;分析:是交换数组地址还是数组内容?解答:此种方法只是交换了数组在内存中的地址,没有移动任何数组元素。若要复制数组,则需定义同样大小的数组,并把原数组中的元素逐个复制到新数组中。六、数组的初始化第55页,讲稿共70页,2023年5月2日,星期三03length2A==B

istrueA==B

isfalseAB03length203length2AB03length2当两个数组之间进行比较和赋值的时候,只是两个数组的引用进行比较和赋值。(Itisthereferencesthatarecomparedorassigned,notthearrays.)六、数组的初始化第56页,讲稿共70页,2023年5月2日,星期三七、数组的使用double[]samples=newdouble[50];doubleaverage=0.0;for(inti=0;i<samples.length;i++){samples[i]=100.0*Math.random();}

for(inti=0;i<samples.length;i++){average+=samples[i];}average/=samples.length;第57页,讲稿共70页,2023年5月2日,星期三八、多维数组二维数组:根据两个索引值的变化,可以访问数组的行或列。声明格式:类型说明符数组名[][];类型说明符[][]数组名;二维数组的初始化直接指定初值用new操作符第58页,讲稿共70页,2023年5月2日,星期三先声明数组再初始化数组数组名=new类型说明符[行数][];数组名=new类型说明符[行数][列数];例:

intarra[][];//声明二维数组

arra=newint[3][4];//初始化二维数组等价于:

arra=newint[3][];

arra[0]=newint[4];

arra[1]=newint[4];

arra[2]=newint[4];arra=newint[3][]for(inti=0;i<3;i++){arra[i]=newint[4];}八、多维数组第59页,讲稿共70页,2023年5月2日,星期三定义二维数组也可以采用如下方式:

float[][]temperature;temperature=newfloat[10][365];例题:气象迷程序见WeatherFan.javaint[][]arr=newint[][4];是否正确?

八、多维数组第60页,讲稿共70页,2023年5月2日,星期三不同长度的嵌套数组在Java中,创建嵌套数组时,其中的各个数组的长度可以不同,例如:

float[][]samples=newfloat[6][];

则变量samples引用了一个具有6个元素的数组,其中每个元素可以容纳一个对一维数组的引用,可以单独定义这些数组,例如:

samples[2]=newfloat[3];samples[5]=newfloat[10];八、多维数组第61页,讲稿共70页,2023年5月2日,星期三二维数组的各子数组元素的个数可以不同。例1:int[][]arr1={{3,-9},{8,0,1},{10,11,9,8}};例2:

float[][]mat=newfloat[4][]; for(inti=0;i<mat.length;i++) mat[i]=newfloat[i+1]; float[]vector2=mat[1];0123matmat.length0010120123mat[0]mat[1](vector2)mat[2]mat[3]八、多维数组第62页,讲稿共70页,2023年5月2日,星期三分析如下代码的功能:

float[][]samples=newfloat[6][];

for(inti=0;i<samples.length;i++)samples[i]=newfloat[i+

温馨提示

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

最新文档

评论

0/150

提交评论