講義メモ

・「【補足】if文等のネスト」の実例を示してから、p.115「for文」に進みます

【補足】if文等のネスト:再掲載

・if文やswitch文の中にさらにif文やswitch文を記述できる。これをネスト(入れ子)という
例:正の数が入力されたら、もう1つの整数を入力させ、どちらも正の数のなら「どちらも正」と表示する。
 あてはまらない場合はなにも表示しない。
 if (正の数?) { もう1つ入力: if (正の数?) { 「どちらも正」と表示 } }
※ なお、switch文のネストはどうしても必要な場合を除いて避けた方が良い

ミニ演習 mini114.cs

・上の例をプログラムにしよう

作成例

//ミニ演習 mini114.cs
using System;
class mini114
{
    public static void Main()
    {
        Console.Write("整数①:"); int n1 = int.Parse(Console.ReadLine()); //整数入力
        if (n1 > 0) { //正の数?
            Console.Write("整数②:"); int n2 = int.Parse(Console.ReadLine()); //整数入力
            if (n2 > 0) { //正の数?(ifのネスト)
                Console.WriteLine("どちらも正");
            }
        }
    }
}

【補足】if文等のネスト:つづき

・if文等のネストでは「else」や「else if」がどの「if」に対するものなのか見間違いやすくなるので注意
・インデントが正しければif-else、if-elseif-elseが高さで判別できる

悪い例:

//ミニ演習 mini114.cs 悪い例
using System;
using System.Diagnostics.Eventing.Reader;

class mini114
{
    public static void Main()
    {
        Console.Write("整数①:"); int n1 = int.Parse(Console.ReadLine()); //整数入力
        if (n1 > 0) { //正の数?
            Console.Write("整数②:"); int n2 = int.Parse(Console.ReadLine()); //整数入力
            if (n2 > 0) { //正の数?(ifのネスト)
                Console.WriteLine("どちらも正");
                } //インデントが正しくないと…
            } //外側のifの終わりのインデントもおかしくなる
            else { //外側のifに対するelseなのだが…
                Console.WriteLine("これはどちらのifのelse?");
        }
    }
}

正しい例

//ミニ演習 mini114.cs 正しい例
using System;
using System.Diagnostics.Eventing.Reader;

class mini114
{
    public static void Main()
    {
        Console.Write("整数①:"); int n1 = int.Parse(Console.ReadLine()); //整数入力
        if (n1 > 0) { //正の数?
            Console.Write("整数②:"); int n2 = int.Parse(Console.ReadLine()); //整数入力
            if (n2 > 0) { //正の数?(ifのネスト)
                Console.WriteLine("どちらも正");
            }
            else { //内側のifに対するelse
                Console.WriteLine("整数①は正の数だが、整数②が正の数ではない");
            }
        }
        else { //外側のifに対するelse
            Console.WriteLine("整数①が正の数ではない");
        }
    }
}

p.115 for文

・C#には4種類の繰り返し構造文があり、主に回数指定繰り返しに向くのがfor文
・構文: for(①前処理; ②継続条件式; ③毎回の末尾で行う処理) { ④繰り返し内容 }
・前処理:繰返し開始前に行うこと。主に回数カウンタのクリアがある。省略可。
・継続条件式:bool型を返す式。主にカウンタの値の上限や下限と比較する文。省略可。
・毎回の末尾で行う処理:繰り返し内容の最後の文の後に行うこと。主にカウントアップやカウントアップ。省略可。
・よって、この繰り返しは① ②④③ ②④③ ②④③ …の順で行われ、②の結果によって中断できる
・例:5回繰返す場合: int i; for(i = 0; i < 5; i++) { 繰り返し内容 }
・なお、繰り返し内容が1文しかない時、{}を省略できるが、推奨されないことも多い

p.115 for01.cs

//p.115 for01.cs
using System;
class for01
{
    public static void Main()
    {
        int i; //カウンタ用の変数
        for (i = 0; i < 5; i++) { //①カウンタを0にする ②カウンタが5未満なら④③を繰返す ④カウントアップ
            Console.WriteLine("i = {0}", i); //③繰り返し内容(初回は"i = 0",2回目は"i = 1"…,5回目は"i = 4")
        }
    }
}

p.115 for01.csの動作について

01. int i; でカウンタ用の変数が宣言される
02. i = 0;① でカウンタ用の変数が0になる
03. i < 5;② ⇒ 0 < 5; でtrueなので繰り返し継続決定
04. Console.WriteLine("i = {0}", i);③ ⇒ Console.WriteLine("i = 0"); で 「i = 0」を表示
05. i++④ でカウンタ用の変数が+1されて1になる
06. i < 5;② ⇒ 1 < 5; でtrueなので繰り返し継続決定
07. Console.WriteLine("i = {0}", i);③ ⇒ Console.WriteLine("i = 1"); で 「i = 1」を表示
08. i++④ でカウンタ用の変数が+1されて2になる
09. i < 5;② ⇒ 2 < 5; でtrueなので繰り返し継続決定
10. Console.WriteLine("i = {0}", i);③ ⇒ Console.WriteLine("i = 2"); で 「i = 2」を表示
11. i++④ でカウンタ用の変数が+1されて3になる
12. i < 5;② ⇒ 3 < 5; でtrueなので繰り返し継続決定
13. Console.WriteLine("i = {0}", i);③ ⇒ Console.WriteLine("i = 3"); で 「i = 3」を表示
14. i++④ でカウンタ用の変数が+1されて4になる
15. i < 5;② ⇒ 4 < 5; でtrueなので繰り返し継続決定
16. Console.WriteLine("i = {0}", i);③ ⇒ Console.WriteLine("i = 4"); で 「i = 4」を表示
17. i++④ でカウンタ用の変数が+1されて5になる
18. i < 5;② ⇒ 5 < 5; でfalseなので繰り返し終了決定

p.116 for02.cs

//p.116 for02.cs
using System;
class for02
{
    public static void Main()
    {
        int i; //カウンタ用の変数
        for (i = 4; i >= 0; i--) { //①カウンタを4にする ②カウンタが0以上なら④③を繰返す ④カウントダウン
            Console.WriteLine("i = {0}", i); //"i = 4","i = 3","i = 2","i = 1","i = 0",の順に表示
        }
    }
}

補足:カウンタ用の変数の初期化の場所について(p.118 最下行)

・カウンタ用の変数をforのブロックの中でのみ用いる場合、forの頭で初期化して良い(予め宣言しなくて良い)
例:
for (int i = 4; i >= 0; i--) { //①カウンタを4にする ②カウンタが0以上なら④③を繰返す ④カウントダウン
    Console.WriteLine("i = {0}", i); //"i = 4","i = 3","i = 2","i = 1","i = 0",の順に表示
}
・このカウンタ用の変数はforを抜けると無効になるので便利だが、forを抜けた後でも利用したい場合は、予め宣言しておくこと
例:
int i;
for (i = 4; i >= 0; i--) { //①カウンタを4にする ②カウンタが0以上なら④③を繰返す ④カウントダウン
    Console.WriteLine("i = {0}", i); //"i = 4","i = 3","i = 2","i = 1","i = 0",の順に表示
}
Console.WriteLine("終了時のi = {0}", i); //-1になる

p.112 forループからの脱出

・forを構成する3要素の内、条件式を省略すると無限ループになる
 ※ すべてを省略して「for (;;)」としてもOKで、無限ループになる
・この場合、繰り返し内部の任意の場所に「break」を記述することで、ループから脱出できる(繰り返しの後続の処理はスキップされる)
・これは、ループからの脱出であり、その後に記述があれば実行される

p.117 for03.cs

//p.117 for03.cs
using System;
class for03
{
    public static void Main()
    {
        int i = 0;
        for ( ; ; ) { //無限ループ!!
            Console.WriteLine("i = {0}", i);
            i++; // WriteLineメソッドが実行されたらiを1増やす
            if (i >= 5) { // iが5以上になったらbreak文で脱出
                break; //forループを抜ける
            }
        }
    }
}

アレンジ演習:p.117 for03.cs

・ループ終了時のiの値を表示しよう

作成例

//アレンジ演習:p.117 for03.cs
using System;
class for03
{
    public static void Main()
    {
        int i = 0;
        for ( ; ; ) { //無限ループ!!
            Console.WriteLine("i = {0}", i);
            i++; // WriteLineメソッドが実行されたらiを1増やす
            if (i >= 5) { // iが5以上になったらbreak文で脱出
                break; //forループを抜ける
            }
        }
        Console.WriteLine("終了時のi = {0}", i); //【追加】5になる
    }
}

p.118 for04.cs

//p.118 for04.cs
using System;
class for04
{
    public static void Main()
    {
        int i;
        for (i = 0; ; i++) { //継続条件式のみ省略できる(無限ループになる)
            if (i >= 5) {
                break; //ループを抜ける
            }
            Console.WriteLine("i = {0}", i);
        }
    }
}

アレンジ演習:p.118 for04.cs

・iの値を0から4までカウントアップし、すぐに0までカウントダウンしよう

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です