C・C++の条件分岐・ループ・switch
このレッスンでは、ループとswitch文を組み合わせた小さなプログラムで、平均点を計算して評価を決めます。
はじめに
if文は真か偽かの条件で分岐を選び、switchは決まった値ごとのケースを扱い、ループは終了条件に達するまで処理を繰り返します。これらの文の書き方は、CとC++でほぼ同じです。
大切なポイント
- コンパイラの警告(compiler warning)を有効にして、すべての警告を直しましょう。
- それぞれの値のデータ型と寿命(lifetime)をしっかり理解しましょう。
- 入力データと配列のインデックスの範囲は必ずチェックしましょう。
動きで理解する
スライダーで点数を変えてみましょう。プログラムが通る道筋がフローチャート上で光り、対応するコードの行が強調されます。
CとC++のコード例
C
main.c
#include <stdio.h>
int main(void) {
int scores[] = {92, 71, 84};
int total = 0;
for (int i = 0; i < 3; ++i) total += scores[i];
int average = total / 3;
switch (average / 10) {
case 10: case 9: puts("Grade A"); break;
case 8: puts("Grade B"); break;
default: puts("Keep practicing");
}
return 0;
}
Grade B
C++
main.cpp
#include <iostream>
#include <vector>
int main() {
std::vector<int> scores{92, 71, 84};
int total = 0;
for (int score : scores) total += score;
switch ((total / static_cast<int>(scores.size())) / 10) {
case 10: case 9: std::cout << "Grade A\n"; break;
case 8: std::cout << "Grade B\n"; break;
default: std::cout << "Keep practicing\n";
}
}
Grade B
CとC++の比較
forループで3つの点数を足して平均点を出し、switchがaverage / 10の値で評価を選びます。ブロックが1行だけでも波かっこを必ず付け、各caseの最後にはbreakを書いて、意図せず次のcaseへ進まないようにしましょう。配列のインデックスも、必ず範囲内に収める必要があります。
C
Cは小さな手続き型の関数を使い、データがメモリ上でどう表されるかをそのまま見せます。
C++
C++は低レベルの操作もできるまま、ライブラリの型やより安全な抽象化を加えます。
発展問題
両方のバージョンを実行し、コードを書き換えて、それぞれの言語がもたらす安全性の違いを観察しましょう。
- 不正な入力や境界の値で試しましょう。
- 警告を増やすフラグ-Wall -Wextra -Wpedanticを付けてコンパイルしましょう。
- 共通の宣言はヘッダーファイルに、実装は別のファイルに分けましょう。
チャレンジで練習する
このレッスンの内容を使って実際の問題を解きましょう。各チャレンジはブラウザで動き、すぐにテストされ、AI のレビューも受けられます。
- Letter Grade Turn a test score into a letter grade. 簡単
- Fizz Buzz 3と5で割り切れるかどうかを使って数列を作成します。 簡単
- Triangle Classification Classify three side lengths as invalid, equilateral, isosceles, or scalene. 簡単