第 8 课:单分支结构
选择结构是编程中的一种基本逻辑结构,根据不同条件执行不同内容。
比如现在蛙蛙想知道今天上学需要带什么课本,已知周一有语文、英语和历史,周二有科学、数学和音乐,周三有美术、语文和道德与法治……
那么蛙蛙会根据今天是周几来选择带什么课本,比如今天是周二,那么蛙蛙只需要带科学、数学和音乐课本即可。
选择结构根据条件判断,从多个可能的执行路径中选择一条来执行。例如,刚才的例子就是根据周几的不同,来决定带什么课本去上学。这种结构使得程序能根据不同的情况做出不同的反应,增加了程序的灵活性,是实现程序逻辑控制的重要手段之一。
最近,蛙蛙在编程中取得了优异的成绩,氪町博士奖励了他 100 个积分,蛙蛙可用这笔积分换取礼物。他看中了一个物品,但是不知需要花费多少个积分。如果这件物品的价格不大于 100 个积分,蛙蛙就能如愿以偿地把它带回家。判断价格不大于 100 个积分,满足条件即可获得物品,就是一个单分支结构。
所谓单分支结构,就是只有一条路可以选择,如果满足条件,就执行语句,不满足就跳过单分支结构的语句。
再来说一下单分支结构的基本框架:
if(条件表达式)
{
语句 1;
……
}解释:如果条件表达式的值为真,即条件成立,语句 1 及大括号内的其他语句将被执行。否则,大括号内的语句将被忽略(不被执行),程序将按顺序从整个选择结构之后的下一条语句继续执行。
若变量 coin 用来表示某物品所需的积分数,用单分支结构描述如下:
if(coin <= 100)
{
cout << "success"; // success 表示成功获得此物品
}解释:如果这件物品的价格不大于 100 个积分,则条件成立,那么程序就会执行大括号里面的输出语句;如果这件物品的价格大于 100 个积分,那么程序就会直接跳过大括号里面的语句。
8.1 条件表达式和关系运算符
刚刚我们所用的 coin <= 100 就叫作条件表达式,也就是把判断条件用关系式的方式表达出来。一般来说,条件表达式由两个部分组成,通过比较它们的大小来得出判断结果。例如:
a > 0 或 a + 10 <= b。
条件表达式中的 > 和 <= 符号,称为关系运算符。
常见的关系运算符有 6 种,分别是:
- 大于(
>)、小于(<); - 大于或等于(
>=)、小于或等于(<=); - 等于(
==)、不等于(!=)。
上述这些符号可以比较两个数字或者表达式的大小。
关系运算符的运算结果通常是布尔(Boolean)类型。布尔类型只有两个值,取值为 true(真)或 false(假),但是在 C++ 里输出时 true 显示为 1,false 显示为 0。
- 0:代表关系不成立(假)。
- 1:代表关系成立(真)。
代码展示:
if(a > 0) // 判断 a 是不是正数
{ // 大括号内的语句都需要判断后才能知道是否执行
cout << a; // 执行语句
}
cout << endl; // 不受条件判断影响注意:如果大括号内只有一条语句,那么大括号是可以省略的。即:
if(a > 0) cout << a;
cout << endl;上面两行代码与之前代码所表述的内容一致。
例 1:超市购物
在一次超市促销中,巧克力和橡皮糖都是 30 元一包,蛙蛙妈妈发现两包的重量不一样,于是让超市阿姨帮忙称了一下两包糖果的重量,果然不一样,分别为 a(巧克力重量)和 b(橡皮糖重量)。
最后妈妈决定买重量更大的那包糖果,请问妈妈最后买的是巧克力还是橡皮糖?(1 ≤ a ≤ 10,1 ≤ b ≤ 10,a 不等于 b)
【输入格式】输入一行,两个整数 a 和 b,分别表示两包物品的重量。
【输出格式】输出一行,chocolate(用来表示巧克力)或者 candy(用来表示橡皮糖)。
【输入样例】5 3
【输出样例】chocolate
解析
声明两个变量 a 和 b,分别表示巧克力的重量和橡皮糖的重量。
使用 if 语句进行判断,用于判断条件表达式 a > b 是否为真。如果 a 的值大于 b 的值,说明巧克力更重,那么执行
cout << "chocolate";语句。如果 b 的值大于 a 的值,说明橡皮糖更重,那么执行
cout << "candy";语句。题目已知巧克力和橡皮糖重量不一样,所以不用考虑一样的情况。
参考代码
#include <iostream>
using namespace std;
int main()
{
int a,b;
cin >> a >> b;
if(a > b) cout << "chocolate";
if(a < b) cout << "candy";
return 0;
}8.2 奇偶数问题
要判断一个整数是不是偶数,只要判断这个数能不能被 2 整除即可。
如果一个整数 a 除以 2 没有余数,那么这个数就是偶数;如果一个整数除以 2 有余数,那么这个数就是奇数。
if(a % 2 == 0) // a 是偶数
if(a % 2 == 1) // a 是奇数例 2:抽奖活动
蛙蛙准备参加一场抽奖活动,已知抽到偶数号才能进入下一轮继续抽奖,他想知道自己是否晋级,是的话在屏幕上输出 yes,否则输出 no。
【输入格式】输入一行,一个整数 a,表示抽奖的数(1 ≤ a ≤ 100)。
【输出格式】输出一行,yes 或者 no。
【输入样例】15
【输出样例】no
解析
输入一个整数,判断该整数是否为偶数。如果是偶数,意味着蛙蛙可以晋级下一轮抽奖,程序将在屏幕上输出 yes;如果是奇数,则蛙蛙不能晋级,程序将输出 no。
使用 if 语句来判断条件表达式 a % 2 == 0 是否为真。如果余数为 0,说明 a 是偶数,满足晋级条件,那么执行
cout << "yes";语句,将字符串 yes 输出到标准输出。再使用一个 if 条件判断语句,判断 a 除以 2 的余数是否为 1。如果余数为 1,说明 a 是奇数,不满足晋级条件,那么执行
cout << "no";语句,将字符串 no 输出到标准输出。
参考代码
#include <iostream>
using namespace std;
int main()
{
int a;
cin >> a;
if(a%2 == 0) cout << "yes";
if(a%2 == 1) cout << "no";
return 0;
}8.3 位数判断
已知一个数是小于 100 的正整数,那么该如何判断这个数是一位数还是两位数呢?
其实只需要判断这个数是不是比最小的两位数大就可以了。
即:如果这个数比最小的两位数(10)大,说明这个数是两位数,否则这个数是一位数。
例 3:考试名次
蛙蛙的期中考试成绩出来了,他想知道自己有没有拿到一位数的名次,如果是的话在控制台上输出 yes。
【输入格式】输入一行,一个正整数 a(0 < a < 100),表示考试名次。
【输出格式】输出一行(yes),或者不输出。
【输入样例】5
【输出样例】yes
解析
输入蛙蛙期中考试的名次,判断该名次是否为一位数。如果是一位数(即小于 10),则在控制台输出 yes,如果不是一位数,则不进行任何输出。
通过 if 条件判断语句,判断 a < 10 这个条件是否成立。若 a 的值小于 10,说明蛙蛙的名次是一位数,此时执行
cout << "yes";语句,将字符串 yes 输出到控制台。无须判断 a 大于或等于 10 的情况。
参考代码
#include <iostream>
using namespace std;
int main()
{
int a;
cin >> a;
if(a < 10) cout << "yes";
return 0;
}8.4 打折问题
蛙蛙去超市买东西,恰巧碰到超市促销,全场商品均打九折,蛙蛙大喜!
于是他买了 100 元的东西。结账的时候蛙蛙准备付 10 块,你觉得他给对了吗?
解答:不对,打折是在原来售价的基础上降价销售,几折则表示实际售价占原来售价的几成。如九折,就是原先价格的基础上乘 0.9。
所以 100 元的商品应该付的正确的价钱是:100 × 0.9 = 90 元。
例 4:超市打折
蛙蛙去超市买东西,恰好赶上超市特价优惠,总价满 100 元打九折。蛙蛙一共买了三样物品,价格分别是 a、b、c,请问他最终应该付多少钱呢?(a、b、c 均在 1 和 100 之间。)
【输入格式】输入一行,三个整数 a、b、c,分别表示三样物品的价格。
【输出格式】输出一行,一个数,表示最终支付的总价。
【输入样例】50 40 20
【输出样例】99
解析
若购买物品的总价满 100 元,则总价打九折;若不满 100 元,则按原价支付。
声明三个整型变量 a、b 和 c,用于存储蛙蛙购买的三样物品的价格,再分别输入这三个变量。
通过 if 语句进行判断,判断 a + b + c >= 100 这个条件是否成立。如果成立,说明蛙蛙购买物品的总价满 100 元,满足超市的打折条件。此时,程序会计算 (a + b + c) * 0.9,即总价打九折后的金额,并使用 cout 将结果输出。
继续使用 if 语句进行判断,判断 a + b + c < 100 是否成立,若条件成立,说明蛙蛙购买物品的总价没有达到 100 元,则不会打折,直接输出结果即可。
参考代码
#include <iostream>
using namespace std;
int main()
{
int a,b,c;
cin >> a >> b >> c;
if(a + b + c >= 100) cout << (a + b + c) * 0.9;
if(a + b + c < 100) cout << a + b + c;
return 0;
}思考:通过上述例子,蛙蛙发现,如果商品总价是 99 元,他需要付 99 元,而如果买了总价为 110 元的物品,也只需要付 99 元。所以蛙蛙觉得如果买了 99 元物品,还能再挑选 11 元的物品凑单,因为最终所付的金额是一样的。
