C言語学習3日目:分岐文(if - else if - else)

1.C言語の文構造

        C 言語は構造化プログラミング言語です。ここでいう構造とは、逐次構造、選択構造、ループ構造のことです。C 言語はこれら 3 つの構造を実現できます。実は、よく分析してみると、私たちが日常的に目にするものはすべて分割できます。これら 3 つの構造、またはこれら 3 つの構造の組み合わせ。

        if と switch を使用して分岐構造を実装し、for、while、do while を使用してループ構造を実装できます。

2.if文

        2.1. if ステートメントの構文形式は次のとおりです。

if (表达式)
    语句

        if ステートメントは true です。式が真 (true) の場合はステートメントが実行され、式が真でない (false) 場合はステートメントは実行されません。

        C 言語では、0 は false、0 以外は true を意味し、式の結果が 0 の場合はステートメントは実行されず、式の結果が 0 以外の場合はステートメントが実行されます。

        次に、例を書きます。

// 输⼊⼀个整数,判断是否为奇数
int main()
{
	int i = 0; // 初始化
	scanf("%d", &i); // 输入值

	if (i % 2 == 1) // 表达式
	{
		printf("是奇数!"); // 语句
	}

	return 0;
}

結果:

 フローチャート:

        2.2.else ステートメントの構文形式は次のとおりです。

if (表达式)
    语句1
else
    语句2

        次に、例を書きます。

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>


// 输入一个整数,判断是否为奇数,如果是奇数打印是奇数,否则打印数偶数。
int main()
{
	int i = 0; // 初始化
	scanf("%d", &i); // 输入整数

	if (i % 2 == 1) // 如果 i 模 2 等于 1的 就是奇数
	{
		printf("%d是奇数!", i); 
	}
	else // 如果不是等于 1的,就是偶数
	{
		printf("%d 是偶数!", i);
	}

	return 0;
}

        操作結果:

      2.3. ブランチに複数のステートメントが含まれる

        デフォルトでは、if および else では、次のような 1 つのステートメントのみがデフォルトで制御されます。

# include <stdio.h>

int main()
{
    int age = 0;
    scanf("%d", &age);

    if(age >= 18)
        printf("成年了!\n");
        printf("可以谈恋爱了!\n");
    
    return 0;
}

  

         上記のコードでは、入力値が 18 以上であっても 18 未満であっても、「You can fall in love」と画面に表示されることがわかります。

        これは、if ステートメントが制御できるのは printf("I'm an Adult\n"); という 1 つのステートメントのみであるためです。if ステートメントが true の場合は、成人向けのステートメントが出力されます。ステートメントが false の場合は、成人向けのステートメントは出力されません。 for printf("You can fall in love\n"); n"); は独立して存在し、if ステートメントの条件が true か false かに関係なく実行されます。次に、if ステートメントで 2 つのステートメントを同時に制御したいとします。

どうすればよいでしょうか? 次に、else を使用するか、その後に中括弧を続けてコードを囲む必要があります。次のように:

int main()
{
    int age = 0;
    scanf("%d", &age);

    if (age >= 18) //if 后使⽤{} 控制多条语句-这个块也叫:程序块,或者复合语句
    {
        printf("成年了!\n");
        printf("可以谈恋爱了!\n");
    }
    else // else 后使⽤{}控制多条语句-这个块也叫:程序块,或者复合语句
    {
        printf("未成年!\n");
        printf("不可以早恋哦!\n");
    }
        

    return 0;
}

         2.4. ネストされた if

                if else ステートメントでは、else を別の if ステートメントと一緒に使用して、複数の判断を行うことができます。

                例: 整数を入力し、入力された整数が 0、正の数、負の数のいずれであるかを判定する必要があります。

int main()
{
	int i = 0;
	scanf("%d", &i);

	if (i == 0)
	{
		printf("%d是零\n", i);
	}
	else if (i > 0)
	{
		printf("%d是正数\n", i);
	}
	else
	{
		printf("%d是负数\n", i);
	}

	return 0;
}

 

        2.5. ぶら下がっているelseの問題

               if と else が複数ある場合、そのようなルールを覚えておくと、else は常に最も近い if に一致します。

               以下のコードを見てください。

#include <stdio.h>

int main()
{
	int a = 0;
	int b = 0;

	if (a == 1)
		if (b == 2)
			printf("hehe\n");
	else
		printf("haha\n");

	return 0;
}

        このコードは何を出力しますか?

        実際には何も出力されず、初心者がやりがちな間違いは、a が 0 で 1 に等しくないと判断し、else 句を実行して「はは」と出力してしまうことですが、実行してみると何も出力されていないことがわかります。

         なぜ?

        これはぶら下がり else の問題なので、if と else が複数ある場合は、このルールを覚えておいてください。else は常に最も近い if に一致します。

        上記のコード レイアウトでは、else が最初の if ステートメントと一致しているため、else が最初の if ステートメントと一致すると考えられます。if ステートメントが true でない場合、自然に考えられるのは、else 節を実行して「笑」と出力することです。上記の else は 2 番目の if と一致するため、次の if...else ステートメントは最初の if ステートメントにネストされます。最初の if ステートメントが成立しない場合、if と ese がネストされる可能性はありません。実行時, 結局何も出力されません。

        それでは、次のように改善してみましょう。

#include <stdio.h>

int main()
{
	int a = 0;
	int b = 0;

	if (a == 1)
	{
		if (b == 2)
			printf("hehe\n");
		else
			printf("haha\n");
	}

	return 0;
}

        else を最初の if に一致させたい場合は、次のようにこれをこれに変更できます。

#include <stdio.h>

int main()
{
	int a = 0;
	int b = 0;

	if (a == 1)
	{
		if (b == 2)
			printf("hehe\n");
	}
	else
	{
		printf("haha\n");
	}

	return 0;
}

        適切な中括弧を使用する限り、コードのロジックはより明確になります。そのため、コードを読みやすくするために、今後コードを作成する際には、誰もが中括弧の使用に注意を払う必要があります。

        注: コードを書くとき、書式設定は非常に重要です。これにより、後で理解しやすくなり、会社に参加しやすくなります。同僚がコードを読みに来たときにスムーズに進み、独自のコーディング スタイルを開発する必要があります。

おすすめ

転載: blog.csdn.net/m0_58724783/article/details/132027121