##### 🔬 **实验十五:图书借阅系统**
题目描述:
编写一个图书借阅管理系统,使用三种不同的分支结构处理不同的借阅规则:
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;
}
```