講義メモ・後半

p.58 リテラル

・リテラル:プログラムの中で値を直接記述したもの
・整数リテラル:0から9の数字列。先頭のみ「-」が指定できる。int型扱い。
 ※ int型の範囲を超える値は自動的にuint型またはlong型として扱われる
・uint型のリテラル:正の整数リテラルの末尾に「U」または「u」を付けたもの。uint型扱いなので、0から約42億までOK。
 例: uint x = 4200000000U; //uint型変数の初期化
・long型のリテラル:整数リテラルの末尾に「L」を付けたもの。long型扱いなので、uint型よりさらに広い範囲を扱える
 例: long x = -4300000000L; //long型変数の初期化
 ※小文字の「l」も使えるが非推奨
・ulong型のリテラル:正の整数リテラルの末尾に「UL」または「ul」を付けたもの。ulong型扱いなので、0からlong型よりさらに広い範囲を扱える
 例: ulong x = 4300000000UL; //ulong型変数の初期化
・実数リテラル:0から9の数字列。先頭のみ「-」が、1個のみ「.」が指定できる。double型扱い。
・double型のリテラル:実数リテラルのことで、末尾に「D」または「d」を付けることもできる(通常省略)
・float型のリテラル:実数リテラルの末尾に「F」または「f」を付けたもの。精度が下がるがメモリ占有量が半分になる
 例: float x = 3.14F; //float型変数の初期化
・decimal型のリテラル:実数リテラルの末尾に「M」または「m」を付けたもの。精度が上がるがメモリ占有量が倍になる
 例: decimal x = 3.14M; //decimal型変数の初期化

p.59 GetTypeメソッド

・型の情報を文字列で返してくれるC#提供の仕掛け(メソッド)
・なお、リテラルも型情報を持つので「リテラル.GetType()」も可能。
・ただし、「.」の優先度は「-」より高いので、負数リテラルの型情報を得る場合は、カッコで優先度を変えること
 例: Console.WriteLine((-10).GetType()); //「-10.GetType()」はエラー

p.61 暗黙の型指定

・C#(初期バージョンを除く)では、初期化によって変数型を確定できることを生かして、型の代わりにvarキーワードを指定できる
・これにより、変数の型は初期値に応じて自動決定される
 例: var i = 1; //「int i = 1;」と同じ
・末尾語がないので初期値では確定できない型にしたい場合は、自動決定を避ける
 例: short i = 1; //varにするとint型になってしまう
・初期値にはできるが型情報を持たない「null」は指定不可
・char、stringは適用できる
 例: var i = '1'; //「char i = '1';」と同じ
 例: var i = "A"; //「string i = "A";」と同じ

p.62 var01.csについて

・Mainメソッドの戻り値型が「int」で「return 0;」が記述されているが不必要
・つまり、これまで通り、Mainメソッドの戻り値型は「void」で良く、「return 0;」は必要

p.62 var01.cs

//p.62 var01.cs
using System;
class var01
{
    public static void Main()
    {
        var myText = "猫でもわかるC#プログラミング 第"; //string型になる
        var no = 3; //int型になる
        var myc = '版'; //char型になる
        Console.WriteLine(myText + no + myc); //myTextがstring型なので連結される
        Console.WriteLine("myTextの型は{0}、noの型は{1}、mycの型は{2}",
            myText.GetType(), no.GetType(), myc.GetType());
    }
}

提出:アレンジ演習:p.63 dynamic01.cs

・x,y,zに違う型の値を再代入できることを確認し、変更後の型を表示しよう

作成例

//p.63 dynamic01.cs
using System;
class dynamic01
{
    public static void Main()
    {
        dynamic x = 10, y = "abc", z; //xはint、yはstring、zは型未定
        z = 1.25; //zはdoubleになる
        Console.WriteLine("xは{0}", x.GetType()); //intの.NET型情報を表示
        Console.WriteLine("yは{0}", y.GetType()); //stringの.NET型情報を表示
        Console.WriteLine("zは{0}", z.GetType()); //doubleの.NET型情報を表示
        x = true; //xはboolになる
        y = 10M; //yはdecimalになる
        z = -4200000000; //zはlongになる(int,uintの範囲を超えるので)
        Console.WriteLine("xは{0}", x.GetType()); //boolの.NET型情報を表示
        Console.WriteLine("yは{0}", y.GetType()); //decimalの.NET型情報を表示
        Console.WriteLine("zは{0}", z.GetType()); //longの.NET型情報を表示
    }
}

講義メモ

・p.52「type07.cs」から再開します

提出フォロー:アレンジ演習:p.50 type05.cs

・身長をmではなくcm単位で入力できるようにしよう

作成例

//アレンジ演習:p.50 type05.cs
using System;
class type05
{
    public static void Main()
    {
        Console.Write("身長(cm)--- ");
        double bl = double.Parse(Console.ReadLine()) / 100; //入力値をmに換算
        Console.Write("体重(kg)--- ");
        double bw = double.Parse(Console.ReadLine());
        //体重÷身長の2乗でBMIを得て、小数点以下1位まで表示
        Console.WriteLine("BMI = {0:##.#}", bw / Math.Pow(bl, 2.0));
    }
}

p.52 type07.cs

//p.52 type07.cs
using System;
class type07
{
    public static void Main()
    {
        decimal total;
        Console.Write("借入金額--- ");
        decimal a = decimal.Parse(Console.ReadLine()); //入力値をdecimalに換算
        Console.Write("利息(%)--- ");
        decimal p = decimal.Parse(Console.ReadLine()); //入力値をdecimalに換算
        decimal r = p / 100M; //decimal型の100で割って利率にする
        total = a * (1m + r); //(1.00+利率)を借入金額に描けて元利合計を得る
        Console.WriteLine("1期間後の元利合計は{0:c}です", total);
        a = total;
        total = a * (1m + r); //(1.00+利率)を借入金額に描けて元利合計を得る
        Console.WriteLine("2期間後の元利合計は{0:c}です", total);
        a = total;
        total = a * (1m + r); //(1.00+利率)を借入金額に描けて元利合計を得る
        Console.WriteLine("3期間後の元利合計は{0:c}です", total);
        a = total;
        total = a * (1m + r); //(1.00+利率)を借入金額に描けて元利合計を得る
        Console.WriteLine("4期間後の元利合計は{0:c}です", total);
    }
}

p.53 3.7 文字型

・コンピュータは文字を内部的に番号で管理する。
・この番号を文字コードといい、OSや処理系により複数の文字コードが利用されている
・C#では基本的にUnicodeという世界中の文字を表せる文字コードを用いる
・文字用のデータ型がcharで、1文字分のデータ量を示す
・文字用のリテラルが文字リテラルで、文字1文字を''で挟んで示す
・これを用いると、文字型変数への代入や、初期化が可能
 例: char a; a = 'A';l //文字型変数の宣言と代入
 例: char a = 'A';l //文字型変数の初期化
・Console.WriteLineや、Writeに文字型変数を渡すと、該当する文字になる
・文字を文字番号(Unicode番号)で指定できる
 例: char a = '\u732B'; //前に\uか\xを付けて16進数で指定(猫)
・10進数の文字番号(Unicode番号)で指定するには、char型にキャスト(強制的な型の変換)すれば良い
 例: char a = (char)29483; //10進数で指定し16進数に変換してもらう(猫)

p.55 エスケープ文字

・制御を文字として扱う手法
・例えば「\n」は1文字の「改行」を意味するエスケープ文字
・エスケープシーケンスともいう
・「改行」以外の制御用のエスケープ文字の動作は実行場所による。
 例: \r、\b、\t、\v、
・また、単独では特別な意味を持つ文字を、そのまま扱う場合にも用いる
 例: \'、\"、\\、 
 例:Console.WriteLine("Say \"HELLO!\",please");
 例:Console.WriteLine("これは\\10です");

p.56 escape01.cs

//p.56 escape01.cs
using System;
class escape01
{
    public static void Main()
    {
        char n = '\n'; //文字型の変数をエスケープ文字(改行)で初期化
        string str1 = "今日は"; //文字列型の変数を文字列リテラルで初期化
        string str2 = "よい天気です"; //文字列型の変数を文字列リテラルで初期化
        Console.WriteLine(str1 + n + str2); //文字列と文字列の間に文字を連結した結果を表示
        string str3 = "今日は\nよい天気です"; //エスケープ文字(改行)を含む文字列で初期化
        Console.WriteLine(str3);
    }
}

p.57 論理型

・真理値(真偽値)を扱うデータ型で、値は真(true)と偽(false)のみ。
・論理型はboolで表され、bool型のリテラルはtrue、falseのみ
・真は「あてはまる、一致する」で、偽は「あてはまらない、不一致」の意味
・これを用いると、論理型変数への代入や、初期化が可能
 例: bool a; a = true; //論理型変数の宣言と代入
 例: bool a = false; //論理型変数の初期化
※ C/C++では整数の0/非0を論理型として用いているが、C#では禁止
・Console.Write/WriteLineで、論理型変数を表示すると、True、Falseとなる

p.57(GetTypeメソッド)

・型の情報を文字列で返してくれるC#提供の仕掛け(メソッド)
・形式例: 変数.GetType() ⇒ その変数の.NET型情報を文字列で返す
 例: bool a; Console.WriteLine(a.GetType()); //「System.Boolean」と表示

p.57(ToStringメソッド)

・データやオブジェクト(後述)を示す文字列を返してくれるC#提供の仕掛け(メソッド)
・どういう文字列が得られるかは対象によって異なる。
・bool型の場合、真なら"True"、偽なら"False"となる。

p.57 bool01.cs

//p.57 bool01.cs
using System;
class bool01
{
    public static void Main()
    {
        bool a = true; //論理型の変数をbool型のリテラルで初期化
        bool b = false; //論理型の変数をbool型のリテラルで初期化
        Console.WriteLine("a = {0}, b = {1}", a, b); //表示するとTrue/Falseとなる
        Console.WriteLine("aは{0}", a.GetType()); //boolの.NET型情報を表示
        Console.WriteLine("aは文字列にすると「{0}」", a.ToString()); //論理値を示す文字列を表示
        Console.WriteLine("bは文字列にすると「{0}」", b.ToString()); //論理値を示す文字列を表示
    }
}

今週の話題

販売本数ランキング 今回トップは「ホグワーツ・レガシー(PS4)」GO!
コナミグループが2023年3月期の決算発表資料を公開。売上高3143億年と過去最高を記録。『プロ野球スピリッツA』や『eFootball 2023』、『遊戯王』などのコンテンツが好調 GO!
国内大手にPSやXbox、Steamまで!6月9日開催の「Summer Game Fest 2023」出展企業が公開 GO!

前回のコメントより

・徐々にプログラムの作り方にも慣れてきたような感じがしました。
 アレンジ演習をやるとき一瞬焦りますが、ちゃんと機能したときとても達成感を感じて楽しかったです!
 もっといろいろなプログラムをつくってみたいと思いました!

 何よりです♪

・関係ないですが、ドラクエのポスターもまってます^^v

 探してみますね。

講義メモ:第3章 変数とデータ型

p.37 変数の初期化

・p.23で説明した通り、変数の宣言と同時に初期値を代入することを初期化という
・int、stringのようにC#に予め含まれているデータ型を組み込み型という
・7章以降で説明するクラス等を用いて、プログラマが型を追加でき、これをユーザ定義型
・メソッドの内側で宣言・初期化した変数をローカル変数といい、そのメソッドの中でしか使えない
・初期化していないローカル変数の初期値は不定なので注意
 ※ C#ではほとんどの場合においてコンパイルエラーになる

p.39 定数

・変数の初期化の前に「const」をつけると、その変数の値の変更を禁止できる
・このような変数は定数と呼ばれ、値に名前をつけて扱う場合に便利
・例: const int tax = 300;
・変数と違い、宣言のみや代入はエラーになる

p.40 値型と参照型

・変数に格納される値の型により、確保すべき領域の大きさがきまる
・例: int型は32ビット(3バイト)
・このような型を値型という
・対してstringのように、確保すべき領域の大きさがきまらないものもある
・例: string型は何ビットか未定
・そこで、この場合は別の場所にデータを格納しておいて、その位置情報を変数に代入することで、道しるべにする
・このような型を参照型という

p.41 NET型

・C#の主要なデータ型は基本的にC言語が由来(例:int、string)
・しかし、C言語ではいくつかの型について、大きさが不定
・そこで、C#では型の大きさを表現できる.NET形式を用いることが多い
 例: int⇒「System.Int32」// C#ではint型は1個32ビット

p.43 整数型

・最も良く使われるので、実行効率も高いのがint型で1個32ビット。
・しかし、int型の範囲は±21億程度なので、これを超える値は扱えない
・また、小さな値を大量に利用したい場合、int型ではムダになる
・よって、sbyte(8ビット)、short(16ビット)、long(64ビット)などがあり、必要に応じて使い分けることができる
・また、負の数を用いないデータでは、型の範囲の半分を占める負の数の範囲が無駄なので、負の数のないデータ型=符号なし(アンサインド)がある
・intのアンサインドがuint型で同じ32ビットで0~約42億を扱える
・同様に、sbyte⇒byte、short⇒ushort、long⇒ulongがある
・各整数型の最大値、最小値はプログラムの中で得て用いる事ができる
・最大値: 型.MaxValue 例:int.MaxValueは21,4748,3647
・最小値: 型.MinValue 例:uint.MinValueは0

p.42 Parse

・数値として解釈できる文字列(例:"-1234")は、整数型.Parse(文字列)で整数化できる
・こうすると、文字列で得られた数値データを整数に変換して計算に利用できる
・例: srting s = "-1234"; int n; n = int.Parse(s); //nは-1234になる
・この手法をよく用いるのは「Console.ReadLine」によって得られた文字列(数字列)の整数化

p.46 type02.cs

//p.46 type02.cs
using System;
class type02
{
    public static void Main() //アプリケーションの実行開始場所
    {
        Console.Write("整数を入力してください---");
        int x = int.Parse(Console.ReadLine());
        Console.WriteLine("今の数字を2倍すると{0}ですね。", x * 2);
        Console.Write("あなたの年齢を入力してください---");
        ushort age = ushort.Parse(Console.ReadLine()); //0~65535
        Console.WriteLine("あと{0}年で100歳ですね。", 100 - age);
    }
}

p.47(メソッドの引数をメソッドにする)

・メソッドの引数には値や式を指定できる
・値を返す他のメソッドを指定する事もできる
・また、これを初期化の初期値にできる
・つまり「int x = int.Parse(Console.ReadLine());」は下記4行を合わせたもの
 ① int x; //整数型変数の宣言
  ② string s; //文字列型変数の宣言
 ③ s = Console.ReadLine(); //コンソールから読み込んで②に代入
 ④ x = int.Parse(s); //②を整数変換して①に代入

p.47(Convert.To●メソッド)

・C#が提供するConvertのToInt32メソッドに文字列を渡すと、int.Parseメソッドと同様になる
・つまり「Convert.To●」の●に.NET型を指定して文字列の整数変換が可能

p.48 浮動小数点型

・実数は固定小数点型と浮動小数点型があるが、C#では浮動小数点型を用いることで、柔軟性を高めている
・また2種類の精度(単精度、倍精度)を提供する
・単精度浮動小数点型がfloat型で1個32ビットと短い分、精度が低い(誤差が出やすい)
・倍精度浮動小数点型がdouble型で1個64ビットとfloat型より長い分、精度が高い(誤差が出づらい)
・C#システムはdouble型の効率の方が高いので、浮動小数点数を大量に使う場合を除いて、float型は避けることが多い
 ※ただし、Unityではfloat型の利用が少なくない
・それぞれの最大値、最小値はMaxValue、MinValueで得て用いる事ができる
・なお、浮動小数点型の値の表記は指数表記が用いられ、「〇E●」で、〇×10の●乗を示す。●には負の数も指定できるので、広範囲の値を表せる。
 例:1.23456E5  ⇒ 1.23456×10の 5乗 ⇒ 12345.6
 例:1.23456E-5 ⇒ 1.23456×10の-5乗 ⇒     0.00001234

p.49 Math.Powメソッド

・double型の値のべき乗計算はMath.Pow(元の値, 何乗か)メソッドで提供されている
・引数はどちらもdouble型で、結果もdouble型になる
・例: double w = Math.Pow(2.0, 3.0); //wは8.0になる
※MathはMathematics(数学)の、Powはpowerの略。なお、ExcelマクロではPOWER(元の値, 何乗か)となる

p.50 type05.cs

//p.50 type05.cs
using System;
class type05
{
    public static void Main()
    {
        Console.Write("身長(m)--- ");
        double bl = double.Parse(Console.ReadLine());
        Console.Write("体重(kg)--- ");
        double bw = double.Parse(Console.ReadLine());
        //体重÷身長の2乗でBMIを得て、小数点以下1位まで表示
        Console.WriteLine("BMI = {0:##.#}", bw / Math.Pow(bl, 2.0));
    }
}

p.50(実数リテラル)

・プログラム中に記述した実数を実数リテラルといい、自動的にdouble型になる
・例: double bl = 7.78; //double型の変数をdouble型の値で初期化

p.50 decimal型

・C/C++/Javaにはない精度の高い実数型がdecimal型
・1個128バイトを消費する代わりに、内部的に10進数演算を行うことで誤差を最小化できる
・特殊な型であり、利用には注意が必要で、double型である実数リテラルでは初期化できないので、decimal型に変換して用いる
・decimal型への変換には末尾に「M」または「m」をつければOK
・例: decimal bl = 7.78M; //decimal型の変数をdecimal型の値で初期化
・あつかえる値の範囲はfloat型よりも狭いがlong型よりは広い
・符号なしのdecimal型はない

提出:アレンジ演習:p.50 type05.cs

・身長をmではなくcm単位で入力できるようにしよう

講義メモ

・p.34「ユーザの入力を知る」から

提出フォロー:アレンジ演習 p.33 text07.cs

・カスタム書式指定「0,0」に対して負の数-123456789を指定するとどうなるか確認しよう

作成例

//アレンジ演習 p.33 text07.cs
using System; 
class Text03
{
    public static void Main() //アプリケーションの実行開始場所
    {
        Console.WriteLine("{0, 10:0,0}", -123456789); //3桁カンマ区切りで符号が前に付き「-123,456,789」
   }
}

p.34(文字列を格納する変数)

・整数用のデータ型である「int」と同様に、文字列用の「string」がある
・よって、string型の変数を宣言したり、文字列で初期化できる。
・例: string name; //文字列用の変数nameの宣言
・例: name = "シャア"; //文字列用の変数nameへの代入
・例: string name = "シャア"; //文字列用の変数nameの初期化

p.34 ユーザの入力を知る

・文字列用の変数への代入の右辺に「Console.ReadLine()」を指定できる
・こうすると、コンソールが入力待ち状態になり、キーボードから文字列を入力しEnterキーを押すと、代入されて次へ進む。
・入力された文字列が文字列用の変数に代入されるので、後で表示などに使える
・「Console.ReadLine()」のみを実行すると画面がフリーズしてみえてしまうので、直前に「Console.Write()」でプロンプト(入力案内)を入れると良い
・この時は「Console.WriteLine()」ではなく改行しない「Console.Write()」を使うと良い

p.35 readline01.cs

//p.35 readline01.cs
using System;
class readline01
{
    public static void Main() //アプリケーションの実行開始場所
    {
        string name; //文字列型変数の定義
        Console.Write("あなたのお名前は何ですか--- "); //表示し改行しない
        name = Console.ReadLine(); //コンソールから入力された文字列を文字列型変数に代入
        Console.WriteLine("あなたのお名前は{0}さんですか", name); //変数値を表示
    }
}

アレンジ演習 p.35 readline01.cs

・画面からファーストネーム、セカンドネームの順に入力させ、つないで表示しよう
実行例:
あなたのファーストネームは:Shar
あなたのセカンドネームは:Aznable
あなたのお名前はShar Aznableさんですか

作成例

//アレンジ演習 p.35 readline01.cs
using System;
class readline01
{
    public static void Main() //アプリケーションの実行開始場所
    {
        string fname, sname; //文字列型変数2つの定義
        Console.Write("あなたのファーストネームは何ですか--- "); //表示し改行しない
        fname = Console.ReadLine(); //コンソールから入力された文字列を文字列型変数に代入
        Console.Write("あなたのセカンドネームは何ですか--- "); //表示し改行しない
        sname = Console.ReadLine(); //コンソールから入力された文字列を文字列型変数に代入
        Console.WriteLine("あなたのお名前は{0} {1}さんですか", fname, sname); //2変数値を表示
    }
}

p.37 練習問題

・文字列型の変数を使わないで実現してみよう

作成例

//p.37 練習問題
using System;
class ex02
{
    public static void Main() //アプリケーションの実行開始場所
    {
        Console.WriteLine("入力した内容を出力する");
        Console.WriteLine(Console.ReadLine()); //コンソールから入力された文字列を表示
    }
}

今週の話題

販売本数ランキング 今回トップは「マインクラフト レジェンズ」GO!
世界最大級のゲーム展示会「gamescom 2023」に任天堂の参加決定!今後数週間でさらなる出展者情報公開も予告 GO!
年配ゲーマーの66%は「自分の年齢層に向けてゲームが作られていない」と感じている―“50歳以上”を対象にした調査結果より GO!
KLab×九州大学、「機械学習による新たなゲーム体験の創出の応用」テーマの共同研究を新たに開始 GO!
「CEDEC2023」現地で聴講できる“レギュラーパス”申し込みを受付は6月1日より開始 GO!

「任天堂ハードはPSやXboxと同等の『CoD』を動かせるのか」―英規制当局、任天堂での『CoD』シリーズ提供に懸念 GO!
『NIKKE』がアニメ『チェンソーマン』とのコラボで獲得したユーザーは定着せず GO!

前回のコメントより

・今回の講座をやって、だんだん難しくなって頭がこんがらがってきたのを実感しました。^^;

 難度が上がって行きますので、知識の整理をしておいてください。

・「変数」というのは、なんとなく知っていましたが、意外とできることがたくさんあるんだなと思いました。

 特にC#の変数は多彩で、他のプログラム言語にはない魅力があります。お楽しみに♪

・家でもちょこちょこ予習してこれからも講座についていけるよう頑張ります。

 応援します。