选购车辆

概念学习C++17

简介

比较运算

C++ 可以使用比较运算符比较不同的值。

比较含义 运算符
等于 ==
不等于 !=
小于 <
小于或等于 <=
大于 >
大于或等于 >=

比较结果始终是布尔值:

int a{3};

bool eq1 = a != 4; // true

bool eq2 = a > 5;  // false

== 和 != 分别检查两个值是否相等、是否不相等。下面是几个常见示例:

bool eq3 = 2 == 3; // false, integer comparison

bool eq4 = 2.1 != 2.2; // true, float comparison

bool eq5 = "hello" == "hello"; // true, string comparison

其余运算符分别检查一个值是否大于 >、大于或等于 >=、小于 <、小于或等于 <= 另一个值。数值和字符串都可以进行这些比较。比较字符串时,使用字典序,也称为词典顺序。

bool eq6 = 2 > 3; // false, integer comparison

bool eq7 = 1.2 < 1.3; // true, float comparison

bool eq8 = "Hello" < "World"; // true, string comparison

if 语句

C++ 的条件判断与其他语言类似。条件判断最终使用 bool 类型,其值是 true 或 false。条件判断常用于控制程序流程,以检查不同条件。

可以使用 if 语句,在条件为 true 时执行其中的代码:

std::string value{"val"};

if (value == "val") {
    return "was val";
}

如果需要处理多种情况,可以使用 else if 和 else,把多个分支连接起来。

int number{33};

if (number > 0) {
   return "positive";
} else if (number < 0) {
    return "negative";
} else {
   return "zero";
}

从 C++17 开始,if 语句还可以包含一条简短的初始化语句,为本次条件判断初始化一个或多个变量。例如:

int num{7};
if (int v{2 * num}; v > 10) {
    return v;
} else {
    return num;
}
// => 14

注意:初始化语句中创建的变量,不能在整个 if 语句结束后访问。

任务说明

本练习需要编写代码,为购买车辆做准备。

你需要完成三个任务:判断是否需要驾驶执照、帮助你在两辆车之间选择,以及估算二手车的合理价格。

1. 判断是否需要驾驶执照

某些类型的车辆需要驾驶执照。假设只有 "car" 和 "truck" 需要执照,其他类型都不需要。

实现 needs_license(kind) 函数,接收表示车辆类型的字符串,返回布尔值,说明驾驶该类型车辆是否需要执照。

needs_license("car")
// => true

needs_license("bike")
// => false

needs_license("truck")
// => true

2. 在两辆候选车辆之间选择

你考察了可选车辆,并把范围缩小到两个选项,但还需要帮助才能作出最终决定。实现 choose_vehicle(option1, option2) 函数,接收两辆车的名称,选择字典序在前的选项并返回推荐语句。

choose_vehicle("Wuling Hongguang", "Toyota Corolla")
// => "Toyota Corolla is clearly the better choice."

choose_vehicle("Volkswagen Beetle", "Volkswagen Golf")
// => "Volkswagen Beetle is clearly the better choice."

返回字符串的格式必须为 "<CHOSEN_VEHICLE> is clearly the better choice.",其中 <CHOSEN_VEHICLE> 是从两个参数中选出的名称。

3. 估算二手车价格

作出选择后,你希望确保经销商的报价合理。二手车价格取决于车龄。粗略估算时,车龄不足 3 年,价格为新车原价的 80%;车龄至少 10 年,价格为原价的 50%;车龄至少 3 年但不足 10 年,价格为原价的 70%。

实现 calculate_resell_price(original_price, age) 函数,使用 if、else if 和 else 实现上述规则;也可以尝试其他写法。函数接收原价和车龄,返回经销商处的估计价格。

calculate_resell_price(1000, 1)
// => 800

calculate_resell_price(1000, 5)
// => 700

calculate_resell_price(1000.0, 15)
// => 500

注意:返回值的类型是 double。

需要一点帮助?查看分步提示

提示

1. 判断是否需要驾驶执照

  • 使用相等比较运算符,判断输入是否等于某个字符串。
  • 使用布尔逻辑中学过的逻辑运算符,组合两个条件。
  • 不必使用 if,可以直接返回构造出的布尔表达式。

2. 在两辆候选车辆之间选择

  • 使用比较运算符判断哪个选项的字典序在前。
  • 根据比较结果,使用 if-else 语句设置辅助变量。
  • 最后构造推荐语句,可以使用 + 连接两个字符串。

3. 估算二手车价格

  • 先根据车龄确定原价所占的百分比,用辅助变量保存,并按任务要求使用 if-else if-else 语句。
  • 在两个 if 条件中,使用比较运算符比较车龄和阈值。
  • 将比例应用于原价。例如,x 的 30% 可以通过 30 除以 100 后再乘以 x 计算,注意数值类型。