第9回|C言語の配列の基本を学ぶ:同じ型の値をまとめて扱う

当サイトでは、コンテンツの一部に広告を掲載しています。
第9回|C言語の配列の基本を学ぶ:同じ型の値をまとめて扱う

はじめてのC言語 | 第9回

目次

はじめに

前回は、関数を使って処理をまとめる方法を学びました。
今回は、同じ型の値をまとめて保存する「配列」を扱います。

この回の目的は次の4点です。

  • 配列の役割を理解する
  • 配列の宣言と初期化の書き方を覚える
  • 要素の取り出し方を知る
  • for 文と組み合わせた基本的な使い方を確認する

配列とは何か

配列は、同じ型の値を順番に並べて保存する仕組みです。
たとえば、5人分の点数を保存したいときに使います。

変数を5個用意することもできますが、配列を使うと1つのまとまりとして扱えます。

配列の基本形

宣言の書式

型 配列名[要素数];

例:

int scores[5];

このコードは、整数を5個保存できる配列 scores を宣言しています。

最初のサンプルコード

ソースコード

array_sample.c という名前で保存します。

#include <stdio.h>

int main(void) {
    int scores[3];

    scores[0] = 80;
    scores[1] = 90;
    scores[2] = 75;

    printf("%d\n", scores[0]);
    printf("%d\n", scores[1]);
    printf("%d\n", scores[2]);

    return 0;
}

実行手順

1. 作業ディレクトリに移動する

cd ~/Desktop

2. コンパイルする

clang array_sample.c -o array_sample

3. 実行する

./array_sample

実行結果:

80
90
75

コードの読み方

int scores[3];

整数を3個保存できる配列 scores を宣言しています。

scores[0] = 80;

配列の先頭の要素に 80 を代入しています。

scores[1] = 90;

2番目の要素に 90 を代入しています。

scores[2] = 75;

3番目の要素に 75 を代入しています。

配列の添字に注意する

C言語の配列は、0番目から始まります。
3個の要素がある場合、使える添字は次の3つです。

  • 0
  • 1
  • 2

つまり、scores[3] は使えません。

初期化して宣言する

配列は、宣言と同時に値を入れることもできます。

#include <stdio.h>

int main(void) {
    int scores[3] = {80, 90, 75};

    printf("%d\n", scores[0]);
    printf("%d\n", scores[1]);
    printf("%d\n", scores[2]);

    return 0;
}

実行結果は同じです。

80
90
75

この書き方の方が、値が最初から決まっているときは分かりやすいです。

for 文で配列を順番に処理する

配列は for 文と非常に相性が良いです。

#include <stdio.h>

int main(void) {
    int scores[3] = {80, 90, 75};
    int i;

    for (i = 0; i < 3; i++) {
        printf("%d\n", scores[i]);
    }

    return 0;
}

実行結果:

80
90
75

なぜ for 文と組み合わせるのか

配列の要素が増えるたびに、次のように1行ずつ書くのは非効率です。

printf("%d\n", scores[0]);
printf("%d\n", scores[1]);
printf("%d\n", scores[2]);

for 文を使えば、添字を変えながら同じ処理を繰り返せます。

for (i = 0; i < 3; i++) {
    printf("%d\n", scores[i]);
}

この形は、配列を扱う基本になります。

合計を計算する例

配列の要素を順番に足していく例です。

#include <stdio.h>

int main(void) {
    int scores[3] = {80, 90, 75};
    int i;
    int total = 0;

    for (i = 0; i < 3; i++) {
        total = total + scores[i];
    }

    printf("%d\n", total);

    return 0;
}

実行結果:

245

平均を計算する例

整数同士の割り算になる点に注意します。

#include <stdio.h>

int main(void) {
    int scores[3] = {80, 90, 75};
    int i;
    int total = 0;
    int average;

    for (i = 0; i < 3; i++) {
        total = total + scores[i];
    }

    average = total / 3;
    printf("%d\n", average);

    return 0;
}

実行結果:

81

245 / 3 は 81.666… ですが、int 型同士の計算なので結果は 81 になります。

初心者がつまずきやすい点

添字は0から始まる

これは配列で最も重要な点です。

scores[0]

が最初の要素です。
1 から始まるわけではありません。

範囲外の添字を使わない

次のようなコードは問題があります。

int scores[3] = {80, 90, 75};
printf("%d\n", scores[3]);

scores[3] は範囲外です。
C言語ではこのようなアクセスは未定義動作になります。
エラーにならずに動いてしまうこともありますが、正しい結果は保証されません。

要素数と繰り返し回数を合わせる

次のコードは危険です。

for (i = 0; i < 5; i++) {
    printf("%d\n", scores[i]);
}

scores が3要素しかない場合、scores[3] や scores[4] にアクセスしてしまいます。

よくあるエラー

use of undeclared identifier

原因: 配列や変数を宣言する前に使っています。
対処: int scores[3]; や int i; を先に書きます。

範囲外アクセスによる不正な動作

原因: 添字が大きすぎます。
対処: 配列の要素数を確認し、for 文の条件を見直します。

初期化の個数が多すぎる

誤った例:

int scores[3] = {80, 90, 75, 60};

要素数より多い値は入れられません。

練習用コード

5個の整数を表示する

#include <stdio.h>

int main(void) {
    int numbers[5] = {10, 20, 30, 40, 50};
    int i;

    for (i = 0; i < 5; i++) {
        printf("%d\n", numbers[i]);
    }

    return 0;
}

合計を求める

#include <stdio.h>

int main(void) {
    int numbers[5] = {10, 20, 30, 40, 50};
    int i;
    int total = 0;

    for (i = 0; i < 5; i++) {
        total = total + numbers[i];
    }

    printf("%d\n", total);

    return 0;
}

実行結果:

150

まとめ

今回のポイントは次のとおりです。

  • 配列は同じ型の値をまとめて保存する仕組みである
  • 配列の添字は 0 から始まる
  • scores[i] のようにして各要素を扱う
  • 配列は for 文と組み合わせると効率よく処理できる

この回では、C言語の配列の基本を確認しました。
配列を使えるようになると、複数の値をまとめて処理できるようになります。

次回予告

次回は、文字列の基本を学びます。
C言語では文字列も配列と深く関係しているため、ここまでの内容がそのまま土台になります。

文字の並びをどう扱うのかを理解すると、C言語でできることがまた少し広がっていきます。

さらに学びたいあなたへ

用途ごとに選ぶ Linux のおすすめ本

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

のいのアバター のい UNIX Cafe マスター

Macintosh Color Classicから始まった旅は、長いWindows時代を経て、Windows10のサポート終了をきっかけにUNIXの世界へ戻ってきました。UNIX Cafeでは、UNIX・Linux・そしてMacな世界を、むずかしい言葉を使わず、物語のように書いています。プログラミングは、アイデアをコンピューターに伝えるための言葉です。簡単な単語と文法を覚えれば、誰でもコマンドを使えます。ぜひ一度、やさしいプログラミングの世界をのぞいてみてください。

Created by UNIX Cafe

目次