【C#入門】配列に値を入力して合計を求める — 「箱が並ぶ」イメージで理解する

プログラミングでは、複数の値をまとめて扱いたい場面が頻繁にあります。

例えば:

  • 10人のテスト点数
  • 30日の気温
  • プレイヤーのスコア一覧

このような場合に使うのが 配列(array) です。

今回は配列を使って

10個の数値を入力し、その合計を求める

というプログラムを通して理解を深めます。


サンプルコード

// 配列に10個の点数を入力して合計を求める

// ① 配列を用意(10人分の箱)
var scores = new int[10];


// ② 値を入力して格納
for (var i = 0; i < scores.Length; i++)
{
    Console.Write($"{i + 1}人目の点数を入力: ");

    var line = Console.ReadLine();
    var number = int.Parse(line);

    scores[i] = number;   // 配列に保存
}


// ③ 合計計算
var total = 0;

for (var i = 0; i < scores.Length; i++)
{
    total += scores[i];
}


// ④ 表示
Console.WriteLine($"合計: {total}");

配列とは何か(超重要)

配列は一言でいうと

同じ型の値を並べて入れておく箱

イメージ:

scores
 ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
 │   │   │   │   │   │   │   │   │   │   │
 └───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘
   0   1   2   3   4   5   6   7   8   9

特徴:

  • 同じ型のみ入る(今回は int)
  • 順番がある
  • 番号(添字)でアクセスする

この番号を インデックス(添字) と呼びます。

重要:

添字は 0 から始まる

ここは必ず押さえるポイントです。


コード解説

① 配列を用意

var scores = new int[10];

意味:

  • int型の配列
  • 要素数10個

つまり

intの箱を10個並べて用意

まだ値は入っていません。


② 値を入力して格納

for (var i = 0; i < scores.Length; i++)

ここで登場するのが重要な書き方

scores.Length

これは

配列の要素数

を意味します。

今回は10ですが、

10 と直接書かない

ことが重要です。

理由:

  • 配列サイズを変えても修正不要
  • 実務コードの基本

格納部分

scores[i] = number;

意味:

i番目の箱に値を入れる

例:

scores[0] に 75
scores[1] に 60
scores[2] に 90

このように保存されていきます。


なぜ一度配列に保存するのか

鋭い疑問として出てきます。

合計だけならこう書けます:

total += number;

配列不要です。

ではなぜ配列?

理由:

後から再利用できる

例えば:

  • 平均を出す
  • 最大値を出す
  • 並び替え
  • グラフ表示
  • データ保存

つまり

データを保持するため

これが配列の本質です。


③ 合計計算

total += scores[i];

これは

total = total + scores[i]

の省略形です。

動き:

1回目

total = 0 + scores[0]

2回目

total = 前回結果 + scores[1]

繰り返して合計が作られます。


④ 表示

Console.WriteLine($"合計: {total}");

これまで学んだ文字列補間です。

実行例:入力した整数により違います

合計: 678

初学者がつまずくポイント

添字0スタート

ほぼ全員一度混乱します

正常です


Length の意味

数字直書きとの差を理解するまで時間がかかる

これも正常


Parse例外

数字以外入力で停止

→ 後の入力チェック学習につながる


学習理解を深める練習課題

課題1

平均値を出してみよう

ヒント:

合計 ÷ 個数
var scores = new int[10];

for (var i = 0; i < scores.Length; i++)
{
    Console.Write($"{i + 1}人目の点数を入力: ");
    var line = Console.ReadLine();
    scores[i] = int.Parse(line);
}

var total = 0;

for (var i = 0; i < scores.Length; i++)
{
    total += scores[i];
}

var average = (double)total / scores.Length;

Console.WriteLine($"合計: {total}");
Console.WriteLine($"平均: {average}");

解説ポイント

■ double キャスト

(double)total

整数割り算防止のため。

例:

7 / 2 = 3   ← int
7 / 2 = 3.5 ← double

ここは重要な学習ポイントになります。


課題2

最大値を求めよう

(配列理解が一段深まります)

var scores = new int[10];

for (var i = 0; i < scores.Length; i++)
{
    Console.Write($"{i + 1}人目の点数を入力: ");
    scores[i] = int.Parse(Console.ReadLine());
}

// 最初の値を最大値として仮定
var max = scores[0];

for (var i = 1; i < scores.Length; i++)
{
    if (scores[i] > max)
    {
        max = scores[i];
    }
}

Console.WriteLine($"最大値: {max}");

解説ポイント(非常に重要)

なぜ scores[0] から始めるのか

最大値の初期値が必要。

0 にすると負数入力で壊れる

よって

最初のデータを基準にする

これはアルゴリズム基礎として極めて重要です。

(基本情報試験レベル直結)


課題3

人数を5人に変更してみよう

どこを直せば良いか考える

変更箇所はここだけ:

var scores = new int[5];

それ以外は一切変更不要。

なぜなら

scores.Length

を使用しているため。

学習ポイント(超重要)

これが

■ ハードコーディング回避

10 を直接書かない設計

実務コードの基本思想です。

ここを理解できると一段レベルが上がります。


まとめ

今回の重要ポイント

  • 配列は複数の値を保持する箱
  • 添字は0から始まる
  • Lengthでサイズ取得
  • ループと配列はセットで使う

そして最も重要なのは

配列は「後から使うために保存する仕組み」

ここを理解できれば大きく前進です。

訪問数 21 回, 今日の訪問数 22回

C#,配列

Posted by hidepon