# 2026-07-14 JavaSE 课后作业 > **课程内容**:流程控制、运算符(算术/赋值/比较/逻辑/位/三目)、运算符优先级 > **提交方式**:在 `提交\姓名\` 目录下创建对应的 Java 源文件 > **截止时间**:下次上课前 --- ## 一、基础题(必做) ### 题目 1:判断闰年 **难度**:⭐ **知识点**:if-else、逻辑运算符、算术运算符 从键盘输入一个年份(整数),判断该年份是否为闰年。 **闰年规则(满足其一即可)**: 1. 能被 4 整除但不能被 100 整除;或者 2. 能被 400 整除 **要求**: - 定义 `int year` 变量并赋值为要判断的年份 - 使用 `if-else` 分支结构 - 使用逻辑运算符 `&&` 和 `||` - 输出格式:`xxxx 年是闰年` 或 `xxxx 年不是闰年` **示例输出**: ``` 2024 年是闰年 2025 年不是闰年 ``` --- ### 题目 2:三个数比大小 **难度**:⭐ **知识点**:三目运算符、if-else 定义三个整数变量 `a`、`b`、`c`,找出其中的最大值并输出。 **要求**: - 方法一:使用三目运算符嵌套实现 - 方法二:使用 `if-else` 实现 - 两种方法都写在同一个文件中(分别注释标注) **示例输出**: ``` 三个数中最大的值是: 78 ``` --- ### 题目 3:位运算练习 **难度**:⭐ **知识点**:位运算符 定义两个整数 `int m = 27`、`int n = 15`,计算并输出以下位运算的结果,**并在注释中写出每一步的二进制运算过程**。 ```java int m = 27, n = 15; // 1. m & n (按位与) // 2. m | n (按位或) // 3. m ^ n (按位异或) // 4. ~m (按位取反) // 5. m << 2 (左移2位) // 6. n >> 2 (右移2位) ``` **示例注释格式**: ```java // 27 & 15 // 0001 1011 ← 27 // & 0000 1111 ← 15 // -------- // 0000 1011 → 11 System.out.println("27 & 15 = " + (27 & 15)); // 11 ``` --- ## 二、进阶题(必做) ### 题目 4:水仙花数判定 **难度**:⭐⭐ **知识点**:算术运算符(`/`、`%`)、if-else "水仙花数"是指一个三位数,其各位数字的立方和等于该数本身。例如:`153 = 1³ + 5³ + 3³`。 **要求**: - 定义一个三位数整数 `int num = 153;`(可自行修改测试其他数字) - 使用 `/` 和 `%` 分别取出个位、十位、百位 - 判断是否为水仙花数,并输出结果 **示例输出**: ``` 153 是水仙花数 ``` **提示**: ```java int num = 153; int bai = num / 100; // 百位 int shi = num / 10 % 10; // 十位 int ge = num % 10; // 个位 ``` --- ### 题目 5:简易计算器 **难度**:⭐⭐ **知识点**:if-else、算术运算符、Scanner(选做) 定义两个整数 `a` 和 `b`,以及一个字符变量 `operator`(取值为 `'+'`、`'-'`、`'*'`、`'/'`、`'%'`),根据运算符输出对应的运算结果。 **要求**: - 使用 `if-else if-else` 多分支判断 - 除号为 `/` 时,判断除数是否为 0,如果是则输出"除数不能为 0" - 取模为 `%` 时,同样判断除数是否为 0 **示例输出 1**: ``` a = 20, b = 7, operator = '%' 20 % 7 = 6 ``` **示例输出 2**: ``` a = 20, b = 0, operator = '/' 除数不能为 0 ``` --- ### 题目 6:成绩等级判定(升级版) **难度**:⭐⭐ **知识点**:if-else if-else、逻辑运算符、三目运算符 结合课堂练习的成绩等级判定,增加以下功能: **要求**: 1. 定义 `double score = 85.5;`(可自行修改测试) 2. 使用 `if-else` 实现以下等级判定: | 分数范围 | 等级 | 评价语 | |---------|------|--------| | 90 ≤ score ≤ 100 | A | 优秀,继续保持! | | 80 ≤ score < 90 | B | 良好,再接再厉! | | 70 ≤ score < 80 | C | 中等,还需努力! | | 60 ≤ score < 70 | D | 及格,危险边缘! | | 0 ≤ score < 60 | E | 不及格,加油啊! | | 其他 | 无效 | 分数错误! | 3. 额外使用**三目运算符**判断该成绩是否及格(≥ 60 为及格),并输出结果 4. 输出格式参考如下: **示例输出**: ``` 成绩: 85.5 分 等级: B - 良好,再接再厉! 是否及格: 是 ``` --- ## 三、挑战题(选做) ### 题目 7:数字加密系统 **难度**:⭐⭐⭐ **知识点**:算术运算符、位运算符、三目运算符、综合运用 设计一个简单的 4 位数字加密系统。 **加密规则**: 1. 输入一个 4 位整数(如 `1234`) 2. 对每一位数字进行以下处理: - 每个数字加 5 - 对 10 取余 - 将第 1 位与第 4 位交换,第 2 位与第 3 位交换 3. 输出加密后的数字 **示例**: ``` 原始数字: 1234 每位+5后: 6789 取余10后: 6789 交换后: 9876 加密结果: 9876 ``` **要求**: - 分别使用算术运算符(`/`、`%`)取出每位数字 - 使用三目运算符处理可能的负数情况 - 输出每一步的中间结果(如上所示) - 可以尝试用位运算符对加密结果再次进行异或运算:`加密结果 ^ 0xAA` --- ### 题目 8:程序员智商测试 **难度**:⭐⭐⭐ **知识点**:运算符优先级、自增/自减、综合运用 请问以下代码的输出结果是什么?**先手算,再用 IDE 验证**。 ```java public class IQTest { public static void main(String[] args) { int a = 5, b = 3, c = 2; int result1 = a++ + ++b * c--; System.out.println("result1 = " + result1); System.out.println("a = " + a + ", b = " + b + ", c = " + c); int x = 10, y = 4; boolean flag = (x > y) && (++x > 10) || (y-- < 3); System.out.println("flag = " + flag); System.out.println("x = " + x + ", y = " + y); int m = 8, n = 3; int r = m++ - --n + ++m - n--; System.out.println("r = " + r); System.out.println("m = " + m + ", n = " + n); } } ``` **要求**: 1. 先手算出每一步的中间结果,写在注释中 2. 再运行代码验证,输出结果 3. 分析 `&&` 短路特性对执行结果的影响 --- ### 题目 9:位运算权限系统 **难度**:⭐⭐⭐ **知识点**:位运算符(`&`、`|`、`~`、`<<`)、综合运用 在计算机系统中,常用**位运算**来实现权限控制。假设一个系统的权限定义如下: ```java // 权限定义(每个权限占用一个二进制位) int READ = 1 << 0; // 0001 = 1 读权限 int WRITE = 1 << 1; // 0010 = 2 写权限 int EXECUTE = 1 << 2; // 0100 = 4 执行权限 int DELETE = 1 << 3; // 1000 = 8 删除权限 ``` **要求**: 1. 定义一个用户权限变量 `int userPerm = 0;`(初始无权限) 2. 使用 `|` 赋予用户读、写、执行权限:`userPerm = READ | WRITE | EXECUTE;` 3. 使用 `&` 判断用户是否拥有某个权限(如判断是否有删除权限) 4. 使用 `&` 和 `~` 取消用户的写权限 5. 按以下格式输出每一步的结果: **示例输出**: ``` 初始权限: 0 (无权限) 赋予权限(读|写|执行): 7 是否有删除权限? false 取消写权限后: 5 最终权限: 读取=有, 写入=无, 执行=有, 删除=无 ``` **提示**: ```java // 判断是否有写权限 boolean hasWrite = (userPerm & WRITE) == WRITE; // 取消写权限 userPerm = userPerm & ~WRITE; ``` --- ## 四、提交要求 1. 在 `提交` 文件夹下创建【以你名字命名】的文件夹,然后复制 Java 源文件。比如: ![image-20260714171229747](https://gitee.com/lk506667090/PicGo_img/raw/master/images/202607141713967.png) 2. 每个题目一个文件,命名格式:`Demo_题目编号_姓名.java` - 例如:`Demo_01_张三.java` 3. 文件头部使用文档注释,包含: ```java /** * @author 你的姓名 * @title 题目X:题目名称 * @create 2026/7/14 */ ``` 4. 代码整洁,有必要的注释 5. 基础题`(1~3)`和进阶题`(4~6)`为**必做** 6. 挑战题`(7~9)`为 **选做**,学有余力的同学尝试完成