プログラミングC : 投稿 6 – Cでのループ

1. 例えば、開口部

プリントアウトあなたの名前それほど単純ではありません. 書かれた非常に簡単なプログラム.

#include <stdio.h>

int main()
{
    printf("Nguyen Van Quan\n");
    return 0;
}

OK. だから今、私はあなたがプリントアウトしたいです 10 回あなたの名前?

#include <stdio.h>

int main()
{
    printf("Nguyen Van Quan\n");
    printf("Nguyen Van Quan\n");
    printf("Nguyen Van Quan\n");
    printf("Nguyen Van Quan\n");
    printf("Nguyen Van Quan\n");
    printf("Nguyen Van Quan\n");
    printf("Nguyen Van Quan\n");
    printf("Nguyen Van Quan\n");
    printf("Nguyen Van Quan\n");
    printf("Nguyen Van Quan\n");
    return 0;
}

非常にシンプル, ただコピー 10 printfのラインが終了します. しかし、そうでない場合は 10, すなわち 1000 以上の? もちろんコピーは現実的ではありません.

実際、, ソフトウェアは、上記の例のように何度も繰り返される作業になります. またはあなたのソフトウェアのような従業員のリストを印刷します, すべての従業員情報 (コンテンツ) 異なるが、構造は非常に似ています. または単にあなたは、Facebookをサーフィンして話を友人から見ること, ニュースは、同じ内容のではなかったが、構造が非常に似ています.

繰り返しは、そのような必要なタスクを達成するために、, 私たちは、からなるループ構造を使用します。 のために, 同時に, 一方を行います. このレッスンで私たちはループを学びます のために.

私たちは例を改定します 10 一度は、次のように命名します:

#include <stdio.h>

int main()
{
    int i;
    for (i = 1; i <= 10; i++)
    {
        printf("Nguyen Van Quan\n");
    }
    return 0;
}

上記のコードとして, 私が使用しました ループ 彼の名前で仕事をします 10 時間, ととも​​に 1000 私もいくつかを取り替え簡単な回 10 番号 1000 (あなたが試すことができます). コードを見て、あなたはまた、私たちが基本的な事柄を視覚化することができます.

2. ループ構造

ループ

構文, フローチャート、およびループの振る舞い

私たちはループ構文を持っており、それがどのように動作するかを見る上の写真を見てみると、かなり明瞭で理解し易いです. しかし、あなたは注意する必要があります:

  • 無セミコロンのためのコマンドの後.
  • 3 セミコロンで区切られたループの表現 (;), 表現は、存在しなくてもよい 1,2 または両方 3 これは、セミコロンを調達する必要があります.
  • 式 1 のためにダイヤルする場合、必ず一度だけ計算される.
  • 式 2, 3 繰り返し可能な親族のために.
  • 式 1, 2, 3 セミコロンで区切る必要があります ( ; ), 表現は、存在しなくてもよい 1,2 または両方 3 これは、セミコロンを調達する必要があります.
  • 表現の場合 2 いいえ, ループは常に正しいと考えられている. 休憩を取るために、ループを脱出したい, 後藤HOACリターン.
  • 各発現のためにカンマで区切られた人間の一連の式のように書くことができる。. 左から右へ、子式を決定される. シーケンス最初の式の式の善悪のように 2 最後の式によって決定される.
  • 体内に (blockコマンド) 一つ以上の他の制御構造を含んでいてもよい, 別のループ.
  • break文を持つ場合には, 最も深いループ構造は終了します.
  • そこthedung後藤体内に目的の場所にループを終了.
  • 体内では、特定の機能に戻るにはリターンのために使用することができます.
  • 体内では、ループの先頭に移動し続けるコマンドで使用することができます (体内での残りのステートメントをスキップ).

リターンコードの例:

#include <stdio.h>

int main()
{
    int i;
    for (i = 1; i <= 10; i++)
    {
        printf("Nguyen Van Quan\n");
    }
    return 0;
}

プロセスは次のように動作します:

  • ステップ 1: 式を実行します 1 つまり、私は=割り当て 1.
  • ステップ 2: 式を実行します 2 つまり、私を確認します <= 10 しない. 私は=ですか 1 万一この右=>実行コマンドブロックに印刷されている名前.
  • ステップ 3: 式を実行します 3 私までの増加すなわち 1 ユニット. 今私= 2.
  • ステップ 4: 戻る表現 2. 私をチェック < 10 しない. 私は=ですか 2 べきまだ正しい=>実行コマンドブロック, 名前にすなわち.
  • ステップ 5: 式を実行します 3 つまり、私を上げます 1. 今私= 3.
  • ステップ 6. バック式2、…
  • ステップ….
  • 工程X: 式を実行します 3, 私は増加します 1. 今私= 10.
  • ステップのx + 1: 戻る表現 2 つまり、私を確認します <= 10. 真=>実行コマンドブロックプリント名のまま.
  • ステップX + 2: 式を実行します 3, 私は増加します 1. 今私= 11.
  • ステップX + 3: 戻る表現 2, 私をチェック <= 10. 今、それは間違って私がいたので、 11 =>終了ループ. 次のピア・コマンド・ループを実行します (return文 0 下に).

OK. 今、あなたは、ループの基本的な理解を持っています. さらにいくつかの例をし続けます.

例 1:

プリントアウトするプログラムを書きます 15 回あなたの名前, 一緒に次の順序で:

  1. グエン·ヴァン·泉
  2. グエン·ヴァン·泉
  3. グエン·ヴァン·泉
  4. ….

ハム… 数の上昇を導出する方法? あなたは、forループのステップを実行するプロセスを見ることができます? 我々は持っています 1 私は昇順をオンにします… だから我々はそれを利用します.

#include <stdio.h>

int main()
{
    int i;
    for (i = 1; i <= 10; i++)
    {
        printf("%d.Nguyen Van Quan\n", i);
    }
    return 0;
}

例 2:

でもから正の数をプリントアウトしてください。 1 へ 20 トップ 1 現在, スペースで区切っ.

ちょうど私がから実行するための 1 へ 20 私たちは、印刷された数が偶数であるチェックします. パリティをチェックするには, 私たちは、部門がバランスを取っリコール. 私は分裂した場合 2 残りの 0 さえしなければなりません.

#include <stdio.h>

int main()
{
    int i;
    for (i = 1; i <= 20; i++)
    {
        if( i % 2 == 0) 
        {
            printf("%d ", i);
        }
    }
    return 0;
}

OK. しかし、私はあなたが見下ろし前にもう少し考えたいとコードヒント. 偶数まだこの記事に行う場合はどのようにテストを使用することができませんでした?

固定されていないための表現を覚えておいてください, 我々はそれを変更することができます. そして、道の増加Iを変更. 私たちは、私が開始与えます 2 それぞれ増加し、上昇 2 ユニット.

#include <stdio.h>

int main()
{
    int i;
    for (i = 2; i <= 20; i = i + 2)
    {
        printf("%d ", i);
    }
    return 0;
}

前のタイムコードよりも明らかに優れてこのコード. 私たちは、私を高める上で 2 指令部 I = I + 2.
これは、割り当てiは + 2 私のために, 私と私はコマンドは比較になりません + 2.

例 3:

から合計偶数の整数 1 へ 20.

#include <stdio.h>

int main()
{
    int i;
    int s = 0;
    for (i = 2; i <= 20; i = i + 2)
    {
        s = s + i;
    }

    printf("S = %d\n", s);

    return 0;
}

上記のコードでのお知らせ, 我々は宣言する 1 変数s (合計は、スタンド) 合計保存します. 私が増加すると、我々はSコマンドに計上するたびに S = Sで + で.

例 4:

奇数の合計から 1 へ 20 しかし合計が超えるまで 15 その後、停止.

ここでは、奇数を合計しています, 偶数番号のようなだけ, しかし合計がより大きい場合 15 その後、我々は停止します, プラスもうありません.

#include <stdio.h>

int main()
{
    int i;
    int s = 0;
    for (i = 1; i <= 20; i = i + 2)
    {
        if(s <= 15)
        {
            s = s + i;
        }
    }

    printf("S = %d\n", s);

    return 0;
}

sがまだ以下のときだけでチェック 15 その後、我々は追加しました. 私たちは、= Sを持っています 1 + 3 + 5 + 7 = 16.

しかし、あなたが気づいた場合, ときS> 15, 我々はまだ私まで、実行中のループのそれに追加されません> 20. これは、反復に実行しようとしているI = 9, 11, 13, 15, 17, 19. したがって、それは無駄になります, 余分やプログラムが長く走らせます. だから我々は、コマンドが実行された時点でループを壊す必要があるとき、私= 7. そのように使用することができます行うには、 ブレーク, または 後藤, しかし、あなたは、シンプルさと安全のためにお勧めしますブレークを使用する必要があります.

#include <stdio.h>

int main()
{
    int i;
    int s = 0;
    for (i = 1; i <= 20; i = i + 2)
    {
        if(s <= 15)
        {
            s = s + i;
        } else 
        {
            break;
        }
    }

    printf("S = %d\n", s);

    return 0;
}

例 5

整数nを入力します。, 偶数の合計が入力されました.

#include <stdio.h>

int main()
{
    int i, n, x;
    int s = 0;

    printf("Enter n = ");
    scanf("%d", &n);

    for (i = 1; i <= n; i++)
    {
        printf("Enter number %d : ", i);
        scanf("%d", &x);

        if(x % 2 != 0) continue;

        s = s + x;
    }

    printf("S = %d\n", s);

    return 0;
}

この例では, 私はどのようにコマンドを使用する方法を指示します 続ける. このコマンドは、資本のエフェクトループをエスケープしませんが、式に戻っています 3 その背後に注文なし. xがさえコマンドを入力していない。ここならば右の私を高めるために実行し、増分コマンドSをスキップ.

エクササイズ:

  1. 番号をプリントアウトするプログラムを書いて、n及びnは数と推定されています.
  2. テストプログラムを書きます 1 素数はありません? 素数は正の整数であります 2 条約はあります 1 それ自体. 例えば号 2, 3, 5, …
  3. テストプログラムを書きます 1 完全数が存在していないです? 完全数は正の整数推定の等しい合計であります 2 回それを. の例 6 コンベンション 1, 2, 3, 6 総 1 + 2 + 3 + 6 = 12 (等しい 2 時間 6).
  4. = Sを計算するプログラムを書きます 1 + 1/2 + 1/3 + … + 1/N
  5. から奇数の二乗を計算するプログラムを書きます 1 nに.
  6. Nを計算するプログラムを書きます! nは知っています! = 1.2.3.4…N
  7. シーケンスF知られているフィボナッチ数列のn番目をカウントするプログラムを作成(N) = F(-1) + F(N-2), N> 2 とf(1) = 1, F(2) = 1.
  8. 長さでプログラムを書きます, 矩形の幅. 長方形のアスタリスクを描きます (*) サイズ入力されました.