分岐およびループ文
声明とは何ですか?
C ステートメントは、次の 5 つのカテゴリに分類できます。
- 式ステートメント
- 関数呼び出しステートメント
- 制御文
- 複合文
- 空のステートメント (空のステートメントは、このステートメントが必要だが、このステートメントには何も実行させたくないことを意味します)
制御ステートメントは後で紹介します。
制御ステートメントは、プログラムのさまざまな構造方法を実現するために、プログラムの実行フローを制御するために使用されます。制御ステートメントは、特定のステートメント定義子で構成されます。C 言語
には、 9種類の制御文。
は次の 3 つのカテゴリに分類できます。 - 条件判定文は、if 文、switch 文などの分岐文とも呼ばれます。
- ループ実行ステートメント: do while ステートメント、while ステートメント、for ステートメント。
- Turn ステートメント: Break ステートメント、goto ステートメント、Continue ステートメント、return ステートメント。
分岐ステートメント (選択構造)
一生懸命勉強しなければ、家に帰って農業をするでしょう。一生懸命勉強すれば、良い仕事に就くことができます。それはあなたの選択です。
選択肢には、2 つのうち 1 つ、3 つのうち 1 つ、および多数のうち 1 つが含まれます。
1.if ステートメント
if ステートメントの文法構造:
//单分支:
if(表达式)
语句;
//双分支:
if(表达式)
语句;
else
语句;
//多分支:
if(表达式)
语句;
else if(表达式)
语句;
else if(表达式)
语句;
........
else
语句;
注:
ステートメントが true の場合、ステートメントは実行されます。false の場合、ステートメントは実行されません。C 言語では、0 は false であり、そうではありません。 -0 は真です。
if 括弧内の式は、値を返す関数と同様に、値を持つ式を指します。
条件が true の場合に複数のステートメントを実行する場合、コード ブロックをどのように使用すればよいでしょうか。
#include <stdio.h>
int main()
{
if(表达式)
{
语句列表1;
}
else
{
语句列表2;
}
return 0;
}
ここの { } はコード ブロックです。
1.1 このコードを記述するときは、else を空のままにしてください
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
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 = 2;
if(a == 1)
{
if(b == 2)
{
printf("hehe\n");
}
}
else
{
printf("haha\n");
}
return 0;
}
このように、if else がどれに対応するのかが一目でわかるため、コードのスタイルは非常に重要であり、適切なコーディング スタイルを使用するとロジックがより明確になります。
注:
else には、それに最も近い if が付けられます。
2. switch ステートメント
switch ステートメントも分岐ステートメントですが、複数の分岐に適しています。
例:
入力 1、出力 月曜日
入力 2、出力 火曜日
入力3. 水曜日を出力
4 を入力して木曜日を出力
5 を入力して金曜日を出力
6 を入力して土曜日を出力
入力 7、出力 日曜日
if...else if... を使用すると、複雑すぎて面倒になります。
switch ステートメントの構文形式:
switch(整型表达式)
{
语句项;
}
明細項目とは何ですか?
case(整型常量表达式):
语句;
ステートメント項目は次の case ステートメントです
switch ステートメントを使用して上記の例を実装しましょう
#include <stdio.h>
int main()
{
int day = 0;
switch(day)
{
case 1:
printf("星期一\n");
break;
case 2:
printf("星期二\n");
break;
case 3:
printf("星期三\n");
break;
case 4:
printf("星期四\n");
break;
case 5:
printf("星期五\n");
break;
case 6:
printf("星期六\n");
break;
case 7:
printf("星期天\n");
break;
}
return 0;
}
ここでの Break は、switch ステートメントの分岐から飛び出す効果を実現します。
Break ステートメントがない場合は、常にステートメントを 1 つずつ順番に実行します。
#include <stdio.h>
int main()
{
int day = 0;
switch(day)
{
case 1:
printf("星期一\n");
case 2:
printf("星期二\n");
case 3:
printf("星期三\n");
case 4:
printf("星期四\n");
case 5:
printf("星期五\n");
case 6:
printf("星期六\n");
case 7:
printf("星期天\n");
}
return 0;
}
break ステートメントなしで 1 を入力すると、その後に続くすべてが出力されます。
case ステートメントの項目は、入力した内容です。たとえば、1 を入力してから go となります。 case1から:。
プログラミングの推奨事項:
最後の case ステートメントの後に Break ステートメントを追加します。
(これを書いた理由は、最後の case ステートメントの後に Break ステートメントを追加するのを忘れないようにするためです)。
デフォルト句
式の値がすべての case タグの値と一致しない場合はどうなりますか?
実際には、すべてのステートメントがスキップされる構造になっています。
この状況は C ではエラーとみなされないため、プログラムは終了せず、エラーも報告されません。
しかし、すべてのタグに一致しない式の値を無視したくない場合はどうすればよいでしょうか?
ステートメント リストにデフォルト句を追加し、次のラベルを記述することができます。
デフォルト:
いずれの場合もラベルが表示される場合があります。
switch 式の値がすべての case ラベルの値と一致しない場合、default 句に続くステートメントが実行されます。
したがって、各 switch ステートメントには、default 句を 1 つだけ指定できます。
ただし、これはステートメント リストのどこにでも出現でき、ステートメント フローは case タグと同じようにデフォルト句を実行します。
プログラミングの良い習慣:
各 switch ステートメントにdefault 句を入れるのは良い習慣です。最後にブレークを追加することもできます。
ループ文
C 言語には 3 つのループ ステートメントがあります。
while ループ
if ループ
do while ループ まず while ループの構文構造を見てみましょう。
1.while ループ
//与if语句很相似
while(表达式)
{
循环语句;
}
while ループの実行の流れ: While ループは、まず判定式に入り true かどうかを判定し、ステートメントを実行し、ループ変数に 1 を加算します。false の場合は、ループ変数から抜け出します。ループしており、判定条件は少なくとも 1 回実行する必要があります。
例を示します:
1 ~ 10 の数字を出力します
#include <stdio.h>
int main()
{
int i=0;//定义一个初始变量
while(i<=10)//这是判断条件
{
printf("%d",i);
i++;//调整部分
}
return 0;
}
while ループ内の Break ステートメントの役割を見てみましょう。
まずコードを書いてみましょう
#include <stdio.h>
int main()
{
int i=0;//定义一个初始变量
while(i<=10)//这是判断条件
{
if(i==5)
break;
printf("%d",i);
i++;//调整部分
}
return 0;
}
実行結果から Break ステートメントを派生して、ループから直接抜け出すことができます。
デバッグを通じて結果を検証することもできます。
これらの検証方法を通じて、while ステートメント内の Break ステートメントの役割は、ステートメントを完全に終了することであると結論付けます。ループ. 、ブレーク ループに遭遇する限り、ループは終了します。
次に、while ループに対する continue の影響を調べてみましょう
int main()
{
int i = 1;
while (i <= 10)
{
if (i == 5)
continue;
printf("%d ", i);
i++;
}
return 0;
}
実行結果からすると、1、2、3、4 を出力すると無限ループとなり、 continue 文以降が実行されず、調整部分が調整できなくなります。 a> まず、for ループの構文構造を見てみましょう 2. for ループ ループを永久に終了します。ブレーク ループに遭遇する限り、 、ループは終了します while ループ内のブレークの役割: このループの後のコードをスキップして、次の判断を行うかどうかを確認するための判断部分 while ループ内の continue の役割: 要約すると:
分析の結果、while ループの continue ステートメントの効果は、このループの後のコードをスキップして、判定部分に直接進み、処理するかどうかを確認することであると結論付けました。次の判断をします。
int main()
{
for(表达式1;表达式2;表达式3)
{
循环语句;
}
return 0;
}
for ループの実行プロセス: 最初に初期化部分を実行し (1 回だけ実行されます)、次に判定部分を実行し、次にループ ステートメントを実行し、最後に調整部分を実行します。
例として 1 ~ 10 を画面に出力します
int main()
{
int i = 0;
for (i=1;i<=10;i++)
{
printf("%d ", i);
}
return 0;
}
いくつかの for ループと while ループを比較すると、for ループの方が while ループよりも単純で効率的であることが明らかにわかります。
ブレークの影響を調べ続けてみましょう。 for ループのステートメント
int main()
{
int i = 0;
for (i=1;i<=10;i++)
{
if (i == 5)
break;
printf("%d ", i);
}
return 0;
}
実行結果:
実行結果から、break ステートメントは for ループや while ループと同様にループを直接終了していることがわかります。
for ループにおける Break の役割:
ループを永久に終了します。ブレーク ループに遭遇する限り、ループは終了します。
for ループ内の continue ステートメントの役割を見てみましょう
int main()
{
int i = 0;
for (i=1;i<=10;i++)
{
if (i == 5)
continue;
printf("%d ", i);
}
return 0;
}
実行結果:
実行結果に基づいて、i が 5 に等しい場合、次のステートメントがスキップされ、調整部分に到達すると推測されます。
結論: continue の後のステートメントをスキップして、調整部分に直接進みます。
提案:
- for ループが制御を失わないようにするために、for ループ本体内のループ変数を変更しないでください。
- for ループのループ制御変数は、「前に閉じてから開く間隔」の記述方法を採用することをお勧めします。
注:
初期化、判定部、調整部は全て省略可能ですが、判定部を省略すると判定部が常に真となることになり、無限ループに陥ります
3 . do while ループ
do while ループの構文:
int main()
{
do
{
//循环语句;
} while (表达式);
return 0;
}
do while ループの実行フロー:
最初にループ ステートメントを実行し、次に調整部分に入り、最後に判定ステートメントに入ります。少なくともループ本体は実行する必要があります。一度。ループ本体にはループ ステートメントと調整部分が含まれます
上記の例を引き続き使用してコードを記述します
int main()
{
int i = 1;
do
{
printf("%d ", i);
i++;
} while (i<=10);
return 0;
}
do whileループにおけるブレークの役割
int main()
{
int i = 1;
do
{
if (i == 5)
break;
printf("%d ", i);
i++;
} while (i<=10);
return 0;
}
実行結果:
実行結果によると、do while ループ内の breal ステートメントには最初の 2 つのループと同じ効果があることがわかります。< a i=2> Break in do while ループの役割: ループを永久に終了します。break ループに遭遇する限り、ループは終了します。
do while ループにおける continue の役割
int main()
{
int i = 1;
do
{
if (i == 5)
continue;
printf("%d ", i);
i++;
} while (i<=10);
return 0;
}
実行結果:
実行結果から、 continue ステートメントは do while ループと while ループで同じ効果があることがわかります。
do while ループ内の continue の役割:
このループの後のコードをスキップし、判定部分に直接移動して、次の判定が行われるかどうかを確認します< /a >
goto语句
C 言語には、自由に悪用できるジャンプをマークする goto ステートメントとラベルが用意されています。
理論的には goto ステートメントは必要ありませんが、実際には goto ステートメントがなくてもコードは簡単に記述できます。
ただし、状況によっては goto ステートメントが依然として役立ちます。最も一般的な使用法は、特定の深くネストされた構造の処理を終了することです。
。
例: 2 つ以上のレベルのループから一度にジャンプします。
複数レベルのループの場合、break を使用しても目的は達成されません。最も内側のループから抜け出して、前のレベルのループに戻ることのみが可能です。
goto ステートメントを使用したシナリオの例を示します。
シャットダウン プログラム
#include<stdlib.h>
int main()
{
char input[20] = {
0 };
system("shutdown -s -t 60");
again:
printf("本机器在1分钟之后关机,如果输入GGband就取消关机\n");
scanf("%s", &input);
if (strcmp(input, "GGband") == 0)
{
system("shutdown -a");
}
else
{
goto again;
}
return 0;
Goto ステートメント: 同じ関数内でのみジャンプでき、関数間ではジャンプできません。
この章は終わりです...