目次
2.1 if ステートメントと if...else ステートメント
序文
C 言語では、分岐とループは非常に重要であり、基礎的な理論知識です。熟達することが、さらなる学習に重要な役割を果たします。この記事では、C 言語の分岐とループに関する体系的な知識を学ぶことができます。修正されることを願っています。
1. 文とは何ですか?
1. C ステートメントは、次の 5 つのカテゴリに分類できます。
式ステートメント、関数呼び出しステートメント、制御ステートメント、複合ステートメント、空のステートメント。
2. 制御ステートメント:
制御文は、プログラムのさまざまな構造形態を実現するためにプログラムの実行の流れを制御するために使用され、特定の文定義子で構成され、C 言語には 9 つの制御文があります。
次の 3 つのカテゴリに分類できます。
①条件判定文は、if文、switch文などの分岐文とも呼ばれます。
②ループ実行文:do while文、while文、for文。
③ Turning 文:break 文、goto 文、 continue 文、return 文。
2. 分岐文(構造体の選択)
2.1 if ステートメントと if...else ステートメント
2.1.1 if ステートメント
1. If ステートメントの構文:
2. if の後に { } がない場合: デフォルトでは、if 条件が true の場合に次のステートメントのみが実行されます。
2.1.2 if...else ステートメント
1.if...else ステートメントの構文:
注: いわゆる else if ステートメントの使用法もあります。
if(表达式1) if(condition){
{ return x;
语句1; }
语句2; return y;
…… //上面代码的意思是条件为真返回x,条件为假返回y。
}
else if(表达式2)
{
语句3;
语句4;
……
}
else
{
语句5;
语句6;
……
}
2.1.3 ネストされた使用
1. C 言語では、ネストされた if-else ステートメントは正当です。つまり、1 つの if または else ifステートメントを別のifステートメント または else ifステートメント 内で 使用できます 。
2.1.4 他をぶら下げる
1.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;
}
2.2 switch ステートメント
1. switch ステートメントを使用すると、変数が複数の値と等しいかどうかをテストできます。それぞれの値は case と呼ばれ、テスト対象の変数は switch caseごと にチェックされます。
2.2.1 switch ステートメント
1. 文法:
注記:
① switch文 の 式は 定数式であり、浮動小数点型ではなく整数型または列挙型である必要があります。
② スイッチ内には任意の数の case ステートメントを含めることができます。各ケースの後には、比較する値とコロンが続きます。
③ケースの 定数式は スイッチ内の変数と同じデータ型で、定数またはリテラルでなければなりません。
④ テスト対象の変数が case 内の定数と等しい場合、case に続くステートメントは Break ステートメントに遭遇するまで実行されます。
⑤ Break 文に遭遇すると switch は終了し、制御フローは switch 文の次の行にジャンプします。
⑥すべてのケースに Breakを含める必要はありません。case ステートメントに Break が含まれていない場合、制御フローは Break が検出されるまで後続の Case を続行します。
⑦switch ステートメントには、 switch の最後に表示されるオプションのデフォルトケースを含めることができます。上記のいずれのケースにも当てはまらない場合、デフォルトのケースを使用してタスクを実行できます。デフォルトの場合、 breakステートメント は必要ありません。
2.2.2 ネスティング
例: 性別に応じた勤続年数報酬アプレットを満たす
#include<stdio.h>
int main(void)
{
char sex;
int age ;
printf("请输入你的性别简称!男(M),女(F)\n");
scanf_s("%c", &sex);
switch (sex)
{
case 'M':
case 'm':
printf("你的性别为“男”请你进入测试!\n");
printf("请输入你的工龄!\n");
scanf_s("%2d",&age);
switch (age)
{
case 5:
printf("奖励iphone一台!!\n");
break;
case 10:
printf("奖励汽车一辆!!\n");
break;
case 15:
printf("奖励小楼一栋!!\n");
break;
default:
printf("抱歉,未满足奖励条件或者超出工龄!!\n");
break;
}
break;
case 'F':
case 'f':
printf("你的性别为“女”请你进入测试!\n");
printf("请出入你的工龄!\n");
scanf_s("%2d",&age);
switch (age)
{
case 5:
printf("奖励iphone一台!\n");
break;
case 10:
printf("奖励名牌化妆品一套!\n");
break;
case 15:
printf("奖励爱马仕包一个!\n");
break;
default:
printf("抱歉, 未满足奖励条件或者超出工龄!!\n");
break;
}
break;
}
return 0;
}
2.2.3 デフォルト
1. 文法: (大文字でも書けます)
default:
语句;
2. 各スイッチには、デフォルト ステートメントを 1 つだけ含めることができます。
3. ループ文
3.1 while 文
3.1.1 構文
C 言語のwhileループ ステートメントは、指定された条件が true である限り、 ターゲット ステートメントを繰り返し実行します。
3.1.2 ブレーク&コンティニュー
① continue: continue はこのサイクルを終了するために使用されます。つまり、このサイクルの continue の背後にあるコードは再度実行されず、while ステートメントの判定部分に直接ジャンプします。次サイクルのエントリー判定を行います。
②実際には、ループ内でブレークが発生する限り、後続のループはすべて停止され、ループは直接終了します。つまり、while でのブレークは、ループを永久に終了するために使用されます。
3.2 for ループ
3.2.1 構文
for(表达式1; 表达式2; 表达式3)
{
循环语句;
}
//表达式1:变量初始化
//表达式2:循环条件
//表达式3:自增衡量变量
3.2.2 ブレーク&コンティニュー
① continue はこのサイクルを終了するために使用されます。つまり、このサイクルの continue 以降のコードは再度実行されず、直接 for 文の判定部分にジャンプします。次サイクルのエントリー判定を行います。(ただし、自動インクリメントされるメジャー変数はスキップされません)
②実際には、ループ内でブレークが発生する限り、後続のループはすべて停止され、ループは直接終了します。したがって、for のブレークインはループを永久に終了するために使用されます。
3.2.3 for ループのバリアント
#include <stdio.h>
int main()
{
for(;;)
{
printf("hehe\n");
}
return 0;
}
注: for ループ内の初期化部分、判定部分、調整部分は省略することもできますが、初心者には問題が発生しやすいため、省略することはお勧めしません。
例: 最初のコードは 9 hehe を出力できますが、2 番目のコードは 3 hehe しか出力できません。
int i = 0;
int j = 0;
//这里打印多少个hehe?
for(i=0; i<10; i++)
{
for(j=0; j<10; j++)
{
printf("hehe\n");
}
}
int i = 0;
int j = 0;
//这里打印多少个hehe?
for(i=0; i<10; i++)
{
for(j=0; j<10; j++)
{
printf("hehe\n");
}
}
3.3 do...while ループ
3.3.1 構文
特徴: 最初にループし、次に判断する、少なくとも 1 回ループする
do
{
循环语句1;
循环语句2;
……
} while(表达式)
3.3.2 続行と中断
1.break: ループを直接スキップします。(このループを永久に終了します)
2.続行: このサイクルを終了し、サイクルの判定部分に直接ジャンプします。
3.4 goto文
- C 言語には、自由に悪用できるgoto ステートメントと、ジャンプをマークするラベルが用意されています。
- C 言語のgotoステートメントを使用すると、同じ関数内のマークされたステートメントに無条件で制御を移すことができます(異なる関数はジャンプできません)。
- goto ステートメントはどのプログラミング言語でも推奨されません。プログラムの制御フローがわかりにくくなり、プログラムが理解しにくくなり、修正が難しくなるからです。
3.4.1 構文
3.4.2 使用法
ただし、goto ステートメントは依然として役立つ場合があり、最も一般的な使用法は、深くネストされた構造でプログラムの処理を終了することです。
例: 2 つ以上のループ層から一度にジャンプします。この多層ループの場合にブレークを使用すると、目的を達成できません。最も内側のループから前のループに抜けることしかできません。
goto 言語が本当に適しているシナリオは次のとおりです。
for(...)
for(...)
{
for(...)
{
if(disaster)
goto error;
}
}
…
error:
if(disaster)
// 处理错误情况
3.4.3 シャットダウン手順
#include<stdio.h>
int main()
{
char input[100] = { 0 };
system("shutdown -s -t 90");
printf("你的电脑将在1分半内关机,若不想关机,请输入lim x[(x^2 + 100)^1/2 + x]在x趋于无穷的答案\n");
again:
scanf("%s", input);
if (strcmp(input, "-50") == 0) {
system("shutdown -a");
printf("回答正确,已取消关机");
}
else {
printf("回答错误,请重新输入\n");
goto again;
}
return 0;
}