浙江大学Java程序设计课程PPT第三章.ppt

上传人:本田雅阁 文档编号:3442865 上传时间:2019-08-26 格式:PPT 页数:36 大小:474.04KB
返回 下载 相关 举报
浙江大学Java程序设计课程PPT第三章.ppt_第1页
第1页 / 共36页
浙江大学Java程序设计课程PPT第三章.ppt_第2页
第2页 / 共36页
浙江大学Java程序设计课程PPT第三章.ppt_第3页
第3页 / 共36页
浙江大学Java程序设计课程PPT第三章.ppt_第4页
第4页 / 共36页
浙江大学Java程序设计课程PPT第三章.ppt_第5页
第5页 / 共36页
点击查看更多>>
资源描述

《浙江大学Java程序设计课程PPT第三章.ppt》由会员分享,可在线阅读,更多相关《浙江大学Java程序设计课程PPT第三章.ppt(36页珍藏版)》请在三一文库上搜索。

1、第三章 Java流程控制,2019年8月26日 ZJU,CS,本章为课程的重点之一 3.1 语句及程序结构 3.2 顺序结构 3.3 选择结构 3.4 循环结构 3.5 跳转语句,语句,语句,Statement 向计算机系统发出操作的代码 程序由一系列语句组成,语句以“;”结束 Java语句类型 表达式语句,如:total=a+b; 空语句,只有一个“;” 复合语句,用 “ ”将多条语句括起来作为一条语句使用 z=x+y; t=z/10; 方法调用语句:方法名(参数); 如: System.out.println(“Java Language”); 控制语句,完成一定的控制功能,包括 选择语句

2、 循环语句 转移语句,“/”是单行注释符,仅对当前行有效 多行注释用”/*”开始,已”*/”结束,程序结构,任何程序有3种基本的结构: 顺序结构 分支结构 循环结构 顺序结构 最简单的一种程序结构 程序按照语句的书写次序顺序执行,public class Force / 计算太阳和地球之间的万有引力 public static void main(String args) double g, mSun, mEarth, f; g=6.66667E-8; mSun = 1.987E33; mEarth = 5.975E27; f = g* mSun* mEarth /(1.495E13*1.49

3、5E13); System.out.println(“The force is “+f); ,顺序结构 Demo1,【例3-1】,程序运行结果如下: The force is 3.5413E27,顺序结构 Demo2 ,【例3-2】,/ 华氏温度转换为摄氏温度:c=5(F-32)/9 public class Conversion public static void main(String args) float f, c; f=70.0f; c=5*(f-32)/9; System.out.println(“Fahrenheit=“+f); System.out.println(“Cent

4、igrade=“+c); ,程序运行结果如下: Fahrenheit=70.0 Centigrade=21.11111,顺序结构Demo3 ,【例3-3】,public class Root /求解方程ax+b=0的根x public static void main(String args) float a, b, x; a=2.0f; b=6.0f; x=-b/a; /求根 x System.out.println(“a=“+a); / Out Result System.out.println(“b=“+b); System.out.println(“x=“+x); ,/a=Float.

5、parseFloat (args0); /b=Float.parseFloat (args1);,程序运行结果: a=2.0 b=6.0 x=-3.0,Eclipse“运行”Java应用程序对话框的(x)=自变量栏中键入: 2.0 6.0 运行程序,屏幕输出结果如下: a=2.0 b=6.0 x=-3.0 这里:2.0和6.0分别作为第1和第2个参数传递给args0和args1,Demo3 解析:,其中语句:a=Float.parseFloat (args0);,这是命令行输入的第一个数,Demo3 解析:,命令行输入的是字符串数据,需要转换为计算所需要的数据类型 将命令行第i个输入转换为以下

6、类型的数据: 整型数 a=Integer.parseInt(argsi); 短整型 a=Short.parseShort(argsi); 单精度浮点: a=Float.parseFloat(argsi); 双精度浮点: a=Double.parseDouble(argsi);,使用Scanner类输入数据,Scanner是SDK1.5新增的一个类,使用该类创建的对象可扫描控制台的输入 ,即程序直接读取键盘输入的数据 Scanner rd=new Scanner(System.in); /创建对象rd System.in属于Java标准输入流 调用Scanner类的下列方法读取控制台输入的各类数

7、据: nextInt() 整型数据 int a=rd.nextInt(); nextDouble() 双精度数据 double b=rd.nextDouble(); nextFloat单精度数据 如 float c=rd.nextFloat(); next字符串,输入的是一个单词,即空格结束 nextLine 字符串,输入是一个语句,以回车结束,使用Scanner类输入数据,使用Scanner类, java源文件中必须包含 import java.util.Scanner ; 或 import java.util.*; /导入类库文件 Example: Scanner rd = new Sca

8、nner(System.in); System.out.println(“请问你的姓名和年龄?“); String name = rd.nextLine(); int age=rd.nextInt(); System.out.printf(“哦,你是”+ name+ “,年龄“+ age);,选择结构,选择结构,也叫分支结构 Java分支选择语句: if 语句 二选一 if 语句嵌套或switch语句 多选一,if 语句,if (布尔表达式) 语句1 else 语句2,Else子句是可选项 若有,则布尔表达式的值为true,执行语句1,否则,执行语句2 若无,则布尔表达式的值为true,执行语

9、句1,否则,执行if语句的后续语句 语句1或语句2可以是单语句,也可以是复合语句等(花括号括起),选择结构 Demo1:,【例3-4】输入2个整数,输出较小者,解题: 利用Scanner类的方法输入2个整数 If语句进行判断,输出较小者,【例补3-1】判断某一年份是否为润年,解题: 输入年份数据 润年判断:条件是能被4整除但又不能被100整除或能被400整除的公元年 year%4=0 & year%100!=0 | year%400=0,选择结构 Demo2:,例3-5:求解ax+b=0(a0)的根,解题: 利用Scanner类的方法输入a,b的值 浮点数在计算机中是近似存储,判断a的绝对值是

10、否大于0.000001,若是输出-b/a,若不是,则可以认为a接近0,就不求根了。,if 语句扩展形式,if(布尔表达式1) 语句1 else if(布尔表达式2) 语句2 else if(布尔表达式n) 语句n else 语句n+1,从上往下依次判断条件 某个布尔表达式的值为true,就执行相应的语句 不再判断其余的条件,转而执行if语句的后续语句,public class Function public static void main(String args) float x, y; x=Float.parseFloat (args0); if ( x0 ,条件之间相互排斥,if 语句嵌

11、套,if(布尔表达式1) 语句1 else if(布尔表达式2) 语句2 else 语句3,if 语句中可以包含if语句,形成嵌套,if(布尔表达式1) if(布尔表达式2) 语句1 else 语句2 else 语句3,注意:else总与离它最近的if配对,if 语句嵌套Demo,【例补3-2】已知一元二次方程的三个系数a,b,c,求一元二次方程的2个根,解题: 当a、b、c均为零时,方程有无数解; 当a、b为零,c0时,方程无解; 当a为零,b0时,方程解为Xc/b; 当a0时,求:db24ac 若d0,X(bSqr(d)/(2a) 若d0时,有两个不同复根:Xb/(2a)Sqr(d)/(2

12、a)i,Switch语句,switch(表达式) /计算表达式,得到值 case 值1: 语句块1; / 如果表达式值为值1,执行语句块1 break; / 终止,结束switch语句 case 值2:语句块2; / 如果表达式值为值2,执行语句块2 break; / 终止,结束switch语句 case 值n:语句块n; / 如果表达式值为值n,执行语句块n break; / 终止,结束switch语句 default:/ 如果表达式值与值1值n都不同,执行语句块n+1 语句块n+1; ,break:终止程序以下部分的执行,执行switch语句的后续语句,若无,将继续执行后续的case子句中

13、的语句块,表达式的数据类型可以是byte、char、short和int类型,不允许是浮点数类型和long类型,【例3-7】命令行输入112之间的数字,输出对应的月份的英文名,public class Chapter37 public static void main(String args) String str=“; switch(Integer.parseInt(args0) /根据输入的值进行多选 case 1: str=“January“; break; case 2: str=“February“; break; case 3: str=“March“; break; case 4:

14、 str=“April“; break; case 5: str=“May“; break; case 6: str=“June“; break; case 7: str=“July“; break; case 8: str=“August“; break; case 9: str=“September“; break; case 10: str=“October“; break; case 11: str=“November“; break; case 12: str=“December“; break; default: str=“The Input Error!“; System.out

15、.println(str); /输出 ,多分支Demo,【例3-8】将百分制成绩转化为优秀、良好、中等、及格和不及格的5级制成绩。 标准为: 优秀: 90-100分; 良好: 80-89分; 中等: 70-79分; 及格: 60-69分; 不及格: 60分以下,多分支结构总结: if-else语句可实现switch 语句所有的功能,但分支很多的情况下使用switch语句更为简练,且可读性强。 if-else语句可以基于一个范围内的值或一个条件选择不同的操作,但switch语句当中的每个常量都必须对应一个单值,循环结构,循环语句 在一定条件下,反复执行一段程序代码 被反复执行的程序代码称为循环体

16、。 循环有两种类型: 计数控制 控制累计执行循环体的次数,次数到则结束循环 如1+2+3+100或98+96+94+4+2 事态控制 由某些条件决定循环结束。 如计算一系列正整数之和,遇负数停止循环。 Java提供的循环语句有 while语句 dowhile语句 for语句(用于计数控制),while 语句,语句格式: while(布尔表达式) 循环体 含义:当表达式结果为true时,重复执行循环体。 特点:先执行,再判断,循环可能一次也不执行,循环体可以是单一语句,也可以是复合语句(用花括号括起),dowhile语句,语句格式 do 循环体 while(布尔表达式); 含义:重复执行循环体,

17、直到布尔表达式为false。 特点:先执行,再判断,循环至少执行一次 注意:两种格式循环体中至少有一条语句用以改变循环条件,否则会死循环,循环控制Demo1,【例3-9】计算10! 10!=1*2*3*10 【例3-10】计算150之间的奇数和与偶数和 【例补3-3】输入一个正整数n,输出 2/1+3/2+5/3+8/5 +.的前n项之和,保留4位小数(不足4位时,不必用0填满4位)。,解题:该序列从第2项起 每一项的分子是前一项分子与分母的和 分母是前一项的分子,【例补3-4】编程:输入一批非负数,当输入负数时,表示输入结束。求这批非负数据的最大值、最小值和平均值。,for语句,for(Ex

18、p1;Exp2;Exp3) 循环体 Exp1,Exp2,Exp3指表达式1、2、3 执行过程 执行Exp1,给循环变量(及其它变量)赋初值; 计算Exp2的值,若true,执行循环体中的语句; 执行Exp3,修改循环变量的值 重复计算Exp2的值,若true,执行循环体,直到Exp2的值为false,循环控制Demo2,【例3-13】计算Fibonacci数列中的前20项。 Fibonacci数列:前两项是1、1,第三项是前二项之和,以后每一项都是前二项之和。即为:1、1、2、3、5、8、13、21、34 【例3-14】判断素数,解题: 素数是除了1及自身外,不能被其它数整除的自然数。 对于一

19、个自然数k,与2-(k-1)之间的每个整数进行相除 如果没有一个能被整除,则k是素数;否则k不是素数,跳转语句,break语句:使程序的流程从一个语句块内部跳转出来。通常在switch和循环语句中使用。 continue语句:只在循环语句中使用。作用是终止当前这轮的循环,跳过本轮循环剩余的语句,直接进入下一轮循环。,public static void main(String args) int i,sum; sum=0; for (i=1;i=5;i+) sum=sum+i; if (i%2!=0) continue; System.out.println(“加个偶数“+i); System

20、.out.println(“sum=“+sum); ,执行结果: 加个偶数2 加个偶数4 sum=15,多重循环 Multi-Loop,例如: for( ; ; ) /外循环开始 for(; ; ) /内循环开始 /内循环结束 /外循环结束,public class Primes public static void main(String args) int i, k; boolean yes; for(k=2; k50; k+) /外循环,k:250 yes=true; i=2; while (i=k-1 ,【例3-16】求2-50之间的素数,循环控制Demo3,【例3-15】计算输出1!

21、、2!、5!以及它们的和,解题: 外循环k遍历1-5 内循环求每个k的阶程,1!=1 2!=2 3!=6 4!=24 5!=120 Total sum=153,* * * * * * * * * * * * * * * * * * * * *,【例补3-5】输出右边的图形,解题: 外循环控制行 内循环控制每行输出*个数,常用算法总结,欧几里德算法: 输入2个整数a和b,比较a和b,将a设置为较大数,b为较小数。 a除以b,得余数为r 判断r0,则b赋值给a,r赋值给b,重复步骤3、4,直至r=0 若r=0,则当前的b为最大公约数 最小公倍数为:(初始的a)* (初始的b)/ (当前的b),一、

22、求最值 1、最大、最小值 思路:第1个数赋值给max,min,对于后续输入的每个数n if (maxn) min=n; 2、最大公约数,最小公倍数 【例补3-6】输入两个整数,求它们的最大公约数和最小公倍数,常用算法总结,二、统计 累加(1+3+5+100)、累积(求n!) 平均值、计数 【例补3-7】求表达式值。x、n由键盘输入,分析: 这是n项求和的例子,可表示成sum=sum+item的形式 第i项等于第i-1项乘以x/(i+1),即item=item*x/(i+1) 故循环体可由item=item*x/(i+1)和sum=sum+item构成。 初值问题:sum初值为0,item初值应

23、为1。,常用算法总结,分析: 设公鸡X只,母鸡Y只,小鸡Z只,列出方程式: X+Y+Z=100 5X+3Y+Z/3=100 二个方程求3个未知数,无法用代数方法求解 可将X、Y、Z分别为0-100的每种可能性都去试一下,如符合,则就是其中的一种购买方案。(事实上X和Y的循环可分别为0到20和0到33),三、穷举法 【例补3-8】用100元钱买100只鸡,其中公鸡每只5元,母鸡每只3元,小鸡3只1元,问可买公鸡、母鸡、小鸡各多少只?,常用算法总结,【例补3-9】水仙花数:是一个三位数,它各位数字的立方和等于它本身。如:153 = 1*1*1 + 5*5*5 + 3*3*3 【例补3-10】求1-1000内的所有完数. 完数:因子和与它本身相等的数 【例补3-11】输入一个十进制数,输出对应的二进制数,三、递推法 如【例3-13】计算Fibonacci数列中的前20项。 四、数学知识题 判断是否素数 求水仙花数、完数; 分段求函数值;进制转换等,常用算法总结,* * * * *,五、输出图形 【例补3-12】输出如下所示图形。,

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

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1