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」