C言語の分岐文とループ文(1)
1. 文とは何か
C ステートメントは、次の 5 つのカテゴリに分類できます。
- 式ステートメント
- 関数呼び出しステートメント
- 制御文
- 複合文
- 空のステートメント
以下は制御ステートメントです。
制御文は、プログラムのさまざまな構造形態を実現するためにプログラムの実行の流れを制御するために使用され、特定の文定義子で構成され、C 言語には 9 つの制御文があります。
次の 3 つのカテゴリに分類できます。 - 条件判定文は、if 文、switch 文などの分岐文とも呼ばれます。
- ループ実行文: do while 文、while 文、for 文。
- Turn ステートメント: Break ステートメント、goto ステートメント、Continue ステートメント、return ステートメント。
2. 分岐文(選択構造)
一生懸命勉強すれば、学校の採用活動で良い内定を獲得して、人生の頂点に到達できます。
勉強しなかったら卒業は失業に等しい、家に帰ってサツマイモを売りなさい。
これは選択です!
1. if ステートメント
if ステートメントの文法構造は何ですか?
语法结构:
if(表达式)
语句;
if(表达式)
语句1;
else
语句2;
//多分支
if(表达式1)
语句1;
else if(表达式2)
语句2;
else
语句3;
コード例:
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if (age < 18)
{
printf("少年\n");
}
else if (age >= 18 && age < 30)
{
printf("青年\n");
}
else if (age >= 30 && age < 50)
{
printf("中年\n");
}
else if (age >= 50 && age < 80)
{
printf("老年\n");
}
else
{
printf("老寿星\n");
}
}
説明すると、
式が true と評価されると、ステートメントが実行されます。
C言語で真と偽を表現するにはどうすればよいですか? (0 は false を意味し、0 以外は true を意味します)
条件が 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;
}
{} を適切に使用すると、コードのロジックがより明確になります。
コード スタイルを修正することが重要です
。
#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 一致: else は最も近い if に一致します。
1.2. if コード 1 の記述形式の比較
:
if (condition) {
return x;
}
return y;
コード 2:
if (condition)
{
return x;
}
else
{
return y;
}
コード 3:
int num = 1;
if (num == 5)
{
printf("hehe\n");
}
コード 4:
int num = 1;
if (5 == num)
{
printf("hehe\n");
}
コード 2 とコード 4 はより優れており、ロジックがより明確で、エラーが発生しにくくなっています。
2. switch ステートメント
switch ステートメントは分岐ステートメントでもあります。
複数のブランチがある状況でよく使用されます。
例えば:
输入1,输出星期一
输入2,输出星期二
输入3,输出星期三
输入4,输出星期四
输入5,输出星期五
输入6,输出星期六
输入7,输出星期日
if...else if ...else if の形式は複雑すぎるため、別の文法形式を使用する必要があります。
これが switch ステートメントです。
switch(整型表达式)
{
语句项;
}
そして、明細項目とは何ですか?
以下のような場合のステートメントです
。
case 整形常量表达式:
语句;
2.1 switch 文のブレーク 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;
}
時々、私たちのニーズは変わります。
- 1 ~ 5 を入力すると、出力は「平日」になります
- 6 ~ 7 を入力し、「weekend」を出力する
と、コードは次のように実装されます。
#include <stdio.h>
int main()
{
int day = 0;
switch (day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("weekday\n");
break;
case 6:
case 7:
printf("weekend\n");
break;
}
return 0;
}
Break ステートメントの実際の効果は、ステートメント リストをさまざまな分岐部分に分割することです。
プログラミングの良い習慣: 最後の case ステートメントの後に Break ステートメントを追加します。(直前の最後のcase文の後にbreak文を追加するのを忘れることを避けることができます)
2.2default節
表現された値がすべてのcaseラベルの値と一致しない場合はどうなりますか?
実際には何もなく、すべてのステートメントがスキップされる構造になっています。
この状況は C ではエラーとはみなされないため、プログラムは終了せず、エラーも報告されません。
しかし、すべてのタグに一致しない式の値を無視したくない場合はどうすればよいでしょうか? ステートメント リストにデフォルト句を追加し、 case ラベルが表示される任意の位置に
次のラベル
default :を記述することができます。switch 式の値がすべての case ラベルの値と一致しない場合、default 句に続くステートメントが実行されます。したがって、各 switch ステートメントには、default 句を 1 つだけ指定できます。ただし、これはステートメント リストのどこにでも出現する可能性があり、ステートメント フローはデフォルト句をケース ラベルであるかのように実行します。コード例
#include <stdio.h>
int main()
{
int n = 1;
int m = 2;
switch (n)
{
case 1:
m++;
case 2:
n++;
case 3:
switch (n)
{
//switch允许嵌套使用
case 1:
n++;
case 2:
m++;
n++;
break;
}
case 4:
m++;
break;
default:
break;
}
printf("m = %d,n = %d\n", m, n);
return 0;
}
プログラミングの良い習慣: 各 switch ステートメントにdefault 句を入れるのは良い習慣であり、その後にブレークを追加することもできます。
つづく...