初心者向けC/C++演習

C・C++でフィボナッチ数列を表示する

このレッスンでは、2つの変数と1つのループだけで、フィボナッチ数列の最初の10個の数を表示します。

はじめに

フィボナッチ数列は0と1から始まり、次の数は直前の2つの数の和になります(0, 1, 1, 2, 3, 5, 8...)。ループと、複数の変数を同時に更新する方法を練習する定番の問題です。

大切なポイント

  • コンパイラの警告(compiler warning)を有効にして、すべての警告を直しましょう。
  • それぞれの値のデータ型と寿命(lifetime)をしっかり理解しましょう。
  • 入力データと配列のインデックスの範囲は必ずチェックしましょう。

CとC++のコード例

C
実行 →
main.c
#include <stdio.h>
int main(void) {
    int first = 0, second = 1;
    for (int i = 0; i < 10; ++i) {
        printf("%s%d", i ? " " : "", first);
        // Advance the pair without storing the whole sequence.
        int next = first + second; first = second; second = next;
    }
    puts("");
}
実行結果
0 1 1 2 3 5 8 13 21 34
C++
実行 →
main.cpp
#include <iostream>
int main() {
    int first = 0, second = 1;
    for (int i = 0; i < 10; ++i) {
        if (i) std::cout << ' ';
        std::cout << first;
        // Advance the pair without storing the whole sequence.
        int next = first + second; first = second; second = next;
    }
    std::cout << '\n';
}
実行結果
0 1 1 2 3 5 8 13 21 34

CとC++の比較

数列全体を保存しなくても、直近の2つの数を持つ変数firstとsecondだけで十分です。ループのたびにfirstを表示し、next = first + secondを計算して、数の組を1つ先へずらします。式i ? " " : ""は、2つ目以降の数の前にだけスペースを表示します。

C

Cは小さな手続き型の関数を使い、データがメモリ上でどう表されるかをそのまま見せます。

C++

C++は低レベルの操作もできるまま、ライブラリの型やより安全な抽象化を加えます。

発展問題

両方のバージョンを実行し、コードを書き換えて、それぞれの言語がもたらす安全性の違いを観察しましょう。

  • 不正な入力や境界の値で試しましょう。
  • 警告を増やすフラグ-Wall -Wextra -Wpedanticを付けてコンパイルしましょう。
  • 共通の宣言はヘッダーファイルに、実装は別のファイルに分けましょう。

チャレンジで練習する

このレッスンの内容を使って実際の問題を解きましょう。各チャレンジはブラウザで動き、すぐにテストされ、AI のレビューも受けられます。

すべてのチャレンジ