プログラミング言語Ⅰ・講義メモ 後半

p.55 評価

・演算子を用いた式を記述すると式の値が得られる
・例えば、2項+演算子であれば、左辺と右辺の和が式の値になる
・式の値、または、これを得ることを評価という
・例えば「1 + 2」の評価は「3」となる
・等価演算子、関係演算子の評価は、あてはまれば「1」でなければ「0」となる
・よって「1 + 2」を表示できるように「1 == 1」「1 < 1」も表示できる

p.55 演習3-5 ヒント

・printfだけでできる(if文は不用)

作成例

//p.55 演習3-5
#include <stdio.h>
int main(void)
{
    printf("1 == 1 は %d\n", 1 == 1);
    printf("1 <  1 は %d\n", 1 <  1);
    return 0;
}

p.56 2値の最大値を求める

・list0311でも可能だが、list0312の方がより良い
・理由は「変更しやすい」から。
・しかし、list0312のif-elseを1行に記述することは推奨されない場合がある

アレンジ演習:p.56 list0312.cpp

・list0311の青い部分をlist0312で置き換えてよう
・また、1行になっているif-elseを複数行にして「{」「}」を入れよう

作成例

// p.56 list0312.cpp
#include <stdio.h>
int main(void)
{
    int n1, n2; //int型の2変数を宣言
    puts("二つの整数を入力せよ");
    printf("変数1:"); scanf("%d", &n1); //入力案内を表示しキーボードから整数値を入力
    printf("変数2:"); scanf("%d", &n2); //入力案内を表示しキーボードから整数値を入力
    int max; //最大値を格納する変数
    if (n1 > n2) { //n1の値が大きければ
        max = n1; //n1の値が最大値
    } else { //でなければ
        max = n2; //n2の値が最大値
    }
    printf("大きいほうの値は%dです\n", max);
    return 0;
}

p.56 3値の最大値を求める:その前に

・list0312では最大値を格納するための変数maxを導入した
・このmaxをn1で初期化して「仮にn1が最大値だとする」とすると良い
・すると、maxよりn2が大きい時のみ、maxにn2を代入して最大値を更新すれば良い
・つまり、elseは不要になる

アレンジ演習:p.56 list0312.cpp つづき

・下記のように書き換えてelseを廃止しよう
 ・maxをn1で初期化する
 ・n2がmaxより大きければmaxにn2を代入する

作成例

//アレンジ演習: p.56 list0312.cpp
#include <stdio.h>
int main(void)
{
    int n1, n2; //int型の2変数を宣言
    puts("二つの整数を入力せよ");
    printf("変数1:"); scanf("%d", &n1); //入力案内を表示しキーボードから整数値を入力
    printf("変数2:"); scanf("%d", &n2); //入力案内を表示しキーボードから整数値を入力
    int max = n1; //最大値を格納する変数をn1で初期化「仮にn1が最大値だとする」
    if (n2 > max) { //n2の値が最大値より大きければ「最大値更新」
        max = n2; //n2の値が最大値
    }
    printf("大きいほうの値は%dです\n", max);
    return 0;
}

p.57 演習3-6 ヒント

・list0313の「最大値」⇒「最小値」、「>」⇒「<」、「max」⇒「min」とすれば良い

作成例

//p.57 演習3-6
#include <stdio.h>
int main(void)
{
    int n1, n2, n3; //int型の3変数を宣言
    puts("三つの整数を入力せよ");
    printf("変数1:"); scanf("%d", &n1); //入力案内を表示しキーボードから整数値を入力
    printf("変数2:"); scanf("%d", &n2); //入力案内を表示しキーボードから整数値を入力
    printf("変数3:"); scanf("%d", &n3); //入力案内を表示しキーボードから整数値を入力
    int min = n1; //最小値を格納する変数をn1で初期化「仮にn1が最小値だとする」
    if (n2 < min) { //n2の値が最小値より小さければ「最小値更新」
        min = n2; //n2の値が最小値
    }
    if (n3 < min) { //n3の値が最小値より小さければ「最小値更新」
        min = n3; //n3の値が最小値
    }
    printf("最小値は%dです\n", min);
    return 0;
}

作成例

//p.57 演習3-7
#include <stdio.h>
int main(void)
{
    int n1, n2, n3, n4; //int型の3変数を宣言
    puts("四つの整数を入力せよ");
    printf("変数1:"); scanf("%d", &n1); //入力案内を表示しキーボードから整数値を入力
    printf("変数2:"); scanf("%d", &n2); //入力案内を表示しキーボードから整数値を入力
    printf("変数3:"); scanf("%d", &n3); //入力案内を表示しキーボードから整数値を入力
    printf("変数4:"); scanf("%d", &n4); //入力案内を表示しキーボードから整数値を入力
    int max = n1; //最大値を格納する変数をn1で初期化「仮にn1が最大値だとする」
    if (n2 > max) { //n2の値が最大値より大きければ「最大値更新」
        max = n2; //n2の値が最大値
    }
    if (n3 > max) { //n3の値が最大値より大きければ「最大値更新」
        max = n3; //n3の値が最大値
    }
    if (n4 > max) { //n4の値が最大値より大きければ「最大値更新」
        max = n4; //n4の値が最大値
    }
    printf("最大値は%dです\n", max);
    return 0;
}

p.58 条件演算子

・唯一の3項演算子で、if-else構造を演算子で表現できる
・書式: ● ? ▲ : ■ 「●が非0なら▲を、でなければ■」
・例①: int a = 1, b = a ? 10 : 20; //aは1なのでbは10になる
・例②: int a = 0, b = a ? 10 : 20; //aは0なのでbは20になる
・例③: int a = 1, b = (a > 0) ? 10 : 20; //aは1でa > 0なのでbは10になる
・例④: int a = 0, b = (a > 0) ? 10 : 20; //aは0でa > 0ではないのでbは20になる
・よって、例③は下記と同じ処理になる
 int a = 1, b;
 if (a > 0) {
  b = 10;
  } else {
    b = 20;
  }
・条件式を指定する場合は、カッコで囲むことが推奨されやすい
・比較によって値を返す文であり、比較によって処理を行う文には向かない

p.59 list0315.cpp

//p.59 list0315.cpp
#include <stdio.h>
int main(void)
{
    int n1, n2; //int型の2変数を宣言
    puts("二つの整数を入力せよ");
    printf("変数1:"); scanf("%d", &n1); //入力案内を表示しキーボードから整数値を入力
    printf("変数2:"); scanf("%d", &n2); //入力案内を表示しキーボードから整数値を入力
    printf("大きいほうの値は%dです\n", (n1 > n2) ? n1 : n2);
    return 0;
}

p.59 2値の差を求める

・「2値の差」とは単なる引き算ではなく「大きいほうから小さいほうを引いた値」
・よって、条件演算子を用いると見やすく得られる
 n1 > n2 ? n1 - n2 : n2 - n1
・この場合も、カッコを入れると読みやすくなる
 (n1 > n2) ? (n1 - n2) : (n2 - n1)

提出:p.59 演習3-9 ヒント

・条件演算子は3項共に省略できない
 例: min = (n2 < min) ? n2; //エラーになる
・よって、if-elseにしてから導入する必要がある
・仮に、下記のようにすると良い
  if (n1 < n2) min = n1; else min = n2;
  if (n3 < min) min = n3; else min = min;
 ⇒
  min = (n1 < n2)  ? n1 : n2;
  min = (n3 < min) ? n3 : min;

コメントを残す

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