講義メモ 後半

p.85 インクリメント演算子・デクリメント演算子

・式「a = a + 1;」は「変数aの値を得て1加算し、その結果を変数aに代入する」という意味。
・つまり、変数aの値に1を足しこんだ結果になり、カウントアップに該当する。
・この処理は頻出なので、専用の演算子と専用のルールが用意されている
・単項++演算子(インクリメント演算子):左辺または右辺の変数の値を得て1加算し、その結果を変数aに代入する。
・よって「a = a + 1;」は「++a;」または「a++;」と記述できる。
・「++a;」を前置インクリメント演算子、「a++;」を後置インクリメント演算子といい、単独で用いた場合の処理結果は同じになる。
・前置と後置の違いは、式の評価のタイミングで:
 「++a;」(前置)は、「前に+1し、+1した結果の値を評価とする」
 「a++;」(後置)は、「現在の値を評価とし、後に+1する」
・よって、下記のように使い分けると良い
 int a = 1; Console.WriteLine(++a); //2(aは2になる)
 int b = 1; Console.WriteLine(b++); //1(bは2になる)
・上記の「++」を「--」にしたのがデクリメント演算子で、カウントダウンに該当する。

アレンジ演習:p.86 increment01.cs

・デクリメントの場合も試そう

作成例

//p.86 increment01.cs
using System;
class increment01
{
    public static void Main()
    {
        int a = 10;
        Console.WriteLine(a++); //10を表示し、aは11になる
        Console.WriteLine(a);   //11を表示
        int b = 10;
        Console.WriteLine(++b); //11になり、11を表示する
        Console.WriteLine(b);   //11を表示
        //【以下追加】
        a = 10;
        Console.WriteLine(a--); //10を表示し、aは9になる
        Console.WriteLine(a);   //9を表示
        b = 10;
        Console.WriteLine(--b); //9になり、9を表示する
        Console.WriteLine(b);   //9を表示
    }
}

p.87 インクリメント演算子・デクリメント演算子:int型以外の場合

・インクリメント演算子・デクリメント演算子はint型以外の整数型、実数型、文字型でも有効
・論理型、文字列型に行うとエラーになる

アレンジ演習:p.86 increment01.cs

・int型以外の整数型の最大値をインクリメントした場合を試そう
・文字型、論理型、文字列型の値をインクリメントした場合を試そう

作成例

//p.87 increment02.cs
using System;
class increment02
{
    public static void Main()
    {
        double a = 1.25;
        decimal d = -12.3M;
        Console.WriteLine(++a); //2.25となり、2.25を表示
        Console.WriteLine(--d); //-13.3Mとなり、-13.3を表示
        //【以下追加】
        byte b = byte.MaxValue;
        Console.WriteLine("++byte.MaxValue:{0}", ++b); //0(サイクリックする)
        sbyte sb = sbyte.MaxValue;
        Console.WriteLine("++sbyte.MaxValue:{0}", ++sb); //-128(同上)
        char c = 'A';
        Console.WriteLine("++'A':{0}", ++c); //B(あれば次の文字になる)
        bool e = false;
        //Console.WriteLine("++false:{0}", ++e); //論理型のインクリメントはエラー
        string s = "ABC";
        //Console.WriteLine("++\"ABC\":{0}", ++s); //文字列型のインクリメントはエラー
    }
}

p.88 関係演算子

・関係演算子:2項演算子で左辺と右辺の値の比較結果を論理値で返す演算子で6種類ある
・型が異なる整数型と実数型による関係演算は、型が異なる整数型と実数型による算術演算の場合と同様
 例:Console.WriteLine(5 == 5.0); //double型で等しいのでtrueになる
・2項==演算子:左辺と右辺の値が等しければtrueを、でなけばfalseを返す。2項!=演算子はその逆。
 ※この2つを合わせて等価演算子ともいう
・2項>演算子、2項>=演算子、2項<演算子、2項<=演算子、:左辺が右辺超/以上/未満/以下であればtrueを、でなけばfalseを返す。
・なお「==」「!=」「<=」「>=」は右側がイコールで間に空白がないことがルール

ミニ演習 mini088.cs

・「アレンジ演習:p.81 add01.cs 続き」を用いて、型が異なる関係演算を試そう
⇒下記は文法エラーになる
 文字列と整数の比較
 文字列と文字の比較
 整数と論理型の比較
 論理型と文字の比較
 文字列と論理型の比較

作成例

//ミニ演習 mini088.cs
using System;
class mini088
{
    public static void Main()
    {
        Console.WriteLine(3 == 6); //False
        Console.WriteLine(3.0 == 6); //False
        //Console.WriteLine("3.5" == 6); //文字列と整数の比較はエラー
        Console.WriteLine("(3.0 == 6)の型は{0}", (3.0 == 6).GetType()); //System.Boolean
        Console.WriteLine("整数3 == 文字'A' → {0}", 3 == 'A'); //False
        Console.WriteLine("文字'A' == 文字'B' → {0}", 'A' == 'B'); //False
        //Console.WriteLine("文字列\"AB\" + 文字'C' → {0}", "AB" == 'C'); //文字列と文字の比較はエラー
        //Console.WriteLine("整数10 == 論理値True → {0}", 10 == true); //整数と論理型の比較はエラー
        Console.WriteLine("実数3.1 == 文字'A' → {0}", 3.1 == 'A'); //False
        Console.WriteLine("論理値True == 論理値False → {0}", true == false); //False
        //Console.WriteLine("論理値True == 文字'A' → {0}", true == 'A'); //論理型と文字の比較はエラー
        //Console.WriteLine("文字列\"AB\" == 論理値False → {0}", "AB" == false); //文字列と論理型の比較はエラー
   }
}

p.88 条件演算子

・唯一の3項演算子で、シンプルな分岐構造を提供する演算子
・書式: bool型の式 ? 式がtrueの場合の値や式 : 式がfalseの場合の値や式
・よって、bool型の式はtrueかfalseかによって、評価が変わるので条件式を書くことで条件に応じた結果にできる
・例: x = (a > b) ? a : b; //aがb超ならaを、でなければbをxに代入 ⇒ aとbの大きいほうをxに代入
 ※ bool型の式は読みやすさを考えてカッコで囲むことが多い(チームルールの場合もある)
・例: x = (a > b) ? a - b : b - a; //aがb超ならa-bを、でなければb-aをxに代入 ⇒ aとbの差をxに代入

ミニ演習 mini088a.cs

・int型の2値をコンソールから読み込んで、大きいほうを表示するプログラムを条件演算子で書こう
・また2値の差も表示しよう
・もう一つint型の値をコンソールから読み込んで、最小値を表示しよう

作成例

//ミニ演習 mini088a.cs
using System;
class mini088a
{
    public static void Main()
    {
        Console.Write("整数A : ");
        int a = int.Parse(Console.ReadLine());
        Console.Write("整数B : ");
        int b = int.Parse(Console.ReadLine());
        Console.WriteLine("大きいのは{0}", (a > b) ? a : b);
        Console.WriteLine("差は{0}", (a > b) ? a - b : b - a); //差は大きいほう-小さいほう
        Console.Write("整数C : ");
        int c = int.Parse(Console.ReadLine());
        int min = (a < b) ? a : b; //aとbの小さいほうをminに代入
        Console.WriteLine("最小値は{0}", (c < min) ? c : min); //cとminの小さいほうが最小値
        //【別解】
        Console.WriteLine("最小値は{0}", 
            (a < b) ? ((a < c) ? a : c) : ((b < c) ? b : c)); //上記2行を1行で
   }
}

p.89 論理関係演算子

・2つのbool型の値による演算でbool型を得るのが論理関係演算で、論理積と論理和がある。
・2項&&演算子:左辺と右辺が論理値の時に、その論理積をbool型で返す。
 論理積とは、両方がtrueであればtrue、でなければfalse。
 よって2条件の「かつ」を表すときに利用する
 例: (a > b) && (a > c) //aがbより大、かつ、aがcより大ならtrueを返す、でなければfalseを返す
 例: (a >= 20) && (a <= 60) //aが20以上、かつ、aが60以下ならtrueを返す、でなければfalseを返す。
   つまり、aが20以上60以下ならtrueを返す。
・2項||演算子:左辺と右辺が論理値の時に、その論理和をbool型で返す。
 論理和とは、両方がfalseであればfalse、でなければtrue。
 よって2条件の「または」を表すときに利用する
 例: (a > b) || (a > c) //aがbより大、または、aがcより大ならtrueを返す、でなければfalseを返す
 例: (a <= 20) || (a >= 60) //aが20以下、または、aが60以上ならtrueを返す、でなければfalseを返す。
   つまり、aが20以下か60以上ならtrueを返す。

提出:「ミニ演習 mini088a.cs」

コメントを残す

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