轨道
/
C++
C++
/
练习
/
购买车辆
购买车辆

购买车辆

学习练习

简介

比较

在 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语句把多个if语句串联起来。

int number{33};

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

从 C++17 开始,if语句还可以包含一个简短的初始化语句,用来为该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。

通过 GitHub 编辑 链接将在新窗口或新标签页中打开
C++ Exercism

准备好开始 购买车辆 了吗?

注册 Exercism,借助 19 个概念100 个练习 和真人导师指导,学习并掌握 C++,全部免费。