では、「成立していない」時だけ、プログラムを実行するには、どうすれば良いのでしょうか?
例えば、英語のテストの得点が80以上でなければ「不合格」と表示する。
というプログラムを作ってみましょう。
解答例です。
<sample program 010-01>
#include <stdio.h> int main(void) { int english; printf("得点を入力してください:"); scanf("%d", &english); if (english < 80) { printf("不合格\n"); } return 0; } |
<実行結果>
得点を入力してください:79 不合格 続行するには何かキーを押してください・・・
「80点以上でない」ということは「80未満」ということです。
これに気づくか気づかないかが「分かれ道」になります。
「以下」と「未満」の違い、「以上」と「より大きい」の違い、日本語でのニュアンスを「はっきりと」C言語に変換しなければなりません。
念のため、「表」を書いておきます。
成立 | 不成立 |
---|---|
a < b | a >= b |
a > b | a <= b |
a <= b | a > b |
a >= b | a < b |
a == b | a != b |
a != b | a == b |
※左側の条件が「成立している」ということは、右側の条件は「成立していない」ということです。
では、英語のテストの点数が「80以上」なら「合格」、「80未満」なら「不合格」と表示するプログラムを作るにはどうすれば良いのでしょうか?
単純に考えると次のようになります。
<sample program 010-02>
#include <stdio.h>; int main(void) { int english; printf("得点を入力してください:"); scanf("%d", &english); if (english >= 80) { printf("合格\n"); } if (english < 80) { printf("不合格\n"); } return 0; } |
<実行結果1>
得点を入力してください:79 不合格 続行するには何かキーを押してください・・・
<実行結果2>
得点を入力してください:83 合格 続行するには何かキーを押してください・・・
「条件」が「成立」している時と、「成立していない」時で処理を分けています。
これは、次の文法でもう少しスマートに書くことが出来ます。
・if−else文の文法
if (条件) { 条件が成立している時の処理 } else { 条件が成立していない時の処理 }
「条件」が「成立している」時の処理をifの「{」の中に書き、成立していない時の処理をelseの「{」に書きます。
「else」とは、「異なる(成立しない)」という意味です。
もしも、「条件」に書いてあることが、「成立していたら」最初の「{」から「}」までの命令が実行されます。
もしも、「条件」に書いてあることが、「成立していなかったら」else文の「{」から「}:までの命令が実行されます。
つまり、「成立」か「不成立」で実行するプログラムを分けることが出来るということです。
では、<sample program 010-02>のプログラムを「if−else文」で書いてみます
<sample program 010-03>
#include <stdio.h> int main(void) { int english; printf("得点を入力してください:"); scanf("%d", &english); if (english >= 80) { printf("合格\n"); } else { printf("不合格\n"); } return 0; } |
<実行結果1>
得点を入力してください:79 不合格 続行するには何かキーを押してください・・・
<実行結果2>
得点を入力してください:83 合格 続行するには何かキーを押してください・・・
もしも(if)、英語の得点が「80以上であれば」「合格」と表示します。
そうでなければ(else)「不合格」と表示します。
「そうでない」という意味をしっかり理解してください。
この場合は、「80未満」ということになります。
では、if−else文を使った問題を出します。
入力した数値が、「偶数」であれば「入力データは偶数です。」
入力した数値が、「奇数」であれば「入力データは奇数です。」
と表示するプログラムを作ってみてください。
解答例です。
#include <stdio.h> int main(void) { int input; printf("整数を入力してください:"); scanf("%d", &input); if (input % 2) { printf("入力データは奇数です。\n"); } else { printf("入力データは偶数です。\n"); } return 0; } |
<実行結果1>
整数を入力してください:3 入力データは奇数です。 続行するには何かキーを押してください・・・
<実行結果2>
整数を入力してください:4 入力データは偶数です。 続行するには何かキーを押してください・・・
次は、入力した数値が「負の数」であれば、「マイナス」と表示し、「0(ゼロ)か正の数」であれば、「ゼロまたはプラス」と表示するプログラムを作ってみましょう。
解答例です。
<sample program 010-05>
#include <stdio.h> int main(void) { int input; printf("整数を入力してください:"); scanf("%d", &input); if (input < 0) { printf("マイナス\n"); } else { printf("ゼロまたはプラス\n"); } return 0; } |
<実行結果1>
整数を入力してください:-1 マイナス 続行するには何かキーを押してください・・・
<実行結果2>
整数を入力してください:0 ゼロまたはプラス 続行するには何かキーを押してください・・・
<実行結果3>
整数を入力してください:1 ゼロまたはプラス 続行するには何かキーを押してください・・・
次は、前に作ったプログラムに変更を加えてみます。
上のリンクのプログラムを変更して、
購入金額と支払金額を入力し、金額が不足していなければ「おつりは○円です。」
金額が不足していれば「代金が不足しています。」と表示するプログラムを作ってみましょう。
解答例です。
<sample program 010-06>
#include <stdio.h> int main(void) { int pay; int buy; int change; printf("購入した金額を入力してください:"); scanf("%d", &buy); printf("支払った金額を入力してください:"); scanf("%d", &pay); change = pay - buy; if (change >= 0) { printf("おつりは%d円です。\n", change); } else { printf("代金が不足しています。\n"); } return 0; } |
<実行結果1>
購入した金額を入力してください:578 支払った金額を入力してください:1000 おつりは422円です。 続行するには何かキーを押してください・・・
<実行結果2>
購入した金額を入力してください:578 支払った金額を入力してください:500 代金が不足しています。 続行するには何かキーを押してください・・・
では、入力した2つの数値の内、大きい方の数値を表示する、というプログラムを作ってみましょう。
人間にとって、数値の大小は「ぱっ」と見れば大抵分かります。
例えば、「1458」と「2876」はどちらが大きいですか?
すぐ分かりますよね。
でも、コンピュータは、きちんと比較しないと分からないのです。
要するに、皆さんが「こういう方法で調べたら、どっちが大きいか分かるよ」と教えてあげないといけないのです。
では、実行結果が以下のようになるよう、作ってみてください。
<実行結果>
1つ目のデータを入力してください:15 2つ目のデータを入力してください:10 大きいのは15です。 続行するには何かキーを押してください・・・
解答例です。
#include <stdio.h> int main(void) { int input1; int input2; printf("1つ目のデータを入力してください:"); scanf("%d", &input1); printf("2つ目のデータを入力してください:"); scanf("%d", &input2); if (input1 > input2) { printf("大きいのは%dです。\n", input1); } else{ printf("大きいのは%dです。\n", input2); } return 0; } |
<実行結果>
1つ目のデータを入力してください:15 2つ目のデータを入力してください:10 大きいのは15です。 続行するには何かキーを押してください・・・
「>」や「<」を使えば、大小関係がわかります。
こういう作り方もあります。
<sample program 010-08>
#include <stdio.h> int main(void) { int input1; int input2; int result; printf("1つ目のデータを入力してください:"); scanf("%d", &input1); printf("2つ目のデータを入力してください:"); scanf("%d", &input2); if (input1 > input2) { result = input1; } else{ result = input2; } printf("大きいのは%dです。\n", result); return 0; } |
<実行結果>
1つ目のデータを入力してください:15 2つ目のデータを入力してください:10 大きいのは15です。 続行するには何かキーを押してください・・・
一旦、変数「result」に大きい方の数値を入れておき、最後に「result」の中身を出力します。
なんだか、無駄なように感じる方も、いるかもしれません。
変数が1つ増えることにより、プログラムも長くなっています。
しかし、「結果を入れる変数を作るか作らないか」は、後でこの値(この場合は大きい方の値)を使うかどうかで変わってきます。
このプログラムの後で、大きい方の値に対して、何らかの処理を行う場合は、その値を保管しておいた方が都合が良い場合もあります。
プログラムには「定石(こういう処理をする時は、このパターンを使う)」はあっても、「公式(これを当てはめれば絶対作れる)」は無いと思います。
では、次の問題です。
入力した、2つの値の小さい方の数値を表示してください。
<実行結果>
1つ目のデータを入力してください:15 2つ目のデータを入力してください:10 小さいのは10です。 続行するには何かキーを押してください・・・
解答例です。
<sample program 010-09>
#include <stdio.h> int main(void) { int input1; int input2; printf("1つ目のデータを入力してください:"); scanf("%d", &input1); printf("2つ目のデータを入力してください:"); scanf("%d", &input2); if (input1 < input2) { printf("小さいのは%dです。\n", input1); } else{ printf("小さいのは%dです。\n", input2); } return 0; } |
<実行結果>
1つ目のデータを入力してください:15 2つ目のデータを入力してください:10 小さいのは10です。 続行するには何かキーを押してください・・・
「>」を「<」に変えて、メッセージを「大きい」から「小さい」に変えただけです。
ところで、「大きい方の数値」や「小さい方の数値」を表示してみましたが、「同じ(等しい)」場合はどうなっているのでしょうか?
上の表にも書きましたが、「変数1<変数2」が「成り立たない」時は、「変数1>=変数2」が成り立っています。
つまり、「変数1<変数2」でなければ「変数1>=変数2」ですから、<sample program 010-06>や<sample program 010-07>の場合、「同じ(等しい)」場合は「不成立」の方のプログラム(else文)が実行されます。
では、「大きい場合」「小さい場合」「等しい場合」でそれぞれ処理を分けるにはどうすればよいでしょうか?
この説明は次回。