实验3 分支结构程序设计 实验目的 (1)熟练使用关系表达式和逻辑表达式正确描述问题中分支条件; (2)正确理解三种if语句的执行流程,能够熟练使用if语句分析和求解问题; (3)能够应用嵌套if语句来分析和解决复杂的分支问题; (4)理解switch语句的执行过程,掌握switch语句解决多分支问题的方法; (5)掌握分支结构程序设计方法。 3.1 单分支if语句的应用 练习题3-1:大小写转换 【内容】 输入一个字符,如果它是大写字母,输出相应的小写字母;否则,原样输出该字符 本身。 【思路】 ① Scanner类的next()方法读入一个字符串,需要调用字符串的charAt()方法来获 取指定位置的字符,代码如下: Scanner sc =new Scanner(System.in); char ch =sc.next().charAt(0); // 读取第1 个字符(字符编号从0 开始) ② 需要判断该字符是否为大写字母,判断条件为:ch>= 'A' &&ch<= 'Z'; ③ 若为大写字母,将其转为对应的小写字母:ch= (char)(ch+32); ④ 若不是大写字母,则无须转换,因此可以用单分支来实现; ⑤ 注意分支语句的编码规范性,应通过空格、缩进、大括号来表示程序结构。 【程序代码】 import java.util.Scanner; public class UpperToLower { public static void main(String[] args) { char ch; Scanner sc =new Scanner(System.in); 实验3 分支结构程序设计 39 System.out.print("Please input a character: "); ch =sc.next().charAt(0); // 读取第1 个字符(字符编号从0 开始) sc.close(); if (ch >='A' && ch <='Z') // 判断是否为大写字母 ch =(char) (ch +32); // 若是,则转为小写字母 System.out.println(ch); } } 【运行结果】 Please input a character: A↙ a 【思考】 (1)尝试使用条件表达式来实现。 (2)在本题目要求的基础上,同时实现若输入的是小写字母,则输出相应的大写 字母。 练习题3-2:单分支结构求最值 【内容】 输入三个int类型的数,找出并输出最大数。 【思路】 计算机中求最值通常采用“打擂法”,即将某个数设定为擂主(当前最大值变量),其余 数逐个与其比较:如果某数大于擂主,则将该数作为擂主。所有数比较完毕,则擂主即是 最大数。 【程序代码】 import java.util.Scanner; public class MaxNumber { public static void main(String args[]) { int a, b, c, max; // max 为最大值变量 Scanner sc =new Scanner(System.in); System.out.print("请输入3 个整数:"); a =sc.nextInt(); b =sc.nextInt(); c =sc.nextInt(); sc.close(); max =a; // 将a 存入当前最大值变量max 中 if (b >max) max =b; // 若b 更大,则b 存入max 中 if (c >max) 40 Java 语言程序设计上机教程 max =c; // 若c 更大,则c 存入max 中 System.out.println("max=" +max); // 比较完毕,max 即是最大数 } } 【运行结果】 请输入3 个整数:15 58 -96↙ max=58 【思考】 (1)如何求最小值? (2)如何在4个数中找出最大数? 自测题3-1:面试资格筛选 【内容】 某公司招聘员工时进行简历筛查,满足以下条件之一时可以获得面试资格: ① 年龄不超过25岁、专业为computer或ee,且毕业院校为985或211; ② 年龄超过25且不超过35、专业为computer或ee。 请根据输入的求职者年龄、专业和毕业学校类型,判断其是否获得面试资格,输出 “Pass”或“Fail”。 提示:专业和毕业学校类型均以字符串形式来接收。使用str1.equals(str2)比较两 个字符串str1和str2是否相等,该方法返回true或false。 3.2 双分支if语句的应用 练习题3-3:合法三角形判断 【内容】 输入3边长,如果能够构成三角形则输出Yes,否则输出No。 【思路】 ① 使用Scanner类的nextInt()函数读入三边长,存入a、b、c; ② 两种处理方法,使用双分支语句实现; ③ 分支条件为:三边长都大于0,且任意两边之和大于第三边(a> 0 && b > 0 &&c>0&&a+ b>c&&a+c> b&&b+c>a)。 【程序代码】 import java.util.Scanner; public class Triangle { public static void main(String args[]) { int a, b, c; 实验3 分支结构程序设计 41 Scanner sc =new Scanner(System.in); System.out.print("请输入3 边长:"); a =sc.nextInt(); b =sc.nextInt(); c =sc.nextInt(); sc.close(); if (a >0 && b >0 && c >0 && a +b >c && a +c >b && b +c >a) System.out.println("Yes"); else System.out.println("No"); } } 【运行结果】 请输入3 边长:15 20 58↙ No 自测题3-2:直角三角形判断 【内容】 输入3边长,如果能够构成直角三角形则输出Yes,否则输出No。 自测题3-3:幻灯片打印 【内容】 某PowerPoint文件中有n张幻灯片,需要按讲义形式打印,每页打印6张幻灯片,且 使用双面打印。编写程序读入n的值,计算并输出至少需要多少张打印纸。 3.3 多分支if语句的应用 练习题3-4:年龄分类 【内容】 输入一个年龄值,输出对应的分类。分类规则如下: (1)当年龄小于0或大于120时,输出error; (2)当年龄大于或等于0且小于16时,输出child; (3)当年龄在16到55(包括16和55)时,输出adult; (4)当年龄大于55时,输出old。 【思路】 ① 使用Scanner类的nextInt()读入年龄值,存入变量age中; ②4种不同的处理方法,使用多分支语句实现。 42 Java 语言程序设计上机教程 【程序代码】 import java.util.Scanner; public class Age { public static void main(String args[]) { int age; Scanner sc =new Scanner(System.in); System.out.print("请输入年龄:"); age =sc.nextInt(); sc.close(); if (age <0 || age >120) // 首先处理错误输入 System.out.println("error"); else if (age <16) // 等价于00 && y >0) System.out.println("1st Quadrant"); else if (x <0 && y >0) System.out.println("2nd Quadrant"); else if (x <0 && y <0) System.out.println("3rd Quadrant"); else // 即x>0 && y<0 System.out.println("4th Quadrant"); } } } 44 Java 语言程序设计上机教程 【运行结果】 Input x and y: 5 -6↙ 4th Quadrant 【思考】 判断点的象限时能否使用嵌套if语句? 请尝试修改程序。 自测题3-6:数字排序 【内容】 在a、b、c中存放键盘输入的3个数,在不改变a、b、c值的前提下,按从小到大的顺序 输出。 自测题3-7:日期合法性判断 【内容】 从键盘输入一个日期,根据它是否为合法日期,输出valid或invalid。输入格式为 "YYYY MM DD",均为整数,例如"20200101"。 提示:要加入对闰年的判断。 3.5 switch语句的应用 练习题3-6:星期计算 【内容】 假设今天是星期六,计算n天后是星期几,输出对应的英文单词。 【思路】 ① 使用Scanner类的nextInt()函数读入n; ② 一周7天,因此在今天的基础上加上n后对7取余,可以将星期还原到一周之内 (0~6,0表示星期日); ③0~6分别代表的是星期日至星期六,要求输出英文单词,因此要根据所得到的数 字进行相应的输出。这里相当于存在7个分支,可以使用switch语句来实现。 【程序代码】 import java.util.Scanner; public class WeekDay { public static void main(String[] args) { int today, n, day; System.out.print("Input n: "); Scanner scn =new Scanner(System.in); today =6; // 今天是星期六 实验3 分支结构程序设计 45 n =scn.nextInt(); day =(today +n) % 7; // 计算n 天后是星期几 switch (day) { case 0: System.out.print("Sunday"); break; case 1: System.out.print("Monday"); break; case 2: System.out.print("Tuesday"); break; case 3: System.out.print("Wednesday"); break; case 4: System.out.print("Thursday"); break; case 5: System.out.print("Friday"); break; case 6: System.out.print("Saturday"); } } } 【运行结果】 Input n: 15↙ Sunday 自测题3-8:查询水果价格 【内容】 有4种水果的编号如下: [1] apples [2] pears [3] oranges [4] grapes 其单价分别是3.00元/kg、2.50元/kg、4.10元/kg、10.20元/kg。请输入水果的编 号,输出该水果的名称及单价。如果输入的是不正确的编号,显示errorid、单价为0。 46 Java 语言程序设计上机教程 自测题3-9:成绩分级 【内容】 字符A、B、C、D、E分别代表百分制中的各个等级,其中A代表90~100,B代表80~89, C代表70~79,D代表60~69,E代表0~59分。从键盘读入一个字符,输出相应的成绩 区间。如果输入A~E之外的字符,提示eror。注意:输入的字符大小写均可。 3.分支结构程序设计综合 6 自测题3-10:工资计算 【内容】 某公司的工资根据工作时间发放如下: (1)工作时间为4小时以内(含4小时),工资为每小时50元; (2)工作时间为4~8小时(含8小时),在4小时以内每小时50元的基础上,超出4 小时的时间按每小时40元计算; (3)工作时间超过8小时,在前8小时的工资基础上,超出的时间按每小时30元 计算; 请根据以上关系,输入工作时间,输出应发的工资。 自测题3-11:地铁票价计算 【内容】 某市地铁票价的计价规则为:6km内(含)3元;6~12km(含)4元;12~22km(含)5 元;22~32km(含)6元;32km以上每加1元可乘坐20km,如图3-1所示。每次乘车最多 20元。请输入乘车里程,输出对应的票价。 图3- 1 地铁票价计算示意图