講義メモ

「3.2 値型と参照型」から

p.37 3.1 変数の初期化【再掲載】

・変数の宣言と変数への初期値(最初の値)の代入は同時に行える。これを初期化という。(再掲載)
・変数として初期化するが、プログラム内部での値の変更をすべきない場合(例:消費税率)定数にできる
・定数は初期化において前に「const」と記述する
・定数にしておくと、プログラム内部で書き換える処理がエラーになる
・また、消費税率のようにプログラム内に何度も登場値は定数にしておくと、保守性(変更しやすさ)が向上する

p.40 3.2 値型と参照型

・変数の持つデータの長さが短くて決まっている場合、格納した場所が変数になる。これを値型という。
・整数や実数や文字などの型は値型になる。
・そうではない場合の代表例が文字列で、この場合、データを別の場所に格納しておいて、その位置情報を変数に持つ。これを参照型という。
例:
string s; //文字列型変数を宣言
s = "jdsoivfkjbogkngrkponkgrknkponknomknknotrknglbv"; //長い文字列を格納後、その位置をsに代入

p.41 3.3 データ型

・値型は4種類あり、数値型(整数型、実数型)文字型、論理型
・値型には、大きさが分かりやすい.NET型の表記がある。C#はシステムはこっちを用いているので、エラーメッセージ等は.NET型の表記になる
・例: int ⇒ System.Int32
・なお、プログラム中でも.NET型の表記を用いることが可能で、その場合「using System;」があれば「System.」は省略して良い
・例: int x; ⇒ Int32 x;

p.43 3.4 整数型

・整数型は8種類あり、符号ありが4種、符号なしが4種で、それぞれ大きさ=格納できる値の範囲が小さい方から、
 sbyte/byte、short/ushort、int/uint、long/ulongとなる。
・byte型とuが付く型は符号なし(unsignedの略)sbyte(signedの略)とこれら以外は符号あり
・負の数を扱う時は符号ありにして、扱わない時は符号なしにすると、符号なしの方が正の数の範囲が倍になる
・例:intは±21億程度だが、uintは0から約42億までとなり便利

p.44(MinValueとMaxValue)

・C#は整数型の最小値と最大値を提供する(後述する型を表す構造体の持つ定数で)
・これをプログラム中で用いることが可能

p.44 type01.cs

//p.44 type01.cs
using System;
class type01
{
    public static void Main()
    {   //全ての整数型について、最小値と最大値を表示
        Console.WriteLine("sbyte: {0}~{1}", sbyte.MinValue, sbyte.MaxValue);
        Console.WriteLine("short: {0}~{1}", short.MinValue, short.MaxValue);
        Console.WriteLine("int:   {0}~{1}", int.MinValue, int.MaxValue);
        Console.WriteLine("long:  {0}~{1}",long.MinValue, long.MaxValue);
        Console.WriteLine(); //(なお、符号なし型の.MinValueは全てゼロ)
        Console.WriteLine("byte:  {0}~{1}", byte.MinValue, byte.MaxValue);
        Console.WriteLine("ushort:{0}~{1}", ushort.MinValue, ushort.MaxValue);
        Console.WriteLine("uint:  {0}~{1}", uint.MinValue, uint.MaxValue);
        Console.WriteLine("ulong: {0}~{1}", ulong.MinValue, ulong.MaxValue);
    }
}

p.45 文字列から数値型への変換

・文字列のうち、数値とみなされる数字列であれば、数値型.Parse(文字列) で数値に変換できる
・整数の場合は、0から9までの数字のみで、先頭のみ「-」が可能
 ※ ちなみに、Parse(文字列)は型を表す構造体の持つメソッド
・なお、変換できない文字列を与えて実行は可能だが、異常終了してしまうので注意
・数字のならんだ文字列のままでは計算には使えないが(連結ならできる)、整数に変換すればできる

ミニ演習 mini46.cs

・p.46の上から3行を実行して確認したい
・この3行の下に下記を付け加えて、プログラムとして仕上げて実行しよう
  Console.WriteLine("{0} + 45 = {1}", str, str + 45);
  Console.WriteLine("{0} + 45 = {1}", x, x + 45);

作成例

//ミニ演習 mini46.cs
using System;
class mini46
{
    public static void Main()
    {
        string str = "123"; //文字列型の変数の初期化
        int x; //整数型変数の宣言
        x = int.Parse(str); //変数strの持つ文字列を整数に変換してxに代入
        Console.WriteLine("{0} + 45 = {1}", str, str + 45); //文字列なので連結する
        Console.WriteLine("{0} + 45 = {1}", x, x + 45); //整数なので加算
    }
}

p.46(コンソールからの入力と整数変換)

・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); //整数なので2倍して表示できる
        
        Console.Write("あなたの年齢を入力してください---");
        ushort age = ushort.Parse(Console.ReadLine()); //コンソールから入力し整数に変換した値で初期化
        Console.WriteLine("あと{0}年で100歳ですね", 100 - age); //整数なので減算して表示できる
    }
}

p.47 複数の処理を1行で行う

・変数の宣言と初期値の代入は一度にできる(初期化という)
・この初期値はなんらかの処理の結果でも良い。例えば、Parseによる整数化の結果でもOK
・Parseメソッドの引数は文字列だが、文字列が得られる処理の結果でも良い
・よって、ReadLineメソッドの実行結果をそのままParseメソッドに渡して良い
・ということで、int x = int.Parse(Console.ReadLine()); は下記の処理をまとめたものになっている
① string work; //文字列型の変数を宣言
② work = Console.ReadLine(); //コンソールから文字列を得て①に代入
③ int x; //整数型の変数を宣言
④ x = int.Parse(work); //②を整数に変換して代入

アレンジ演習:p.46 type02.cs ⇒ type02a.cs

・上の①~④を参考にして、それぞれ処理を4行に展開してみよう
・なお、①の変数workは使いまわしても、別の変数にしても良い

作成例

//アレンジ演習:p.46 type02a.cs
using System;
class type02
{
    public static void Main()
    {
        Console.Write("整数を入力してください---");
        string work; //①文字列型の変数を宣言
        work = Console.ReadLine(); //②コンソールから文字列を得て①に代入
        int x; //③整数型の変数を宣言
        x = int.Parse(work); //④②を整数に変換して代入
        Console.WriteLine("今の数字を2倍すると{0}ですね。", x * 2); //整数なので2倍して表示できる
        
        Console.Write("あなたの年齢を入力してください---");
        work = Console.ReadLine(); //コンソールから文字列を得て代入(workは使いまわす)
        ushort age; //ushort型の変数を宣言
        age = ushort.Parse(work); //workから整数に変換して代入
        Console.WriteLine("あと{0}年で100歳ですね", 100 - age); //整数なので減算して表示できる
    }
}

アレンジ演習:p.46 type02.cs ⇒ type02b.cs

・逆に、type02.csをもう2行減らしてみよう
・変数xとageは不要になる

作成例

//アレンジ演習:p.46 type02.cs ⇒ type02b.cs
using System;
class type02
{
    public static void Main()
    {
        Console.Write("整数を入力してください---");
        Console.WriteLine("今の数字を2倍すると{0}ですね。", int.Parse(Console.ReadLine()) * 2); 
        
        Console.Write("あなたの年齢を入力してください---");
        Console.WriteLine("あと{0}年で100歳ですね", 100 - ushort.Parse(Console.ReadLine())); 
    }
}

p.47 Convert.To●メソッド

・.NET型を用いている場合「●.Parse」の代わりに「Convert.To●」を利用する
・●には.NET型の「Sustem.」を省いたものを指定する
 例: int x = Convert.ToInt32(Console.ReadLine());

p.47 type03.cs

//p.47 type03.cs
using System;
class type03
{
    public static void Main()
    {
        Console.Write("整数を入力してください---");
        int x = Convert.ToInt32(Console.ReadLine()); //int.Parse()と同様
        Console.WriteLine("今の数字を2倍すると{0}ですね。", x * 2);
        
        Console.Write("あなたの年齢を入力してください---");
        ushort age = Convert.ToUInt16(Console.ReadLine()); //ushort.Parse()と同様
        Console.WriteLine("あと{0}年で100歳ですね", 100 - age);
    }
}

p.48 3.5 浮動小数点数型

・実数をコンピューター内で扱う仕組みは複数ある
・C#では通常は浮動小数点数型で実数を扱う。また、特別な方法として10進データ型で扱うことも可能
・浮動小数点数型は小数点位置を動かせることで、広い範囲の実数が扱える。
・しかし、変数の大きさで精度が決まり、単精度だと誤差が大きくなりやすい
・浮動小数点数型は単精度のfloatと、倍精度のdoubleの2種類で、doubleがデフォルト扱い
 ※ Unityでは精度が求められない限り、容量が小さいfloatを用いることが多い(大量データが扱いやすい)
・float型は1個32ビットで誤差が大きくなりやすく、表現できる範囲が狭い
・double型は1個64ビットで(float型よりは)誤差が小さくなり、表現できる範囲が広い(指数表記で示す)
・指数表記は「●E■」で●×10の■乗を示す。
 例: 3.14E+2 = 3.14×10の2乗 = 314。1億は100000000なので1E+8、1兆は1E+12、1ミクロンは1E-8

p.49 type04.cs

//p.49 type04.cs
using System;
class type04
{
    public static void Main()
    {
        Console.WriteLine("float: {0}~{1}", float.MinValue, float.MaxValue); //最小値と最大値
        Console.WriteLine("double:{0}~{1}", double.MinValue, double.MaxValue); //同上
    }
}

p.49 Math.Powメソッド

・MathはC#が提供するクラス(部品)で、算術演算に便利なメソッド集+αになっている
・その一つがPowメソッドで、べき乗を返してくれる
・ただし、Console.WriteLine()等とは異なり、使える型はdoubleのみで、結果もdouble型になる
・書式例: double型の変数 = Math.Pow(元の値をdouble型で, 何乗するかをdouble型で);
・例: double size = 3.14 * Math.Pow(hankei, 2.0); //円の面積は円周率×半径の2乗
 ⇒   double size = 3.14 * hankei * hankei; //と同じ
・ただし、整数を指定しても、整数に「暗黙の変換」をしてくれるのでエラーにはならない

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()); //実数を入力しdouble型に変換
        Console.Write("体重(kg)--- ");
        double bw = double.Parse(Console.ReadLine()); //実数を入力しdouble型に変換
        Console.WriteLine("BMI = {0:##.#}", //小数点以下1桁まで表示(この改行はしてもしなくても良い)
            bw / Math.Pow(bl, 2.0)); //BMI=「体重÷身長の2乗」を
    }
}

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

・身長をメートルではなく、センチメートルで入力するように改良しよう

コメントを残す

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