- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- 授業/C言語基礎/if文 へ行く。
- 1 (2015-10-01 (木) 10:09:36)
- 2 (2015-10-03 (土) 11:29:43)
- 3 (2015-10-06 (火) 08:08:08)
- 4 (2015-10-06 (火) 08:11:02)
- 5 (2015-10-07 (水) 00:57:03)
- 6 (2015-10-07 (水) 01:22:04)
- 7 (2015-10-07 (水) 23:15:36)
- 8 (2015-10-08 (木) 18:52:15)
- 9 (2015-10-08 (木) 19:10:14)
- 10 (2015-10-12 (月) 09:12:26)
- 11 (2015-10-12 (月) 09:12:26)
- 12 (2015-10-12 (月) 09:12:26)
- 13 (2016-10-05 (水) 18:47:16)
- 14 (2016-10-07 (金) 12:53:53)
- 15 (2016-10-13 (木) 14:23:30)
- 16 (2016-10-15 (土) 18:43:08)
- 17 (2017-10-05 (木) 16:38:40)
フローチャート †
処理の流れは、フローチャート(流れ図)という図で表すことができます。
流れ線は、制御の流れを表します。 横のときは左から右へ、縦のときは上から下へと進みます。
矢印も、制御の流れを表します。 矢印の向きに進みます。 他の流れ線や矢印に合流するときにも、矢印を使います。
端子は、開始と終了の場所を表します。 制御の流れは、一つの開始端子から始まり、一つの終了端子で終わります。
処理は、その名の通り、処理を表します。
判断は、条件によって制御の流れを分岐させます。
条件分岐 †
次のようなプログラムを考えてみましょう
試験の点数が60点以上なら「合格」と表示する。
つまり、点数が60点以上なら「合格」と表示し、そうでないなら何も表示しないようにします。
これをフローチャートで描くと、次のようになります。
これをC言語風にすると、次のようになります。
ここで、点数はint型の変数scoreに格納することとし、点数は適当に85点にしています。
判断のラベルが「はい」と「いいえ」から「0でない」と「0」に変わっていますが、これについてはもう少し後で説明します。
if文 †
C言語で条件分岐を行うには、if文を使います。
if文は、次の形をしています。
if (条件) { 処理 }
if文は、( )内に指定された「条件」を評価し、「条件」を満たしているときだけ「処理」を行います。 「条件」を満たしていないときは、「処理」を行わずに次へ進みます。
「条件」を満たしているときに行う「処理」に含まれる命令文が一つだけのとき、波括弧 { } を省略できます。
if (条件) 命令文;
(省略しなくてもかまいません。)
「条件」には、比較演算子や関係演算子を使います。 比較演算子と関係演算子については、この下で詳しく説明します。
このif文を使ってC言語のプログラムを書くと、次のようになります(プログラム1)。
#include <stdio.h> int main(void) { int score = 85; if (score >= 60) { printf("合格\n"); } return 0; }
演習1 †
プログラム1を作成し、実行結果を確認せよ。 また、点数を50点に変更し、実行結果を確認せよ。
条件を満たさないときにも処理を行う †
続いて、次のようなプログラムを考えてみましょう。
試験の点数が60点以上なら「合格」、そうでないなら「再試験」と表示する。
これをフローチャートで描くと、次のようになります。
このように、条件を評価した結果によって、異なる処理が実行されます。
そして、これをC言語風にすると、次のようになります。
このような、条件を満たさないときに処理を行うには、次のようなif文を使います。
if (条件) { 処理1 } else { 処理2 }
( ) 内の「条件」を評価し、条件を満たすときは「処理1」を実行し、満たさないときは「処理2」を実行します。
先ほどと同様に、「処理1」または「処理2」に含まれる命令文が一つだけのとき、波括弧 { } を省略できます。 条件を満たすときに行う処理と条件を満たさないときに行う処理に含まれる命令文が両方とも一つだけのときは、次のようになります。
if (条件) 命令文1; else 命令文2;
同様に、条件を満たすときに行う処理に含まれる命令文が一つだけのときと、反対に、条件を満たさないときに行う処理に含まれる命令文が一つだけのときは、次のようになります。
if (条件) 命令文1; else { 処理2 }
if (条件) { 処理1 } else 命令文2;
このif文を使ってC言語のプログラムを書くと、次のようになります(プログラム2、if文の部分のみ)。
if (score >= 60) { printf("合格\n"); } else { printf("不合格\n"); }
演習2 †
プログラム1をプログラム2に変更し、実行結果を確認せよ。 また、点数を50点に変更し、実行結果を確認せよ。
3つ以上に分岐する †
さらに、次のプログラムについて考えてみましょう。
試験の点数が60点以上なら「合格」、20点以上60点未満なら「再試験」、それ以外なら「不合格」と表示する。
最初の条件「点数が60点以上」を満たさないときに行われる処理が点線で囲まれたグレーの部分で、一つの条件分岐になっています。
問題文には「再試験」と表示するときの条件は「点数が20点以上60点未満」とありますが、フローチャートにおいて二つ目の条件が判定されるのは、最初の条件「点数が60点以上」を満たさないときに限られるので、必ず60点未満になります。 このため、二つ目の条件は「点数が20点以上」だけになっています。
このフローチャートをC言語風にすると、次のようになります。
条件を満たさないときに条件分岐を行うので、これをC言語のプログラムにすると、次のようになります(プログラム3、if文の部分のみ)。
if (条件1) { 処理1 } else { if (条件2) { 処理2 } else { 処理3 } }
一つ目のif文の条件を満たさないときの処理に含まれるのは二つ目のif文だけなので、このif文を囲む波括弧 { } は省略することができ、次のように書くことができます(プログラム4、if文の部分のみ)。
if (条件1) { 処理1 } else if (条件2) { 処理2 } else { 処理3 }
演習3 †
プログラム2をプログラム3に変更し、点数が85点、50点、10点のときの実行結果を確認せよ。 また、プログラム3をプログラム4に変更し、点数が85点、50点、10点のときの実行結果を確認せよ。
比較演算子 †
if文の条件には、多くの場合、比較演算子を用います。
比較演算子には、次のものがあります。
優先順位 | 演算子 | 使用例 | 意味 |
7 | < | a < b | 左辺の値が右辺の値より小さいとき1、そうでないとき0 |
<= | a <= b | 左辺の値が右辺の値より小さいか等しいとき1、そうでないとき0 | |
> | a > b | 左辺の値が右辺の値より大きいとき1、そうでないとき0 | |
>= | a >= b | 左辺の値が右辺の値より大きいか等しいとき1、そうでないとき0 | |
8 | == | a == b | 左辺の値が右辺の値と等しいとき1、そうでないとき0 |
!= | a != b | 左辺の値が右辺の値と等しくないとき1、そうでないとき0 |
比較演算子の結果は、int型の1か0になります。
if文は、結果が0のときは偽 (false)、つまり、条件を満たさない、それ以外のときは真 (true)、つまり、条件を満たすと判断して、条件分岐を行います。
等しいかどうかを判定する演算子が、= ではなく == であることに注意しましょう。 = は代入演算子です。
演習4 †
試験の点数が100点なら「満点」と表示するプログラムを作成し、実行せよ。
論理演算子 †
if文の条件が複数の条件の組み合わせとなるときは、論理演算子を用います。
論理演算子には、次のものがあります。
優先順位 | 演算子 | 使用例 | 意味 |
2 | ! | !a | 値が0のとき1、そうでないとき0(論理否定) |
12 | && | a && b | 左辺の値が1かつ右辺の値が1のとき1、そうでないとき0(論理積) |
13 | || | a || b | 左辺の値が1または右辺の値が1のとき1、そうでないとき0(論理和) |
優先順位に注意しましょう。
演習5 †
数学の試験の点数が60点以上、かつ、英語の試験の点数が60点以上なら「合格」、そうでないなら「不合格」と表示するプログラムを作成し、英語と数学の両方が85点のとき、英語が85点で数学が50点のとき、英語と数学の両方が50点のときの実行結果を確認せよ。
演習6 †
数学の試験の点数が60点以上、または、英語の試験の点数が60以上なら「合格」、そうでないなら「不合格」と表示するプログラムを作成し、英語と数学の両方が85点のとき、英語が85点で数学が50点のとき、英語と数学の両方が50点のときの実行結果を確認せよ。