返回 课程

模板 信奥AC之路(第一级)

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 主题|小节
课 8, 主题|小节 1
进行中

8 多if语句

2025年4月20日
课 进展
0% 完成

“有时候,”我拿出几个小玩具,”我们需要同时检查很多事情。比如,检查书包里有没有带课本、铅笔盒、水杯…”

“就像妈妈检查我们的书包一样!”一个小朋友突然说。

“没错!”我笑着说,”这就是’多个if语句’,它们就像是一个个独立的检查员,每个人负责检查一件事情。”

##### 🔬 实验九A:多重独立判断

题目描述:
编写一个程序,对输入的整数进行多个独立的特征判断。程序需要判断该数是否为正数、是否为偶数、是否为三位数。这个程序展示了如何使用多个独立的if语句进行不同特征的判断。

输入格式:
一个整数number

输出格式:
多行文本,每行显示一个判断结果

数据范围:
-9999 ≤ number ≤ 9999

样例输入1:

“`
246
“`

样例输出1:

“`
这是一个正数
这是一个偶数
这是一个三位数
“`

样例输入2:

“`
-15
“`

样例输出2:

“`
这不是一个正数
这不是一个偶数
这不是一个三位数
“`

解题思路:

1. 使用多个独立的if语句
2. 分别判断不同的数字特征
3. 使用数学运算进行判断
4. 每个特征独立输出结果

代码实现:

“`cpp
#include
using namespace std;

int main() {
int number; // 存储输入的数字

// 提示用户输入并获取数字
cout << "请输入一个数字:"; cin >> number;

// 判断是否为正数
if(number > 0) {
cout << "这是一个正数" << endl; } else { cout << "这不是一个正数" << endl; } // 判断是否为偶数 if(number % 2 == 0) { cout << "这是一个偶数" << endl; } else { cout << "这不是一个偶数" << endl; } // 判断是否为三位数 if(number >= 100 && number <= 999) { cout << "这是一个三位数" << endl; } else { cout << "这不是一个三位数" << endl; } return 0; } ``` 代码说明: 1. 每个if语句独立判断一个特征 2. 使用模运算判断偶数 3. 使用范围判断三位数 4. 对每个特征都给出明确结果 注意事项: 1. 判断之间相互独立 2. 所有特征都要判断 3. 考虑负数的处理 4. 输出信息要清晰 ##### 🔬 实验九B:找最大值 题目描述: 编写一个程序,从三个输入的整数中找出最大值。使用多个独立的if语句和一个变量来追踪最大值。这个程序展示了如何使用多重判断来解决简单的最值问题。 输入格式: 三个整数a, b, c,用空格分隔 输出格式: 一行文本,显示最大值 数据范围: -10000 ≤ a, b, c ≤ 10000 样例输入1: ``` 23 45 17 ``` 样例输出1: ``` 最大的数是:45 ``` 样例输入2: ``` -5 0 -3 ``` 样例输出2: ``` 最大的数是:0 ``` 解题思路: 1. 设置一个变量存储当前最大值 2. 使用多个if语句逐个比较 3. 更新最大值变量 4. 最后输出结果 代码实现: ```cpp #include
using namespace std;

int main() {
int a, b, c; // 存储三个输入的数
int max = 0; // 存储最大值

// 提示用户输入并获取三个数
cout << "请输入三个数:"; cin >> a >> b >> c;

// 初始化max为第一个数
max = a;

// 和第二个数比较
if(b > max) {
max = b;
}

// 和第三个数比较
if(c > max) {
max = c;
}

// 输出结果
cout << "最大的数是:" << max << endl; return 0; } ``` 代码说明: 1. 使用max变量追踪最大值 2. 每次比较都是独立的if语句 3. 只在需要时更新max值 4. 最后输出追踪到的最大值 注意事项: 1. max的初始值设置很重要 2. 比较的顺序可以改变 3. 要考虑负数情况 4. if语句的独立性 ##### 🔬 实验九C:简单排序 题目描述: 编写一个程序,对输入的两个数进行升序排序。程序使用一个临时变量和if语句来交换两个数的位置。这个程序展示了条件判断在基础排序中的应用。 输入格式: 两个整数a, b,用空格分隔 输出格式: 一行文本,显示排序后的两个数 数据范围: -10000 ≤ a, b ≤ 10000 样例输入1: ``` 8 3 ``` 样例输出1: ``` 从小到大排序:3 8 ``` 样例输入2: ``` -5 -8 ``` 样例输出2: ``` 从小到大排序:-8 -5 ``` 解题思路: 1. 使用临时变量进行数值交换 2. 用if语句判断大小关系 3. 只在需要时进行交换 4. 保持交换操作的完整性 代码实现: ```cpp #include
using namespace std;

int main() {
int a, b; // 存储两个输入的数

// 提示用户输入并获取数据
cout << "请输入两个数:"; cin >> a >> b;

// 如果第一个数大于第二个数,则交换它们的位置
if(a > b) {
int temp = a; // 使用临时变量存储a的值
a = b; // 将b的值赋给a
b = temp; // 将临时变量的值赋给b
}

// 输出排序后的结果
cout << "从小到大排序:" << a << " " << b << endl; return 0; } ``` 代码说明: 1. 只需要一个if语句完成排序 2. 使用temp变量确保安全交换 3. 交换操作要完整执行 4. 输出格式要求统一 注意事项: 1. 临时变量的必要性 2. 交换操作的完整性 3. 考虑相等的情况 4. 输出要有空格分隔 ##### 🔬 实验九D:数字特征判断 题目描述: 编写一个程序,对输入的数字进行多个特征判断,包括:是否为正数、是否为偶数、是否能被3整除、是否为三位数。这个程序展示了如何使用多个独立的判断来全面分析一个数字的特征。 输入格式: 一个整数num 输出格式: 多行文本,每行显示一个特征判断结果 数据范围: -9999 ≤ num ≤ 9999 样例输入1: ``` 246 ``` 样例输出1: ``` 这是一个正数 这是一个偶数 这个数能被3整除 这是一个三位数 ``` 样例输入2: ``` -15 ``` 样例输出2: ``` 这是一个负数 这是一个奇数 这个数能被3整除 这不是一个三位数 ``` 解题思路: 1. 使用多个独立的if语句 2. 每个特征单独判断 3. 使用数学运算判断特征 4. 结果要清晰明确 代码实现: ```cpp #include
using namespace std;

int main() {
int num; // 存储输入的数字

// 提示用户输入并获取数字
cout << "请输入一个数字:"; cin >> num;

// 多个独立的判断
if(num > 0) {
cout << "这是一个正数" << endl; } else if(num < 0) { cout << "这是一个负数" << endl; } else { cout << "这个数是零" << endl; } if(num % 2 == 0) { cout << "这是一个偶数" << endl; } else { cout << "这是一个奇数" << endl; } if(num % 3 == 0) { cout << "这个数能被3整除" << endl; } else { cout << "这个数不能被3整除" << endl; } if(num >= 100 && num <= 999) { cout << "这是一个三位数" << endl; } else { cout << "这不是一个三位数" << endl; } return 0; } ``` 代码说明: 1. 每个特征使用独立的if语句 2. 正负数判断考虑零的情况 3. 使用取模运算判断整除 4. 使用范围判断位数 注意事项: 1. 判断的独立性很重要 2. 考虑零的特殊情况 3. 负数的位数判断 4. 输出信息要完整 ##### 🔬 实验九E:成绩分析系统 题目描述: 编写一个程序,分析三门课程(语文、数学、英语)的成绩情况。程序需要判断是否有不及格科目(低于60分)和满分科目(100分)。这个程序展示了如何使用多个独立判断来进行成绩分析。 输入格式: 三个整数,用空格分隔,分别表示语文、数学、英语成绩 输出格式: 多行文本,显示: - 每个不及格科目的提示 - 每个满分科目的提示 - 平均分 数据范围: 0 ≤ 各科成绩 ≤ 100 样例输入1: ``` 85 100 55 ``` 样例输出1: ``` 英语需要补考 数学满分 平均分:80.0 ``` 样例输入2: ``` 100 100 100 ``` 样例输出2: ``` 语文满分 数学满分 英语满分 平均分:100.0 ``` 解题思路: 1. 分别判断每门课的及格情况 2. 分别判断每门课是否满分 3. 计算三门课的平均分 4. 使用独立的if语句进行判断 代码实现: ```cpp #include
#include // 用于设置输出精度
using namespace std;

int main() {
int chinese, math, english; // 存储三科成绩

// 提示用户输入并获取成绩
cout << "请输入语文、数学、英语三科成绩:"; cin >> chinese >> math >> english;

// 检查成绩是否在有效范围内
if(chinese < 0 || chinese > 100 ||
math < 0 || math > 100 ||
english < 0 || english > 100) {
cout << "成绩输入无效!" << endl; return 1; } // 判断不及格科目 if(chinese < 60) { cout << "语文需要补考" << endl; } if(math < 60) { cout << "数学需要补考" << endl; } if(english < 60) { cout << "英语需要补考" << endl; } // 判断满分科目 if(chinese == 100) { cout << "语文满分" << endl; } if(math == 100) { cout << "数学满分" << endl; } if(english == 100) { cout << "英语满分" << endl; } // 计算并输出平均分 double average = (chinese + math + english) / 3.0; cout << "平均分:" << fixed << setprecision(1) << average << endl; return 0; } ``` 代码说明: 1. 使用独立的if语句判断各种情况 2. 添加了成绩有效性检查 3. 使用fixed和setprecision控制输出格式 4. 平均分使用double类型计算 注意事项: 1. 成绩必须在0-100之间 2. 平均分要保留一位小数 3. 判断的顺序要合理 4. 输出信息要清晰明确 ##### 🔬 实验九F:考试资格判断 题目描述: 编写一个程序,判断学生是否具有参加考试的资格。需要满足三个条件:出勤率不低于80%,作业完成率不低于85%,练习完成率不低于90%。这个程序展示了如何使用多个独立判断来确定最终资格。 输入格式: 三个整数,用空格分隔,分别表示: - 出勤率(0-100) - 作业完成率(0-100) - 练习完成率(0-100) 输出格式: 多行文本: - 如果有不满足的条件,每条都要显示 - 如果全部满足,显示可以参加考试 数据范围: 0 ≤ 所有输入值 ≤ 100 样例输入1: ``` 90 95 92 ``` 样例输出1: ``` 符合考试条件,可以参加考试 ``` 样例输入2: ``` 75 80 88 ``` 样例输出2: ``` 出勤率不足,不能参加考试 作业完成率不足,不能参加考试 练习完成率不足,不能参加考试 ``` 解题思路: 1. 分别判断三个条件 2. 使用独立的if语句 3. 设置布尔变量跟踪整体状态 4. 最后统一判断是否可以参加考试 代码实现: ```cpp #include
using namespace std;

int main() {
int attendance, homework, practice; // 存储三个比率
bool canTakeExam = true; // 追踪是否可以参加考试

// 提示用户输入并获取数据
cout << "请输入出勤率(0-100):"; cin >> attendance;
cout << "请输入作业完成率(0-100):"; cin >> homework;
cout << "请输入练习完成率(0-100):"; cin >> practice;

// 检查输入数据是否有效
if(attendance < 0 || attendance > 100 ||
homework < 0 || homework > 100 ||
practice < 0 || practice > 100) {
cout << "输入数据无效!" << endl; return 1; } // 多个独立条件判断 if(attendance < 80) { cout << "出勤率不足,不能参加考试" << endl; canTakeExam = false; } if(homework < 85) { cout << "作业完成率不足,不能参加考试" << endl; canTakeExam = false; } if(practice < 90) { cout << "练习完成率不足,不能参加考试" << endl; canTakeExam = false; } // 最终判断是否可以参加考试 if(canTakeExam) { cout << "符合考试条件,可以参加考试" << endl; } return 0; } ``` 代码说明: 1. 使用布尔变量追踪整体状态 2. 独立判断每个条件 3. 添加了输入验证 4. 所有不满足条件都会显示 注意事项: 1. 输入必须在0-100范围内 2. 所有条件都要检查 3. 不满足条件要给出具体原因 4. 最终结果要清晰明确 ##### 🔬 实验九G:购物优惠判断 题目描述: 编写一个购物系统,根据不同的优惠条件计算最终价格。优惠规则包括: - 满1000减100 - VIP额外9折 - 生日特惠再减50 - 非节假日打95折 所有优惠可以叠加使用。 输入格式: 一行包含四个数据: - 商品总价(浮点数) - 是否VIP(1是0否) - 是否生日(1是0否) - 是否节假日(1是0否) 输出格式: 多行文本: - 每个使用的优惠项目和优惠金额 - 最终需要支付的金额(保留2位小数) 数据范围: 0.0 ≤ 总价 ≤ 100000.0 样例输入1: ``` 2000 1 1 0 ``` 样例输出1: ``` 满1000减100 VIP额外打9折 生日特惠再减50 非节假日打95折 最终需要支付:1539.50元 ``` 样例输入2: ``` 800 0 0 1 ``` 样例输出2: ``` 最终需要支付:800.00元 ``` 代码实现: ```cpp #include
#include // 用于设置输出精度
using namespace std;

int main() {
double price; // 存储商品总价
bool isVIP, isBirthday, isHoliday;

// 提示用户输入并获取数据
cout << "请输入商品总价:"; cin >> price;
cout << "是VIP吗?(1是0否):"; cin >> isVIP;
cout << "是生日吗?(1是0否):"; cin >> isBirthday;
cout << "是节假日吗?(1是0否):"; cin >> isHoliday;

// 检查价格是否有效
if(price < 0) { cout << "价格不能为负数!" << endl; return 1; } // 多重优惠判断 if(price >= 1000) {
cout << "满1000减100" << endl; price -= 100; } if(isVIP) { cout << "VIP额外打9折" << endl; price *= 0.9; } if(isBirthday) { cout << "生日特惠再减50" << endl; price -= 50; } if(!isHoliday) { cout << "非节假日打95折" << endl; price *= 0.95; } // 确保价格不会变成负数 if(price < 0) { price = 0; } // 输出最终价格,保留两位小数 cout << "最终需要支付:" << fixed << setprecision(2) << price << "元" << endl; return 0; } ``` 代码说明: 1. 使用独立的if语句判断每个优惠条件 2. 优惠按照特定顺序依次计算 3. 使用fixed和setprecision控制输出格式 4. 防止最终价格出现负数 注意事项: 1. 优惠计算的顺序要合理 2. 每个优惠都要显示提示 3. 最终价格保留两位小数 4. 处理可能出现的负数情况 ##### 🔬 实验九H:三个数排序 题目描述: 编写一个程序,对输入的三个整数进行从大到小排序。使用多个if语句和临时变量实现排序功能。这个程序展示了如何使用多重判断实现简单的排序算法。 输入格式: 三个整数a, b, c,用空格分隔 输出格式: 一行文本,显示排序后的三个数(从大到小) 数据范围: -10000 ≤ a, b, c ≤ 10000 样例输入1: ``` 23 45 12 ``` 样例输出1: ``` 从大到小排序:45 23 12 ``` 样例输入2: ``` -5 -2 -8 ``` 样例输出2: ``` 从大到小排序:-2 -5 -8 ``` 解题思路: 1. 先比较前两个数并交换位置(如果需要) 2. 再比较后两个数并交换位置(如果需要) 3. 最后再比较前两个数 4. 使用临时变量完成交换 代码实现: ```cpp #include
using namespace std;

int main() {
int a, b, c; // 存储三个待排序的数

// 提示用户输入并获取数据
cout << "请输入三个数:"; cin >> a >> b >> c;

// 使用冒泡排序的思想进行排序
// 先比较a和b
if(a < b) { int temp = a; a = b; b = temp; } // 再比较b和c if(b < c) { int temp = b; b = c; c = temp; } // 最后再比较a和b if(a < b) { int temp = a; a = b; b = temp; } // 输出排序结果 cout << "从大到小排序:" << a << " " << b << " " << c << endl; return 0; } ``` 代码说明: 1. 使用三次两两比较完成排序 2. 每次比较都使用独立的临时变量 3. 比较顺序保证能得到正确结果 4. 输出时用空格分隔数字 注意事项: 1. 交换操作需要临时变量 2. 比较的顺序很重要 3. 考虑相等的情况 4. 处理负数的情况 ##### 🔬 实验九I:四个数排序 题目描述: 编写一个程序,对输入的四个整数进行从大到小排序。这是三个数排序的扩展,需要更多的比较和交换操作。这个程序展示了如何处理更复杂的排序情况。 输入格式: 四个整数a, b, c, d,用空格分隔 输出格式: 一行文本,显示排序后的四个数(从大到小) 数据范围: -10000 ≤ a, b, c, d ≤ 10000 样例输入1: ``` 23 45 12 34 ``` 样例输出1: ``` 从大到小排序:45 34 23 12 ``` 样例输入2: ``` -5 -2 -8 -1 ``` 样例输出2: ``` 从大到小排序:-1 -2 -5 -8 ``` 解题思路: 1. 先对前三个数进行排序(使用三个数排序的方法) 2. 将第四个数插入到正确的位置 3. 使用临时变量进行必要的移动 4. 保持交换操作的完整性 代码实现: ```cpp #include
using namespace std;

int main() {
int a, b, c, d; // 存储四个待排序的数

// 提示用户输入并获取数据
cout << "请输入四个数:"; cin >> a >> b >> c >> d;

// 第一步:先对前三个数排序
// 比较a和b
if(a < b) { int temp = a; a = b; b = temp; } // 比较b和c if(b < c) { int temp = b; b = c; c = temp; } // 再次比较a和b if(a < b) { int temp = a; a = b; b = temp; } // 第二步:将第四个数插入到正确位置 if(d > a) {
// d是最大的,所有数后移
int temp = d;
d = c;
c = b;
b = a;
a = temp;
} else if(d > b) {
// d是第二大的,部分数后移
int temp = d;
d = c;
c = b;
b = temp;
} else if(d > c) {
// d是第三大的,交换d和c
int temp = d;
d = c;
c = temp;
}
// 如果d比所有数都小,保持在最后位置

// 输出排序结果
cout << "从大到小排序:" << a << " " << b << " " << c << " " << d << endl; return 0; } ``` 代码说明: 1. 算法分为两个主要步骤: - 先对前三个数排序 - 将第四个数插入到正确位置 2. 使用多个if语句处理不同情况 3. 每次移动都使用临时变量 4. 考虑了所有可能的插入位置 注意事项: 1. 排序算法的正确性很重要 2. 临时变量的使用要准确 3. 移动操作要完整无误 4. 考虑相等的情况 改进建议: 1. 可以增加输入验证 2. 可以添加排序过程的展示 3. 可以优化比较次数 4. 可以处理特殊情况(如全相等) ##### 应用练习: 1. 修改程序,实现从小到大排序 ```cpp // 只需要修改比较符号的方向 if(a > b) {
int temp = a;
a = b;
b = temp;
}
// 其他比较类似修改
“`

2. 添加排序过程的显示

“`cpp
// 在每次交换后显示当前状态
cout << "当前序列:" << a << " " << b << " " << c << " " << d << endl; ``` 3. 增加输入验证 ```cpp // 在获取输入后添加范围检查 if(a < -10000 || a > 10000 || b < -10000 || b > 10000 ||
c < -10000 || c > 10000 || d < -10000 || d > 10000) {
cout << "输入数据超出范围!" << endl; return 1; } ``` 这个排序算法虽然不是最优的,但是对于理解条件结构的使用很有帮助。在实际应用中,可以使用更高效的排序算法。