C言語の分岐文とループ文に対する詳細な回答

文とは何ですか

C言語には次のような文があります。

  1. 式ステートメント。
  2. 関数呼び出しステートメント。
  3. 制御ステートメント。
  4. 複合文。
  5. 空のステートメント。

このブログでは主に制御文を紹介しています。
制御ステートメントは、プログラムのさまざまな構造モード (C 言語ではシーケンシャル構造、選択構造、ループ構造の 3 つの構造をサポートします) を実現するためにプログラムの実行フローを制御するために使用されます。これらは特定のステートメント定義子で構成されており、C 言語には9種類の制御文。
次の 3 つのカテゴリに分類できます。

  1. 条件判定文は、if 文、switch 文などの分岐文とも呼ばれます。
  2. ループ実行文: do while 文、while 文、for 文。
  3. Turn ステートメント: Break ステートメント、goto ステートメント、Continue ステートメント、return ステートメント。

分岐ステートメント (選択構造)

これは主に、さまざまな条件に応じてさまざまな結果を選択するために使用されます。

if ステートメント

if ステートメントは次の 3 つのカテゴリに分類できます。

  1. 単一ブランチの場合
  2. 二重分岐 if...el
  3. 複数分岐 if...else if...else if...else

単一ブランチの場合

文法構造:

if(表达式)
{
    
    
    语句;
}

場合:

#include<stdio.h>
int main()
{
    
    
    int age=0;
    scanf("%d",&age);
    if(age<18)
    {
    
    
        printf("未成年");
    }
}

入力数値が 18 より大きい場合、プログラムは結果を持ちません。これは私たちの人生の選択と一致します。なぜなら、人生ではどんな選択も結果を生み出すからです。そこで、二重分岐と複数分岐の if を導入しました。私たちの生活にもっと近づいてください。

二重分岐の場合

文法構造

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

場合:

#include<stdio.h>
int main()
{
    
    
	int age = 0;
	scanf("%d", &age);
	if (age>18)
	{
    
    
		printf("成年");
	}
	else
	{
    
    
		printf("未成年");
	}
	return 0;
}

得られる結果は成人と未成年ですが、成人も青年、中年、老年に分けたいのですが、当然ながら二分岐ifのままだとちょっと面倒なので、それを分岐する場合

複数分岐の場合

文法構造:

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

場合:

#include<stdio.h>
int main()
{
    
    
	int age = 0;
	scanf("%d", &age);
	if (age<18)
	{
    
    
		printf("未成年");
	}
	else if (age>=18&&age<30)
	{
    
    
		printf("青年");
	}
	else if (age >= 30 && age < 50)
	{
    
    
		printf("中年");
	}
	else
	{
    
    
		printf("老年");
	}
	return 0;
}

条件が 3 つ以上ある場合、複数分岐 if を使用すると、コード構造がより快適になることがわかります。
式が true と評価されると、ステートメントが実行されます。C言語で真と偽を表現するにはどうすればよいですか?
ゼロ以外は真、0 は偽です。

switch ステートメント

switch文も分岐文であり、複数の分岐に適用できますが、判定条件は整数式でなければなりません。
文法構造:

switch(整型表达式)
{
    
    
    语句项;
}

文項目とは何ですか?

case 整形常量表达式:
    语句;

switch文では直接分岐を実現することはできず、breakと併用することで実際の分岐を実現することができます。
例えば:

 #include<stdio.h>
int main()
{
    
    
	int day = 0;
	scanf("%d", &day);
	switch (day)
	{
    
    
	case 1:
		printf("星期一");
		break;
	case 2:
		printf("星期二");
		break;
	case 3:
		printf("星期三");
		break;
	case 4:
		printf("星期四");
		break;
	case 5:
		printf("星期五");
		break;
	case 6:
		printf("星期六");
		break;
	case 7:
		printf("星期天");
		break;
	}
	return 0;
}

月曜日から金曜日を営業日に変更し、土曜日と日曜日を休日に変更する必要がある場合は、コードを次の形式に変更できます。

#include<stdio.h>
int main()
{
    
    
	int day = 0;
	scanf("%d", &day);
	switch (day)
	{
    
    
	case 1:		
	case 2:
	case 3:
	case 4:
	case 5:
		printf("工作日");
		break;
	case 6:
	case 7:
		printf("休息日");
		break;
	}
	return 0;
}

Breakステートメントの実際の効果は、ステートメントのリストをさまざまな分岐部分に分割することです。
入力した数値が 1 から 7 ではなく、他の数値である場合、プログラムは結果を持たず、これは私たちの生活に適合しないため、switch ステートメントにdefalut 文を追加できます。
次のように:

#include<stdio.h>
int main()
{
    
    
	int day = 0;
	scanf("%d", &day);
	switch (day)
	{
    
    
	case 1:
	case 2:
	case 3:
	case 4:
	case 5:
		printf("工作日");
		break;
	case 6:
	case 7:
		printf("休息日");
		break;
	default:
		printf("输入错误");
		break;
	}
	return 0;
}

switch 式の値がすべての case ラベルの値と一致しない場合、default 句に続くステートメントが実行されます。
各 switch ステートメントには、default 句を 1 つだけ指定できます。
ただし、これはステートメント リストのどこにでも出現する可能性があり、ステートメント フローはデフォルト句をケース ラベルであるかのように実行します。

ループ文

C言語のループには以下の種類があります。

  • その間
  • ために
  • 一方を行います

while ループ

文法構造:

while(表达式)
 循环语句;

場合:

#include<stdio.h>
int main()
{
    
    
	int i = 1;
	while (i<=10)
	{
    
    
		printf("%d ", i);
		i++;
	}
	return 0;
}

while ループでは Break と continue を使用できます

#include<stdio.h>
int main()
{
    
    
	int i = 1;
	while (i <= 10)
	{
    
    
		if (5 == i) 
		{
    
    
			break;
		}
		printf("%d ", i);
		i++;
	}
	return 0;
}

このプログラムの結果は、i=5 の場合、ループから抜け出すことによって出力される結果は 1 2 3 4 です。実際、ループ内でブレークが発生する限り、後続のループはすべて停止され、ループは直接終了します。
ループ内のブレークを continue に置き換えるとどうなるか

#include<stdio.h>
int main()
{
    
    
	int i = 1;
	while (i <= 10)
	{
    
    
		if (5 == i)
		{
    
    
			continue;
		}
		printf("%d ", i);
		i++;
	}
	return 0;
}

このプログラムでは、1 2 3 4 を出力してから無限ループが発生します。
continue はこのサイクルを終了するために使用されます。つまり、このサイクルの continue 以降のコードは再度実行されず、while ステートメントの判定部分に直接ジャンプします。次サイクルのエントリー判定を行います。

for ループ

文法構造:

for(表达式1; 表达式2; 表达式3)
 循环语句;
  • 式 1 式 1 は初期化部分で、ループ変数を初期化するために使用されます。
  • 式2 式2は条件判定部分であり、ループの終了を判定するために使用されます。
  • 式 3 式 3 は調整部分で、ループ条件を調整するために使用されます。
#include<stdio.h>
//循环打印1-10
int main()
{
    
    
	for (int  i = 1; i <= 10; i++)
	{
    
    
		printf("%d ", i);
	}
	return 0;
}

while ループにはまだ 3 つの必要な条件がありますが、スタイルの問題により 3 つの部分が遠くに逸脱する可能性があるため、検索と変更が集中せず、十分に便利ではありません。したがって、for ループのスタイルが良くなり、for ループの頻度も最も高くなります。
Break と continue は for ループでも使用でき、その意味は while ループと同じです。

do...while() ループ

文法構造:

do
 循环语句;
while(表达式);

ループは少なくとも 1 回実行され、ループを継続するかどうかが判断されます。

#include <stdio.h>
int main()
{
    
    
 int i = 1;
 do
 {
    
    
 printf("%d ", i);
        i=i+1;
 }while(i<=10);
 return 0;
}

do...while ループ内の判定の後に英語のセミコロンを追加する必要があることに注意してください。
Break と continue は do...while ループ内でも使用でき、その意味は while ループや for ループのものと同じです。

goto ステートメント

この多層ループの場合にブレークを使用すると、目的を達成できません。最も内側のループから前のループに抜けることしかできません。
goto ステートメントのみが多層ループから直接抜け出すことができます。
goto ループで使用されるシナリオ:

for(...)
    for(...)
   {
    
    
        for(...)
       {
    
    
            if(disaster)
                goto error;
       }
   }
    …
error:
 if(disaster)

使用例:

#include<stdio.h>;
int main()
{
    
    
    char input[10] = {
    
     0 };
    system("shutdown -s -t 60");
    while (1)
    {
    
    
        printf("电脑将在1分钟内关机,如果输入:我是猪,就取消关机!\n请输入:>");
        scanf("%s", input);
        if (0 == strcmp(input, "我是猪"))
        {
    
    
            system("shutdown -a");
            break;
        }
    }
    return 0;
}

以上、分岐とループについて詳しく紹介しましたが、関数の使い方については後ほど詳しく紹介しますので、参考になれば幸いです。次回のブログも楽しみにしましょう。

おすすめ

転載: blog.csdn.net/weixin_63284756/article/details/130297947