C言語のループ文とネスティング(誤解、わかりやすい)

目次

序文

例 1:

例 2:

 for ループでの continue の使用:


序文

皆さんこんにちは。C言語を勉強したばかりの初心者の方は、forループは比較的使いやすいと思っていると思いますが、forループ文を使ってプログラムを書くと、書いたコードの結果が意図したものと異なる場合があります。 . 私が書いたことは正しいと思いますが、実際は間違っています。私が最初に学んだときも同じでした。今から 2 つのプログラムを共有します。1 つは単一のループで、もう 1 つはネストされた for ループです。これらは古典的で、間違いを起こしやすい誤解です。見てみましょう。

まず、for ループ ステートメントを理解しましょう。知っている場合は、直接スキップして例を見てください。

for ループが 3 つの部分に分かれていることは誰もが知っています。

for(式1;式2;式3)

1 : 初期値を割り当てるために使用できます。複数のステートメントを記述することができますが、これらの複数のステートメントはカンマで区切る必要があります。(書かないこともできますので、必要に応じて書いてください)

2 : 条件が true かどうかを判断します。true の場合は、ループ本体を入力します (省略することもできます。そうでない場合は、デフォルトで 1 が設定されます。これは、常に true であることを意味し、無限ループになります。ループから抜け出したい場合は、ループ本体にbreakステートメントを記述する必要があります)

3 : 通常、ループ変数の自己インクリメントまたは自己デクリメントを定義するために使用されます (省略可能、このループ変数はループ本体に設定できます)

したがって、これら 3 つのステートメントは省略できます。ただし、3 つの式を区切るセミコロン「;」は省略できないことに注意してください。

例 1:

実際、一見すると 2 つのプログラムは同じですが、よく見ると大きく異なります。最初の for ループには '{}' が含まれていますが、2 番目のループには含まれていません。そうすると、2 つのプログラムの結果は異なります。さらに、これに注意を払わずに、将来、そして結果 しかし、それらは完全に異なります。2 つの結果は次のとおりです。

中括弧がない場合は、他のループ本体と同様に、その下の最初のステートメントが true であるかどうかのみを判断するため、 true の場合は、このステートメントを実行した後、ループの先頭に戻り、再度ループに入るかを判断します。、前のステートメントではなく、次のステートメントに進みます。ループの最後まで、次のステートメントを実行します。真でない場合は、ループの先頭に直接戻り、条件が満たされなくなるまでループに入るかどうかを再度判断し、ループが終了して終了します。ループから飛び出す。次のステートメントを実行します。for ステートメントとその下の最初のステートメントは、ループ本体構造を形成します。中括弧がある場合、for ステートメントと中括弧内の内容はループ本体構造を形成し、中括弧内のステートメントは順番に実行されます。ループ。(小さなスケッチと組み合わせて)

例 2:

上記をマスターできた方は、この手順の結果について考えてみてください。結果は最後に残しておきます。理解できた友達は読み飛ばして結果を直接読んでください。理解できなかった友達は説明を読んでください。

このプログラムは入れ子になっていること以外は上記のプログラムと同じで、内側の for 文をインナーループ、外側の for 文をアウターループと呼びます。外側のループを 1 回実行し、内側のループを 1 回実行し、すべての実行が完了したら外側のループに戻り、再度内側のループに入るかを判断します。

最初に外側のループに入り、iの値は0 、次に第 2 レベルのループに入り、jの初期値0 ; 内側のループに入り、a[i]がb[j]に等しいかどうかを判断し、等しい場合は、第 2 レベルのループから飛び出て、第 1 レベルのループi++を実行します。このように理解すると、上記のことについてあまり知らないことになります実際、ここでは内側のループから飛び出て実行するわけではありません。外側のループ ステートメントを実行しますが、次のステートメントをヒットするまで順番に実行するには、中括弧に移動し、中括弧内のコンテンツを終了して、外側のループに戻ります。for ループでは、その下の最初のステートメントのみが実行されます。a[i]の値がb[ j]と等しくない場合または確立されていない場合は、j++の内部ループの先頭に戻ります。その後、ループの最後まで内側のループに再度入るかどうかを判断します。以下の条件が満たされない場合、ループは終了し、自動的に外側のループの先頭に戻ります。その下の改行は実行されません。外側のループが終了するまで実行されます同様に、内側のループ内に中かっこ '{}' がある場合、それらは順番に実行されます。最初のステートメントが正しいかどうかに関係なく、以下は順番に進みます。(これも小さなスケッチと組み合わせています)

 for ループでの continue の使用:

小さな栗を使って説明してみましょう。

int main()
{
    int i;
    for(i=1;i<6;i++)
    {
	   if(i%2)printf("*");
       else continue;
       printf("#");}
	return 0;
}

この結果を見てください: *#*#*#

まず continue の役割を紹介しますが、その用途はサイクル全体ではなく、現在のサイクルを終了することです。

友人の中には、結果は次のように思う人もいると思います。

スケッチを渡して見てみましょう。

 間違えた友人が括弧付きのループをまだ理解していない場合は、 if-continuity もステートメントの 1 つであり、これを実行して'*'を出力すると、実行後も下方向に実行を続けて '#' を出力します。 if continue を実行すると、ループ文の先頭に直接戻り、式 3 を実行します。

さて、この記事はここまでです。混乱している人たちの役に立てば幸いです。何か間違っている場合は、すぐに修正してください。これ以上間違いを犯さないでください。(マニュアル面白い)。

おすすめ

転載: blog.csdn.net/weixin_67118900/article/details/123695279
おすすめ