制御文
単純に処理が進むだけのプログラムというものはあまりありません。
何か処理を行い、出てきた結果によって次の処理を変えるということはよく行われることであり、この処理ができなければ
単純なプログラムしか作成できません。
そこでここでは条件により処理を変える方法を説明します。
■If文
if文ある条件に当てはまったなら、こういう処理をするということを書くためのものです。
書式は以下のようになります。
if(条件式){ 文1 ; (true の場合) }else{ 文2 ; (false の場合) }
条件式に当てはまった場合の処理が文1になります。
当てはまらない場合は文2が行われることになります。文のところは1つだけの文しかできないわけではなく、
複数の文を実行ことができます。
1行の文(単文)の場合は「{」「}」を省略することができますが、処理が複数行にまたがる場合は複合文に
しなければなりません。
また「else」以降の処理は省略することができます。
if( 条件式1){ 条件式1にあてはまっているときの文 }
上記以外にも以下のような書式があります。条件式を複数指定することができます。
if( 条件式1){ 条件式1にあてはまっているときの文 }else if( 条件式2 ){ 条件式2にあてはまっているときの文 }else{ 条件式1,2どちらにもあてはまらないときの文 }
■演算子
これらの構文の条件式というところではどのような場合に処理を切り替えるのかを指定します。
条件式に当てはまる場合にtrueとなり、当てはまらない場合にfalseとなります。条件式ではこのtrueかfalseで
判定される処理を書く必要があります。
C言語の場合、0以外であればtrueと判定され、0であればfalseと判定されます。
この条件を指定するときによく使用されるもとのして演算子というものがあります。ここの条件の指定を間違えると
想定した結果とはなりませんので、演算子を理解しておく必要があります。
演算子はすでに算術用の演算子が出てきていたと思いますが、それ以外にも様々なものがあります。
・論理演算子
・ビット演算子
・代入演算子
・sizeof演算子
・条件演算子
順番に紹介していきます。
◆算術演算子
すでにいくつか出てきましたが、算術計算を行うための演算子が、算術演算子となります。
算術演算子は四則演算を行うための演算子です。
算術演算子 | 使用例 | 説明 |
---|---|---|
+ | x + y | xとyを足し合わせます(加算) |
– | x - y | xからyを引きます(減算) |
* | x * y | xとyを掛け合わせます(乗算) |
/ | x / y | xをyで割ります(除算) |
% | x % y | xをyで割った余りを求めます(剰余) |
– | -x | xの符号反転します |
++ | ++x | xに1を足した後に式を評価します |
++ | x++ | 式を評価した後に1を足します |
— | –x | xから1引いた後に式を評価します |
— | x– | 式を評価した後に1を引きます |
算術演算子でいくつか補足説明を指定おきます。
「+」「-」「*」は通常の算術演算と同じですが、「/」は整数型の数値の場合、商を求める形となります。
そのため、小数とはなりません。
「%」を使用すると余りを出すかたちとなるため、浮動小数点型の計算ではコンパイルエラーとなります。
コードで確認
以下のコードで確認してください。
#include <stdio.h> int main(void){ int a = 10, b = 15; printf("和は%dn", a + b); printf("差は%dn", a - b); printf("積は%dn", a * b); printf("商は%dn", a / b); printf("余りは%dn", a % b); //printf("%dn", (double)a % b); コンパイルエラー return (0); }
~~~~実行結果~~~~
和は25
差は-5
積は150
商は0
余りは10
~~~~~~~~~~~~
コメントアウトしてあるところを外すとコンパイルエラーとなります。
先ほど述べたように余りを出す算術演算子は整数にしか使用できないものなので浮動小数点型に
使用するとエラーとなります。
変数の値を1増やす「++」をインクリメント、変数の値を1減らす「--」をデクリメントといいます。
この二つの演算子は、オペランドの前後どちらに付けてもかまいませんが、つける位置により実行結果が異なります。
前につけた場合、式の評価前に処理され、後ろにつけた場合は式の評価後に処理が行われます。
#include <stdio.h> int main(void){ int a = 10; int b = ++a; printf("a:%d b:%dn", a, b); b = a++; printf("a:%d b:%dn", a, b); return(0); }
~~~~実行結果~~~~
a:11 b:11
a:12 b:11
~~~~~~~~~~~~
4行目の部分で変数aの値を変数bに代入しています。
このとき前処理のインクリメントを使用しているので右辺のaの値は加算されてからbに格納されることになります。
そのため最初に表示したときは両方とも「11」となります。
しかし6行目では後処理のインクリメントを使用しているので右辺のaの値は「11」のまま、bに格納されます。
その後で+1されるのでaだけが「12」となります。
◆関係演算子
値の大小を比較するときに使用されます。真であれば「1」に偽になるときは「0」となります。
関係演算子には以下のようなものがあります。
関係演算子 | 使用例 | 説明 |
---|---|---|
> | x > y | xがyよりも大きい場合trueになります |
>= | x >= y | xがyより大きいか等しい場合trueになります |
< | x < y | xがyより小さい場合trueになります |
<= | x <= y | xがyより小さいか等しい場合trueになります |
== | x == y | xとyが等しい場合trueになります |
!= | x != y | xとyが等しくない場合trueになります |
注意するべきは「==」の部分です。左辺と右辺が等しいという比較を行うときはC言語だと「=」が代入扱いになるために
気を付けなければなりません。「>」「=」を一緒に使用する場合は、「=」の方を後ろにしておく必要があります。
コードで確認
#include int main(void){ int age = 20; if( age >= 20){ printf("成人ですn"); }else{ printf("未成年ですn"); } return(0); }
~~~~実行結果~~~~
成人です
~~~~~~~~~~~~
age変数に格納されている値によって処理が変わるようになっています。
次回これ以外の演算子を取り上げたいと思います。
実践力が身につくC言語講座 連載リンク
競技プログラミングをイメージしたライブラリ活用講座
競技プログラミング風-標準Cライブラリ入門 連載
アルゴリズムをマスターして技術力アップ!
実践アルゴリズム講座 連載
パズルゲームの解析をテーマにしたC++講座
ゲーム解析プログラミング 連載