if文II

今回はif文の続きをやります。
まずは前回の続きから

#include <stdio.h>

int main(void)
{
  int x=0;
  if(x==0)
    printf("xは0です。\n");  /*xが0の時実行*/
  return 0;
}

ここまでは前回でやりましたね。
今回は、例えば上のソースの場合「xが0でない場合の処理」
広く言えば「if文の条件式に当てはまらなかった場合の処理」を作ります。

早速結論を言います。
『if文』の条件式に外れた場合の処理を書くにはif文に『else節』をつけます。
そのやり方を下に示します。

if(条件式)
  条件が揃った時に実行する文
else
  条件が揃わなかった時に実行する文

これで分かったでしょうか?
わかったにせよ、わからなかったにせよ、次のサンプルをみてください。

#include <stdio.h>

int main(void)
{
  int x=0;
  if(x==0)
    printf("xは0です。\n");        /*xが0の時実行*/
  else
    printf("xは0ではありません");  /*if文の条件に外れた場合(xが0以外の場合)実行*/
  return 0;
}

else節はif文の直後で無いと書けません。
要するに単独で使えないという事です。 はっきりと理解できなくても、じきにわかるので焦る必要はありませんよ。


else節はif文の後に続く。
単独で使用する事はできない(コンパイルエラーが起こる)

else節もif文同様、ブロックを使って複数の文を書く事が可能です。

if(条件式){
  条件が揃った時に実行する文1
  条件が揃った時に実行する文2
  ・・・(略)・・・
  条件が揃った時に実行する文n
}
else{
  条件が揃わなかった時に実行する文1
  条件が揃わなかった時に実行する文2
  ・・・(略)・・・
  条件が揃わなかった時に実行する文m
}

別に、if文の方だけにブロックがあっても、else節の方だけにブロックがあってもかまいません。

続いて、いくつか比較演算子を紹介します。

演算子使い方左の式の意味
==x==1xが1の場合、真になる
!=x!=1xが1以外の場合、真になる
<x<1xが1より小さい場合、真になる
>x>1xが1より大きい場合、真になる
<=x<=1x1以下の場合、真になる
>=x>=1x1以上の場合、真になる

あと、そのほかにもオプションが色々とあります。
それは次のサンプルを見て下さい。

#include <stdio.h>

int main(void)
{
  int x,y;

  /*x,yに値を与える*/
  printf("xの値 : ");
  scanf("%d",&x);
  printf("yの値 : ");
  scanf("%d",&y);

  /*条件がすべて揃ったら実行*/
  if(x>=0&&y>=0)
    printf("x,y共に0以上です。\n");

  /*どれか一つでも条件が揃えば実行*/
  if(x<0||y<0)
    printf("x,yのどちらかが0より小さいです。\n");
  if(!x)
    printf("xは0です。\n");"

  return 0;
}

「&&」(論理AND演算子)は条件が二つ以上の時、
「〜でそれに加えて・・・の場合」という意味になります。
条件が全て揃わなければif文の内容は実行されません。

また、「||」(論理OR演算子)は「〜または・・・の場合」という意味になります。
条件が一つでも揃うとif文の内容が実行されます。


論理AND演算子は if(条件その1&&条件その2&&...(略)...&&条件そのn)とする。
if文の内容は全ての条件が揃った時に実行される。

一方論理OR演算子は if(条件その1||条件その2||...(略)...||条件そのn)とする。
if文の内容は条件が一つでも揃った時点で実行される。

さて、「!」(論理否定演算子)は「真」と「偽」といれかえる役目を持っています。
論理否定演算子を付ける事によって、真と偽が入れ替わり、
式が「偽」の場合、真偽が入れ替わり「真」になり、 逆に「真」の場合、真偽が入れ替わり「偽」になります。
(頭の中がごったがえになってる人は紙に書いて整理してみてください)


論理否定演算子は真と偽をいれかえる
式が「真」の場合「偽」になり、「偽」の場合「真」となる

最後に便利で、よく使う書き方を紹介しましょう。
else節の定義をもう一度ご覧になってください。

if(条件式)
  条件が揃った時に実行する文
else
  条件が揃わなかった時に実行する文

if文ってのも文の一種ですね。
よって、else節の中にif文を書く事ができます。
下のサンプルにはありませんが、if文の中にif文を書くのも可能です。

#include <stdio.h>

int main(void)
{
  int x;

  /*xに値を与える*/
  printf("xの値 : ");
  scanf("%d",&x);

  if(x==1)
    printf("xは1です。\n");
  else if(x==2)
    printf("xは2です。\n");
  else if(x==3)
    printf("xは3です。\n");
  else
    printf("xは1,2,3以外の値です。\n");

  return 0;
}

これで大体わかってもらえたでしょうか?
一見、if文だけでもできそうな気がしますが、
「xの値が0であるか」を確かめて、
該当した後に「xの値が1であるか」を確かめるなど、
絶対にありえない組み合わせをチェックしていたら時間の無駄です。

また、「全ての条件に外れた場合」というのが簡単に書けます。
ブロックはif文のほうにもelse節のほうでも、どちらでもつけれます。

if文はこれで終わりとさせてもらいます。
それでは、頑張ってください。