一本調子のプログラムには飽きた
今まで紹介してきたプログラムはすべて一本調子のプログラムです。
どういうことかというと今まで書いてきたプログラムはみんな上から下まで順番に実行して終わり、だったわけです。
しかしプログラムの本領は、 「○○のときはこれをして、××の時はこれをする」とか「同じ事を何回も繰り返す」みたいな複雑な処理にこそあるわけです。
ここからはそういった複雑な制御について学んでいきます。
条件式
そのために条件式というものを覚えないといけません。例えば「○○のときはこれをして、××の時はこれをする」の「○○のときは」に当たる部分です。
C言語はこういった条件も数式のような式で表すようにします。
条件式を書くのに使うのが「関係演算子」というものです。別に言葉は覚えなくていいので、役割だけ覚えましょう。この演算子は2つのものの大小関係を比較する演算子です。
実際に例を挙げれば
演算子 |
意味 |
> |
より大きい |
>= |
以上 |
< |
より小さい |
<= |
以下 |
== |
等しい |
!= |
等しくない |
式全体が正しければ真、正しくなければ偽といいます。
少々難しいと思うので実際に見て見ることにします。
上の状態で下の条件式は真でしょうか、偽でしょうか。
a < b a > b a == b a != b
答えを言うと、それぞれ真・偽・偽・真となります。
この条件式を使うことで例えば「aという変数が40より大きければ」という条件は「aという変数が40より大きい という式が真ならば」という感じで表せるようになるわけです。
if文
それでは関係演算子を使った条件式を用いて実際に複雑な制御をやってみましょう。
まず覚えるのはif文というものです。if文は次のような形をしています。
これで、「もし条件式が真ならば、〜〜を実行する」という意味になります。偽ならば何もしません。
例えば
と書けば、「もしaという変数が40より大きければ、printf("aは40より大きい\n");を実行する」という意味です。
else 文
真の時の動作だけじゃなくて、偽の時の動作も決めたい時があります。そういう時はelseを使います。
例を挙げれば、
というかんじになります。
else if 文
if文だと単純な二分岐しかできません。もっと複雑な分岐をしたいときはelse if文を使います。
else ifは何個でもくっつけられます。例えば
入れ子のif
ifの中にifを入れることも出来ます。何を言っているのかよくわからないと思うので実例を示します。
こんな感じで、if文の中身を実行しているときにif文を実行することも可能です。
理論上はいくらでもなかにif文を入れられますが、あんまりやり過ぎると醜くなるので、程々が重要です。
論理演算子
複数の条件式を組み合わせて、更に複雑な条件式を作ることができます。
その時に使うのが、論理演算子です。代表的なのを挙げると、
種類 |
意味 |
&& |
かつ |
|| |
または |
! |
〜でない |
たとえば、
(a > 40) && (c <= 10) //aが40より大きい かつ cが10以下
というふうに使います。
演習問題
問一 次の仕様を満たすプログラムを作りなさい。
- GPAをキーボードから入力させる。
- 条件に従い画面に出力を出す。
- マイナスか4より大きければ「真面目に答えてください」
- 0以上1未満なら「留年と向き合えますか」
- 1以上2未満なら「もうすこしがんばりましょう」
- 2以上3未満なら「この調子で行きましょう」
- 3以上4以下なら「あなたが神か」
GPAは? 0.55 留年と向き合えますか GPAは? 10 真面目に答えてください GPAは? 4 あなたが神か GPAは? 2.77 この調子で行きましょう