3日目のゴール
初級編 3日目のテーマは
「“複数の入力”を配列とループでまとめて扱えるようになること」 です。
1日目:1つの入力
2日目:安全に入力(TryParse+while)
今日はここに、
複数の値を配列に入れる
for でまとめて処理する
合計・平均・最大・最小などの“集計”をする
という「ちょっとアプリっぽい」要素を足していきます。
まずは「固定の配列」から思い出す
配列の基本をもう一度
超初級編でやった配列を、少しだけ思い出します。
int[] scores = { 80, 90, 75, 60 };
for (int i = 0; i < scores.Length; i++)
{
Console.WriteLine("scores[" + i + "] = " + scores[i]);
}
C#ここでのポイントは、
int[] で「整数の配列」
scores[0], scores[1] のように「番号」でアクセス
Length で「何個入っているか」が分かる
for と組み合わせると「全部を順番に処理できる」
でした。
今日は、ここに「ユーザー入力」を組み合わせます。
「何人分の点数」を扱うかを決める
要素数を先に決めて配列を作る
まずは、人数を先に決めてしまうパターンから。
「3人分の点数を入力して、平均を出す」
というミニアプリを作ってみます。
using System;
class Program
{
static void Main(string[] args)
{
Console.WriteLine("3人分の点数を入力して、平均を計算します。");
int[] scores = new int[3];
for (int i = 0; i < scores.Length; i++)
{
int number = i + 1;
scores[i] = ReadInt(number + "人目の点数を入力してください:");
}
int total = 0;
for (int i = 0; i < scores.Length; i++)
{
total = total + scores[i];
}
double average = (double)total / scores.Length;
Console.WriteLine("合計点: " + total);
Console.WriteLine("平均点: " + average);
}
static int ReadInt(string message)
{
while (true)
{
Console.WriteLine(message);
string text = Console.ReadLine();
int value;
bool ok = int.TryParse(text, out value);
if (ok)
{
return value;
}
else
{
Console.WriteLine("数字として解釈できませんでした。もう一度入力してください。");
}
}
}
}
C#ここで新しく出てきたのは、この一行です。
int[] scores = new int[3];
C#これは、
「int 型の配列 scores を作る。要素数は 3。
中身は最初 0 が入っている」
という意味です。
そのあとで、for の中で scores[i] = ...; として、
1人目、2人目、3人目の点数を順番に入れていっています。
「入力 → 配列に入れる → 集計」の流れを整理する
3つのステップに分けて考える
さっきのコードは、流れとしてこうなっています。
配列を用意する(new int[3])
for で回しながら、1人ずつ点数を入力して配列に入れる
別の for で回しながら、合計を計算する
合計 ÷ 人数 で平均を出す
ここで大事なのは、
「配列は“あとでまとめて処理するための置き場”」
という感覚です。
入力した瞬間に計算してもいいのですが、
配列に入れておくことで、
あとからもう一度見返せる
最大値・最小値など、別の集計もできる
というメリットが出てきます。
最大値・最小値も出してみる
「一番高い点」「一番低い点」を求める
同じ scores 配列から、
最大値と最小値も計算してみましょう。
using System;
class Program
{
static void Main(string[] args)
{
Console.WriteLine("3人分の点数を入力して、統計を出します。");
int[] scores = new int[3];
for (int i = 0; i < scores.Length; i++)
{
int number = i + 1;
scores[i] = ReadInt(number + "人目の点数を入力してください:");
}
int total = 0;
int max = scores[0];
int min = scores[0];
for (int i = 0; i < scores.Length; i++)
{
int s = scores[i];
total = total + s;
if (s > max)
{
max = s;
}
if (s < min)
{
min = s;
}
}
double average = (double)total / scores.Length;
Console.WriteLine("合計点: " + total);
Console.WriteLine("平均点: " + average);
Console.WriteLine("最高点: " + max);
Console.WriteLine("最低点: " + min);
}
static int ReadInt(string message)
{
while (true)
{
Console.WriteLine(message);
string text = Console.ReadLine();
int value;
bool ok = int.TryParse(text, out value);
if (ok)
{
return value;
}
else
{
Console.WriteLine("数字として解釈できませんでした。もう一度入力してください。");
}
}
}
}
C#ここで深掘りしたいのは、この部分です。
int max = scores[0];
int min = scores[0];
for (int i = 0; i < scores.Length; i++)
{
int s = scores[i];
if (s > max)
{
max = s;
}
if (s < min)
{
min = s;
}
}
C#最初に「とりあえず 1人目の点数」を max と min に入れておく
for で全員分を見ながら、
今見ている s が max より大きければ max を更新
今見ている s が min より小さければ min を更新
この「最初の1つを基準にして、あとは比較しながら更新する」
というパターンは、最大値・最小値を求めるときの定番です。
「人数をユーザーに決めてもらう」パターン
new int[人数] で柔軟にする
今度は、「何人分入力するか」もユーザーに決めてもらいましょう。
using System;
class Program
{
static void Main(string[] args)
{
int count = ReadInt("何人分の点数を入力しますか?:");
int[] scores = new int[count];
for (int i = 0; i < scores.Length; i++)
{
int number = i + 1;
scores[i] = ReadInt(number + "人目の点数を入力してください:");
}
int total = 0;
for (int i = 0; i < scores.Length; i++)
{
total = total + scores[i];
}
double average = (double)total / scores.Length;
Console.WriteLine("人数: " + count);
Console.WriteLine("合計点: " + total);
Console.WriteLine("平均点: " + average);
}
static int ReadInt(string message)
{
while (true)
{
Console.WriteLine(message);
string text = Console.ReadLine();
int value;
bool ok = int.TryParse(text, out value);
if (ok)
{
return value;
}
else
{
Console.WriteLine("数字として解釈できませんでした。もう一度入力してください。");
}
}
}
}
C#ここでのポイントは、
人数を先に ReadInt で受け取る
その人数を使って new int[count] で配列を作る
あとは「配列の長さ(Length)だけ for で回す」
という流れです。
「配列の長さをコードにベタ書きしない」
というのは、とても大事な習慣です。
1週間の勉強時間を「入力版」にする
超初級編の“固定データ”を、入力に置き換える
超初級編でやった「1週間の勉強時間」を、
ユーザー入力版にしてみます。
using System;
class Program
{
static void Main(string[] args)
{
Console.WriteLine("1週間の勉強時間を入力して、合計と平均を出します。");
int days = 7;
int[] studyMinutes = new int[days];
for (int i = 0; i < studyMinutes.Length; i++)
{
int dayNumber = i + 1;
studyMinutes[i] = ReadInt(dayNumber + "日目の勉強時間(分)を入力してください:");
}
int total = 0;
int max = studyMinutes[0];
int min = studyMinutes[0];
for (int i = 0; i < studyMinutes.Length; i++)
{
int m = studyMinutes[i];
total = total + m;
if (m > max)
{
max = m;
}
if (m < min)
{
min = m;
}
}
double average = (double)total / studyMinutes.Length;
Console.WriteLine();
Console.WriteLine("【結果】");
Console.WriteLine("合計勉強時間: " + total + " 分");
Console.WriteLine("平均勉強時間: " + average + " 分");
Console.WriteLine("最も長い日: " + max + " 分");
Console.WriteLine("最も短い日: " + min + " 分");
}
static int ReadInt(string message)
{
while (true)
{
Console.WriteLine(message);
string text = Console.ReadLine();
int value;
bool ok = int.TryParse(text, out value);
if (ok)
{
return value;
}
else
{
Console.WriteLine("数字として解釈できませんでした。もう一度入力してください。");
}
}
}
}
C#ここまで来ると、
「自分の1週間の勉強を、C# で“見える化”している」状態です。
配列+メソッドでコードをもっと整理する
集計処理をメソッドに切り出す
3日目の後半として、
配列の集計をメソッドにしてみます。
using System;
class Program
{
static void Main(string[] args)
{
Console.WriteLine("1週間の勉強時間を入力して、統計を出します。");
int days = 7;
int[] studyMinutes = new int[days];
for (int i = 0; i < studyMinutes.Length; i++)
{
int dayNumber = i + 1;
studyMinutes[i] = ReadInt(dayNumber + "日目の勉強時間(分)を入力してください:");
}
int total = CalcTotal(studyMinutes);
double average = CalcAverage(studyMinutes);
int max = CalcMax(studyMinutes);
int min = CalcMin(studyMinutes);
Console.WriteLine();
Console.WriteLine("【結果】");
Console.WriteLine("合計勉強時間: " + total + " 分");
Console.WriteLine("平均勉強時間: " + average + " 分");
Console.WriteLine("最も長い日: " + max + " 分");
Console.WriteLine("最も短い日: " + min + " 分");
}
static int ReadInt(string message)
{
while (true)
{
Console.WriteLine(message);
string text = Console.ReadLine();
int value;
bool ok = int.TryParse(text, out value);
if (ok)
{
return value;
}
else
{
Console.WriteLine("数字として解釈できませんでした。もう一度入力してください。");
}
}
}
static int CalcTotal(int[] values)
{
int sum = 0;
for (int i = 0; i < values.Length; i++)
{
sum = sum + values[i];
}
return sum;
}
static double CalcAverage(int[] values)
{
int total = CalcTotal(values);
double average = (double)total / values.Length;
return average;
}
static int CalcMax(int[] values)
{
int max = values[0];
for (int i = 0; i < values.Length; i++)
{
if (values[i] > max)
{
max = values[i];
}
}
return max;
}
static int CalcMin(int[] values)
{
int min = values[0];
for (int i = 0; i < values.Length; i++)
{
if (values[i] < min)
{
min = values[i];
}
}
return min;
}
}
C#ここでの大事なポイントは、
Main は「アプリの流れ」だけを書く
集計ロジックは CalcTotal / CalcAverage / CalcMax / CalcMin に任せる
という役割分担です。
「配列を渡したら、合計を返してくれる」
「配列を渡したら、最大値を返してくれる」
こういう“便利メソッド”を自分で作れるようになると、
コードを書くのが一気に楽しくなります。
3日目で絶対に押さえておきたいポイント
配列+for+入力の“型”を体で覚える
今日のキモは、この3つの組み合わせです。
new int[個数] で配列を用意する
for で 0 〜 Length-1 まで回す
中で ReadInt / ReadDouble を呼んで、配列[i] に代入する
そして、集計するときは、
合計:sum を 0 で始めて、ループで足していく
最大:最初の要素を基準にして、より大きいものがあれば更新
最小:最初の要素を基準にして、より小さいものがあれば更新
このパターンが自然に書けるようになると、
「複数データを扱うアプリ」が一気に作りやすくなります。
もし余裕があればやってみてほしいこと
自分用「1週間の自己採点アプリ」を作る
例えば、
1週間分の「今日の満足度(1〜5)」を入力する
平均満足度を出す
5 が何日あったか数える
1 があったら「しんどい日もあったね」とコメントする
などを、自分で仕様を決めて作ってみてください。
やることは全部、今日やったことの組み合わせです。
配列
for
ReadInt
合計・平均・カウント・最大・最小
if
3日目のまとめ
初級編 3日目で、あなたは
「1つの入力」から
「複数の入力を配列にためて、まとめて処理する」
というステージに進みました。
入力(ReadInt / ReadDouble)
→ 配列に入れる
→ for で回して集計する
→ メソッドに分けて整理する
この流れが見えてきたら、
もう「小さなデータ分析アプリ」を自分で組み立てられるレベルです。
4日目以降は、
この「配列+メソッド」の感覚をベースに、
もう少し“アプリらしい構造”に近づけていきます。

