C言語の条件文:if文、else文、ネストされたif文(例付き)

⚡ スマートサマリー

C言語の条件文は、テストされた条件が真と評価された場合にのみコードブロックを実行することでプログラムの流れを制御し、if、if-else、ネストされた、else-ifなどのラダー構造による意思決定を可能にします。

  • 🔤 if文: if文は、条件がゼロ以外の真の値の場合にのみブロックを実行します。ゼロは偽を意味します。
  • 🔀 もしそうでなければ: if-else構文はfalse分岐を追加し、条件が真の場合に1つのブロックを実行し、条件が偽の場合に別のブロックを実行します。
  • <XNUMXxEXNUMX><XNUMXxEXNUMX><XNUMXxXNUMXA><XNUMXxXNUMX><XNUMXxXNUMXA>️️ 関係演算子: 6つの演算子(<、<=、>、>=、==、!=)は、各条件がテストするブール式を構築します。
  • 🪜 それ以外の場合のラダー: ネストされたelse-if文は、上から下へ複数の式をチェックし、最初に真となった分岐、またはデフォルトのelseを実行します。
  • 三項演算子: ?: 条件式は、2 つの値のうちの 1 つを返す簡潔な if-else 文を 1 行で記述します。
  • 🤖 AI支援: GitHub Copilotは、if-elseロジックのドラフト作成とレビューを行い、不足している括弧を指摘し、より適切な条件を提案します。

C言語の条件文:IF、IF Else、およびネストされたIF Else

C の条件文とは何ですか?

C言語における条件文は、条件に基づいて判断を行うために使用されます。条件文は、条件が指定されていない場合は順次実行されます。文のブロックに条件を指定すると、条件によって評価された結果に基づいて実行フローが変化する場合があります。このプロセスをC言語では意思決定と呼びます。

取消 C言語のループ 繰り返しコードの場合、条件文は1つのパスを選択します。

「C」プログラミングでは、次の 2 つの構成要素を利用して条件文を作成できます。

  1. Ifステートメント
  2. if-else文

評価された条件の結果に基づいてプログラムがどのステートメントを実行するかを決定するため、これは分岐とも呼ばれます。

Ifステートメント

これは強力な条件文の XNUMX つです。 If ステートメントは、プログラムの実行フローを変更する役割を果たします。 If ステートメントは常に条件とともに使用されます。 If の本体内のステートメントを実行する前に、条件が最初に評価されます。 if ステートメントの構文は次のとおりです。

 if (condition) 
     instruction;

条件は true または false に評価されます。 True は常にゼロ以外の値、False はゼロを含む値です。 命令には、単一の命令、または中括弧 { } で囲まれたコード ブロックを指定できます。

次のプログラムは、C プログラミングにおける if 構文の使用法を示しています。

#include<stdio.h>
int main()
{
	int num1=1;
	int num2=2;
	if(num1<num2)		//test-condition
	{
		printf("num1 is smaller than num2");
	}
	return 0;
}

出力:

num1 is smaller than num2

上記のプログラムは、if 構文を使用して 2 つの数値が等しいかどうかを確認する方法を示しています。

C言語におけるif文のフローチャート

  1. 上記のプログラムでは、1 つの変数を num2、num1 の値でそれぞれ 2、XNUMX に初期化しました。
  2. 次に、if をテスト式で使用して、どの数値が最小で、どの数値が最大であるかを確認しました。 if 構文で関係式を使用しました。 num1 の値が num2 より小さいため、条件は true と評価されます。
  3. したがって、If のブロック内のステートメントを出力します。 その後、制御はブロックの外に出て、プログラムは成功して終了します。

リレーショナル Operaトー

C言語には、決定を下したり条件をテストしたりするためのブール式を作成するために使用できる6つの関係演算子があり、真または偽を返します。

  • < - 未満
  • <= — 以下
  • > — より大きい
  • >= — 以上
  • == — 等しい
  • != — 等しくない

等価テスト (==) は代入演算子 (=) とは異なることに注意してください。これは、プログラマがこれらを混同することによって直面する最も一般的な問題の 1 つだからです。

具体的な例を挙げますと、以下の通りです。

int x = 41;
x =x+ 1;
if (x == 42) {
   printf("You succeed!");}

出力:

 You succeed

ゼロ以外の値に評価される条件は true とみなされます。

具体的な例を挙げますと、以下の通りです。

int present = 1;
if (present)
  printf("There is someone present in the classroom \n");

出力:

There is someone present in the classroom

If-Else ステートメント

C言語のif-else文フローチャート

if-else文はif文の拡張版です。if-else文の一般的な形式は次のとおりです。

if (test-expression)
{
    True block of statements
}
Else
{
    False block of statements
}
Statements;

このタイプの構文では、テスト式の値が真であれば、真に対応するステートメントブロックが実行されます。テスト式の値が偽であれば、偽に対応するステートメントブロックが実行されます。いずれの場合も、実行後、制御は自動的にIfブロックの外側にあるステートメントに移ります。

次のプログラムは、if-else 構造の使用方法を示しています。

変数を何らかの値で初期化し、その値が XNUMX より小さいか XNUMX より大きいかを判断するプログラムを作成します。

始めましょう。

#include<stdio.h>
int main()
{
	int num=19;
	if(num<10)
	{
		printf("The value is less than 10");
	}
	else
	{
		printf("The value is greater than 10");
	}
	return 0;
}

出力:

The value is greater than 10

C言語におけるif-else文の出力例

  1. 変数を値 19 で初期化しました。「C」プログラムを使用して、数値が 10 より大きいか小さいかを調べる必要があります。 これを行うために、if-else 構造を使用しました。
  2. ここでは、値を 10 と比較する必要があるため、条件 num<10 を指定しました。
  3. ご覧のとおり、最初のブロックは常に true ブロックです。つまり、test-expression の値が true の場合、最初のブロック (If) が実行されます。
  4. 10 番目のブロックは else ブロックです。 このブロックには、テスト式の値が false になった場合に実行されるステートメントが含まれています。 私たちのプログラムでは、num の値が XNUMX より大きいため、テスト条件が false になり、else ブロックが実行されます。 したがって、出力は else ブロックからの「値は XNUMX より大きい」になります。 if-else の後、プログラムは成功した結果で終了します。

「C」プログラミングでは、if-else ステートメントのネストと呼ばれる複数の if-else 構造を相互に使用できます。

条件式

if-else文を表現する別の方法として、?:演算子を導入する方法があります。条件式において、?:演算子はifとelseに関連付けられた単一の文のみを持ちます。

具体的な例を挙げますと、以下の通りです。

#include <stdio.h>
int main() {
  int y;
  int x = 2;
   y = (x >= 6) ?  6 : x;/* This is equivalent to:  if (x >= 5)    y = 5;  else    y = x; */
   printf("y =%d ",y);
  return 0;}

出力:

y =2

ネストされた if-else ステートメント

一連の決定が必要な場合は、ネストされた if-else が使用されます。 ネストとは、ある if-else 構造を別の if-else 構造内で使用することを意味します。

ネストされた if-else の使用法を示すプログラムを作成してみましょう。

#include<stdio.h>
int main()
{
	int num=1;
	if(num<10)
	{
		if(num==1)
		{
			printf("The value is:%d\n",num);
		}
		else
		{
			printf("The value is greater than 1");
		}
	}
	else
	{
		printf("The value is greater than 10");
	}
	return 0;
}

出力:

The value is:1

上記のプログラムは、数値が 10 より小さいか大きいかをチェックし、ネストされた if-else 構造を使用して結果を出力します。

C言語における入れ子になったif-else文

  1. まず、値が 1 の変数 num を宣言しました。次に、if-else 構造を使用しました。
  2. 外側のif-else文では、指定された条件によって数値が10未満かどうかがチェックされます。条件が真の場合にのみ、内側のブロックが実行されます。この場合、条件は真であるため、内側のブロックが処理されます。
  3. 内側のブロックでは、変数に値1が含まれているかどうかをチェックする条件が再びあります。条件が真の場合、Ifブロックが実行され、そうでない場合はelseブロックが実行されます。この場合、条件は真であるため、Ifブロックが実行され、値が出力画面に表示されます。
  4. 上記のプログラムは、変数の値を表示して正常に終了します。

値を変更してみてください 変数 プログラムの動作を確認してください。

注:ネストされたif-else文では、複数のif-else構造が関与するため、インデントに注意する必要があります。個々の構造を把握するのが難しくなるためです。適切なインデントを行うことで、プログラムの可読性が向上します。

ネストされた Else-if ステートメント

C言語におけるネストされたelse-ifラダー

ネストされた else-if は、マルチパスの決定が必要な場合に使用されます。

「C」プログラミングで else-if ラダーを構築する方法の一般的な構文は次のとおりです。

 if (test - expression 1) {
    statement1;
} else if (test - expression 2) {
    Statement2;
} else if (test - expression 3) {
    Statement3;
} else if (test - expression n) {
    Statement n;
} else {
    default;
}
Statement x;

このタイプの構造はelse-ifラダーと呼ばれます。この連鎖は一般的に梯子のように見えるため、else-ifラダーとも呼ばれます。テスト式は上から下へ評価されます。テスト式が真になると、それに関連付けられたステートメントが実行されます。n個のテスト式すべてが偽になると、デフォルトのelseステートメントが実行されます。

プログラムを使って実際に動作する様子を見てみましょう。

#include<stdio.h>
int main()
{
	int marks=83;
	if(marks>75){
		printf("First class");
	}
	else if(marks>65){
		printf("Second class");
	}
	else if(marks>55){
		printf("Third class");
	}
	else{
		printf("Fourth class");
	}
	return 0;
}

出力:

First class

上記のプログラムは、テストの得点に従って成績を出力します。 上記のプログラムではelse-ifラダー構造を使用しました。

  1. 変数をマークで初期化しました。 else-if ラダー構造では、さまざまな条件を提供します。
  2. 変数マークの値は、それに関連付けられたステートメントが出力画面に表示されるため、最初の条件と比較されます。
  3. 最初のテスト条件が false であることが判明した場合は、XNUMX 番目の条件と比較されます。
  4. この処理は、すべての式が評価されるまで続きます。そうでない場合は、else-if ループから制御が外れ、default ステートメントが出力されます。

値を変更してみて、出力の変化に注目してください。

よくあるご質問

if-else文は、範囲や関係チェックを含むあらゆるブール式をテストします。 スイッチケース 1つの変数を固定定数と比較し、多くの場合、より高速なジャンプテーブルにコンパイルされます。

ぶら下がりelseの問題とは、if文を波括弧なしでネストした場合に、elseがどのif文に属するのかが曖昧になる問題です。C言語では、elseは常に最も近い未対応のif文とペアになります。波括弧を追加することで、この混乱を解消できます。

はい。論理演算子は条件を結合します。&& は両方の条件が真である必要があり、|| は少なくともどちらか一方が真である必要があり、! は結果を反転します。たとえば、if (age > 18 && citizen) は、2 つの条件を 1 つの if 文で同時にテストします。

本体が単一のステートメントの場合、中括弧は省略可能で、C言語は次の行のみを実行します。2つ以上のステートメントの場合は、それらをグループ化するために中括弧が必要です。常に中括弧を使用することは、論理エラーを防ぐための安全な習慣です。

短絡評価は、結果が判明した時点で直ちに停止します。&& の場合、左辺が偽であれば右辺はスキップされます。|| の場合、左辺が真であれば右辺はスキップされます。これにより、不要な処理や危険な操作が回避されます。

はい。else-if文は上から下へ順に評価され、最初の条件が真となった時点で停止します。広い条件を狭い条件より先に置くと、狭いケースが隠れてしまう可能性があるため、テストは最も具体的なものから最も一般的なものへと順番に並べてください。

はい。AIコーディングアシスタントは、コメントから条件ブロックを作成し、長いif-else文をより簡潔な構造に変換し、==の代わりに==を使用するなど、起こりうるバグを指摘します。生成されたロジックを信頼する前に、必ずテストしてください。

GitHubコパイロット コメントや周囲のコードから、if文、else-if文、ネストされた条件式を自動補完します。関係式や論理式を提案し、不足している括弧を追加することもありますが、提案内容はそれぞれ確認することをお勧めします。