おぼえがき

過ちては則ち改むるにうんぬんかんぬん

scanf関数とif文と比較演算子と論理演算子について(C言語)

f:id:feci:20210810151051j:plain

C11

 

C11のscanf関数とif文について。

#include <stdio.h>

void main() {
  int a;
  printf("数値を入力:");

  scanf("%d"&a);                    //コンソールから値の入力

  if (a > 0) {
      printf("これは正の数だね。\n"); //変数aが正の数だった場合に実行
  }
  else if (a == 0) {
      printf("これは0だね。\n");      //変数aが0だった場合に実行
  }
  else {
      printf("なんだこりゃ。\n");     //変数aが上記以外の場合に実行
  }
}

scanf関数は、コンソールからの入力を受け付けます。

入力された値は第1パラメータの"%d"に入り、そのあとで第2パラメータで指定した変数に代入されます。

 

if文は複数の分岐を作るための構文です。

ifではじまり条件式をパレンティス(丸括弧)に記述して、そのまま続けてブレイス(波括弧)に条件を満たした際の処理を記述します。

 

if文は、else if を使うことで何個でも分岐を増やすことができます。

また必須というわけではありませんが、if文の最後には上の行のすべての条件に当てはまらなかったパターンとして、elseでつなげてその場合の処理を記述することが多いです。

 

else if は同じif文内で何個でも使えますが、elseは同じif文内では1回しか使うことはできません。

また、elseの後に続けて別の条件式を書くこともできません。

 

ちなみにネスト(入れ子)の場合は別のif文あつかいになります。

なのでelseの処理の中に別のif文を記述してその中でelseを使う分には、elseの重複にはなりませんので何の問題もありません。

 

if文の条件式には比較演算子を使います。

また1つのパレンティスに複数の条件式を用意したい場合は、各条件式を論理演算子でつなげて書きます。

 

 

scanf関数の定形は以下のとおりです。

 

scanf("第1パラメータ(変換指定子)", 第2パラメータ(&変数名));

 

第1パラメータには引数と同じデータ型の変換指定子を指定します。

第2パラメータには頭に&を付けた、第1パラメータに指定した変換指定子と同じデータ型の変数を指定します。

 

 

if文の定形は以下のとおりです。

 

if (条件式1) {
   条件1を満たした際の処理;
}
else if (条件式2) {
   条件2を満たした際の処理;
}
else {
   すべての条件を満たさなかった際の処理;
}

 

 

C言語で使う比較演算子は以下のとおりです。

 

a < b   aがbより小さければtrue
a <= b   aがbと同じかそれより小さければtrue
a > b   aがbより大きければtrue
a >= b   aがbと同じかそれより大きければtrue
a == b   aとbが同じ値とデータ型であればtrue
a != b     aとbが違う値またはデータ型であればtrue

 

 

if文の入れ子(ネスト)について。

#include <stdio.h>

void main() {
  int aaa;
  printf("1から6のいずれかの数値を入力してください。");
  scanf("%d"&aaa);                          //コンソールからの値の入力

  if (aaa >= 1 && aaa <= 6) {                 //値が1~6の数値のいずれかだった場合に実行
    if (aaa == 2 || aaa == 4 || aaa == 6) {
      printf("偶数です。\n");                //2か4か6だった場合に実行
    }
    else {
      printf("奇数です。\n");                //1か3か5だった場合に実行
    }
  }
  else {
    printf("その値は1~6の数値ではありません。\n"); //それ以外の値の場合に実行
  }
}

if文は入れ子構造にして別のif文を書くこともできます。

この入れ子構造のことをネストと呼びます。

 

ちなみにこの入れ子構造は2層が限界ではなく、その気になれば何層にでも重ねていくことができます。

 

しかしif文においては、このようなネスト構造のコードを書くことは推奨されていません。

理由は単純に、後から見直したときにコードが理解しづらいからです。

 

 

またif文の条件式には、上記プログラムのように論理演算子を使うことで複数の条件式をつなげて書くこともできます。

 

C言語で使う論理演算子の種類は以下のとおりです。

 

a && b   論理積・aとbが共にtrueの場合にのみtrue
a || b    論理和・aまたはbのいずれかがtrueの場合にtrue
!a      aがfalseの場合にのみtrue

 

 

以上です。