C言語のおさらい 条件分岐 if文の使い方

if 文の書式

条件の真と偽により処理が二つに分岐する二分岐型をC言語で表すときは、「if 文」を使う。

書き方はこのような感じ

if(条件式) {
 条件が真のときに実行する文;
}
else {
 条件が偽のときに実行する文;

}


  • if(条件式)の()内には、通常比較を行う式が入る。
  • 条件が偽のときに実行するぶんがない場合は、else 以下を省略できる。
  • 実行する文が一つしかない場合は、文のブロックの規則に従い{}を省略できる。

比較演算子

if 文などで使う条件式には、だいたい比較を行う式が使われる。
このときに、使われるのが「比較演算子」である。

比較演算子


  • <  ・・・左辺は右辺より小さい
  • >  ・・・左辺は右辺より大きい
  • <=  ・・・左辺は右辺以下
  • >=  ・・・左辺は右辺以上
  • ==  ・・・左辺と右辺は等しい
  • !=   ・・・左辺と右辺は等しくない
比較演算子は数学などで使っているものと意味は同じ。ただし、「≧」「≦」という記号がキーボード上にはないため、「<=」「>=」のように分解して使っている。
C言語では「=」を代入演算子の意味で使っているため「==」のように「=」を二つならべて、「等しい」という意味を表す。

if 文の使い方

実際に以下のプログラムを実行してみる。

#include <stdio.h> 
int main(void) {

 //変数の宣言
 int x;

 //入力
 printf("入力された数値が10以上か判定する\n");
 printf("数値を入力:");
 scanf("%d", &x);

 if (x >= 10) {
  printf("そうです\n");
 }
 else {
  printf("違います\n");
 }

 return 0;
}

実行結果がこの画面。


10という数値が入力されたので、「そうです」と表示がされる。
9とかを入力すれば「違います」と実行結果に表示されるので、試してほしい。

if 文のネスト構造

if 文の中にif 文が記述される構造を「ネスト(入れ子)構造」という。
ネスト構造とは、例えば「A以上B未満の数値」、「Cより上でD以下の偶数」といった感じの条件結果が欲しいときに使う。

ネスト構造にしたプログラムを実際に書いてみる。

#include <stdio.h> 
int main(void) {

 //変数の宣言
 int x;

 //入力
 printf("入力された数値が5以上10未満の奇数か判定する\n");
 printf("数値を入力:");
 scanf("%d", &x);

 if (x >= 5) {
  if (x < 10) {
   if (1 == x % 2) {
    printf("そうです\n");
   }
   else {
    printf("違います\n");
   }
  }
  else {
   printf("違います\n");
  }
 }
 else {
  printf("違います\n");
 }

 return 0;
}

このプログラムのように複数の条件を入れることで、目的とする答えを導くことができる。
また、条件式の中には式を入れることもできる。
優先順位は計算式が先に優先され、その式の答えを比較することになる。

複合条件

if 文に複数の条件式をまとめて記述することもできる。
複数の条件をまとめて一つの条件式とするには、「論理演算子」を使う。

論理演算子

  • &&  ・・・右辺と左辺の条件を満たす。
  •  ||   ・・・右辺または左辺のどちらかの条件を満たす。
  •  !     ・・・条件を満たしていない。
論理演算子を使ってまとめた条件を複合条件という。

#include <stdio.h> 
int main(void) {

 //変数の宣言
 int x;

 //入力
 printf("入力された数値が5以下または10以上か判定する\n");
 printf("数値を入力:");
 scanf("%d", &x);

 if (x <= 5 || x >= 10) {
  printf("そうです\n");
 }
 else {
  printf("違います\n");
 }

 return 0;
}

実行結果がこちら

片方の条件を満たしているので、「そうです」という実行結果が得られたことがわかる。





コメント

このブログの人気の投稿

STM32CubeIDEに日本語化プラグインを導入する

STM32F401でLチカをする(LED点灯)

STM32F401-Nucleoでシリアル通信をやってみる