前回のコメント

・今回もありがとうございました。次も頑張っていきます。

 応援します。

・本日も授業ありがとうございました。
 ()が増えていき、どんどん複雑になってきました。先生の解説をいただくとピンとくるのですが
 一人で復習してるときは結構詰まってしまってます。
 何個かのパターンに分けて覚えられたりできたら、整理しやすいと思うのですが
 なにか対策はありますでしょうか。

 既にお気づきの通り「パターンに分けて整理」してみると良いでしょう。
 カッコが増えていることではなく、構造を理解する必要性が高くなったことに着目してください。

・今回もありがとうございました。
 授業中にやってたものの一つを自分なりにほんの少し変えてみたので一緒につけときます。
 見てもらえますと嬉しいです。

 拝見しました。少しずつ変えていくことは良いアプローチだと思います。
 理解度も上がっていると思いますので、もっと大胆にいろいろとアレンジしてみることをお勧めします。

・理解できた

 何よりです。

講義メモ 後半

p.144 ジャグ配列

・多次元配列を「要素数の積」ではなく「配列の配列」で表すものがジャグ配列
・型が同じであれば、要素数の異なる配列を含む多次元配列ができるので、メモリの利用効率が良い
・2次元のジャグ配列の場合、要素は配列名[添字①][添字②]と表す。
・例えば、中学校の学年ごとのクラスの人数を表すとき、1年が2クラス、2年が3クラス、3年が1クラスなら:
 1年 : n[0][0]、n[0][1]
 2年 : n[1][0]、n[1][1]、n[1][2]
 3年 : n[2][0]
以下は2次元のジャグ配列の場合:
・宣言の書式: 型[][] 配列名;
・外側の生成の書式: 配列名 = new 型[要素数][]; //2つめの要素数は自由なので指定不要
・内側の生成の書式: 配列名[添字] = new 型[要素数]; //これを1つめの要素数の文、繰返す
・宣言と外側の生成の例: int[][] n = new int[3][]; //3つの配列による2次元のジャグ配列の宣言と生成
・初期化は煩雑だが内側の配列に対して行うことで可能
 例: int[][] n = new int[3] { new int[2]{15, 16}, new int[3]{17, 18, 19}, new int[1]{20} }
・なお、内側の配列に対しての代入が可能
 例: n[0] = new int[2]{15, 16}; 

アレンジ演習:p.144 jagged01.cs

・全要素の合計値も表示しよう

作成例

//アレンジ演習:p.144 jagged01.cs
using System;
class jagged01 {
    public static void Main() {
        int[][] ar; //ジャグ配列の宣言
        ar = new int[2][]; //外側[0],[1]の生成
        ar[0] = new int[3]; //内側[0][0],[0][1],[0][2] の生成
        ar[1] = new int[3]; //内側[1][0],[1][1],[1][2] の生成
        for (int i = 0; i < 2; i++) {
            for (int j = 0; j < 3; j++) {
                ar[i][j] = (i + 1) * (j + 1); //添字を用いて値(1,2,3,2,4,6)を得て順に格納
            }
        }
        int sum = 0; //【追加】合計用
        for (int i = 0; i < 2; i++) { 
            for (int j = 0; j < 3; j++) {
                Console.WriteLine("ar[{0}][{1}] = {2}", i, j, ar[i][j]);
                sum += ar[i][j];
            }
        }
        Console.WriteLine("合計:{0}", sum);  
    }
}

p.146 ジャグ配列(要素数)

・ジャグ配列のLengthプロパティは通常の配列とは仕様が異なる
・ジャグ配列名.Length:ジャグ配列に含まれる配列の数
 例: int[][] ar = new int[3][]; であれば、ar.Lengthは3
・ジャグ配列名[添字].Length:ジャグ配列名[添字]に含まれる要素の数
・よって、ジャグ配列の全要素について繰返す場合、forの2重ループを下記のように用いると良い
 for (int i = 0; i < ジャグ配列名.Length; i++) {
  for (int j = 0; j < ジャグ配列名[i].Length; j++) { //内側の要素数だけ繰返す
   繰返す処理
  }
 }

アレンジ演習:p.146 jagged02.cs

・表示処理をforの2重ループで書き直そう

作成例

//アレンジ演習:p.146 jagged02.cs
using System;
class jagged02 {
    public static void Main() {
        string[][] name = new string[2][]; //ジャグ配列
        name[0] = new string[2]{"田中", "工藤"};
        name[1] = new string[3]{"吉田", "佐藤", "池田"};
        for (int i = 0; i < name.Length; i++) { //含まれる全配列について繰返す
            for (int j = 0; j < name[i].Length; j++) { //配列[i]の全要素について繰返す
                Console.WriteLine(name[i][j]);
            }
        }
    }
}

p.147 暗黙の型指定がなされた配列

・p.61で説明したvarキーワードを用いて、配列の初期化における型も暗黙の型指定が可能
・例: string[] name = {"A", "B"}; ⇒ var name = new []{"A", "B"};
 ※ 2次元配列やジャグ配列でも可能
・なお、配列名.GetType()を実行すると「型情報[]」が返される

アレンジ演習:p.147 var03.cs

・配列nameを[2, 2]の2次元配列にして動作を確認しよう
・また、配列fを[2][]のジャグ配列にして動作を確認しよう
※ 「int Main()」となっているが「void Main()」で良く「return 0;」も不要

作成例

//アレンジ演習:p.147 var03.cs
using System;
class var03 { 
    public static void Main() {
        var name = new [,]{ {"太郎", "次郎" }, {"三郎", "四郎" } }; //2次元配列
        for (var i = 0; i < name.Length; i++) { //全要素について繰返す
            Console.WriteLine(name[i / 2, i % 2]); //[0,0][0,1][1,0][1,1]の順に表示
        }
        var f = new[] { new [] {0.5, 0.9 }, new [] {1.5, 2.3 } }; //ジャグ配列
        for (var i = 0; i < f.Length; i++) { //全配列について繰返す
            for (var j = 0; j < f[i].Length; j++) { //各配列の全要素について繰返す
                Console.WriteLine(f[i][j]);
            }
        }
        Console.WriteLine("nameの型は{0}, fの型は{1}", name.GetType(), f.GetType());
    }
}

p.148 1次元配列のソート

・C#が提供するArrayクラスのSortメソッドを用いると、1次元配列の昇順ソート(整列)が可能
・書式: Array.Sort(1次元配列名)
・また、ArrayクラスのReverseメソッドを用いると、1次元配列の逆順化が可能
・書式: Array.Reverse(1次元配列名)
・よって、上記を順に行うことで、降順ソートも可能

アレンジ演習:p.148 sort01.cs

・5人の名前を全て小文字にした要素を追加して10要素にし、どう整列されるか確認しよう
 ⇒小文字と大文字は同じ順序だが、同じ字の小文字と大文字では小文字の方が前になる
・英記号「!,#,$,%,&」がどう整列されるか確認しよう
 ⇒文字コード順になる(文字コードは順に 21,23,24,25,26)
・負の数を含む実数値の場合、どう整列されるか確認しよう
 ⇒小さい(-∞に近い)ものからの順になる
・「ちぢっつづてで」のように小文字や濁点を含むひらがなの場合、どう整列されるか確認しよう
 ⇒文字コード順になる(文字コードは順に 3061,3062,3063,3064,3065,3066,3067)

提出:アレンジ演習:p.148 sort01.cs(内容は自由)

講義メモ

・p.137「2次元配列」から
p.137 2次元配列

・2つの添字を用いる配列を2次元配列という
・C#には2種類の2次元配列があり、通常型の2次元配列は●×■の積の要素を持つ構造。
・例えば、2クラスに各5人の生徒の成績なら、2×5=10要素の2次元配列になる
・宣言の書式: 型[,] 配列名;
・生成の書式: 配列名 = new 型[要素数①, 要素数②];
・1次元配列と同様に、宣言と生成はまとめて行える
 例: int[,] point = new int[2, 5]; //2×5=10要素の2次元配列の宣言と生成
・1次元配列と同様に、初期化も可能で、2重繰返し構造を{{},…}で示す
 例: int[,] point = {{10,20,30,40,50}, {11,22,33,44,55}}; //2×5=10要素の2次元配列の宣言と生成
・要素には「配列名[添字①, 添字②]」でアクセスできる

アレンジ演習:p.138 array01.cs

・forのカウンタ用変数をfor文の中で宣言しよう
・2次元配列の要素に値を代入する処理を表示とは別の2重繰り返しで行うようにしよう

作成例その1

//アレンジ演習:p.138 array01.cs
using System;
class array01
{
    public static void Main()
    {
        int[,] MyArray = new int[2,3];
        //MyArray[0, 0] = 1;
        //MyArray[0, 1] = 2;
        //MyArray[0, 2] = 3;
        //MyArray[1, 0] = 4;
        //MyArray[1, 1] = 5;
        //MyArray[1, 2] = 6;
        for (int i = 0; i < 2; i++) { //【以下追加】
            for (int j = 0; j < 3; j++) {
                MyArray[i, j] = i * 3 + j + 1;
            }
        }
        for (int i = 0; i < 2; i++) {
            for (int j = 0; j < 3; j++) {
                Console.WriteLine("MyArray[{0}, {1}] = {2}", i, j, MyArray[i, j]);
            }
        }
    }
}

作成例その2

//アレンジ演習:p.138 array01.cs
using System;
class array01
{
    public static void Main()
    {
        int[,] MyArray = new int[2,3];
        int s = 0; //【追加】
        for (int i = 0; i < 2; i++) { //【以下追加】
            for (int j = 0; j < 3; j++) {
                MyArray[i, j] = ++s; //1,2,3,4,…を順に代入
            }
        }
        for (int i = 0; i < 2; i++) {
            for (int j = 0; j < 3; j++) {
                Console.WriteLine("MyArray[{0}, {1}] = {2}", i, j, MyArray[i, j]);
            }
        }
    }
}

p.139 12行目正誤

・誤: 全部の要素の初期値を書く必要はありません。初期値が指定されていない要素は0で初期化されます
・正: 指定された要素数と、初期値の数が一致しないとエラーになります(p.135参照)

アレンジ演習:p.139 array02.cs

・2次元配列の初期値を「{{0,1,2,3},{0,4,5,6}}」に変更しても動作することを確認しよう

作成例

//アレンジ演習:p.139 array02.cs
using System;
class array02 {
    public static void Main() {
        int[,] MyArray = {{0, 1, 2, 3}, {0, 4, 5, 6}}; //【変更】配列の初期化
        for (int i = 0; i < 2; i++) { 
            for (int j = 0; j < 3; j++) {
                Console.WriteLine("MyArray[{0}, {1}] = {2}", i, j, MyArray[i, j]); //6要素のみ表示
            }
        }
    }
}

アレンジ演習:p.140 array03.cs

・現状では何も入力しないでEnterを押すと異常終了してしまう
・2箇所ある「if (●.Length >= 2)」を「if (●.Length != 1)」に書き換えて解決しよう

作成例

//アレンジ演習:p.140 array03.cs
using System;
class array03 {
    public static void Main() {
        string[,] Name = new string[2, 5] {
            {"田中六郎", "吉田一郎", "太田太郎", "粂井康孝", "岡田三郎"},
            {"横田芳子", "池田和子", "目黒貴和子", "武田信子", "園田淳子"}
        };
        int MyClass, No;
        string strClass, strNo;
        while (true) { //無限ループ
            Console.Write("クラスは---");
            strClass = Console.ReadLine();
            if (strClass.Length != 1) { //【変更】
                Console.WriteLine("入力は1桁のみです");
                continue; //以降をスキップして次の繰返しへ(つまり、やりなおし)
            }
            if (Char.IsNumber(strClass, 0) != true) {
                Console.WriteLine("数字を入力してください");
                continue; //以降をスキップして次の繰返しへ(つまり、やりなおし)
            }
            MyClass = Int32.Parse(strClass);
            if (MyClass <= 0 || MyClass >= 3) {
                Console.WriteLine("クラスは1組か2組です");
                continue; //以降をスキップして次の繰返しへ(つまり、やりなおし)
            }
            break; //全チェックOKなので繰返しを抜ける
        }
        while (true) { //無限ループ
            Console.Write("出席番号は---");
            strNo = Console.ReadLine();
            if (strClass.Length != 1) { //【変更】
                Console.WriteLine("入力は1桁のみです");
                continue; //以降をスキップして次の繰返しへ(つまり、やりなおし)
            }
            if (Char.IsNumber(strNo, 0) != true) {
                Console.WriteLine("数字を入力してください");
                continue; //以降をスキップして次の繰返しへ(つまり、やりなおし)
            }            
            No = Int32.Parse(strNo);
            if (No <= 0 || No >= 6) {
                Console.WriteLine("出席番号は1番から5番までです");
                continue; //以降をスキップして次の繰返しへ(つまり、やりなおし)
            }
            break; //全チェックOKなので繰返しを抜ける
        }
        Console.WriteLine("{0}クラスの出席番号{1}番は{2}さんです", strClass, strNo, Name[MyClass - 1, No - 1]);
    }
}

p.142 3次元以上の配列

・C#の配列では次元数の宣言はある
・ただし次元ごとの要素数の積で増えるので、メモリの占有などに注意すること
・たとえば、利用しない領域ができてしまう場合は、配列を分割して定義することなどを検討すると良い
以下は3次元の場合:
・宣言の書式: 型[,,] 配列名;
・生成の書式: 配列名 = new 型[要素数①, 要素数②, 要素数③];
・宣言と生成の例: int[,,] point = new int[2, 5, 3]; //2×5×3=30要素の3次元配列の宣言と生成
・初期化も可能で、3重繰返し構造を{{{},…}, …}で示す
 例: int[,,] p = {{{1, 2, 3},{4, 5, 6}},{{1, 2, 3},{4, 5, 6}}}; //2×2×3=12要素の3次元配列の宣言と生成
・要素には「配列名[添字①, 添字②, 添字③]」でアクセスできる
 例: p[0, 0, 0] は 1、p[0, 0, 1] は 2、p[1, 1, 2] は 6
・なお、配列の次元数はRankプロパティを用いて「配列名.Rank」で得られる
・また、配列の全要素数はLengthプロパティを用いて「配列名.Length」で得られる
 ※ C#では、Lengthで通常の配列の次元ごとの要素数を得ることはできない

アレンジ演習:p.143 Array4.cs

・全要素の合計値も表示しよう

作成例

//アレンジ演習:p.143 Array4.cs
using System;
class array04 {
    public static void Main() {
        int[,,] ar = new int[2, 2, 3] { {
            {0, 1, 2},    //順に[0,0,0][0,0,1][0,0,2]
            {3, 4, 5} },  //順に[0,1,0][0,1,1][0,1,2]
        {
            {6, 7, 8},    //順に[1,0,0][1,0,1][1,0,2]
            {9, 10, 11} } //順に[1,1,0][1,1,1][1,1,2]
        };
        Console.WriteLine("配列の次元 = {0}", ar.Rank); //次元数を表示
        Console.WriteLine("arの個数 = {0}", ar.Length); //要素数を表示
        int sum = 0; //【追加】合計用
        for (int i = 0; i < 2; i++) { //1番目の添字
            for (int j = 0; j < 2; j++) { //2番目の添字
                for (int k = 0; k < 3; k++) { //3番目の添字
                    Console.Write("{0}, ", ar[i, j, k]); //順に表示
                    sum += ar[i, j, k]; //【追加】合計に加算
                }
            }
        }
        Console.WriteLine("合計:{0}", sum); //【変更】
    }
}

今週の話題

ゲームソフト販売本数ランキング:今週1位も「スーパー マリオパーティ ジャンボリー(Switch)」 GO!
【Switch2】ニンテンドースイッチ2正式発表。発売日は2025年。世界各都市で体験会も開催 GO!
【Switch2】映像から読み解くニンテンドースイッチ2の特徴と変更点。ボタンが1つ追加され、Joy-Conは横から差し込むタイプに GO!
内製エンジンにも詳しいチャットボット「ひすいちゃん」が業務をサポート―スクウェア・エニックス「ゲーム会社の業務効率化に生成AIは役立つか?」セッションをレポート【CEDEC+KYUSHU 2024】GO!
白組とOLMが語るVFXにおけるR&Dとの向き合い方とは【SIGGRAPH Asia 2024】 GO!

「ニンテンドースイッチ 2」非公式情報流出に任天堂が法的措置か?CES 2025でカバー展示した海外メーカーに弁護士が接触 GO!
『アサシン クリード シャドウズ』再び発売延期…ゲームプレイ品質とローンチ時の体験向上のため3月20日リリースへ GO!

前回のコメント

・理解できた
 今年もよろしくお願いします。

 何よりです。
 こちらこそ、今年も宜しくお願い致します。

・久しぶりの講義で不安もありましたが楽しく参加させていただきました。
 ありがとうございました。

 何よりです。

・新年最初の授業ありがとうございました。
 まとめたとしてもパッとは出てこなったので早く慣れるように練習しておこうと思います。

 是非。
 
・今日もありがとうございました。
 後半戦も頑張ります。

 応援します。

・雑談レベルですが、ゲームの展示会やイベントが好きなので機会があれば行きたいと考えています。
 先生のおすすめのイベントなどあれば、教えてください。(ゲーム業界以外でも)

 「今週の話題」で紹介しますので、参考になりましたら活用してください。

講義メモ 第6章 配列

p.133 6.1 配列とは

・配列とは、同じ型で同じ意味の変数をまとめて「●●の■番目」として扱う仕組み
・この●●を配列名、■を添字(インデックス、指標)という。
・配列に含まれる変数を要素といい、その数を要素数という
・配列の利用には変数と同様に宣言が必要
・宣言の書式: 型[] 配列名;
・そして、宣言した配列名を用いて、要素数に応じた領域を確保する(配列の生成)
・生成の書式: 配列名 = new 型[要素数];
・基本的に宣言の型と生成の型は等しくなる
・宣言と生成は(変数の宣言と代入のように)まとめて実行できる
・宣言と生成の書式: 型[] 配列名 = new 型[要素数];
・例:
 string[] names = new string[3]; //3つの名前を格納する配列の宣言と生成
・宣言と生成の代わりに、配列に格納する値を用いた初期化も可能
・初期化の書式: 型[] 配列名 = {値①, 値②, …};
・この書式を用いると、要素数が値の数で決まるので、保守性が高くなる
・例:
 string[] names = {"スラリン", "ホイミン"}; //配列namesの要素数は2
 string[] names = {"スラリン", "ホイミン", "リムル"}; //配列namesの要素数は3になる
※ 要素数を記述する書式もあるが、チームルールでその利用を禁止する場合もある
※ C/C++では要素数が初期値の数より小さくてもOKだが、C#では文法エラーになる
・要素は「配列名[添字]」で変数と同様に扱える
・なお、添字は0スタートであり、末尾の要素の添字は要素数-1。配列名[要素数]は存在しないので注意。
・例(上の例の場合):
 names[0]は"スラリン"、names[1]は"ホイミン"、names[2]は"リムル"、names[3]はない
・配列はC#システム内部でstring型と同様にオブジェクト扱いになっており、要素数を返すLengthプロパティがある
・利用書式: 配列名.Length
・よって、配列の全要素に対する繰り返しでは、要素数を記述する代わりにLengthを用いると良い
※ チームルールで要素数を記述することを禁止する場合もある

提出:アレンジ演習 p.136 average02.cs

・点数を3個から4個にしても、それ以外を一切変更する必要がないことを確認しよう

講義メモ

・p.127「do while文」から

提出:アレンジ演習:p.125 menu01.cs

・終了フラグ「bool bEnd = false;」を用いずに同じ処理になるようにしよう

作成例

//アレンジ演習:p.125 menu01.cs
using System;
class menu01
{
    public static void Main()
    {
        //bool bEnd = false; //【削除】bool型の変数で表した終了フラグをオフにする
        while (true) { //無限ループ
            Console.WriteLine("***** Menu *****");
            Console.WriteLine("0:終了");
            Console.WriteLine("1:ファイル");
            Console.WriteLine("2:編集");
            Console.WriteLine("****************");
            Console.Write("選択---- ");
            string strAns = Console.ReadLine();
            switch (strAns) { //入力された文字列に応じて分岐
                case "0":  //0:終了
                    //bEnd = true; //【削除】終了フラグをオンにする
                    break; //switch構造を抜ける(繰返しは抜けない)
                case "1":  //1:ファイル
                    Console.WriteLine("ファイルが選択されました");
                    break; //switch構造を抜ける(繰返しは抜けない)
                case "2":  //2:編集
                    Console.WriteLine("編集が選択されました");
                    break; //switch構造を抜ける(繰返しは抜けない)
                default:
                    Console.WriteLine("入力に間違いがあります");
                    break; //switch構造を抜ける(繰返しは抜けない)
            }
            Console.WriteLine(); //改行
            if (strAns == "0") { //【変更】0が入力されていた?
                Console.WriteLine("それでは、このプログラムを終了します");
                break; //繰り返しを抜ける
            }
        }
    }
}

p.127 do while文

・for文、while文は前判定繰り返しであり、繰り返しの1回目の直前に継続条件をチェックする
・よって、1度も繰返さないことがある場合にも便利
・しかし、実行してみないと繰返すかどうか決められない場合は、後判定繰り返しの方が良い
・後判定繰り返しにはdo while文を用いる
・書式: do { 繰り返し内容 } while(継続条件); //末尾にセミコロンが必須
※「繰り返し内容が1行の場合{}を省略できる」が、推奨されない。
・利用例としては「特定の値が得られるまで繰返す」が多い
例:
    string ans;
    do {
        Console.Write("もう一回?(y/n):"); ans = Console.ReadLine();
    } while (ans != "y" && ans != "n"); //つまり、yかnが入力されていたら抜ける

アレンジ演習:p.128 do_while01.cs

・上記の例を追記して動作を確認しよう

作成例+参考

//p.128 do_while01.cs
using System;
class do_while01
{
    public static void Main()
    {
        int i = 10;
        do { //後判定繰り返しに入る
            Console.WriteLine("i = {0}", i); //1回目は無条件に実行
        } while (i > 20); //継続条件に合わないので繰り返し終了

        string ans;
        do {
            Console.Write("もう一回?(y/n):"); ans = Console.ReadLine();
        } while (ans != "y" && ans != "n"); //つまり、yかnが入力されていたら抜ける

        //【参考】何かが入力されるまで繰返す場合
        do {
            ans = Console.ReadLine();
        } while (ans == ""); //何も入力されなければ抜けない
    }
}

※ 5.6 goto文は基本的に禁止されているので扱いません

p.130 continue

・繰り返し構文の中でbreakを実行すると、その繰り返しからの脱出が可能
・代わりにcontinueを実行すると、繰り返し処理の残りをスキップして、繰り返しを続行できる
・「次行こう、次」のイメージ
・繰り返しの内容がシンプルな場合はif等で代用できるが、ifのネストなどで複雑になっている場合には非常に便利

アレンジ演習① p.130 continue01.cs

・continueを用いずに同じ処理を行うようにしよう

作成例

//アレンジ演習① p.130 continue01.cs --- 0から100未満の2の倍数の合計を求める
using System;
class continue01
{
    public static void Main()
    {
        int sum = 0;
        for (int i = 0; i < 100; i++) {
            if (i % 2 == 0) { //iを2で割って余りが0かどうか(偶数かどうか)
                sum += i;
                Console.WriteLine("i = {0, 2}, sum = {1, 4}", i, sum); //【移動】
            }
        }
        Console.WriteLine("合計は {0}です", sum);
    }
}

アレンジ演習② p.130 continue01.cs

・iが奇数の場合に、continueを実行する代わりに
 「続けますか?(y/n)」と表示して、yが入力されたらcontine、nが入力されたらbreakしよう

作成例

//アレンジ演習② p.130 continue01.cs --- 0から100未満の2の倍数の合計を求める
using System;
class continue01
{
    public static void Main()
    {
        int sum = 0;
        for (int i = 0; i < 100; i++) {
            if (i % 2 == 0) { //iを2で割って余りが0かどうか(偶数かどうか)
                sum += i;
                Console.WriteLine("i = {0, 2}, sum = {1, 4}", i, sum);
            } else { //奇数?
                Console.Write("続けますか?(y/n):"); string ans = Console.ReadLine();
                if (ans == "y") {
                    continue; //次の偶数に進む
                } else {
                    break; //次の偶数に進まないで繰り返しを抜ける
                }
            }
        }
        Console.WriteLine("合計は {0}です", sum);
    }
}

アレンジ演習③ p.130 continue01.cs

・y/n以外が入力されたら、y/nが入力されるまで繰返すようにしよう(二重ループになる)

作成例

//アレンジ演習③ p.130 continue01.cs --- 0から100未満の2の倍数の合計を求める
using System;
class continue01
{
    public static void Main()
    {
        int sum = 0;
        for (int i = 0; i < 100; i++) {
            if (i % 2 == 0) { //iを2で割って余りが0かどうか(偶数かどうか)
                sum += i;
                Console.WriteLine("i = {0, 2}, sum = {1, 4}", i, sum);
            } else { //奇数?
                string ans;
                do {
                    Console.Write("続けますか?(y/n):"); ans = Console.ReadLine();
                } while (ans != "y" && ans != "n");
                if (ans == "y") {
                    continue; //次の偶数に進む
                } else {
                    break; //次の偶数に進まないで繰り返しを抜ける
                }
            }
        }
        Console.WriteLine("合計は {0}です", sum);
    }
}

p.132 練習問題1 ヒント

・BMI=体重÷(身長×身長)なので、これが22となる体重は 22×身長×身長 で得られる
・この身長はメートル単位なので、センチメートルにすると 22×(身長÷100)×(身長÷100)
・この計算を、身長=160から身長<=180について1刻みで繰り返し、身長と体重を表示すれば良い
実行例:
身長:160 体重:56.32
身長:161 体重:57.0262
身長:162 体重:57.7368
身長:163 体重:58.4518
身長:164 体重:59.1712
身長:165 体重:59.895
身長:166 体重:60.6232
身長:167 体重:61.3558
身長:168 体重:62.0928
身長:169 体重:62.8342
身長:170 体重:63.58
身長:171 体重:64.3302
身長:172 体重:65.0848
身長:173 体重:65.8438
身長:174 体重:66.6072
身長:175 体重:67.375
身長:176 体重:68.1472
身長:177 体重:68.9238
身長:178 体重:69.7048
身長:179 体重:70.4902
身長:180 体重:71.28

作成例

//p.132 練習問題1
using System;
class continue01
{
    public static void Main()
    {
        for(double height = 160; height <= 180; height++){ //身長160cmから180cmについて繰り返す
            double weight = 22 * (height / 100) * (height / 100); //その身長でBMIが22になる体重を得る
            Console.WriteLine("身長:{0} 体重:{1}", height, weight); //身長と体重を表示
        }
    }
}

p.132 練習問題2 ヒント

・合計用の変数sumを0で初期化しておく
・コンソールから整数nを入力することを、1以上の値が入力されるまで繰返す
・カウント用の変数iを1からnまでについて「sumにiを足しこむこと」を繰返す
・sumの値を表示

作成例(シンプルバージョン)

//p.132 練習問題2
using System;
class ex0502
{
    public static void Main()
    {
        int sum = 0, n = 0; //合計用、入力用
        do {
            Console.Write("n : "); n = int.Parse(Console.ReadLine());
        } while (n <= 0);
        for(int i = 1; i <= n; i++){ //1から入力値について繰返す
            sum += i; //合計に足し込む
        }
        Console.WriteLine("結果:{0}", sum); //表示
    }
}

作成例(リッチバージョン)

//p.132 練習問題2
using System;
class ex0502
{
    public static void Main()
    {
        int sum = 1, n = 0; //合計用、入力用
        do {
            Console.Write("n : "); n = int.Parse(Console.ReadLine());
        } while (n <= 0);
        Console.Write("1"); //式の先頭を表示
        for(int i = 2; i <= n; i++){ //1から入力値について繰返す
            Console.Write(" + {0}", i); //式の途中を表示
            sum += i; //合計に足し込む
        }
        Console.WriteLine(" = {0}", sum); //合計を表示
    }
}

今週の話題

ゲームソフト販売本数ランキング:今週1位も「スーパー マリオパーティ ジャンボリー(Switch)」 GO!
ゲーム運営のマイネット、営業利益は通期予想をすでに超過―合理化と新規事業で収益力回復へ【ゲーム企業の決算を読む】GO!
KADOKAWA、ソニー買収観測から資本業務提携で決着―カカオの株式取得けん制し情報戦展開【ゲーム企業の決算を読む】GO!
【キャリアクエスト】“好き”を仕事にするということ。天文からゲーム開発を志したプランナーに聞く、コーエーテクモの企業風土と新人教育 GO!
東京ビッグサイトで行われた第2回「キャリアクエスト」をレポート!次代を担う就活生と企業が直に向き合う“ゲーム業界特化型”な就活イベント GO!

ワーナー傘下Cartoon Network GamesやAdult Swim Games販売の複数ゲームが突如販売終了―デベロッパーは関与できず心を痛める GO!
『CoD:BO6』で告知なく声優が変更に―SAG-AFTRAによるストライキ関連か GO!

ゲームクリエイター甲子園 2024 発表授賞式&作品展示会 1/19(日)浅草橋 ぜひどうぞ GO!