コース一覧
    C言語基礎 関数・配列編
    最高点と最低点

    C言語基礎 関数・配列編

    C言語の関数と配列を学び、処理を分割してデータを扱うコースです。

    1
    関数
    01. 関数を定義する15分
    02. 引数と戻り値15分
    03. プロトタイプ宣言15分
    04. void関数15分
    05. 変数のスコープ15分
    06. つくる 関数に分割15分
    07. 第5章クイズ10分
    2
    配列と文字列
    01. 配列15分
    02. 配列とfor15分
    03. 集計15分
    04. 最高点と最低点15分
    05. 文字列(char配列)15分
    06. 文字列関数15分
    07. 文字列の入力15分
    08. つくる 配列で成績管理15分
    09. 第6章クイズ10分

    最高点と最低点

    探すときも1つずつ見るしかない

    配列の中から最大値を探す関数は C には用意されていません。合計と同じように、自分で先頭から1つずつ見ていきます。

    考え方は、暫定の王者を1人立てて、勝った相手が出るたびに入れ替える、というものです。

    c

    int max = scores[0];
    for (int i = 1; i < SUBJECTS; i++) {
        if (scores[i] > max) {
            max = scores[i];
        }
    }

    ループを最後まで回し終わったとき、max には必ず全体の最大値が入っています。どの要素も、一度は max と比べられているからです。

    初期値を0にしてはいけない

    ここで初学者がよくやるのが int max = 0; です。点数なら 0 以上なので一見動きますが、これは題材にたまたま助けられているだけです。

    c

    int temps[3] = {-5, -12, -3};
    int max = 0;   // 最大値が -3 なのに 0 のまま残る

    気温のようにマイナスがあるデータだと、どの要素も 0 に勝てず、存在しない 0 が答えになってしまいます。最小値を探すときに int min = 0; と書いた場合はもっと悲惨で、正の数しかないデータでは常に 0 が答えになります。

    ですから初期値は 0 ではなく、配列の先頭の要素にします。実際に存在する値から始めれば、データの中身がどうであれ、答えは必ず配列の中のどれかになります。ループを i = 1 から始めているのは、先頭は初期値としてすでに使ったからです。i = 0 から回しても答えは変わりませんが、1回ぶん無駄になります。

    最小値は不等号を反対にするだけ

    c

    int min = scores[0];
    for (int i = 1; i < SUBJECTS; i++) {
        if (scores[i] < min) {
            min = scores[i];
        }
    }

    違いは > が < になるところだけです。同じループの中で最大と最小を同時に求めることもできます。配列を2回なめるより1回で済むので、要素数が多いときは差が出ます。

    何番目かも一緒に覚えておく

    「最高点は92点」だけでなく「3科目目が最高」まで出したいなら、値だけでなく添字も覚えます。

    c

    int best = 0;   // 添字を覚える
    for (int i = 1; i < SUBJECTS; i++) {
        if (scores[i] > scores[best]) {
            best = i;
        }
    }
    printf("%d科目目が最高です\n", best + 1);

    値そのものは scores[best] でいつでも取り出せるので、添字だけ持っておけば両方に答えられます。

    では、最高点と最低点を探してみましょう。

    要件

    1. 5つの整数を配列に読み込む
    2. 最高点は92点です の形で最高点を出す
    3. 最低点は58点です の形で最低点を出す
    4. max と min の初期値は scores[0] にする

    ヒント

    暫定の最大値を先頭で決めて、勝った要素が来たら入れ替えます

    最小値は不等号の向きを反対にするだけです

    生田 陸人
    監修生田 陸人
    ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
    編集 ゆめさく編集部·公開 2026/08/07

    関連レッスン

    • 文字列(char配列)

      C の文字列が終端記号付きの char 配列であることを説明できるようになります。

    • 文字列関数

      strlen と strcmp を使えるようになります。

    • 文字列の入力

      名前をあふれさせずに入力できるようになります。

    • つくる 配列で成績管理

      名前と点数を添字で対応付けて管理できるようになります。

    このレッスンに出てくる用語

    意味があいまいなまま進んだ語は、ここから読み直せます。

    • 配列サイズ固定の同型データの集まり
    • 関数処理に名前を付けて再利用できる単位
    • ループ繰り返し処理。矢印で戻すか専用記号で示す
    • 素数1 と自分自身でしか割り切れない自然数
    main.c
    エディタを読み込んでいます

    メモ

    最高点と最低点

    ⌘S で保存