《第三章java流程控制语句》由会员分享,可在线阅读,更多相关《第三章java流程控制语句(70页珍藏版)》请在金锄头文库上搜索。
1、第三章JAVA流程控制语句主讲教师:主讲教师:毛科亮毛科亮本章内容语句概述 Java语言的语句分类 结构化程序设计的三种基本流程分支语句 If语句 If-else语句 Switch语句循环语句 while循环语句 do-while语句 for语句转移语句 break语句 continue语句 return语句常用的程序设计方法枚举法、地推法、递归法 简单图形的输出 格式化的输入与输出从键盘输入数据格式化的输出语句的概念java程序的执行遵循一定的流程,流程是程序执行的顺序。流程控制语句是控制程序中各语句执行顺序的语句,是程序中非常关键和基本的部分。流程控制语句可以把单个的语句组合成有意义的、能
2、够完成一定功能的小逻辑块。一、Java语句概述语句与结构化程序设计v在算法语言中,数据类型描述数据的性质,表达式描述对数据的运算,语句描述对数据的操作。v程序由一系列语句组成。vJava语言虽然是一种面向对象的计算机语言,但在一个局部,例如方法内、块语句内仍然需要面向过程的程序设计和方法。v作为面向过程程序设计精华的结构化程序设计思想,仍然是面向对象程序设计方法的基石。一、Java语句概述结构化程序设计的三种基本流程:尽管现实世界的问题是复杂的、千变万化的,但与之相对应的计算机算法流程,只有三种基本结构-顺序结构、选择结构、循环结构。每种结构都是单入口、单出口;每一部分都会被执行到;没有死循环
3、。 A B P A B P 循环体真假假真Java语言提供支持结构化程序设计的所有语言。一、Java语句概述 Java语言提供结构化语句实现程序的流程控制。 表达式语句 顺序结构 空语句 复合语句 条件语句 选择语句语句 开关 语句 switch while 循环语句 do-while for break 转移语句 continue return 一、Java语句概述一、Java语句概述v 在java语言中,语句以分号“;”为结束标志。v特殊的是,块语由其他语句组成,其本身不用分号结束。内嵌有块语句并以块语句结尾的语句,也不需要用分号结尾。vava语句按性质可分为:说明性语句、操作性语句。vJ
4、ava语句按功能可分为: 空语句、标号语句、声明语句、表达式语句、分支语句、循 环语句、断言语句、跳转语句、同步语句、异常语句、块语 句等。一、Java语句概述一、Java语句概述空语句:仅包含一个分号。例如:for(inti=1;i3) System .out .println (a3); System .out .print (ok!);上面的执行结果是什么上面的执行结果是什么?IF语句语句二、Java分支语句一、Java语句概述classMaxpublicdoublegetMax(doublea,doubleb)doublemax;max=a;if(maxb)max=b;returnma
5、x;publicclassEx3_1publicstaticvoidmain(Stringargs)Maxobj=newMax();System.out.println(max=+obj.getMax(3.14,3.1415926);判断两个数的最大值格式:格式: if (表达件表达件) 语句语句1;else 语句语句2; 功能:首先计算表达式,若值为真,则执行语句功能:首先计算表达式,若值为真,则执行语句1,否则执行语句否则执行语句2。 IF-else语句语句二、Java分支语句一、Java语句概述importjava.util.*;classLeappublicbooleanisLeap(
6、intyear)if(year%4=0)&(year%100!=0)|(year%400=0)returntrue;elsereturnfalse;publicclassEx3_2publicstaticvoidmain(Stringargs)intyear;System.out.println(输入一个年份:);Scannerreader=newScanner(System.in);year=reader.nextInt();Leapobj=newLeap();if(obj.isLeap(year)System.out.println(year+是闰年。);elseSystem.out.pr
7、intln(year+不是闰年。);闰年问题if (条件条件1) /程序代码程序代码; else if ( 条件条件2) /程序代码程序代码; else if ( 条件条件3) /程序代码程序代码; 注意注意:只要任何一个条件成立只要任何一个条件成立.程序就不会对下一个条件进行判断和再执行了。程序就不会对下一个条件进行判断和再执行了。IF-else if 语句语句二、Java分支语句publicclassEx3_3publicstaticvoidmain(Stringargs)(newLetter().judgeLetter();classLetterpublicvoidjudgeLetter
8、()charch;ch=(char)(java.lang.Math.random()*128);if(ch=a&ch=A&ch=0&ch=9)System.out.println(ch+是数字!);elseSystem.out.println(ch+是其他符号!);检查用random()方法产生的一个字符,判断是否为英文大写字母、小写字母、数字或是其他符号,并输出相应信息。IF嵌套语句嵌套语句if (条件条件1) if ( 条件条件2) /程序代码程序代码; else /程序代码程序代码; else if ( 条件条件3) /程序代码程序代码; else /程序代码程序代码; .IF嵌套语句嵌
9、套语句二、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子句中的值必须是常量,而且所有case子句中的值应是不同的。default子句是可选的。break语句用来在执行完一个case分支后,使程序
10、跳出switch语句,即终止switch语句的执行(在一些特殊情况下,多个不同的case值要执行一组相同的操作这时可以不用break,不写break时执行自该case开始到下一次找到break语句为止)多分支语句多分支语句 switch二、Java分支语句二、Java分支语句importjava.util.*;publicclassEx3_4publicstaticvoidmain(Stringargs)(newGrade().toGrade();classGradepublicvoidtoGrade()intscore,m;Scannerreader=newScanner(System.in
11、);System.out.println(输入成绩:);score=reader.nextInt();if(score100)System.out.println(dataerror!);elsem=score/10;switch(m)case9:case10:System.out.println(ThegradeisA.);break;case8:System.out.println(ThegradeisB.);break;case7:System.out.println(ThegradeisC.);break;case6:System.out.println(ThegradeisD.);b
12、reak;default:System.out.println(ThegradeisE.);break;输入百分成绩,输出成绩等级。循环语句的作用是反复执行一段代码,直到满循环语句的作用是反复执行一段代码,直到满足终止循环的条件为止。足终止循环的条件为止。Java语言中提供的循语言中提供的循环语句有:环语句有: while语句语句 do-while语句语句 for语句语句循环语句循环语句三、Java循环语句三、Java循环语句While ( 条件条件 ) /循环体循环体 注意:注意:(1)此语句是先判断条件,再确定是否执行语句或程)此语句是先判断条件,再确定是否执行语句或程 序块。序块。(2)
13、条件为)条件为true时,执行循环体的语句或程序块。反时,执行循环体的语句或程序块。反 之,不执行循环体。之,不执行循环体。(3)在循环体中要有改变条件的语句,否则会成为死)在循环体中要有改变条件的语句,否则会成为死 循环。循环。while语句语句三、Java循环语句表达式值表达式值语语 句句结束结束While 语句语句do /循环体;循环体; while (条件条件) ;注意:注意:(1)此语句是先执行一次循环体,再判断条件。此语句是先执行一次循环体,再判断条件。(2)条件为条件为true时,再次执行时,再次执行 循环体的语句或程序块。循环体的语句或程序块。(3)在循环体中要有改变条件的语句
14、在循环体中要有改变条件的语句,否则会成为死循环。否则会成为死循环。(4)do-while循环语句即是至少都要执行一次的。循环语句即是至少都要执行一次的。do-while语句语句三、Java循环语句三、Java循环语句语语 句句表达式值表达式值结束结束do-While 语句语句for (设定初始值设定初始值 ; 条件限定条件限定 ; 修改控制变量修改控制变量) /程序代码;程序代码; 不限定的循环(死循环)不限定的循环(死循环) for ( ; ; ) /程序代码;程序代码; 多个变量进行定义多个变量进行定义 for ( int i=0,j=100 ; ij ; i+ , j- ) /程序代码;
15、程序代码; For语句语句三、Java循环语句三、Java循环语句for (int i=0 ; i100 ; i+) for (int j=0 ; ji; j+) /程序块;程序块; 注意:在我们的实际开发过程中,注意:在我们的实际开发过程中,for循环语句使用的循环语句使用的比较多比较多,重点把握!重点把握!For循环嵌套循环嵌套三、Java循环语句三、Java循环语句/ 输出1100内前5个可以被3整除的数。public class Ex3_5 public static void main(String args) int num = 0, i = 1; while (i = 100)
16、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+) if (i % j = 0) f = false; break; if (!f) continue; System.out.print( + i); 三、Java循环语句三、Jav
17、a循环语句JAVA中的跳转语句有:中的跳转语句有: break语句语句 continue语句语句 返回语句返回语句return跳转语句跳转语句四、Java跳转语句break语句用于终止某个语句块或循环体的执行语句用于终止某个语句块或循环体的执行 break; break语句出现在多层嵌套的语句块中时,可以通过语句出现在多层嵌套的语句块中时,可以通过标签指明要终止的是哪一层语句块标签指明要终止的是哪一层语句块 label1: label2: label3: break label2; break语句语句四、Java跳转语句四、Java跳转语句break语句示例语句示例public class E
18、x3_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中,可以为每个代码块加一个标号,一个代码块通常是用大括中,可以为每个代码块加一个标号,一个代码块通常是用大括号号括起来的
19、一段代码。加标号的格式如下:括起来的一段代码。加标号的格式如下:BlockLabel: codeBlock break语句的第二种使用情况就是跳出它所指定的块,并从紧跟语句的第二种使用情况就是跳出它所指定的块,并从紧跟该块的第一条语句处执行。例如:该块的第一条语句处执行。例如:break BlockLabel;break语句语句a: /标记代码块标记代码块ab: /标记代码块标记代码块bc: /标记代码块标记代码块cbreak b; /此处的语句块不被执行此处的语句块不被执行 /此处的语句块不被执行此处的语句块不被执行 /从此处开始执行从此处开始执行 四、Java跳转语句四、Java跳转语句l
20、break 语句用于终止某个语句块的执行。用在循环语句体中,可以强行退出循环;例如:public class Ex3_8 public static void main(String args) int stop = 4; for (int i = 1; i = 10; i+) /当i等于stop时,退出循环 if (i = stop) break; System.out.println( i= + i); i = 1i = 2i = 3lcontinue 语句用在循环语句体中,用于终止某次循环过程,跳过循环体中 continue 语句下面未执行的循环,开始下一次循环过程;例如:public
21、class Ex3_9 public static void main(String args) int skip = 4; for (int i = 1; i = 5; i+) /当i等于skip时,跳过当次循环 if (i = skip) continue; System.out.println(i = + i); i = 1i = 2i = 3i = 52.5.4四、Java跳转语句四、Java跳转语句continue语句语句continue语句用于跳过某个循环语句块的一次执行语句用于跳过某个循环语句块的一次执行 continue语句出现在多层嵌套的循环语句体中时,可语句出现在多层嵌套的
22、循环语句体中时,可以通过标签指明要跳过的是哪一层循环。以通过标签指明要跳过的是哪一层循环。 四、Java跳转语句四、Java跳转语句continue语句实例语句实例public class Ex3_10 public static void main( String args ) for( int i=1; i= 10; i+ ) if( i = 5 | i = 7 ) continue; System.out.println( i= + i ); System.out.println( Done ); 四、Java跳转语句四、Java跳转语句外层跳转外层跳转:continue语句语句cont
23、inue语句用来结束本次循环,跳过循环体中下面尚未执行的语语句用来结束本次循环,跳过循环体中下面尚未执行的语句,接着进行终止条件的判断,句,接着进行终止条件的判断,以决定是否继续循环以决定是否继续循环。对于。对于for语语句在进行终止条件的判断前,还要先执行迭代语句。也可以用句在进行终止条件的判断前,还要先执行迭代语句。也可以用continue跳转到括号指明的外层循环中跳转到括号指明的外层循环中格式为格式为continueouterLable;例如例如outer:for(inti=0;i10;i+)/外层循环外层循环inner:for(intj=0;j10;j+)/内层循环内层循环if(ij)
24、continueouter;四、Java跳转语句四、Java跳转语句返回语句返回语句returnreturn语句从当前方法中退出,返回到调用该方法的语句语句从当前方法中退出,返回到调用该方法的语句处,并从紧跟该语句的下一条语句继续程序的执行。返处,并从紧跟该语句的下一条语句继续程序的执行。返回语句有两种格式:回语句有两种格式:return expression;return;return语句通常用在一个方法体的最后语句通常用在一个方法体的最后,否则会产生编译否则会产生编译错误错误,除非用在除非用在if-else语句中。语句中。四、Java跳转语句1、枚举法(穷举法)就是把所有可能的情况一一测试
25、,筛选出符合条件的各种结果进行输出。五、常用的程序设计方法38常用算法1、枚举法(穷举法)“笨人之法”:把所有可能的情况一一测试,筛选出符合条件的各种结果进行输出。【例一】百元买百鸡:用一百元钱买一百只鸡。已知公鸡5元/只,母鸡3元/只,小鸡1元/3只。分析:这是个不定方程三元一次方程组问题(三个变量,两个方程)xyz=1005x3yz/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 (y=0;y=100;y
26、+) 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五、常用的程序设计方法另一种计算方法:classHundredYuanChickenpublicvoidprintChicken()intx,y,
27、z;for(x=0;x=100;x+)for(y=0;y=100;y+)for(z=0;z=100;z+)if(x+y+z=100&5*x+3*y+z/3.0=100)System.out.println(公鸡=+x+母鸡=+y+小鸡=+z); publicclassTest303publicstaticvoidmain(Stringargs)(newHundredYuanChicken().printChicken();五、常用的程序设计方法412、递推法(迭代法)基本思想:不断由已知值推出新值,直到求得解为止。迭代初值、迭代公式和迭代终止条件是迭代法的三要素例:斐波纳契数列。前两个数都是1
28、,第三个数是前两个数之和,以后的每个数都是其前两个数之和。各数之间的一种递推关系,即:Fn=Fn-1+Fn-2,F1=F2=1本题的三要素是:迭代初值:x=1,y=1迭代公式:z=y+x终止条件:共计算n-2次五、常用的程序设计方法42publicclassEx3_12staticintfib(intn)intfirst=1;intsecond=1;intsum=first+second;inti=2;while(+in)first=second;second=sum;sum=first+second;returnsum;publicstaticvoidmain(Stringargs)Syst
29、em.out.println(f20=+fib(20);程序的运行结果如下: 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
30、=0.6881719 五、常用的程序设计方法451) class Ex3_132) static float mySum(int n) 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项之积的编程题
31、。阶乘型算法阶乘型算法 若设若设i为循环变量,为循环变量,s为前为前n项相乘之积,则程序项相乘之积,则程序的基本结构为:的基本结构为: s=1; for( i=1 ;i=n ;i+ ) s=s*;五、常用的程序设计方法47class 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.
32、0五、常用的程序设计方法48编程求n! =1!+2!+3!+n! (n由键盘输入)在同一个循环中先阶乘,后累加五、常用的程序设计方法491) class 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
33、) 运行结果:r=153五、常用的程序设计方法50a+aa+aaa+aa=?import java.io.*;class 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(s
34、tr);五、常用的程序设计方法51 System.out.print(请输入一个整数a:);str=br.readLine(); /输入字符存入字符串int a=Integer.parseInt(str);/转换字符串为整型数据int i=1,sn=0,tn=0;while(i 2 )public class Ex3_18 public static void main(String arg) System.out.println(f(40); public static int f(int n) if (n = 1 | n = 2) return 1; else return f(n - 1
35、) + f(n - 2); 五、常用的程序设计方法mainf5f4f3f2f1f2f3f2f1public static int f(int n) if (n = 1 | n = 2) return 1; else return f(n - 1) + f(n - 2); 五、常用的程序设计方法564、简单图形的输出编程显示以下图形(共N 行,N 由键盘输入)。 * * * * * * * * * * * * * * * * * * * * * * * * *此类题目分析的要点是:通过分析,找出每行空格、* 与行号i、列号j及总行数N的关系。其循环结构可用右图表示。分析:(设N=5)第1行 4个
36、空格=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 由键盘输入)。 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *算法:分成两部分完成:N=9行 N1=(N+1)/2=5
37、 N2=N-N1=4五、常用的程序设计方法58publicclassEx3_19publicstaticvoidmain(Stringargs) intn=9;intmiddle=(n+1)/2,spaceNum;for(inti=1;i=middle;i+)/打印星号前的空格spaceNum=middle-i;for(intj=1;j=spaceNum;j+)System.out.print();/打印星号for(intk=1;k=2*i-1;k+)System.out.print(*);System.out.println();middle=(n+1)/2;for(inti=1;i=mid
38、dle;i+)/打印星号前的空格spaceNum=middle-i;for(intj=1;j=i;j+)System.out.print();/打印星号for(intk=1;k=2*spaceNum-1;k+)System.out.print(*);System.out.println();五、常用的程序设计方法59/第一部分,输入*个数import java.io.*;public class Ex3_20public static void main(String args) throws IOException int n;BufferedReader br =new BufferedR
39、eader(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时结束循环五、常用的程序设计方法60/第二部分,打印上半部分 int middle=(n+1)/2, spaceNum;for(int i=1;i=middle;i+) /打印星号前的空格 spaceNum=middle-i; for(int j=1;j=spaceNum;j+) Sys
40、tem.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+) /打印星号前的空格 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(); 五、常用
41、的程序设计方法/第二部分另一种实现方法intmiddle=(n+1)/2,spaceNum,maxLetterNum=n,letterNum;for(inti=1;i=n;i+)/打印星号前的空格spaceNum=Math.abs(middle-i);for(intj=1;j=spaceNum;j+)System.out.print();/打印星号letterNum=maxLetterNum-2*spaceNum;for(intj=1;j=letterNum;j+)System.out.print(*);System.out.println();五、常用的程序设计方法从命令行输入、输出数据Sc
42、anner是JDK1.5新增的一个类,可以使用该类创建一个对象。如:Scannerreader=newScanner(System.in);reader对象可调用下列方法,读取用户在命令行输入的各种数据:nextBoolean();nextByte();nextShort();nextInt();nextLong();nextFloat();nextDouble();System.out.println或System.out.print可输出串值、表达式的值。可使用并置符号“+”将变量、表达式值或一个常数值与一个字符串并置一起输出。JDK1.5新增了printf函数类似的数据输出方法,格式为:
43、System.out.printf(“格式控制部分”,表达式1,表达式2,.)格式符号:%d输出int型数据;%c输出char型数据%f输出float型数据,小数部分最多保留6位;%s输出字符串数据;%md输出的int型数据占m列;%m.nf输出fload型数据占m列,小数点保留n位。六、格式化的输入与输出importjava.util.Scanner;publicclassEx3_21publicstaticvoidmain(Stringargs)System.out.println(请输入);System.out.println(请输入0结束);Scannerreader=newScann
44、er(System.in);doublesum=0;intm=0;doublex=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以内的质数质数的定义:只能被
45、1或自身整除的数3、输出等腰三角形 * * *4.输出倒等腰三角形 * * * *课后作业课后作业5.输出菱形 * * * * * *6.输出乘法表 课后作业课后作业7、编一程序实现以下功能:运行时输出下列结果。图示:/abcdefg/abcde/abc/a8、编一程序实现以下功能:求输入的整数各位数字之和,如输入234则输出9,输入-312则输出69、编一程序实现以下功能:将一个整数首尾倒置,若程序输入12345,则输出54321;若程序输入-34567,则输出-76543,做成一个方法传参数!课后作业课后作业 10、编一程序实现以下功能:输入的一个小写字母、将字母后移5个位置后输出,如a变成f,w变成b。11、计算1!+2!+3!+.+10!,其中阶乘的计算用方 法实现。ThankYou