程序控制结构
创始人
2024-01-30 23:04:42
0

程序控制结构

  • 程序流程控制介绍
    • 顺序控制
    • 分支控制if-else
      • 单分支
        • 案例:编写一个程序,可以输入人的年龄,如果该同志的年龄大于等于 18 岁, 则输出 "你年龄大于 18,要对自己的行为负责,送入监狱"。
      • 双分支
        • 案例:编写一个程序,可以输入人的年龄,如果该同志的年龄大于等于 18 岁, 则输出 "你年龄已满 18,要对自己的行为负责,送入监狱"。否则,输出"你的年龄不大这次放过你了"。
      • 单分支和双分支练习题
        • 1.编写程序,键盘输入2 个 double 型变量并赋值。判断第一个数大于 10.0,且第 2 个数小于 20.0,打印两数之和。
        • 2.定义两个变量 int,判断二者的和,是否能被 3 又能被 5 整除,打印提示信息。
        • 判断一个年份是否是闰年,闰年的条件是符合下面二者之一:(1)年份能被 4 整除,但不能被 100 整除;(2)能被 400整除。
      • 多分支
        • 案例:输入保国同志的芝麻信用分:
      • 嵌套分支
        • 案例:参加歌手比赛,如果初赛成绩大于 8.0 进入决赛,否则提示淘汰。并且根据性别提示进入男子组或女子组。输入成绩和性别,进行判断和输出信息。
        • 练习:出票系统:根据淡旺季的月份和年龄,打印票价
      • switch 分支结构
        • 案例:请编写一个程序,该程序可以接收一个字符,比如:a,b,c,d,e,f,g
        • switch 注意事项和细节讨论
        • 练习:1.使用 switch 把小写类型的 char 型转为大写(键盘输入)。只转换 a, b, c, d, e. 其它的输出 "other"。
        • 练习:2.对学生成绩大于 60 分的,输出"合格"。低于 60 分的,输出"不合格"。(注:输入的成绩不能大于 100)
        • 练习:3.根据用于指定月份,打印该月份所属的季节。3,4,5 春季 6,7,8 夏季 9,10,11 秋季 12, 1, 2 冬季 [使用穿透 ]
      • switch 和 if 的比较
  • 循环和c语言一样(省略)
    • 打印九九乘法口诀表

程序流程控制介绍

在程序中,程序运行的流程控制决定程序是如何执行的,主要有三大流程控制语句:
(1) 顺序控制
(2) 分支控制
(3) 循环控制

顺序控制

从上到下。

分支控制if-else

分支控制 if-else 介绍:
让程序有选择的的执行,分支控制有三种
(1)单分支 if
(2)双分支 if-else
(3)多分支 if-else if -…-else

单分支

基本语法

if(表达式){执行代码块;}

说明:当条件表达式为ture时,就会执行 {} 的代码。如果为false ,就不执行。特别说明,如果中只有一条语句,则可不用。

案例:编写一个程序,可以输入人的年龄,如果该同志的年龄大于等于 18 岁, 则输出 “你年龄大于 18,要对自己的行为负责,送入监狱”。

import java.util.Scanner;
public class Case7 {public static void main(String[] args) {// 应该定义一个 Scanner 对象Scanner myScanner = new Scanner(System.in);System.out.println("请输入年龄:");// 把年龄保存到一个变量 int ageint age = myScanner.nextInt();// 使用 if 判断,输出对应信息if (age >= 18) {System.out.println("你年龄大于 18,要对自己的行为负责,送入监狱");}}
}

在这里插入图片描述

双分支

基本语法

if(条件表达式){执行语句1;}
else{执行语句2;}

说明:当条件表达式成立,即执行代码块1,否则执行代码块2。

案例:编写一个程序,可以输入人的年龄,如果该同志的年龄大于等于 18 岁, 则输出 “你年龄已满 18,要对自己的行为负责,送入监狱”。否则,输出"你的年龄不大这次放过你了"。

import java.util.Scanner;public class Case8 {public static void main(String[] args) {// 应该定义一个 Scanner 对象Scanner myScanner = new Scanner(System.in);System.out.println("请输入年龄:");// 把年龄保存到一个变量 int ageint age = myScanner.nextInt();// 使用 if-else 判断,输出对应信息if (age >= 18) {System.out.println("你年龄已满 18,要对自己的行为负责,送入监狱");} else {// 双分支System.out.println("你的年龄不大这次放过你了");}System.out.println("程序继续...");}
}

在这里插入图片描述

单分支和双分支练习题

1.编写程序,键盘输入2 个 double 型变量并赋值。判断第一个数大于 10.0,且第 2 个数小于 20.0,打印两数之和。

import java.util.Scanner;public class Case9 {public static void main(String[] args) {Scanner myScanner = new Scanner(System.in);System.out.println("请输入第一个数字的大小:");double d1 = myScanner.nextDouble();System.out.println("请输入第二个数字的大小:");double d2 = myScanner.nextDouble();if (d1 > 10.0 && d2 < 20.0) {double sum = d1 + d2;System.out.println("d1 + d2 = " + sum);}}
}

在这里插入图片描述

2.定义两个变量 int,判断二者的和,是否能被 3 又能被 5 整除,打印提示信息。

import java.util.Scanner;
public class Case10 {public static void main(String[] args) {// 键盘输入两个变量 int,判断二者的和,是否能被 3 又能被 5 整除,打印提示信息Scanner myScanner = new Scanner(System.in);int a = myScanner.nextInt();int b = myScanner.nextInt();int sum = a + b;if (sum % 3 == 0 && sum % 5 == 0) {System.out.println("sum=" + sum + ",能被 3  整除且能被 5 整除");} else {System.out.println("sum=" + sum + ",不能被 3  整除或者不能被 5 整除");}}
}

==输入 20 30 ==
在这里插入图片描述
输入 12 11
在这里插入图片描述

判断一个年份是否是闰年,闰年的条件是符合下面二者之一:(1)年份能被 4 整除,但不能被 100 整除;(2)能被 400整除。

import java.util.Scanner;
public class Case1 {// 判断一个年份是否是闰年,闰年的条件是符合下面二者之一:// (1)年份能被 4 整除,但不能被 100 整除;(2)能被 400整除。public static void main(String[] args) {Scanner myScanner = new Scanner(System.in);int year = myScanner.nextInt();if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {System.out.println(year + "是闰年");} else {System.out.println(year + "不是闰年");}}
}

2022
在这里插入图片描述
2020
在这里插入图片描述

多分支

基本语法

if(表达式){执行语块1;}
else if(表达式){执行语块2;}
......
else{执行语块n;}

特别说明:
(1)多分支可以没有else,如果所有的条件表达式都不成立,则一个执行入口都没有。
(2)如果有else ,如果所有的条件表达式都不成立,则默认执行else代码块。

案例:输入保国同志的芝麻信用分:

如果:

  1. 信用分为 100 分时,输出 信用极好;
  2. 信用分为(80,99)时,输出 信用优秀;
  3. 信用分为(60,80)时,输出 信用一般;
  4. 其它情况 ,输出 信用不及格
  5. 请从键盘输入保国的芝麻信用分,并加以判断。
import java.util.*;public class Case2 {public static void main(String[] args) {Scanner myScanner = new Scanner(System.in);double score = myScanner.nextDouble();if (score == 100) {System.out.println("信用极好");} else if (score > 80 && score <= 99) {System.out.println("信用优秀");} else if (score > 60 && score <= 80) {System.out.println("信用一般");} else {System.out.println("信用不及格");}}
}

在这里插入图片描述
考虑不周,如果输入的数字小于0或者大于100就会出现问题
优化后,方法一:

import java.util.*;public class Case2 {public static void main(String[] args) {Scanner myScanner = new Scanner(System.in);double score = myScanner.nextDouble();if (score == 100) {System.out.println("信用极好");} else if (score > 80 && score <= 99) {System.out.println("信用优秀");} else if (score > 60 && score <= 80) {System.out.println("信用一般");} else if(score > 0 && score <= 60){System.out.println("信用不及格");} else {System.out.println("请输入0到100的整数!");}}
}

在这里插入图片描述
优化后,方法二(嵌套)

import java.util.*;public class Case2 {public static void main(String[] args) {Scanner myScanner = new Scanner(System.in);double score = myScanner.nextDouble();if (score >= 1 && score <= 100) {if (score == 100) {System.out.println("信用极好");} else if (score > 80 && score <= 99) {System.out.println("信用优秀");} else if (score > 60 && score <= 80) {System.out.println("信用一般");} else {System.out.println("信用不及格");}} else {System.out.println("请输入0到100的整数!");}}
}

在这里插入图片描述

嵌套分支

基本介绍:在一个分支结构中又完整的嵌套了另一个完整的分支结构,里面的分支的结构称为内层分支,外面的分支结构称为外层分支。不要超过 3 层 (可读性不好)。

基本语法

if(条件){if(条件){......;else{...}}
else{...}
}

案例:参加歌手比赛,如果初赛成绩大于 8.0 进入决赛,否则提示淘汰。并且根据性别提示进入男子组或女子组。输入成绩和性别,进行判断和输出信息。

import java.util.Scanner;public class Case3 {// 参加歌手比赛,如果初赛成绩大于 8.0 进入决赛,否则提示淘汰。// 并且根据性别提示进入男子组或女子组。// 输入成绩和性别,进行判断和输出信息。public static void main(String[] args) {Scanner myScanner = new Scanner(System.in);System.out.println("请输入该歌手的成绩:");double score = myScanner.nextDouble();if (score > 8.0) {System.out.println("请输入性别:");char gender = myScanner.next().charAt(0);//如果输入“男生” charAt(0)获取字符串的第一个字符,即 男if (gender == '男') {System.out.println("进入男子组");} else if (gender == '女') {System.out.println("进入女子组");} else {System.out.println("你的性别有误,不能参加决赛~");}} else {System.out.println("你已经被淘汰了");}}
}

在这里插入图片描述

练习:出票系统:根据淡旺季的月份和年龄,打印票价

4到10月旺季:
成人(18-60):60
儿童(<18):半价
老人(>60):1/3
淡季:
成人:40
其他:20
思路分析:(1)淡旺季 if - else (2)在旺季中,可以使用多分支处理三种情况(3)在淡季情况,使用双分支处理。

import java.util.Scanner;public class Case4 {public static void main(String[] args) {Scanner myScanner = new Scanner(System.in);System.out.println("请输入月份和年龄:");int month = myScanner.nextInt();int age = myScanner.nextInt();if (month >= 4 && month <= 10) {if (age < 18) {System.out.println("票价为30元");}if (age >= 18 && age <= 60) {System.out.println("票价为60元");} else {System.out.println("票价为20元");}} else {if (age >= 18 && age <= 60) {System.out.println("票价为40元");} else {System.out.println("票价为20元");}}}
}

在这里插入图片描述

switch 分支结构

基本语法

switch(表达式){//表达式必须是一个对应的值
case 常量1 : 语句块1;break;
......
case 常量n : 语句块n;break;
default : 语句块;break;//常量1到n都没有匹配到就执行这条语句
}

案例:请编写一个程序,该程序可以接收一个字符,比如:a,b,c,d,e,f,g

a 表示星期一,b 表示星期二 …

import java.util.Scanner;public class Case5 {public static void main(String[] args) {Scanner myScanner = new Scanner(System.in);System.out.println("请输入字母(a 到 g):");char ch = myScanner.next().charAt(0);switch (ch) {case 'a':System.out.println("今天星期一");break;case 'b':System.out.println("今天星期二");break;case 'c':System.out.println("今天星期三");break;case 'd':System.out.println("今天星期四");break;case 'e':System.out.println("今天星期五");break;case 'f':System.out.println("今天星期六");break;case 'g':System.out.println("今天星期天");break;default:System.out.println("请输入字母(a 到 g)!");break;}}
}

输入a
在这里插入图片描述
输入h
在这里插入图片描述

switch 注意事项和细节讨论

1. 表达式数据类型,应和case后的常量类型一致,或者是可以自动转成可以相互比较的类型,比如输入的是字符,而常量是int。
2. switch(表达式)中表达式的返回值必须是:(byte,short,int,char,enum[枚举].,String)。

练习:1.使用 switch 把小写类型的 char 型转为大写(键盘输入)。只转换 a, b, c, d, e. 其它的输出 “other”。

import java.util.Scanner;public class Case6 {public static void main(String[] args) {// 使用 switch 把小写类型的 char 型转为大写(键盘输入)。// 只转换 a, b, c, d, e. 其它的输出 "other"。Scanner myScanner = new Scanner(System.in);System.out.println("请输入小写字母:");char ch = myScanner.next().charAt(0);// A 对应值为65,a 对应值为97switch (ch) {case 'a':System.out.println("A");break;case 'b':System.out.println("B");break;case 'c':System.out.println("C");break;case 'd':System.out.println("D");break;case 'e':System.out.println("E");break;default:System.out.println("other");break;}}
}

输入a
在这里插入图片描述

输入z
在这里插入图片描述

练习:2.对学生成绩大于 60 分的,输出"合格"。低于 60 分的,输出"不合格"。(注:输入的成绩不能大于 100)

if-else语句

import java.util.Scanner;public class Case7 {// 对学生成绩大于 60 分的,输出"合格"。低于 60 分的,// 输出"不合格"。(注:输入的成绩不能大于 100)public static void main(String[] args) {Scanner myScanner = new Scanner(System.in);int score = myScanner.nextInt();if (score >= 0 && score <= 100) {if (score < 60) {System.out.println("不合格");} else {System.out.println("合格");}} else {System.out.println("请输入100以内的自然数!");}}
}

输入50
在这里插入图片描述
输入80
在这里插入图片描述
输入120
在这里插入图片描述
switch语句

import java.util.Scanner;public class Case7 {// 对学生成绩大于 60 分的,输出"合格"。低于 60 分的,// 输出"不合格"。(注:输入的成绩不能大于 100)public static void main(String[] args) {Scanner myScanner = new Scanner(System.in);int score = myScanner.nextInt();if (score >= 0 && score <= 100) {switch ((int) (score / 60)) {case 0:System.out.println("不合格");break;case 1:System.out.println("合格");break;// default :// System.out.println("输入有误");}} else {System.out.println("输入的成绩在 0-100!");}}
}

在这里插入图片描述

练习:3.根据用于指定月份,打印该月份所属的季节。3,4,5 春季 6,7,8 夏季 9,10,11 秋季 12, 1, 2 冬季 [使用穿透 ]

import java.util.Scanner;public class Case8 {public static void main(String[] args) {Scanner myScanner = new Scanner(System.in);System.out.println("请输入1~12:");int month = myScanner.nextInt();switch (month) {case 3:case 4:case 5:System.out.println("春季");break;case 6:case 7:case 8:System.out.println("夏季");break;case 9:case 10:case 11:System.out.println("秋季");break;case 12:case 1:case 2:System.out.println("冬季");break;default:System.out.println("请输入1~12!");}}
}

在这里插入图片描述

switch 和 if 的比较

(1)如果判断的具体数值不多,而且符合 byte、 short 、int、 char, enum[枚举], String 这 6 种类型。两个语句都可以使用,建议使用 swtich 语句。
(2)其他情况:对区间判断,对结果为 boolean 类型判断,使用 if,if 的使用范围更广。

循环和c语言一样(省略)

打印九九乘法口诀表

import java.util.Scanner;public class Case10 {// 编写一个 main 方法public static void main(String[] args) {// 打印出九九乘法表int i, j;for (i = 1; i <= 9; i++) {// i 表示前一个数for (j = 1; j <= i; j++) {// j 表示后一个数int sum = i * j;System.out.print(" " + i + "*" + j + "=" + sum +"\t");if(i == j){System.out.print("\n");//当换行条件成立时,进行换行打印}}}}
}

在这里插入图片描述

相关内容

热门资讯

美国务卿:希望泰柬下周停火   新华社华盛顿12月19日电 美国国务卿鲁比奥19日在华盛顿一场记者会上表示,美国希望说服泰国和柬...
万人说新疆|早安包尔萨克   包尔萨克是新疆传统早餐美食。缘于成长过程中对包尔萨克的美好记忆,叶勒生与合伙人一起开了家早餐店,...
严把机动车检验市场准入关 两部...   新华社北京12月19日电(记者 赵文君)记者19日从市场监管总局获悉,市场监管总局联合生态环境部...
【中国那些事儿】外媒:便利化政...   中国日报网12月18日电 国际旅游媒体《旅行与旅游世界》(Travel and Tour wor...
大看台丨撬动万亿,冰雪经济何以...   新华社北京12月18日电(记者高萌、李春宇、杨帆)近日召开的中央经济工作会议将“坚持内需主导,建...
【世界说】日本防卫费“野蛮生长...   中国日报网12月19日电 近期,日本高市早苗政府一系列激进防卫政策调整引发国际社会广泛担忧与批评...
脱贫村的这五年|从“门票经济”...   一说起西藏自治区,人们往往会想到雪山巍峨、朔风凛冽,很难将其与娇柔的桃花联系在一起。但是在林芝市...
新华时评|海南自贸港封关开启中...   新华社海口12月18日电 题:海南自贸港封关开启中国对外开放新篇章  新华社记者王晖余、吴茂辉 ...
我国加速布局未来产业抢占发展先...   “十五五”规划建议提出,要前瞻布局量子科技、生物制造、氢能和核聚变能等六大未来产业。今年以来,国...
突发!台北地铁发生砍人事件已致...   据界面新闻报道,今日(12月19日)17时30分左右,台北捷运地铁有一名头戴“专业级防毒面具”的...