講義メモ 後半

p.88 関係演算子

・2項の大小関係を論理型(p.57)で返す演算子群で、trueまたはfalseを返す
・「==」「!=」「>=」「<=」は間にスペースが入るとエラーなので注意
・「!=」「>=」「<=」はイコールが前にくるとエラーなので注意

ミニ演習 mini088a.cs

・int i = 3 と double d = 3.0 が2項==演算子で比較できるかどうか、出来る場合はその結果を表示しよう
・decimal m = 3M と double d = 3.0 が2項!=演算子で比較できるかどうか、出来る場合はその結果を表示しよう ⇒ できない
・decimal m = 3M と int i = 3 が2項<=演算子で比較できるかどうか、出来る場合はその結果を表示しよう
・bool t = true と bool f = false が2項!=演算子で比較できるかどうか、出来る場合はその結果を表示しよう
・bool t = true と bool f = false が2項<=演算子で比較できるかどうか、出来る場合はその結果を表示しよう ⇒ できない

作成例

//ミニ演習 mini088a.cs
using System;
class increment02
{
    public static void Main()
    {
        int i = 3;
        double d = 3.0;
        Console.WriteLine("i == d :{0}", i == d); //Trueになる
        decimal m = 3M;
        //Console.WriteLine("m != d :{0}", m != d); //doubleとdecimalの比較はできず、エラーになる
        Console.WriteLine("m <= i :{0}", m <= i); //Trueになる
        bool t = true, f = false;
        Console.WriteLine("t != f :{0}", t != f); //Trueになる
        //Console.WriteLine("t <= f :{0}", t <= f); //boolとboolの大小比較はできず、エラーになる
    }
}

p.88 条件演算子

・C#では唯一の3項演算子で、分岐構造を表現できる演算子
・構文は「● ? ■ : ▲」で●にはbool型の値または式を書き、これがTrueなら■を、Falseなら▲を返す
 例:「(a > b) ? a : b」とすると、aとbの大きい方の値が得られる(等しい場合はb)
 例:「(a < b) ? a : b」とすると、aとbの小さい方の値が得られる(等しい場合はb)

ミニ演習 mini088b.cs

・2つの実数値を入力して大きい方を表示しよう

作成例

//ミニ演習 mini088b.cs
using System;
class increment02
{
    public static void Main()
    {
        Console.Write("実数1:"); double a = double.Parse(Console.ReadLine()); 
        Console.Write("実数2:"); double b = double.Parse(Console.ReadLine()); 
        Console.WriteLine("大きい方は{0}", (a > b) ? a : b);
    }
}

ミニ演習 mini088c.cs

・2つの実数値を入力して差(大きい方-小さい方)を表示しよう

作成例

//ミニ演習 mini088c.cs
using System;
class increment02
{
    public static void Main()
    {
        Console.Write("実数1:"); double a = double.Parse(Console.ReadLine()); 
        Console.Write("実数2:"); double b = double.Parse(Console.ReadLine()); 
        Console.WriteLine("差は{0}", (a > b) ? a - b : b - a);
    }
}

p.88 条件演算子(つづき)

・条件演算子の第2、3項には式が書けるので、ここに条件演算子を記述することで多分岐構文を記述できる
・例: (a >= 80) ?  "優" : ((a >= 60) ? "可" : "不可"));
・例: (a == b) ? ((a == c) ? "abcは等しい" : "等しくない")) : "等しくない"); 
・例: (a != b) ?  "等しくない" : ((a == c) ? "abcは等しい" : "等しくない"));

ミニ演習 mini088d.cs

・3つの実数値を入力して最大値を表示しよう
ヒント
・a >  b ならば、aとcの大きい方が最大値
・a <= b ならば、bとcの大きい方が最大値
⇒a >  b ならば、aとcの大きい方が最大値、でなければ、bとcの大きい方が最大値

作成例

//ミニ演習 mini088d.cs
using System;
class increment02
{
    public static void Main()
    {
        Console.Write("実数1:"); double a = double.Parse(Console.ReadLine()); 
        Console.Write("実数2:"); double b = double.Parse(Console.ReadLine()); 
        Console.Write("実数3:"); double c = double.Parse(Console.ReadLine()); 
        Console.WriteLine("最大は{0}", (a > b) ? ((a > c) ? a : c) : ((b > c) ? b : c));
    }
}

p.89 論理関係演算子・否定演算子

・2つのbool値を返す式の間に置いて、bool値を返す演算
・2項&&演算子:両方がtrueならtrueを、でければfalseを返す。論理積、「かつ」「AND」ともいう
 例: (a > 0 && b > 0) ? "aもbも正の数" : "どちらかは正の数ではない"
・2項||演算子:両方がfalseならfalseを、でければtrueを返す。論理和、「または」「OR」ともいう
 例: (a > 0 || b > 0) ? "aとbのどちらかまたは両方が正の数" : "どちらも正の数ではない"
・単項!演算子:値や式がtrueならfalseを、でければtrueを返す。否定、「NOT」ともいう
 例: !(a > 0) ? "aは正の数じゃない" : "aは正の数"
・単項!演算子は複雑な条件式を反転したい場合に用いる
 例: !(a > 0 && b > 0) ? "「aもbも正の数」ではない" : "aもbも正の数"
・単項!演算子は単純にbool型の変数値を反転したい場合にも便利 bool a = true, b = !a;

p.89 ビット論理演算子

・値を2進数表現にして、ビットごとに計算した結果によるビット列を返す
・2項&演算子:両方が1なら1を、でければ0を返す。
・2項|演算子:両方が0なら0を、でければ1を返す。
・2項^演算子:同じなら0を、でければ1を返す。別名:排他的論理和
・単項~演算子:全ビットを反転した結果を返す。別名:(1の)補数

p.90(短絡評価)

・2項&&演算子と2項||演算子のもつ、途中で結果が確定したときは先に進むという特長のこと
・これにより、無駄な動作の除外が可能
・例:「多くの計算① && 多くの計算②」とすると、多くの計算①がfalseなら②は実行せずにfalse確定
・例:「多くの計算① || 多くの計算②」とすると、多くの計算①がtrueなら②は実行せずにtrue確定
・これにより、異常終了の回避が可能
・例:「a != 0 && 5 / a > 2」とすると、もしもaが0だと「5 / a」は異常終了するが、
 「a != 0」がfalseになるので「5 / a」は実行されない=異常終了の回避が可能

提出:ミニ演習 mini088d.cs

コメントを残す

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