返回 课程

信奥AC之路-第一级-A学段

0% 完成
0/0 步骤
  1. 第一课 开发环境与基础输出
    4 主题|小节
  2. 第二课 算数运算符
    6 主题|小节
  3. 第三课 输入与运算
    3 主题|小节
  4. 第四课 数值操作
    4 主题|小节
  5. 第五课 表达式与运算符
    3 主题|小节
  6. 第六课 三目运算与双分支(缺导语+本课目标)
    2 主题|小节
  7. 第七课 多分支结构(缺导语+本课目标)
    1 主题|小节
  8. 第八课 多if语句
    1 主题|小节
  9. 第九课 三种分支结构的比较
    1 主题|小节
  10. 第十课 巩固学习分支结构
    1 主题|小节
  11. 第十一课 switch与复合语句
    3 主题|小节
  12. 第十二课 while循环
    2 主题|小节
  13. 第十三课 while循环的简单条件输出
    1 主题|小节
  14. 第十四课 while循环的输入序列处理
    1 主题|小节
  15. 第十五课 while循环的复杂条件输出
    2 主题|小节
  16. 第十六课 while循环与数据统计
    1 主题|小节
  17. 第十七课 for循环结构
    3 主题|小节
  18. 第十八课 for循环的输入序列处理)
    1 主题|小节
  19. 第十九课 深入探索for循环
    2 主题|小节
  20. 第二十课 三种循环的对比
    2 主题|小节
  21. 第二十一课 程序调试(一)
    3 主题|小节
  22. 第二十二课 调试工具的使用
    2 主题|小节
  23. 第二十三课 综合复习
    2 主题|小节
  24. 第二十四课 学习评估
    1 主题|小节
课 10 的 24
进行中

第十课 巩固学习分支结构

2025年4月19日

##### 🔬 **实验十五:图书借阅系统**

题目描述:
编写一个图书借阅管理系统,使用三种不同的分支结构处理不同的借阅规则:

1. 判断是否可以借书(无超期且未超出借阅上限)
2. 根据会员状态确定借阅限额
3. 根据不同情况给出相应提醒

输入格式:
三个数据,用空格分隔:

– bookCount:要借的书数量(整数)
– overdueDays:超期天数(整数,0表示未超期)
– isMember:是否是会员(1是0否)

输出格式:
多行文本,包含:

– 是否可以借书的判断
– 借书限额说明
– 相关费用和提醒(如果有)

数据范围:
0 ≤ bookCount ≤ 20
0 ≤ overdueDays ≤ 365

样例输入1:

“`
3 0 1
“`

样例输出1:

“`
可以借书
会员可借,限额10本
建议按时归还
“`

样例输入2:

“`
8 5 0
“`

样例输出2:

“`
不可借书
普通用户可借,限额5本
需缴纳超期费用:2.50元
建议办理会员
“`

解题思路:

1. 先检查是否满足借书条件
2. 根据会员状态判断借阅限额
3. 计算超期费用(如果有)
4. 给出适当的建议信息

代码实现:

“`cpp
#include
#include // 用于设置输出精度
using namespace std;

int main() {
int bookCount, overdueDays;
bool isMember;

// 提示用户输入并获取数据
cout << "请输入要借的书数量:"; cin >> bookCount;
cout << "请输入超期天数(0表示未超期):"; cin >> overdueDays;
cout << "是否是会员(1是0否):"; cin >> isMember;

// 检查输入数据是否有效
if(bookCount < 0 || bookCount > 20 || overdueDays < 0) { cout << "输入数据无效!" << endl; return 1; } // 1. 双分支 - 判断是否可以借书 if(overdueDays == 0 && bookCount <= 5) { cout << "可以借书" << endl; } else { cout << "不可借书" << endl; } // 2. 多分支 - 借书限额 if(isMember && bookCount <= 10) { cout << "会员可借,限额10本" << endl; } else if(!isMember && bookCount <= 5) { cout << "普通用户可借,限额5本" << endl; } else { cout << "超出借阅限额" << endl; } // 3. 多if - 各种提醒 if(overdueDays > 0) {
cout << "需缴纳超期费用:" << fixed << setprecision(2) << (overdueDays * 0.5) << "元" << endl; } if(bookCount > 3) {
cout << "建议按时归还" << endl; } if(!isMember) { cout << "建议办理会员" << endl; } return 0; } ``` 代码说明: 1. 使用三种分支结构处理不同规则 2. 添加了数据有效性检查 3. 超期费用按每天0.5元计算 4. 提供多种有用的提示信息 注意事项: 1. 输入数据必须在合理范围内 2. 借阅规则要明确 3. 超期费用要精确计算 4. 提示信息要有帮助性 ##### 🔬 **实验十六:智能家居系统** 题目描述: 编写一个智能家居控制系统,使用三种不同的分支结构处理不同的控制逻辑: 1. 控制空调开关(根据温度) 2. 控制灯光亮度(根据光照强度分级) 3. 处理多个安全检查项目 输入格式: 三个数据,用空格分隔: - temperature:室温(浮点数,单位℃) - light:光照强度(整数,0-100) - isHome:是否有人在家(1是0否) 输出格式: 多行文本,包含: - 空调控制状态 - 灯光控制级别 - 各项安全提示(如果有) 数据范围: 10.0 ≤ temperature ≤ 40.0 0 ≤ light ≤ 100 样例输入1: ``` 27.5 30 1 ``` 样例输出1: ``` 开启制冷模式 开启部分灯光 温度正常 ``` 样例输入2: ``` 35.0 10 0 ``` 样例输出2: ``` 开启制冷模式 开启全部灯光 启动安防系统 高温警报 ``` 解题思路: 1. 根据温度控制空调 2. 根据光照强度分级控制灯光 3. 结合多个条件进行安全检查 4. 考虑不同场景下的自动化控制 代码实现: ```cpp #include
using namespace std;

int main() {
double temperature; // 存储室温
int light; // 存储光照强度
bool isHome; // 存储是否有人在家

// 提示用户输入并获取数据
cout << "请输入室温(℃):"; cin >> temperature;
cout << "请输入光照强度(0-100):"; cin >> light;
cout << "是否有人在家(1是0否):"; cin >> isHome;

// 检查输入数据是否有效
if(temperature < 10 || temperature > 40 ||
light < 0 || light > 100) {
cout << "输入数据无效!" << endl; return 1; } // 1. 双分支 - 空调控制 if(temperature > 26) {
cout << "开启制冷模式" << endl; } else { cout << "关闭空调" << endl; } // 2. 多分支 - 灯光控制 if(light < 20) { cout << "开启全部灯光" << endl; } else if(light < 50) { cout << "开启部分灯光" << endl; } else if(light < 80) { cout << "开启微光模式" << endl; } else { cout << "关闭灯光" << endl; } // 3. 多if - 安全检查 if(!isHome) { cout << "启动安防系统" << endl; } if(temperature > 35) {
cout << "高温警报" << endl; } else if(temperature >= 20 && temperature <= 26) { cout << "温度正常" << endl; } if(light == 0 && isHome) { cout << "检查电路" << endl; } return 0; } ``` 代码说明: 1. 综合考虑温度、光照和人员状态 2. 使用不同分支结构控制不同设备 3. 添加了数据有效性检查 4. 提供多个安全提示功能 注意事项: 1. 输入数据必须在有效范围内 2. 控制逻辑要合理 3. 安全检查要全面 4. 自动化控制要考虑多种情况 ##### 🔬 **实验十七:在线购物系统** 题目描述: 编写一个在线购物系统,使用三种不同的分支结构处理不同的优惠规则: 1. 处理首次购物优惠(首次购物95折) 2. 根据会员等级确定折扣(黄金、白银、普通会员) 3. 处理多个额外优惠(满减、赠券、积分) 输入格式: 三个数据,用空格分隔: - totalPrice:购物总金额(浮点数) - memberLevel:会员等级(1-普通 2-白银 3-黄金) - isFirstBuy:是否首次购物(1是0否) 输出格式: 多行文本,包含: - 所有适用的优惠信息 - 最终价格(保留2位小数) 数据范围: 0.0 ≤ totalPrice ≤ 100000.0 1 ≤ memberLevel ≤ 3 样例输入1: ``` 2000 3 1 ``` 样例输出1: ``` 享受首购95折 黄金会员8折 满1000减100 赠送购物券 可使用积分 最终价格:1421.00 ``` 样例输入2: ``` 800 1 0 ``` 样例输出2: ``` 普通会员9折 最终价格:720.00 ``` 解题思路: 1. 先处理首次购物优惠 2. 根据会员等级应用折扣 3. 判断是否满足其他优惠条件 4. 按顺序计算最终价格 代码实现: ```cpp #include
#include
using namespace std;

int main() {
double totalPrice; // 存储购物总金额
int memberLevel; // 存储会员等级
bool isFirstBuy; // 存储是否首次购物

// 提示用户输入并获取数据
cout << "请输入购物总金额:"; cin >> totalPrice;
cout << "请输入会员等级(1-3):"; cin >> memberLevel;
cout << "是否首次购物(1是0否):"; cin >> isFirstBuy;

// 检查输入数据是否有效
if(totalPrice < 0 || memberLevel < 1 || memberLevel > 3) {
cout << "输入数据无效!" << endl; return 1; } // 1. 双分支 - 首次购物优惠 if(isFirstBuy) { cout << "享受首购95折" << endl; totalPrice *= 0.95; } // 2. 多分支 - 会员折扣 if(memberLevel == 3) { cout << "黄金会员8折" << endl; totalPrice *= 0.8; } else if(memberLevel == 2) { cout << "白银会员85折" << endl; totalPrice *= 0.85; } else if(memberLevel == 1) { cout << "普通会员9折" << endl; totalPrice *= 0.9; } // 3. 多if - 额外优惠 if(totalPrice >= 1000) {
cout << "满1000减100" << endl; totalPrice -= 100; } if(totalPrice >= 500) {
cout << "赠送购物券" << endl; } if(memberLevel > 1) {
cout << "可使用积分" << endl; } // 输出最终价格 cout << "最终价格:" << fixed << setprecision(2) << totalPrice << endl; return 0; } ``` 代码说明: 1. 按优先级处理各种优惠 2. 使用不同分支结构处理不同类型优惠 3. 添加了数据有效性检查 4. 保留价格的小数点后两位 注意事项: 1. 总价必须是非负数 2. 优惠计算顺序要合理 3. 会员等级必须有效 4. 最终价格要精确计算 ##### 🔬 **实验十八:考试成绩分析** 题目描述: 编写一个考试成绩分析系统,使用三种不同的分支结构处理不同的分析需求: 1. 判断总成绩是否及格(平均分≥60) 2. 找出最好的科目 3. 分析各科是否需要补习 输入格式: 三个整数,用空格分隔: - mathScore:数学成绩(0-100) - chineseScore:语文成绩(0-100) - englishScore:英语成绩(0-100) 输出格式: 多行文本,包含: - 总成绩评价 - 最佳科目 - 需要补习的科目(如果有) - 平均分(保留1位小数) 数据范围: 0 ≤ 所有成绩 ≤ 100 样例输入1: ``` 85 92 78 ``` 样例输出1: ``` 总成绩及格 语文成绩最好 平均分:85.0 ``` 样例输入2: ``` 45 55 58 ``` 样例输出2: ``` 总成绩不及格 英语成绩最好 数学需要补习 语文需要补习 英语需要补习 平均分:52.7 ``` 解题思路: 1. 计算并判断平均分 2. 比较三科成绩找出最高分 3. 分别检查每科是否需要补习 4. 提供全面的成绩分析结果 代码实现: ```cpp #include
#include
using namespace std;

int main() {
int mathScore, chineseScore, englishScore;

// 提示用户输入并获取成绩
cout << "请输入数学成绩:"; cin >> mathScore;
cout << "请输入语文成绩:"; cin >> chineseScore;
cout << "请输入英语成绩:"; cin >> englishScore;

// 检查成绩是否有效
if(mathScore < 0 || mathScore > 100 ||
chineseScore < 0 || chineseScore > 100 ||
englishScore < 0 || englishScore > 100) {
cout << "成绩输入无效!" << endl; return 1; } // 计算平均分 double average = (mathScore + chineseScore + englishScore) / 3.0; // 1. 双分支 - 总成绩判断 if(average >= 60) {
cout << "总成绩及格" << endl; } else { cout << "总成绩不及格" << endl; } // 2. 多分支 - 最佳科目评定 if(mathScore >= chineseScore && mathScore >= englishScore) {
cout << "数学成绩最好" << endl; } else if(chineseScore >= mathScore && chineseScore >= englishScore) {
cout << "语文成绩最好" << endl; } else { cout << "英语成绩最好" << endl; } // 3. 多if - 补习科目判断 if(mathScore < 60) { cout << "数学需要补习" << endl; } if(chineseScore < 60) { cout << "语文需要补习" << endl; } if(englishScore < 60) { cout << "英语需要补习" << endl; } // 输出平均分 cout << "平均分:" << fixed << setprecision(1) << average << endl; return 0; } ``` 代码说明: 1. 计算平均分用double类型保证精度 2. 使用多种分支结构进行不同分析 3. 添加了成绩有效性检查 4. 平均分保留一位小数 注意事项: 1. 成绩必须在0-100范围内 2. 最高分可能有并列情况 3. 所有不及格科目都要提示 4. 结果展示要清晰完整 ##### 🔬 **实验十九:公交卡系统** 题目描述: 编写一个公交卡管理系统,使用三种不同的分支结构处理不同的功能: 1. 检查余额是否足够(基本票价2元) 2. 根据乘客类型计算实际票价(儿童、学生、老年人享受优惠) 3. 提供多项乘车提示信息 输入格式: 三个数据,用空格分隔: - balance:卡内余额(浮点数) - age:乘客年龄(整数) - isStudent:是否是学生(1是0否) 输出格式: 多行文本,包含: - 余额状态提示 - 应付票价信息 - 相关注意事项 数据范围: 0.0 ≤ balance ≤ 1000.0 0 ≤ age ≤ 150 样例输入1: ``` 10.0 15 1 ``` 样例输出1: ``` 余额充足 学生半价:1元 请携带学生证 可以乘车 ``` 样例输入2: ``` 1.5 65 0 ``` 样例输出2: ``` 请及时充值 老年人半价:1元 请携带老年证 建议充值 ``` 解题思路: 1. 先检查卡内余额是否足够 2. 根据年龄和身份确定票价 3. 根据不同情况给出提示 4. 考虑各类优惠政策 代码实现: ```cpp #include
using namespace std;

int main() {
double balance; // 存储卡内余额
int age; // 存储乘客年龄
bool isStudent; // 存储是否是学生

// 提示用户输入并获取数据
cout << "请输入卡内余额:"; cin >> balance;
cout << "请输入年龄:"; cin >> age;
cout << "是否是学生(1是0否):"; cin >> isStudent;

// 检查输入数据是否有效
if(balance < 0 || age < 0 || age > 150) {
cout << "输入数据无效!" << endl; return 1; } // 1. 双分支 - 余额检查 if(balance >= 2) {
cout << "余额充足" << endl; } else { cout << "请及时充值" << endl; } // 2. 多分支 - 票价计算 if(age < 12) { cout << "儿童免费" << endl; } else if(isStudent) { cout << "学生半价:1元" << endl; } else if(age >= 60) {
cout << "老年人半价:1元" << endl; } else { cout << "全价:2元" << endl; } // 3. 多if - 各种提示 if(balance < 5) { cout << "建议充值" << endl; } if(isStudent) { cout << "请携带学生证" << endl; } if(age >= 60) {
cout << "请携带老年证" << endl; } if(balance >= 2 || age < 12) { cout << "可以乘车" << endl; } return 0; } ``` 代码说明: 1. 使用不同分支处理票务逻辑 2. 优先级:儿童>学生>老年人
3. 添加了数据有效性检查
4. 提供多种贴心提示

注意事项:

1. 余额必须是非负数
2. 年龄必须在有效范围内
3. 优惠政策的优先顺序
4. 提示信息要有帮助性

##### 🔬 **实验二十:快递费用计算**

题目描述:
编写一个快递费用计算系统,使用三种不同的分支结构处理不同的计费规则:

1. 计算基础运费(1公斤内10元,超出部分每公斤加5元)
2. 根据距离增加附加费(超过不同距离加收不同比例费用)
3. 处理特殊情况(易碎品、重物等)

输入格式:
三个数据,用空格分隔:

– weight:包裹重量(浮点数,单位kg)
– distance:运送距离(整数,单位km)
– isFragile:是否易碎品(1是0否)

输出格式:
多行文本,包含:

– 基础运费信息
– 距离附加费说明
– 特殊情况提示
– 最终费用(保留2位小数)

数据范围:
0.1 ≤ weight ≤ 100.0
1 ≤ distance ≤ 3000

样例输入1:

“`
2.5 800 0
“`

样例输出1:

“`
基础运费:17.50元
超过500公里加收30%
运费:22.75元
“`

样例输入2:

“`
1.5 1200 1
“`

样例输出2:

“`
基础运费:12.50元
超过1000公里加收50%
易碎品加收20%
运费:22.50元
可能延迟1-2天
“`

解题思路:

1. 先计算基础运费
2. 根据距离计算附加费
3. 处理特殊包裹情况
4. 最后计算总费用

代码实现:

“`cpp
#include
#include
using namespace std;

int main() {
double weight; // 存储包裹重量
int distance; // 存储运送距离
bool isFragile; // 存储是否易碎品
double fee = 0; // 存储运费

// 提示用户输入并获取数据
cout << "请输入包裹重量(kg):"; cin >> weight;
cout << "请输入运送距离(km):"; cin >> distance;
cout << "是否易碎品(1是0否):"; cin >> isFragile;

// 检查输入数据是否有效
if(weight < 0.1 || weight > 100 ||
distance < 1 || distance > 3000) {
cout << "输入数据无效!" << endl; return 1; } // 1. 双分支 - 基础运费判断 if(weight <= 1) { fee = 10; // 1公斤以内10元 } else { fee = 10 + (weight - 1) * 5; // 超出部分每公斤加5元 } cout << "基础运费:" << fixed << setprecision(2) << fee << "元" << endl; // 2. 多分支 - 距离附加费 if(distance > 1000) {
cout << "超过1000公里加收50%" << endl; fee *= 1.5; // 超过1000公里加收50% } else if(distance > 500) {
cout << "超过500公里加收30%" << endl; fee *= 1.3; // 超过500公里加收30% } else if(distance > 100) {
cout << "超过100公里加收10%" << endl; fee *= 1.1; // 超过100公里加收10% } // 3. 多if - 特殊情况处理 if(isFragile) { cout << "易碎品加收20%" << endl; fee *= 1.2; // 易碎品加收20% } if(weight > 10) {
cout << "重物请保价" << endl; } if(distance > 1000) {
cout << "可能延迟1-2天" << endl; } // 输出最终运费 cout << "运费:" << fixed << setprecision(2) << fee << "元" << endl; return 0; } ``` 代码说明: 1. 使用double类型存储重量和费用,保证精确计算 2. 基础运费和各种附加费分步计算 3. 每种费用调整都有相应提示 4. 最终金额保留两位小数 注意事项: 1. 输入数据必须在合理范围内 2. 费用计算顺序要合理 3. 百分比增加要准确计算 4. 不同情况的提示要清晰 改进建议: 1. 可以添加保价费用计算 2. 可以考虑节假日加价 3. 可以增加会员折扣 4. 可以添加加急服务选项 ### 扩展练习: 1. 修改程序,添加保价费用计算 ```cpp if(isInsured) { double insuranceFee = value * 0.01; // 按物品价值1%收取保价费 fee += insuranceFee; cout << "保价费用:" << insuranceFee << "元" << endl; } ``` 2. 添加节假日加价功能 ```cpp if(isHoliday) { cout << "节假日加收10%" << endl; fee *= 1.1; } ```

课堂内容
0% 完成 0/1 步骤