【C言語入門】if文、switch文編
0. プログラムの流れの分岐
プログラムは基本的に上から下へと進んでゆく。しかし、if文と言うコードを用いることで、プログラムを分岐させる事ができる。例えば、次のようなコードを書く事ができる。
#include <stdio.h> int main(void) { int num=0; printf("整数を入力してください。"); scans("%d", &num); if (num%2==0) { printf("入力した整数は偶数です。"); } else { printf("入力した整数は奇数です。"); } return 0; }
上のプログラムはユーザーに整数の入力を求め、それが偶数か奇数かを判定して、判定結果を画面に出力するプログラムである。このように、if文を用いることでプログラムを分岐させる事ができる。
1. if文
if文は
の形式で書かれる。考え方としては、ifの直後で、カッコで囲われた式を判定して、非ゼロであればその後ろの文を実行する、と言う事である。
カッコで囲われた式のことを「制御式」と言う。
なお、if文は「文」である、と言うことを押さえておくべきである。
2. if-else文
if文は式の評価が非ゼロだった場合の処理を記述しているが、それ以外の場合の処理を記述していない。(式の評価がゼロの場合には素通りされる)式の評価がゼロの場合の処理も規定するのが、if-else文である。
if-else文は、
の形式で書かれる。この場合は、式を評価した値が非ゼロであれば文1が実行され、そうでなければ文2が実行される。
また、if-else文も「文」である。
3. if文の形式の詳細
- 入れ子になったif文
if-else文自体が、文であることからif文の「文」の部分にif-else文を入れることもできる。つまり次の形式で書かれる。
文;
else if
文;
else
文;
この場合は分岐が三つに分かれる。
- 複合分
ここで、単一文と複合文について説明する。単一文とは、コードの最後に;をつけた一つの文のことである。例えば
printf("これは単一文。");
などは単一文である。一方で、複合分とはいくつかの単一文を{ }で囲った物である。例えば、
{ printf("単一文1"); printf("単一文2"); }
などである。なお、複合分自体は、単一文とみなされる。
if文の「文」には、単一文しか置けない。したがって、処理に複数の文が必要な時は複合文にする必要がある。
※暗記していた部分、
#include <stdio.h> int main(void) { return 0; }
において複合分が使われている。
4. switch文
if文以外にも分岐を作る形式がある。その一つとしてswitch文を紹介する。swich文は以下の形式で書かれる。
switch (p) {
case 0 : 文; break;
case 1 : 文; break;
・
・
・
}
ある単一の式pの値に基づいて、プログラムの流れを複数に分岐させる。caseの後の値のことを名札(ラベル)という。
例:
#include <stdio.h> int main(void) { int num = 0; printf("整数を入力してください。"); scanf("%d", &num) swich (num%3) { case 0: printf("あまりは0です。"); break; case 1: printf("あまりは1です。"); break; case 2: printf("あまりは2です。"); break; } return 0; }
このプログラムはユーザーが入力した整数を3で割って、あまりの数に応じて分岐し、そのあまりの値を表示するプログラムである。
なお、「break;」はbreak文といい、break文が実行されるとプログラムがそこで終了する。
if文やswtich文などの、プログラムの流れを選択的に分岐させる文のことを、まとめて「選択文」という。
5. 等価演算子
本記事冒頭に紹介したサンプルプログラムの中に「==」という演算子を使用した。これは等価演算子といい、次のような意味を持つ。
a==b
aとbの値が等しければ1、そうでなければ0
また、この演算子の逆に値する次の演算子もある。
a!=b
aとbの値が等しくなければ1、そうでなければ0
式の判定において次の条件演算子などもよく使われるので紹介しておく。これは3項演算子の一種である。
a?b:c
aが非ゼロであれば、bを評価した値、そうでなければcを評価した値