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;