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のどちらかです。
条件分岐は、さまざまな条件を調べるための流れの制御としてよく使われます。
条件がtrueのときにコードを実行するif文は、次のように書きます。
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文で使う1つ以上の変数を初期化するために使えます。
たとえば、次のようになります。
int num{7};
if (int v{2 * num}; v > 10) {
return v;
} else {
return num;
}
// => 14
注意:初期化で作られた変数は、
if文の終わりより後ではアクセスできません。
この演習では、車両の購入の準備を手伝うコードを書きます。
タスクは3つあります。1つは運転免許証が必要かどうかを判断するもの、1つは2つの車両から選ぶのを手伝うもの、もう1つは中古車の適正価格を見積もるものです。
車両の種類によっては、運転するために運転免許証が必要です。
"car"と"truck"の2種類だけが免許を必要とし、それ以外は免許なしで運転できるものとします。
needs_license(kind)関数を実装してください。この関数は車両の種類を文字列として受け取り、その種類の車両に免許が必要かどうかを示す真偽値を返します。
needs_license("car")
// => true
needs_license("bike")
// => false
needs_license("truck")
// => true
購入できる車両の中から、選択肢を検討します。
2つの候補まで絞り込むことができましたが、最終的な決断を下すには助けが必要です。
そのために、choose_vehicle(option1, option2)関数を実装してください。この関数は2つの車両を引数として受け取り、辞書順で先に来る方の選択肢を含む判断を返します。
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年未満なら、新車だったときの価格の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です。