講義メモ

・p.64「スコープ」から再開します

p.64 スコープ

・「視野」「対象範囲」のことで、C#などでは変数などの有効範囲
・Mainメソッドなどの{~}をブロックという
・ブロックの中で宣言された変数はブロック内のみで有効
・ブロックの中にブロックが作れる(入れ子構造)ので、外側のブロックの中で宣言された変数は内側のブロックでも有効
・なお、C/C++ではスコープが異なれば、同じ名前の変数を定義できるが、C#では禁止。
・ブロックはプログラマの都合でいくつでも作れるが、目的が明確ではないブロックは読みやすさを損なうので推奨されない
・悪い例 ⇒ p.64 scope01.cs

p.65 型変換

・p.45のParseのように、文字列⇒数値の変換を行うメソッドがある
・これに対して、値型どうしの変換を行うことをキャストという
・書式: (型)式や値
・例: int a = (int)4.14; double d = (double)3, ave = (a + 3) / (double)2;
・実数値を整数型にキャストすると、小数点以下は切り捨てになる
・範囲の狭い型の変数に、範囲の広い型の変数を代入するにはキャストする
・例: long g = 5; int a = (int)g;

p.66【補足】

・5行目の「b = (byte)2;」は「b = (byte)a;」の誤り
・プログラムcast01.csは実行しても何も表示しない

アレンジ演習:p.66 cast01.cs

・aとbの値を表示する処理を追加しよう

作成例

//アレンジ演習:p.66 cast01.cs
using System;
class cast01
{
    public static void Main()
    {
        long a = 2;
        byte b;
        b = (byte)a;
        Console.WriteLine("a = {0}, b = {0}", a, b); //【追加】
    }
}

p.66 列挙型

・一連の整数に名前を付けたもの
・整数による情報をグループ化したり、名前をつけて識別する場合に用いる
・定義書式例: enum 列挙名 { 列挙子, … }
 例: enum janken { goo, choki, paa };
・列挙子の表す整数の規定値は0,1,2,…だが、指定することもできる
・定義書式例: enum 列挙名 { 列挙子 = 値, … }
 例: enum janken { goo = 7, choki = 8, paa = 9 };
・なお、列挙子は自動的に+1されるので、間隔が1なら省略できる
 例: enum janken { goo = 7, choki, paa };
・列挙を用いることで、マジックナンバー(説明のない数値リテラル)対策にもなる。
 整数限定のconstの上位バージョンでもある
・なお、列挙型も型なので、列挙子を表示や代入に用いる場合、int型などにキャストすること
 例: enum janken { goo, choki, paa }; int myhand = (int)janken.goo;

p.68 enum01.cs

//p.68 enum01.cs
using System;
class enum01
{
    enum MyMonth //列挙の定義(※Mainメソッドの外側で行う)
    {
        Jan = 1, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec 
    };
    public static void Main()
    {
        Console.WriteLine("Aprは{0}月", (int)MyMonth.Apr); //【追加】
        Console.WriteLine("Mayは{0}月", (int)MyMonth.May); //【追加】
    }
}

※ p.69 3.14は割愛または後日フォローとします

p.73 文字列型

・値型に属する型は大きさが固定なので、変数名が格納データを指す
・対して、文字列は0文字以上の文字の並びなので、大きさが決まらない
・その為、文字列型は参照型に含まれる
・参照型はクラスとして定義され、文字列の場合、stringクラスが実装を担う
・この為「string」は文字列型の型名としても利用可能
・クラスにはデータと共にデータを用いる処理を記述できる。それがメソッド、プロパティなど
・Stringクラスのメソッド、プロパティなどは「string型変数名.メソッド名」「string型変数名.プロパティ名」で呼び出せる
・StringクラスにはLengthプロパティが定義されており、これを用いると文字数が得られる
・Sring型変数名[整数]とすると、文字列の中の1文字を取り出せる。先頭を0とした番号を引数に与えると良い
 ※ これは後述する配列の仕掛け
・StringクラスにはCopyメソッドがあり、これを用いると文字列をコピーできる
・また、指定した文字が何文字目(先頭が0)にあるかを返すIndexOf('文字')メソッドや、指定した文字列が何文字目から始まるかを返すこともできるIndexOf("文字列")メソッドもある
 ※ これは後述するオーバーロードの仕掛け

p.73 string01.cs

//p.73 string01.cs
using System;
class string01
{
    public static void Main()
    {
        string str = "今日はよい天気です";
        string mystr;
        char c;
        // Lengthプロパティで文字列の長さを調べる
        Console.WriteLine("strは長さ{0}です", str.Length);
        //文字型変数cに文字列strの5番目の文字を代入
        c = str[4];
        Console.WriteLine("文字列の5番目の文字は「{0}」です", c);
        //文字列strをmystrにコピー
        mystr = String.Copy(str);
        Console.WriteLine("mystr = {0}", mystr);
        //文字列の検索
        int n = str.IndexOf('は');
        Console.WriteLine("文字列に'は'が出てくるのは{0}番目の文字", n + 1);
        n = str.IndexOf("よい");
        Console.WriteLine("文字列に「よい」が出てくるのは{0}文字目から", n + 1);
    }
}

※ p.75 3.16は割愛または後日フォローとします

p.78 練習問題1 ヒント

・1年間の秒数は日数×24時間×60分×60秒

作成例

//p.78 練習問題1
using System;
class ex0301
{
    public static void Main()
    {
        Console.WriteLine("1年は{0:#,#}秒です", 365 * 24 * 60 * 60);
    }
}

p.78 練習問題2 ヒント

・Math.PIはC#が提供してくれる定数で、円周率が格納されている
・円の面積は「円周率×半径×半径」
・半径は実数(double型)で入力すると良い

作成例

//p.78 練習問題2
using System;
class ex0302
{
    public static void Main()
    {
        Console.Write("半径:");
        double r = double.Parse(Console.ReadLine());
        Console.WriteLine("面積は{0}です", Math.PI * r * r);
    }
}

コメントを残す

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