C# | 2週間で身につくアプリを作りながら学ぶC#の基本 - 3日目

C# C#
スポンサーリンク

3日目のゴールとテーマ

3日目のテーマは「繰り返し(ループ)で、同じ処理を自動化する」です。
1日目は「表示と入力」、2日目は「条件分岐(if)」でした。
今日はそこに「同じことを何回もやる」を足して、アプリに“根性”を持たせます。

目標は次のイメージです。

同じメッセージを 5 回表示する
1〜10 の合計を計算する
ユーザーに複数回入力してもらい、まとめて結果を出す

最終的には「テストの点数を複数入力して、合計と平均を出すミニアプリ」を作ります。


繰り返しが必要になる場面をイメージする

手で書くとつらいコードを想像してみる

例えば「1〜10 までの数字を順番に表示したい」とします。
繰り返しを知らないと、こう書くしかありません。

Console.WriteLine(1);
Console.WriteLine(2);
Console.WriteLine(3);
Console.WriteLine(4);
Console.WriteLine(5);
Console.WriteLine(6);
Console.WriteLine(7);
Console.WriteLine(8);
Console.WriteLine(9);
Console.WriteLine(10);
C#

動きはしますが、正直しんどいですよね。
もし「1〜100」だったら、もうやってられません。

こういうときに使うのが「ループ(繰り返し)」です。
コンピュータは「同じことを何回もやる」のが大得意なので、そこは遠慮なく任せましょう。


for 文の基本形を理解する

1〜10 を for 文で書き直す

さっきの「1〜10 を表示する」を for 文で書くと、こうなります。

for (int i = 1; i <= 10; i++)
{
    Console.WriteLine(i);
}
C#

この 1 行目を、丁寧に分解してみます。

int i = 1;
最初に i という変数を 1 で初期化する。スタート地点。

i <= 10;
「i が 10 以下の間は、繰り返しを続ける」という条件。

i++
1 回ループが終わるたびに、i を 1 増やす。

つまり、流れはこうです。

i を 1 にする
i が 10 以下かチェックする
10 以下なら、波かっこの中を実行する
終わったら i を 1 増やす
また「10 以下か?」をチェックする
…を、条件が false になるまで繰り返す

この「初期化 → 条件チェック → 本体 → 更新」のサイクルが for 文の基本です。

変数 i の役割をイメージする

i は「カウンター」だと思ってください。
「今、何回目のループか」「今、何番目の数字か」を表す変数です。

例えば、1〜5 まで「こんにちは」を表示したいなら、こう書けます。

for (int i = 1; i <= 5; i++)
{
    Console.WriteLine("こんにちは(" + i + " 回目)");
}
C#

実行すると、

こんにちは(1 回目)
こんにちは(2 回目)

と表示されます。


合計や平均を出すときの「ループ+変数」のパターン

1〜10 の合計を求める

for 文の典型的な使い方の一つが「合計を出す」です。
1〜10 の合計を出してみましょう。

int sum = 0;

for (int i = 1; i <= 10; i++)
{
    sum = sum + i;
}

Console.WriteLine("合計は " + sum + " です。");
C#

ここでの重要ポイントは「sum の役割」です。

最初に sum = 0; としておく
ループのたびに sum = sum + i; で、今の i を足していく
ループが終わったとき、sum に「全部足した結果」が入っている

sum = sum + i; は、最初は少し違和感があるかもしれません。
「右側の計算結果を、左側の sum に上書きする」と理解してください。

例えば、i が 1 のとき:

sum は 0
sum = sum + i → sum = 0 + 1 → sum は 1

i が 2 のとき:

sum は 1
sum = sum + i → sum = 1 + 2 → sum は 3

…というふうに、どんどん積み上がっていきます。

平均を出すのは「合計 ÷ 個数」

1〜10 の平均を出したい場合、やることはシンプルです。

合計を出す
個数(10)で割る

int sum = 0;

for (int i = 1; i <= 10; i++)
{
    sum = sum + i;
}

double average = (double)sum / 10;

Console.WriteLine("平均は " + average + " です。");
C#

ここで (double)sum としているのは、「小数で割り算したいから」です。
int / int だと整数同士の割り算になり、小数点以下が切り捨てられてしまいます。


ユーザーから複数回入力を受け取るループ

点数を 3 回入力して、合計を出す

今度は「1〜10」ではなく、「ユーザーが入力した値」を合計してみます。
例えば、テストの点数を 3 科目分入力して、合計を出すアプリです。

int sum = 0;

for (int i = 1; i <= 3; i++)
{
    Console.WriteLine(i + " 科目目の点数を入力してください:");
    string scoreText = Console.ReadLine();
    int score = int.Parse(scoreText);

    sum = sum + score;
}

Console.WriteLine("3 科目の合計点は " + sum + " 点です。");
C#

流れを言葉で追ってみます。

sum を 0 で初期化
i を 1〜3 まで変えながらループ
毎回「何科目目か」を表示
点数を文字列として受け取る
int.Parse で整数に変換
sum に足していく
ループが終わったら、sum を表示

ここで大事なのは、「ループの中で入力を受け取っている」ということです。
これで「同じ質問を何回もする」アプリが作れます。


while 文の基本と for 文との違い

while は「条件だけで回す」ループ

for 文は「回数がはっきりしているとき」に向いています。
一方で while 文は、「いつ終わるかは条件次第」というときに使います。

基本形はこうです。

while (条件)
{
    // 条件が true の間、ここを繰り返す
}
C#

例えば、「0 が入力されるまで数字を足し続ける」アプリを考えてみます。

int sum = 0;

while (true)
{
    Console.WriteLine("数字を入力してください(0 で終了):");
    string text = Console.ReadLine();
    int value = int.Parse(text);

    if (value == 0)
    {
        break;
    }

    sum = sum + value;
}

Console.WriteLine("合計は " + sum + " です。");
C#

ここで新しく出てきたのが break です。
break は「今のループを途中で抜ける」という命令です。

for と while の使い分けのイメージ

回数が決まっているとき → for
「いつ終わるかは条件次第」のとき → while

例えば、

3 回だけ入力させたい → for
0 が入力されるまで続けたい → while

という感じです。


3日目の仕上げ:点数の合計と平均を出すアプリ

3 科目の合計と平均を出す

ここまでの内容を全部使って、ミニアプリを作ってみます。

int sum = 0;
int count = 3;

for (int i = 1; i <= count; i++)
{
    Console.WriteLine(i + " 科目目の点数を入力してください:");
    string scoreText = Console.ReadLine();
    int score = int.Parse(scoreText);

    sum = sum + score;
}

double average = (double)sum / count;

Console.WriteLine("合計点: " + sum + " 点");
Console.WriteLine("平均点: " + average + " 点");
C#

ここでの重要ポイントを整理します。

sum は「合計をためていく箱」
count は「科目数」(あとで平均を出すときにも使う)
for で 1〜count までループ
毎回点数を入力してもらい、int に変換
sum に足していく
ループが終わったら、sum ÷ count で平均

このパターンは、今後いろんな場面で使えます。
売上の合計、体重の平均、ゲームのスコア集計など、何でも応用できます。


もう一歩だけ応用:合格・不合格を判定する

合計点で判定する

例えば、「合計が 180 点以上なら合格」としたい場合、
最後に if 文を足すだけです。

if (sum >= 180)
{
    Console.WriteLine("おめでとうございます、合格です!");
}
else
{
    Console.WriteLine("残念ながら不合格です。");
}
C#

これで、「入力 → 繰り返し → 合計 → 平均 → 判定」という
かなり“アプリっぽい”流れができあがります。


3日目のまとめ

今日出てきたキーワードを振り返ります。

for 文
初期化・条件・更新の 3 つで構成されるループ。回数が決まっているときに便利。

while 文
条件が true の間、ずっと回り続けるループ。終了条件が入力などに依存するときに便利。

sum 変数
合計をためるための箱。最初に 0 にして、ループの中で足していく。

int.Parse
文字列を整数に変換する。入力値を計算に使うときの必須テクニック。

「ループ+if+入力+出力」が組み合わさると、
かなりいろいろなミニアプリが作れるようになります。


次回(4日目)への予告

4日目は、今日の「点数アプリ」を発展させて、

配列(同じ型のデータをまとめて扱う箱)
for と配列の組み合わせ
最大値・最小値を求める

といった「データをまとめて扱う」方向に進みます。

例えば、「5 人分の点数を配列に入れて、合計・平均・最高点を出す」ようなアプリを作っていきます。

タイトルとURLをコピーしました