C/C++の基礎

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 のレビューも受けられます。

すべてのチャレンジ