《第三章java流程控制语句.ppt》由会员分享,可在线阅读,更多相关《第三章java流程控制语句.ppt(70页珍藏版)》请在三一文库上搜索。
1、第三章 JAVA流程控制语句,主讲教师:毛科亮,本章内容,语句概述 Java语言的语句分类 结构化程序设计的三种基本流程 分支语句 If语句 If-else语句 Switch语句 循环语句 while循环语句 do-while语句 for语句 转移语句 break语句 continue语句 return语句 常用的程序设计方法 枚举法、地推法、递归法 简单图形的输出 格式化的输入与输出 从键盘输入数据 格式化的输出,语句的概念,java程序的执行遵循一定的流程,流程是程序执行的顺序。 流程控制语句是控制程序中各语句执行顺序的语句,是程序中非常关键和基本的部分。流程控制语句可以把单个的语句组合成
2、有意义的、能够完成一定功能的小逻辑块。,一、Java语句概述,语句与结构化程序设计 在算法语言中,数据类型描述数据的性质,表达式描述对数据的运算,语句描述对数据的操作。 程序由一系列语句组成。 Java语言虽然是一种面向对象的计算机语言,但在一个局部,例如方法内、块语句内仍然需要面向过程的程序设计和方法。 作为面向过程程序设计精华的结构化程序设计思想,仍然是面向对象程序设计方法的基石。,一、Java语句概述,结构化程序设计的三种基本流程: 尽管现实世界的问题是复杂的、千变万化的,但与之相对应的计算机算法流程, 只有三种基本结构-顺序结构、选择结构、循环结构。每种结构都是单入 口、单出口;每一部
3、分都会被执行到;没有死循环。,A,B,P,A,B,P,循环体,真,假,假,真,Java语言提供支持结构化程序设计的所有语言。,一、Java语句概述,Java语言提供结构化语句实现程序的流程控制。 表达式语句 顺序结构 空语句 复合语句 条件语句 选择语句 语句 开关 语句 switch while 循环语句 do-while for break 转移语句 continue return,一、Java语句概述,一、Java语句概述,在java语言中,语句以分号“;”为结束标志。 特殊的是,块语由其他语句组成,其本身不用分号结束。内嵌有块语句并以块语句结尾的语句,也不需要用分号结尾。 ava语句按
4、性质可分为:说明性语句、操作性语句。 Java语句按功能可分为: 空语句、标号语句、声明语句、表达式语句、分支语句、循 环语句、断言语句、跳转语句、同步语句、异常语句、块语 句等。,一、Java语句概述,一、Java语句概述,空语句: 仅包含一个分号。 例如:for(int i=1;i=1000;i+) ; 标号语句: 标号:语句 标号的作用域是他所在的块语句,在作用 域内不能够有同名的其他标号或局部变量; 标号语句的作用在break、continue两条跳 转语句上体现。 断言语句: 用于校验类的方法是否被正确调用。语法为: assert 表达式1; assert 表达式1:表达式2; 其中
5、,表达式1必须是boolean表达式,表 达式2可以是任何类型。,一、Java语句概述,一、Java语句概述,(Java程序通过控制语句来执行程序流,完成一定的任务。程序流是由若干个语句组成的,语句可以是单一的一条语句,如c=a+b,也可以是用大括号括起来的一个复合语句)。 语句块可以嵌套,嵌套层数无限制 定义类时类体必须采用语句块形式 定义方法时方法体必须采用语句块的形式,语句块,一、Java语句概述,一、Java语句概述,表达式语句,表达式是由运算符、操作数和函数等组成的算式。其显著特点是有返回值,即表达式的值。表达式返回值的数据类型取决于表达式的操作数和运算类型。 表达式语句可分为以下几
6、类: 表达式语句:赋值表达式语句、方法调用语句、对象创建 语句、变量声明语句、自增语句。,一、Java语句概述,一、Java语句概述,分支语句实现程序流程控制的功能 ,即根据一定的条件有选择地执行或跳过特定的语句 Java分支语句分类: if语句 if-else 语句 if-else if语句 switch 语句,分支语句,二、Java分支语句,一、Java语句概述,格式: if (表达式) 语句 功能:首先计算表达式,若值为真,则执行语句,否则结束执行if语句,执行if语句的后续语句。 思考: int a=2; if (a3) System .out .println (“a3“); Sys
7、tem .out .print (“ok!“); 上面的执行结果是什么?,IF语句,二、Java分支语句,一、Java语句概述,class Max public double getMax(double a,double b) double max; max=a; if(maxb) max=b; return max; public class Ex3_1 public static void main(String args) Max obj=new Max(); System.out.println(“max=“+obj.getMax(3.14,3.1415926); ,判断两个数的最大值
8、,格式: if (表达件) 语句1; else 语句2; 功能:首先计算表达式,若值为真,则执行语句1,否则执行语句2。,IF-else语句,二、Java分支语句,一、Java语句概述,import java.util.*; class Leap public boolean isLeap(int year) if(year%4=0) ,闰年问题,if (条件1) /程序代码; else if ( 条件2) /程序代码; else if ( 条件3) /程序代码; 注意:只要任何一个条件成立.程序就不会对下一个条件进行判断和再执行了。,IF-else if 语句,二、Java分支语句,publ
9、ic class Ex3_3 public static void main(String args) (new Letter().judgeLetter(); class Letter public void judgeLetter() char ch; ch=(char)(java.lang.Math.random()*128); if(ch=a ,检查用random()方法 产生的一个字符,判 断是否为英文大写字 母、小写字母、数字 或是其他符号,并输 出相应信息。,IF嵌套语句 if (条件1) if ( 条件2) /程序代码; else /程序代码; else if ( 条件3) /
10、程序代码; else /程序代码; .,IF嵌套语句,二、Java分支语句,switch( 表达式 ) case 值1: 语句1; break; case 值2: 语句2; break; case 值3: 语句3; break; case 值N: 语句N; break; default:语句N+1 ,多分支语句 switch,二、Java分支语句,二、Java分支语句,功能:首先计算表达式的值,然后在 switch语句中寻找与该表达式的值相 匹配的case值。, 表达式的返回值类型必须是这几种类型一 int , byte , char , short。 case子句中的值必须是常量,而且所有c
11、ase子句中的值应是不同的。 default子句是可选的。 break语句用来在执行完一个case分支后,使程序跳出switch语句,即终止switch语句的执行(在一些特殊情况下,多个不同的case值要执行一组相同的操作这时可以不用break,不写break时执行自该case开始到下一次找到break语句为止),多分支语句 switch,二、Java分支语句,二、Java分支语句,import java.util.*; public class Ex3_4 public static void main(String args) (new Grade().toGrade(); class G
12、rade public void toGrade() int score,m; Scanner reader=new Scanner(System.in); System.out.println(“输入成绩:“); score=reader.nextInt(); if(score100) System.out.println(“data error!“); else m=score/10; switch(m) case 9: case 10: System.out.println(“The grade is A.“);break; case 8: System.out.println(“The
13、 grade is B.“);break; case 7: System.out.println(“The grade is C.“);break; case 6: System.out.println(“The grade is D.“);break; default: System.out.println(“The grade is E.“);break; ,输入百分成绩, 输出成绩等级。,循环语句的作用是反复执行一段代码,直到满足终止循环的条件为止。Java语言中提供的循环语句有: while语句 do-while语句 for语句,循环语句,三、Java循环语句,三、Java循环语句,W
14、hile ( 条件 ) /循环体 注意: (1)此语句是先判断条件,再确定是否执行语句或程 序块。 (2)条件为true时,执行循环体的语句或程序块。反 之,不执行循环体。 (3)在循环体中要有改变条件的语句,否则会成为死 循环。,while语句,三、Java循环语句,do /循环体; while (条件) ; 注意: (1)此语句是先执行一次循环体,再判断条件。 (2)条件为true时,再次执行 循环体的语句或程序块。 (3)在循环体中要有改变条件的语句,否则会成为死循环。 (4)do-while循环语句即是至少都要执行一次的。,do-while语句,三、Java循环语句,三、Java循环语
15、句,for (设定初始值 ; 条件限定 ; 修改控制变量) /程序代码; 不限定的循环(死循环) for ( ; ; ) /程序代码; 多个变量进行定义 for ( int i=0,j=100 ; ij ; i+ , j- ) /程序代码; ,For语句,三、Java循环语句,三、Java循环语句,for (int i=0 ; i100 ; i+) for (int j=0 ; ji; j+) /程序块; 注意:在我们的实际开发过程中,for循环语句使用的比较多,重点把握!,For循环嵌套,三、Java循环语句,三、Java循环语句,/ 输出1100内前5个可以被3整除的数。 public c
16、lass Ex3_5 public static void main(String args) int num = 0, i = 1; while (i = 100) if (i % 3 = 0) System.out.print(i + “ “); num+; if (num = 5) break; i+; ,/输出101200内的质数, public class Ex3_6 public static void main(String args) for (int i=101; i200; i+=2) boolean f = true; for (int j = 2; j i; j+) i
17、f (i % j = 0) f = false; break; if (!f) continue; System.out.print(“ “ + i); ,三、Java循环语句,三、Java循环语句,JAVA中的跳转语句有: break语句 continue语句 返回语句return,跳转语句,四、Java跳转语句,break语句用于终止某个语句块或循环体的执行 break; break语句出现在多层嵌套的语句块中时,可以通过标签指明要终止的是哪一层语句块 label1: label2: label3: break label2; ,break语句,四、Java跳转语句,四、Java跳转语句,
18、break语句示例,public class Ex3_7 public static void main( String args ) for( int i=1; i= 10; i+ ) if( i = 5 ) break; System.out.println( “i=“ + i ); System.out.println( “Done“ ); ,四、Java跳转语句,四、Java跳转语句,外层跳转:break语句,在switch语中,break语句用来终止switch语句的执行。 在Java中,可以为每个代码块加一个标号,一个代码块通常是用大括号括起来的一段代码。加标号的格式如下: Blo
19、ckLabel: codeBlock break语句的第二种使用情况就是跳出它所指定的块,并从紧跟该块的第一条语句处执行。例如: break BlockLabel; break语句 a: /标记代码块a b: /标记代码块b c: /标记代码块c break b; /此处的语句块不被执行 /此处的语句块不被执行 /从此处开始执行 ,四、Java跳转语句,四、Java跳转语句,break 语句用于终止某个语句块的执行。用在循环语句体中,可以强行退出循环;例如: public class Ex3_8 public static void main(String args) int stop = 4
20、; for (int i = 1; i = 10; i+) /当i等于stop时,退出循环 if (i = stop) break; System.out.println(“ i= “ + i); ,i = 1 i = 2 i = 3,continue 语句用在循环语句体中,用于终止某次循环过程,跳过循环体中 continue 语句下面未执行的循环,开始下一次循环过程;例如: public class Ex3_9 public static void main(String args) int skip = 4; for (int i = 1; i = 5; i+) /当i等于skip时,跳过
21、当次循环 if (i = skip) continue; System.out.println(“i = “ + i); ,i = 1 i = 2 i = 3 i = 5,2.5.4,四、Java跳转语句,四、Java跳转语句,continue语句,continue语句用于跳过某个循环语句块的一次执行 continue语句出现在多层嵌套的循环语句体中时,可以通过标签指明要跳过的是哪一层循环。,四、Java跳转语句,四、Java跳转语句,continue语句实例,public class Ex3_10 public static void main( String args ) for( int
22、 i=1; i= 10; i+ ) if( i = 5 | i = 7 ) continue; System.out.println( “i=“ + i ); System.out.println( “Done“ ); ,四、Java跳转语句,四、Java跳转语句,外层跳转:continue语句,continue语句用来结束本次循环,跳过循环体中下面尚未执行的语 句,接着进行终止条件的判断,以决定是否继续循环。对于for语 句在进行终止条件的判断前,还要先执行迭代语句。也可以用continue 跳转到括号指明的外层循环中 格式为 continue outerLable; 例如 outer: f
23、or( int i=0; i10; i+ ) /外层循环 inner: for( int j=0; j10; j+ ) /内层循环 if( ij ) continue outer; ,四、Java跳转语句,四、Java跳转语句,返回语句return,return语句从当前方法中退出,返回到调用该方法的语句处,并从紧跟该语句的下一条语句继续程序的执行。返回语句有两种格式: return expression; return; return语句通常用在一个方法体的最后,否则会产生编译错误,除非用在if-else语句中。,四、Java跳转语句,1、枚举法(穷举法),就是把所有可能的情况一一测试,筛选
24、出符合条件的各种结果进行输出。,五、常用的程序设计方法,38,常用算法,1、枚举法(穷举法) “笨人之法”: 把所有可能的情况一一测试,筛选出符合条件的各种结果进行输出。 【例一】百元买百鸡:用一百元钱买一百只鸡。已知公鸡5元/只,母鸡3元/只,小鸡1元/3只。 分析: 这是个不定方程三元一次方程组问题(三个变量,两个方程) xyz=100 5x3yz/3=100 设公鸡为x只,母鸡为y只,小鸡为z只。,五、常用的程序设计方法,class Ex3_11 public static void main(String arg) int x,y,z; for (x=0;x=100;x+) for (
25、y=0;y=100;y+) z=100-x-y; if (5*x+3*y+z/3.0=100) System.out.println(“cocks=“+x+“, “+“hens=“+y+“,“+“chickens=“+z); ,结果: cocks =0, hens =25, chickens =75 cocks =4, hens =18, chickens =78 cocks =8, hens =11, chickens =81 cocks =12, hens =4, chickens =84,五、常用的程序设计方法,另一种计算方法:,class HundredYuanChicken publ
26、ic void printChicken() int x,y,z; for(x=0;x=100;x+) for(y=0;y=100;y+) for(z=0;z=100;z+) if(x+y+z=100 ,五、常用的程序设计方法,41,2、递推法(迭代法) 基本思想:不断由已知值推出新值,直到求得解为止。 迭代初值、迭代公式和迭代终止条件是迭代法的三要素 例:斐波纳契数列。前两个数都是1,第三个数是前两个数之和,以后的每个数都是其前两个数之和。 各数之间的一种递推关系,即: Fn = Fn-1 + Fn-2,F1 = F2 =1 本题的三要素是: 迭代初值:x=1, y=1 迭代公式:z=y+x
27、 终止条件:共计算n-2次,五、常用的程序设计方法,42,public class Ex3_12 static int fib(int n) int first = 1; int second = 1; int sum = first + second; int i = 2; while(+i n) first = second; second = sum; sum = first + second; return sum; public static void main(String args) System.out.println(“f20=“ + fib(20); ,程序的运行结果如下:
28、 java FibIterative f20=6765,五、常用的程序设计方法,【累加型】类型诸如 + 求其前n项之和的编程题。,累加型算法 若设i为循环变量,s为前n项累加之和,则程序的基本结构为: s=0; for( i=1 ;i=n ;i+ ) s=s+;,五、常用的程序设计方法,44,编程求11/2+1/31/4+1/5 +1/991/100,累加型算法 程序基本结构为: s=0; for( i=1;i=n;i+ ) s=s+;,运行结果:Sum=0.6881719,五、常用的程序设计方法,45,1) class Ex3_13 2) static float mySum(int n)
29、3) float k = 1f; 4) float sum = 0.0f; 5) for(int i=1;i=n;i+) 6) 7) sum=sum+k/i; 8) k = -k; 9) 10) return sum; 11) 12) public static void main(String args) 13) System.out.println(Sum100= + mySum(100); 14) ,五、常用的程序设计方法,46,【阶乘型】类型诸如 求其前n项之积的编程题。,阶乘型算法 若设i为循环变量,s为前n项相乘之积,则程序的基本结构为: s=1; for( i=1 ;i=n ;i
30、+ ) s=s*;,五、常用的程序设计方法,47,class Ex3_14 static int myFac(int n) int fac = 1; for(int i=1;i=n;i+) fac=fac*i; return fac; public static void main(String args) System.out.println(“Fac10=“ + myFac(5); ,n!运行结果: Fac10=3628800.0,五、常用的程序设计方法,48,编程求n! =1!+2!+3!+n! (n由键盘输入),在同一个循环中 先阶乘,后累加,五、常用的程序设计方法,49,1) cla
31、ss Ex3_15 2) static int method(int n) 3) int s=0,p=1; 4) for(int i=1; i=n; i+) 5) p = p * i; /i! 6) s = s + p; 7) 8) return s; 9) 10) public static void main(String args) 11) int r = method(5); 12) System.out.println(“r=“ + r); 13) 14) ,运行结果:r=153,五、常用的程序设计方法,50,a+aa+aaa+aa=?,import java.io.*; class
32、 Ex3_16 public static void main(String args)throws IOException BufferedReader br=new BufferedReader(new InputStreamReader(System.in); System.out.print(“请输入一个长度n:“); String str=br.readLine(); /转换字符串为整型数 int n=Integer.parseInt(str);,五、常用的程序设计方法,51,System.out.print(“请输入一个整数a:“); str=br.readLine(); /输入字
33、符存入字符串 int a=Integer.parseInt(str);/转换字符串为整型数据 int i=1,sn=0,tn=0; while(i=n) tn=tn+a; sn=sn+tn; a=a*10; +i; System.out.println(“a+aa+aaa+.=“+sn); ,五、常用的程序设计方法,52,3、递归法 基本思想是不断把问题分解成规模较小的同类问题,直到分解形成的问题因规模足够小而能直接求得解为止。,1) class FibRecursion 2) static int fib(int n) 3) if(n=1 | n=2) return 1; 4) return
34、 fib(n-1) + fib(n-2); 5) 6) public static void main(String args) 7) System.out.println(f21= + fib(21); 8) 9) ,一般来说,使用递归的程序代码会更简捷,也更容易理解,但递归代码的执行效率却非常低,所以应尽量避免使用。,五、常用的程序设计方法,/分析下面程序的运行结果。 public class Ex3_17 public static void main(String arge) System.out.println(method(3); public static int method(
35、int n) if(n = 1) return 1; else return n*method(n-1); ,2.8,五、常用的程序设计方法,递归调用指在方法执行过程中出现该方法本身的调用例如: 求Fibonacci数列: 1, 1, 2, 3, 5, 8, 第40个数的值。 数列满足递推公式: F1 = 1, F2 = 1 Fn = Fn 1 + Fn 2 ( n 2 ),public class Ex3_18 public static void main(String arg) System.out.println(f(40); public static int f(int n) if
36、 (n = 1 | n = 2) return 1; else return f(n - 1) + f(n - 2); ,五、常用的程序设计方法,main,f5,f4,f3,f2,f1,f2,f3,f2,f1,public static int f(int n) if (n = 1 | n = 2) return 1; else return f(n - 1) + f(n - 2); ,五、常用的程序设计方法,56,4、简单图形的输出 编程显示以下图形(共N 行,N 由键盘输入)。 * * * * * * * * * * * * * * * * * * * * * * * * *,此类题目分析
37、的要点是: 通过分析,找出每行空格、* 与行号i、列号j及总行数N的关系。 其循环结构可用右图表示。,分析:(设N=5) 第1行 4个空格=5-1 1个“*”=2*行号-1 第2行 3个空格=5-2 3个“*”=2*行号-1 第3行 2个空格=5-3 5个“*”=2*行号-1 第4行 1个空格=5-4 7个“*”=2*行号-1 第5行 0个空格=5-5 9个“*”=2*行号-1,由此归纳出:第i行的空格数N-i个; 第i行的“*”数是2i-1个。,五、常用的程序设计方法,57,编程显示以下图形(共N 行,N 由键盘输入)。 * * * * * * * * * * * * * * * * * *
38、 * * * * * * * * * * * * * * * * * * * * * * * 算法:分成两部分完成: N=9行 N1=(N+1)/2=5 N2=N-N1=4,五、常用的程序设计方法,58,public class Ex3_19 public static void main(String args) int n=9; int middle=(n+1)/2, spaceNum; for(int i=1;i=middle;i+) /打印星号前的空格 spaceNum=middle-i; for(int j=1;j=spaceNum;j+) System.out.print(“ “)
39、; /打印星号 for(int k=1;k=2*i-1;k+) System.out.print(“*“); System.out.println(); middle=(n+1)/2; for(int i=1;i=middle;i+) /打印星号前的空格 spaceNum=middle-i; for(int j=1;j=i;j+) System.out.print(“ “); /打印星号 for(int k=1;k=2*spaceNum-1;k+) System.out.print(“*“); System.out.println();,五、常用的程序设计方法,59,/第一部分,输入*个数 i
40、mport java.io.*; public class Ex3_20 public static void main(String args) throws IOException int n; BufferedReader br =new BufferedReader(new InputStreamReader(System.in); do System.out.print(“input a odd number:“); String str=br.readLine(); n=Integer.parseInt(str); while(n%2=0); /条件值为false时结束循环,五、常
41、用的程序设计方法,60,/第二部分,打印上半部分 int middle=(n+1)/2, spaceNum; for(int i=1;i=middle;i+) /打印星号前的空格 spaceNum=middle-i; for(int j=1;j=spaceNum;j+) System.out.print(“ “); /打印星号 for(int k=1;k=2*i-1;k+) System.out.print(“*“); System.out.println(); ,五、常用的程序设计方法,61,/第二部分,打印下半部分 for(int i=1;i=n-middle;i+) /打印星号前的空格
42、spaceNum=i; for(int j=1;j=spaceNum;j+) System.out.print(“ “); /打印星号 for(int k=1;k=2*(middle-i)-1;k+) System.out.print(“*“); System.out.println(); ,五、常用的程序设计方法,/第二部分另一种实现方法 int middle=(n+1)/2,spaceNum, maxLetterNum=n,letterNum; for(int i=1;i=n;i+) /打印星号前的空格 spaceNum=Math.abs(middle-i); for(int j=1;j=
43、spaceNum;j+) System.out.print(“ “); /打印星号 letterNum=maxLetterNum-2*spaceNum; for(int j=1;j=letterNum;j+) System.out.print(“*“); System.out.println(); ,五、常用的程序设计方法,从命令行输入、输出数据,Scanner是JDK1.5新增的一个类,可以使用该类创建一个对象。如: Scanner reader=new Scanner(System.in); reader对象可调用下列方法,读取用户在命令行输入的各种数据: nextBoolean();ne
44、xtByte();nextShort();nextInt();nextLong(); nextFloat();nextDouble(); System.out.println或System.out.print可输出串值、表达式的值。可使用并置符号“+”将变量、表达式值或一个常数值与一个字符串并置一起输出。 JDK1.5新增了printf函数类似的数据输出方法,格式为: System.out.printf(“ 格式控制部分”,表达式1,表达式2,.) 格式符号:%d输出int型数据;%c输出char型数据%f输出float型数据,小数部分最多保留6位;%s输出字符串数据;%md输出的int型数据
45、占m列;%m.nf输出fload型数据占m列,小数点保留n位。,六、格式化的输入与输出,import java.util.Scanner; public class Ex3_21 public static void main(String args) System.out.println(“请输入“); System.out.println(“请输入0结束“); Scanner reader=new Scanner(System.in); double sum=0; int m=0; double x=reader.nextDouble(); while(x!=0) m=m+1; sum=sum+1; x=reader.nextDouble(); System.out.println(m+“个数的和为“+sum); System.out.println(m+“个数的平均值为“+sum/m); ,六、格式化的输入与输出,课后作业,1、求水仙花数 水仙花数的定义: /* *运算规则: *水仙花数是三位数,它的个、十、百位数字的立方的和等于该数本身, *例如:371=27+343+1,课后作业,2、求100以内的质数 质数的定义:只能被1或自身整除的数 3、输出等腰三角形 * * * * 4.输出倒等腰三角形 * * * *,课后作业,5.输出菱形 * * * * * *
链接地址:https://www.31doc.com/p-2913652.html