版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1,第 3 章 Java流程控制,3.1语句及程序结构 3.2顺序结构 3.3选择结构 3.4循环结构 3.5跳转语句,2,3.1 语句及程序结构,语句 向计算机系统发出操作指令的代码 程序由一系列语句组成 Java语句类型 表达式语句表达式; 空语句只有一个“;” 复合语句 用 “ ”将多条语句括起来作为一条语句使用 方法调用语句 控制语句:包括选择语句、循环语句、转移语句,3,Java 语句类型举例,4,程序结构,程序的3种基本结构 顺序结构 分支结构 if 语句、 switch 语句 循环结构 while 语句、 dowhile 语句、 for 语句,5,3.2 顺序结构,最简单的一种程
2、序结构 程序的执行顺序 语句的书写顺序 程序的基本顺序 数据输入(定义变量、变量赋初值) 处理数据(计算) 输出结果,6,例3-1】计算太阳和地球之间的万有引力,程序运行结果: The force is 3.541296983601972E27,7,例3-2】将华氏温度转换为摄氏温度 c=5(f-32)/9,程序运行结果: Fahrenheit=70.0 Centigrade=21.11111,8,例3-3】求解方程ax+b=0的根x,说明:暂时不考虑a为0的情况,9,例3-3】命令行参数的输入,运行前设置参数 在Eclipse“运行配置”窗口的“ (x)=自变量”栏中输入: 2.0 6.0
3、这个栏目就是命令行参数 单击“运行配置”窗口的“运行”按钮,输出结果: a=2.0 b=6.0 x=-3.0 说明 2.0 作为第1个参数传递给args0 6.0 作为第2个参数传递给args1,10,例3-3】命令行参数的输入,在DOS下运行程序 设置Java的路径 将Root.java复制到指定目录下 进入命令提示符 切换当前目录为指定目录 编译:javac Root.java 执行:java Root 2.0 6.0,11,命令行输入,命令行输入的第一个数 a=Float.parseFloat (args0); 转换为浮点数 命令行输入的是字符串数据,需要转换为计算所需要的数据类型 将命
4、令行第i个输入转换为以下类型的数据 整型 a=Integer.parseInt(argsi); 短整型a=Short.parseShort(argsi); 单精度浮点a=Float.parseFloat(argsi); 双精度浮点a=Double.parseDouble(argsi,12,3.3 选择结构,选择结构,也叫分支结构 根据给定的条件来决定执行不同的程序段 Java选择语句 if 语句 二选一 switch 语句 多选一,13,if 语句,格式1 if (布尔表达式) 语句 格式2 if (布尔表达式) 语句1 else 语句2,14,if 语句,格式1 if (布尔表达式) 语句,
5、格式2 if (布尔表达式) 语句1 else 语句2,15,if 语句例子,1. 如果星期天不下雨,去西湖划船,否则去茶楼喝茶。 if (星期天不下雨) 划船; else 喝茶,if 语句可以写成一行或两行 if(x=0) y=x; else y=-x; 或:if(x=0) y=x; else y=-x,2. 求y=|x| if (x=0) y=x; else y=-x,或:if (星期天下雨) 喝茶; else 划船,16,if 语句例子,3. 找出a 和b两数中的大数, 放到max中 if (a=b) max=a; else max=b,或 max=a; if (maxb) max=b,
6、4. 找出a、b 和 c 三个数中的最大数,放到max中 max=a; if (maxb) min=b; if (minc) min=c,17,if 语句例子,5. 判断一个数 n 是奇数还是偶数 if (n%2=0) System.out.println(n+is even.); else System.out.println(n+is odd.,18,例3-4】通过命令行输入2个整数,输出较小者,19,例3-4】改成从键盘输入2个整数,20,例3-4】改成从键盘输入2个整数,输入:1 2 输出: x=1 y=2 min=1,21,例3-5】求解ax+b=0(a0)的根,22,if 语句注
7、意点,当if 语句包含多条语句时,一定要加“ ” 编写程序时,要注意“ ”的位置 浮点数类型数据的相等比较 浮点数在计算机中用近似值表示 不使用严格相等比较“=” 判断它们的差是否是一个很小的值 如:判断float 类型变量a 和b 是否相等的表达式 |a-b|0.0000001f,23,if 语句嵌套,在if 语句中包含 if 语句,就形成嵌套 当由多个条件来决定执行不同的程序段时使用 格式 if(布尔表达式1) 语句1 else if(布尔表达式2) 语句2 else if(布尔表达式3) 语句3 else if(布尔表达式n) 语句n else 语句n+1,24,条件 00 else;
8、else c=99,c=0,28,switch语句,switch(表达式) case 常量1: 语句序列1; break; case 常量2: 语句序列2; break; case 常量n: 语句序列n; break; default: 语句序列n+1;,if 语句中,布尔表达式的值只能有两种:true 或 false 若情况更多时,需要提供更多的选择:使用switch语句,计算表达式,得到值 / 如果表达式值为常量1,执行语句序列1 / 终止,结束switch 语句 / 如果表达式值为常量2,执行语句序列2 / 终止,结束switch 语句 / 如果表达式值为常量n,执行语句序列n / 终止
9、,结束switch 语句 /如果表达式值与常量1常量n都不同,执行语句序列n+1,29,Switch语句执行流程,30,switch 语句注意点,表达式的数据类型必须是 byte,char,short,int case 子句中的值必须是常量,而且互不相同 break 语句用来终止switch 语句的执行,即在执行完一个case 分支后,使程序跳出switch 语句,switch(表达式) case 常量1: 语句序列1; break; case 常量2: 语句序列2; break; case 常量n: 语句序列n; break; default: 语句序列n+1;,31,例3-7,通过 命令行
10、输入112之间的一个整数,输出相应月份的英文单词,32,例3-8】成绩转化,将百分制成绩转化为优秀、良好、中等、及格和不及格的5级制成绩。 转化标准 优秀:90100分 良好:8089分 中等:7079分 及格:6069分 不及格:60分以下 思路 第一步:将百分制划分等级 第二步:将等级对应的中文字符输出,构造表达式 (grade/10) 10010 90999 80898 70797 60696 50595 40494 30393 20292 10191 090,优秀 优秀 良好 中等 及格 不及格 不及格 不及格 不及格 不及格 不及格,33,例3-8】成绩转化,存在问题: 输入1011
11、09,显示等级为“优秀,34,例3-8】新的处理思路,输入错误数据时的处理,35,实验示例,输入n表示做n次下面的操作: 输入两个正整数,输出它们的和。 例: 输入: 2 /表示n=2,做两次操作 10 11 20 30 输出: sum=21 sum=50,import java.util.Scanner; public class Test10097 public static void main(String args) int n,a,b,i,sum; Scanner in=new Scanner(System.in); n=in.nextInt(); /输入n for(i=1; i=n
12、; i+) /*-*/ System.out.println(sum=+sum);,a=in.nextInt(); /输入a b=in.nextInt(); /输入b sum=a+b; /计算和,36,3.4 循环结构,循环结构程序 在一定条件下,反复执行一段程序代码 被反复执行的程序代码称为循环体 Java 循环语句 while 语句 dowhile 语句 for 语句,37,for 语句,格式 for ( 表达式1; 表达式2; 表达式3 ) 循环体 例 说明 表达式1:循环控制变量赋初值 表达式2:布尔型,循环条件,判断循环是否继续 表达式3:修改循环控制变量值,38,例:同学们一个学期
13、(56天)的生活用for循环表示 开学报到 for ( i=1; i=56; i+ ) 起床 早餐 上课 中餐 上课 晚餐 自习或上课 睡觉 考试 放假,for 语句,内的就是循环体,39,for 语句执行过程,1)计算表达式1,给循环控制变量赋初值 (2)计算表达式2 如果值是true,执行循环体 如果值是false,执行(4) (3)计算表达式3,修改循环控制变量值,返回(2) (4)结束循环,执行 for 语句的下一条语句,40,for 语句执行过程,第一步 i=1 第二步 1=3? 第三步 输出1 第四步 i=2,2=3,输出2,i=3,3=3,输出3,i=4,4=3,结束循环,运行结
14、果: 1 2 3,特别注意:循环结束时循环控制变量的值,41,例3-12】计算1100之间的整数之和,s =1+2+3+4+100,42,例3-12】 for 语句执行过程,s=0 i=1 i=100? s=0+1 i=2,i=100,s=1+2,i=3,i=100,s=1+2+3,i=4,i=100,结束循环,i=100,i=101,s=1+2+3+100,i=100,43,例3-12】 拓展,求1 100 所有奇数的和,i+=2,求1 100 所有偶数的和,求1 n 所有整数的和 (n 由键盘输入,求n! (n 由键盘输入,1,求1+1/2+1/3+1/100,1/i,44,while 语
15、句,格式 while(布尔表达式) 循环体 含义 当布尔表达式值为true时,重 复执行循环体,特点 先判断,后执行 循环次数最少为0 次 ( 一开始表达式值是false,45,while 语句实例分析,运行结果: m=3 m=2 m=1 m=0,m=4 40? m=4-1 输出m=3,30? m=3-1 输出m=2,20? m=2-1 输出m=1,10? m=1-1 输出m=0,00? 结束循环,如果修改为:int m=0; 则不进入循环,46,while 语句实例分析,运行结果: 此程序没有结果,没有走while循环,死循环,47,例3-9】计算10,运行结果10!=3628800.0,4
16、8,例3-9】 while 语句执行过程,i=1 s=1 i=10? s=1*1 i=2,i=10,i=10? s=1*2 i=3,i=10? s=1*2*3 i=4,i=10? s=1*2*3*10 i=11,i=10? 结束循环,这条语句千万别忘写,否则就是死循环,赋初值 循环条件 循环体 改变循环变量,死循环的解除方法 单击 按 Ctrl+C,49,例3-9】一个小问题,上题答案:10!=3628800.0 正确结果为:10!=3628800 如何输出正确结果? 强制类型转换 System.out.println(10!=+ (long)s); 使用格式输出方法 System.out.p
17、rintf(10!=%.0f, s,50,例】统计正数和负数的个数,输入一批整数,以0为结束标志,统计这些数中正数和负数的个数。 例: 输入 8 15 -2 6 -11 0 输出 正数3个,负数2个,51,例】统计正数和负数的个数,循环变量赋初值 循环条件 循环体 改变循环变量,思考:如果使用do.while 语句,结果会怎样,52,例】字母转换,输入一批以问号“?”结束的字符,对“?”以前的每一个字符,如果它是大写字母,输出相应的小写字母;如果它是小写字母,输出相应的大写字母;否则,原样输出。 例: 输入F=y? 输出f=Y,53,例】字母转换,循环变量赋初值 循环条件 循环体 改变循环变量
18、,54,dowhile语句,格式 do 循环体 while (布尔表达式 ) ; 含义 重 复执行循环体,直到布尔表达式值为false,特点 先执行,后判断 循环次数至少为1 次( 一开始表达式值是false,55,dowhile 语句实例分析,运行结果: m=3 m=2 m=1 m=0,m=4 m=4-1 输出m=3 m0,m=3-1 输出m=2 m0,m=2-1 输出m=1 m0,m=1-1 输出m=0 m0,结束循环,如果修改为:int m=0; 则输出:m=-1,注意分号不能忘,56,例3-10】 计算1+3+5+99,运行结果sum=2500,57,例3-11】 计算 150之间的奇
19、数和与偶数和,运行结果 Odd sum=625 Even sum=650,58,例3-13】求Fibonacci数列中的前20项,Fibonacci 数列 前两项都是1,以后每项的值都是前两项值之和 1 1 2 3 5 8 13 21 34 55 由“兔子问题”引发 使用“递推法”解决 也叫“迭代法” 不断由已知值推出新值,直到求解为止 用循环结构来实现 迭代的3个环节 迭代初始值 迭代公式 迭代终止条件,59,例3-13】求Fibonacci数列中的前20项,1 1 2 3 5 8 13 21 34 55 分析迭代算法 (1)初始值, f1=1、f2=1 (2)迭代公式, fn=fn-1+f
20、n-2(n2,f1f2f3f4f5f6 11f1f2 f1f2,f1=1 f2=1 f3= f1+ f2 f4= f2+ f3 fn=fn-1+fn-2,f1= f1+ f2 f2= f2+ f1,在程序中用f1、f2 表示二个数,60,例3-13】求Fibonacci数列中的前20项,运行结果 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765,循环控制变量可以在for循环中说明,61,例】求水仙花数,水仙花数 一个三位数,其个、十、百位数的立方和等于它本身 如:153 = 1*1*1 + 5*5*5 + 3*
21、3*3 穷举法 对100999中的每一个数,测试是否为水仙花数 关键是分离出个位、十位、百位上的数字 百位数字a为n/100 十位数字b为n/10%10 或 n%100/10 个位数字c为n%10 满足以下条件的数就是水仙花数 n = = a*a*a + b*b*b + c*c*c,62,例】找水仙花数,注意:如果被判断的数不是三位数, 就不能使用这种分解方式,63,例】整数的各位数字之和,输入一个整数,输出它的各位数字之和 例: 输入123456输出21 输入120输出3 输入-32输出5 关键是分离出各个位上的数字 思路 个位数字为n%10 求和 计算 n/10,放入n 当 n0时重复以上
22、操作,nn%10n/10 120 012 12 21 1 10,64,例】整数的各位数字之和,65,循环结构程序设计,循环结构的实现要点 归纳出哪些操作需要反复执行? 循环体 这些操作在什么情况下重复执行? 循环条件 选用合适的循环语句 for while do-while 事先给定循环次数,首选for 通过其他条件控制循环,考虑while或do-while,66,例3-14】判断素数,什么是素数 除了1及自身外,不能被其它整数整除的自然数 判断素数的方法 对一个自然数 k,用 2 k-1 之间的每个整数进行相除测试 如果所有数都不能整除k,则k是素数 如果有一个数能整除k,则k不是素数 穷举
23、法 测试 2 k-1 间的每个整数 判断k 能被i 整除的表达式k % i = 0,67,算法 输入 k 对 i = 2k-1,执行 若 k % i = 0 ( 可知 k 不是素数 ),结束循环 ( 否则继续循环,用下一个数测试 ) 显示判断结果 若 i=k(说明完成了整个循环),则 k 是素数; 否则( ik ) ,k 不是素数 说明 若循环控制变量 i 超过终值 k-1,则表示直到循环完成,还没遇到一个能整除k的整数,即k是素数;否则k不是素数。 若k不是素数,则提前退出循环 此时的 i 能把 k 整除,即k可以表示成 k = i * (k / i,例3-14】判断素数,68,例3-14】
24、判断素数,69,例3-14】判断素数,使用标志变量,问题:输入 1 结果是什么,70,例】 计算多项式之和(一,求1+1/2+1/3+1/n (n 由键盘输入,71,求1-1/2+1/3-1/4 +1/5- 1/n (n 由键盘输入) 系数 1 -1 1 -1 1 -1 flag flag1 flag=-flag,例】 计算多项式之和(二,赋初值,循环语句,计算当前项,求和,准备下一项,72,例】 计算多项式之和(三,使用格里高利公式求的近似值,精确到最后一项的绝对值小于104 要求除最后一项外,每项绝对值均大于等于0.0001 因没有确定项数,故使用 while 语句 while ( Mat
25、h.abs( item )=0.0001) 计算公式 item = flag*1.0/n/当前项,初值 item=1 sum + = item /求和,初值 sum=0 n + = 2 /下一项的分母,初值 n=1 flag = - flag /实现一次正、一次负,初值 flag=1,73,例】 计算多项式之和(三,运行结果 =3.1417926135957908,思考:如果要求所有项的绝对值均大于等于0.0001, 应如何修改,74,例】 计算多项式之和(四,计算 s=20+21+22+23+2n,n从键盘输入,运行结果 输入:10 输出: sum=2047.0 210=1024.0,75,
26、多重循环,当循环体中包含循环语句时,形成多重循环结构,称为循环嵌套 常用的循环嵌套 二重循环 三重循环,76,二重循环结构示例,内 循 环,外 循 环,77,二重循环实例,注意 先执行内循环,内循环结束后才执行外循环中的i+ 内循环和外循环的控制变量要有区别,78,二重循环实例分析,i = 1 j=1输出 1 j=2输出 2 j=3换行 i = 2 j=1输出 2 j=2输出 4 j=3换行 i = 3 j=1输出 3 j=2输出 6 j=3换行 i = 4,运行结果 12 24 36,79,例】输出九九乘法表,表头 表体,80,例】输出九九乘法表,i,思考:这样修改后输出结果会怎样,81,例
27、】输出平面图形,输入一个正整数n (n=1),输出 n 行如下图形 A BBB CCCCC DDDDDDD EEEEEEEEE 分析 有几行 每行 有几列 每列输出什么,行 1 2 3 4 5,列 1 13 15 17 19,输出内容 A B C D E,A A+1 A+2 A+3 A+4 A+i-1,i 1(2*i-1) ,for(i=1; i=n; i+) for(j=1; j=2*i-1; j+) System.out.print(char)(A+i-1); System.out.println();,82,例】输出平面图形,83,例】找水仙花数 (穷举法,水仙花数 一个三位数,其个、十
28、、百位数的立方和等于它本身 如:153 = 1*1*1 + 5*5*5 + 3*3*3,84,例】找水仙花数 (穷举法,对每个数位使用穷举法 百位:19十位和个位:0 9,85,例3-15】计算输出1! , 2! , , 5! 以及它们的和,s=1!+2!+3!+4!+5! 求和 s=0; for(i=1; i=5; i+) s=s + k; 其中k 就是 i,计算k = i! k=1; for(j=1; j=i; j+) k=k*j; System.out.println(i+!=+k,注意 变量s 和k 赋初值的位置是在各自的循环之前,86,例3-15】计算输出1! , 2! , , 5!
29、 以及它们的和,运行结果 1!=1 2!=2 3!=6 4!=24 5!=120 Total sum=153,87,例3-15】使用迭代法 s=1!+2!+3!+4!+5,多顶式求和问题 s=0; for(i=1; i=5; i+) k=? s=s + k;,k 的分析 第1 项 1! = 1 * 1 第2 项 2! = 1! * 2 第3 项 3! = 2! * 3 第4 项 4! = 3! * 4 第5 项 5! = 4! * 5 第i 项 i ! = (i -1)! * i,k=k * i,k=1,88,例3-15】使用迭代法 s=1!+2!+3!+4!+5,89,例3-16】求 2 50 之间的所有素数,思路 对 k =2 50 之间的每个数,执行 判断k是否为素数 程序框架 for(k=2; k=50; k+),判断k是否为素数 for(i=2; i=k-1; i+) if(k%i=0)break; if(i=k) System.out.println(k,boo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年医务人员法律法规考试题库及答案
- 个人品质素质提高承诺书范文3篇
- 农业产业链升级实施作业指导书
- 2026年保险评估物流承运合同
- 2026年安防营销API 对接合同
- 供应链协调管理模板跨部门协同优化版
- 美食烹饪技巧快速入门指南
- 市场营销精准定位指导书
- 2026年注册环评工程师试题及答案
- 社区环保活动倡议书(9篇范文)
- 2026年华峰重庆氨纶笔试题及答案
- 2026年糖尿病规范化诊疗指南解读及临床应用课件
- 小学数学巧算24点专项练习题(每日一练共17份)
- 2025-2030中国低空经济行业运行形势与投融资发展状况监测研究报告
- 2026江苏苏州当代美术馆招聘7人笔试备考题库及答案解析
- 支付机构外包服务合作相关制度
- 肿瘤科临床研究SOP的受试者招募策略
- 大学行政管理岗招聘考试真题
- 2026年全球脑机接口市场全景分析报告(英文版)-
- 2026年深圳中考数学高分冲刺综合试卷(附答案可下载)
- 2026年《必背60题》 小学教育专业26届考研复试高频面试题包含详细解答
评论
0/150
提交评论