【C言語を取り戻す】 4. ループプログラミング(判定後条件ループ、初回判定条件ループ、多重ループ、代表例:平均成績計算、素数出力、お金百羽問題)

目次

序文

4. サイクルプログラミング

4.1 平均成績の計算 - ラウンドロビン手順

4.1.1 判定後の条件のループ        

a. 文法

b. 代表的な例

4.1.2 最初に条件を決定するループ

a. 文法

b. 代表的な例

4.1.3 for ステートメント

a. 文法

b. 代表的な例

4.2 クラス内の各人の平均スコアを計算します - 複数のサイクル

4.2.1 100 以内の素数を出力する

4.2.2 百の金と百の鶏の問題 


序文

チャットGPT

        C は、1970 年代初頭にベル研究所のデニス・リッチーによって開発された汎用の手続き型コンピューター プログラミング言語です。これは、システムレベルのプログラミングとアプリケーション開発のための、シンプルで効率的で移植可能な言語となるように設計されています。

C 言語の主な機能の一部を次に示します。

1.構造化プログラミング: C 言語は構造化プログラミングをサポートしています。これにより、逐次実行、条件文 (if-else や switch など)、ループ構造 (for や while など) が提供され、プログラムが読みやすく、理解しやすく、保守しやすくなります。

2.中間言語:C言語は高級言語と低級言語の両方の特徴を持っています。豊富な制御構造と演算子を提供し、メモリやハードウェアに直接アクセスでき、プログラマがビット操作やポインタ操作などの低レベル操作を実行できるようにします。

3.移植性: C 言語で書かれたプログラムは、その構文と機能が異なるコンピュータ システムでも基本的に同じであるため、移植性が高くなります。これにより、コードにあまり多くの変更を加えることなく、プログラムをさまざまなプラットフォームでコンパイルして実行できるようになります。

4.強力な標準ライブラリ: C 言語は、入出力、文字列操作、メモリ管理、数学的演算などを処理するためのさまざまな関数とツールを含む豊富な標準ライブラリを提供します。これらの機能はプログラム開発の効率を向上させることができ、プラットフォームを超えて使用できます。

5.システム指向プログラミング: C 言語はメモリやハードウェアに直接アクセスできるため、オペレーティング システム、組み込みシステム、ドライバーなどの基盤となるソフトウェアの開発によく使用されます。C 言語にはビット演算やポインタなどの機能も用意されており、プログラマはシステム リソースをより適切に制御できます。

6.拡張性: C 言語を使用すると、プログラマはカスタム関数やライブラリを作成して言語の機能を拡張できます。このため、C 言語は大規模プロジェクトの開発に非常に適しており、コードをモジュール構造に編成し、関数呼び出しを通じて再利用できます。

        C 言語は比較的低レベルですが、依然として非常に重要で広く使用されているプログラミング言語です。プログラマーに強力な制御機能とパフォーマンス上の利点を提供し、システムプログラミング、組み込み開発、ゲーム開発などのさまざまな分野で広く使用されています。C++、Java、Python などの現代のプログラミング言語の多くは C 言語の影響を受け、C 言語を拡張および改良してきました。

4. サイクルプログラミング

4.1 平均成績の計算 - ラウンドロビン手順

C には 3 つの異なる反復ステートメントがあります。

  • do-while 文──後の条件を決定するループ
  • while 文──最初に条件を決定するループ
  • for ステートメント──最初に条件を決定するループ

4.1.1 判定後の条件のループ        

a. 文法

        後で条件を決定するループとは、ループ本体内のループを最初に実行し、その後ループ条件が満たされているかどうかを確認することを意味します。条件が true の場合、ループは条件が false になるまで継続します。その基本的な構文は次のとおりです。

do {
    // 循环体
} while (condition);

        do-while ループでは、最初に条件が false であっても、ループ本体が少なくとも 1 回実行されることが保証されます。

b. 代表的な例
#include <stdio.h>

int main() {
    int total = 0;  // 总分
    int count = 0;  // 人数
    int grade;      // 成绩

    printf("请输入成绩,输入负数表示结束输入:\n");

    do {
        printf("请输入成绩:");
        scanf("%d", &grade);

        if (grade >= 0) {
            total += grade;
            count++;
        }
    } while (grade >= 0);

    if (count > 0) {
        float average = (float) total / count;
        printf("平均成绩为:%.2f\n", average);
    } else {
        printf("没有输入成绩!\n");
    }

    return 0;
}

4.1.2 最初に条件を決定するループ

a. 文法

        条件を先に判定するループとは、まずループ本体でループ条件が満たされているかどうかを確認し、条件が真の場合はループ本体が実行され、その後条件が再確認されます。ループは、条件が false の場合にのみ終了します。その基本的な構文は次のとおりです。

while (condition) {
    // 循环体
}

b. 代表的な例
#include <stdio.h>

int main() {
    int total = 0;  // 总分
    int count = 0;  // 人数
    int grade;      // 成绩

    printf("请输入成绩,输入负数表示结束输入:\n");

    while (1) {
        printf("请输入成绩:");
        scanf("%d", &grade);

        if (grade < 0) {
            break;
        }

        total += grade;
        count++;
    }

    if (count > 0) {
        float average = (float) total / count;
        printf("平均成绩为:%.2f\n", average);
    } else {
        printf("没有输入成绩!\n");
    }

    return 0;
}

4.1.3 for ステートメント

a. 文法

        for ステートメントは、指定された条件が満たされた場合にループ本体を実行する、一般的に使用されるループ構造です。for ステートメントは通常、ループの数がわかっている場合に使用されます。その基本的な構文は次のとおりです。

for (initialization; condition; update) {
    // 循环体
}
  • 初期化はループ変数を初期化するために使用されます。
  • 条件は、ループが実行を継続するかどうかを決定するために使用されます。
  • update は、ループ変数の値を更新するために使用されます。
  • 各ループの先頭では、まず「初期化」が実行され、次に「条件」の値が真であるかどうかが判断され、真であればループ本体のコードが実行され、その後「更新」が実行されます。 、条件が false になるまで再度条件が判断され、サイクルが終了します。
b. 代表的な例
#include <stdio.h>

int main() {
    int count = 0;
    int total = 0;
    int score = 0;

    printf("请输入学生的成绩(输入负数表示结束):\n");

    for (;;) {
        printf("请输入成绩:");
        scanf("%d", &score);

        if (score < 0) {
            break;
        }

        total += score;
        count++;
    }

    if (count > 0) {
        float average = (float) total / count;
        printf("平均成绩为:%.2f\n", average);
    } else {
        printf("未输入有效成绩!\n");
    }

    return 0;
}

4.2 クラス内の各人の平均スコアを計算します - 複数のサイクル

        このセクションでは、複数のループ構造を使用してクラス全員の平均成績を計算する方法を学びます。複数のループとは、ループ本体内に別のまたは複数のループ構造が含まれていることを指します。

#include <stdio.h>

int main() {
    int numStudents, numCourses;
    printf("请输入学生人数:");
    scanf("%d", &numStudents);
    printf("请输入课程数:");
    scanf("%d", &numCourses);

    int scores[numStudents][numCourses];

    // 输入每个学生的成绩
    for (int i = 0; i < numStudents; i++) {
        printf("请输入第 %d 个学生的成绩:\n", i + 1);
        for (int j = 0; j < numCourses; j++) {
            printf("请输入第 %d 门课程的成绩:", j + 1);
            scanf("%d", &scores[i][j]);
        }
    }

    // 计算每个学生的平均成绩
    for (int i = 0; i < numStudents; i++) {
        int sum = 0;
        for (int j = 0; j < numCourses; j++) {
            sum += scores[i][j];
        }
        float average = (float)sum / numCourses;
        printf("第 %d 个学生的平均成绩为:%.2f\n", i + 1, average);
    }

    return 0;
}

4.2.1 100 以内の素数を出力する

        この質問例は、ループを使用して 100 以内の素数を出力する方法の例となります。質問例の具体的な内容は、文脈に基づいて決定できます。

#include <stdio.h>

int main() {
    printf("100以内的素数有:\n");

    for (int i = 2; i <= 100; i++) {
        int isPrime = 1;

        for (int j = 2; j < i; j++) {
            if (i % j == 0) {
                isPrime = 0;
                break;
            }
        }

        if (isPrime == 1) {
            printf("%d ", i);
        }
    }

    printf("\n");

    return 0;
}

4.2.2 百の金と百の鶏の問題 

        数百枚のコインと数百羽のニワトリの問題は、網羅的方法によって解決できる古典的な数学の問題です。問題の説明は次のとおりです: 100 枚のコインと 100 羽の鶏があるとします。各雄鶏のコストは 5 コイン、雌鶏のコストは 3 コイン、鶏 3 羽のコストは 1 コインです。今、100 のお金で 100 羽の鶏を買いたいのですが、雄鶏、鶏、ひよこは何羽いますか?

#include <stdio.h>

int main() {
    printf("公鸡数量\t母鸡数量\t小鸡数量\n");

    for (int x = 0; x <= 20; x++) {
        for (int y = 0; y <= 33; y++) {
            int z = 100 - x - y;
            if (5 * x + 3 * y + z / 3 == 100 && z % 3 == 0) {
                printf("%d\t\t%d\t\t%d\n", x, y, z);
            }
        }
    }

    return 0;
}

おすすめ

転載: blog.csdn.net/m0_63834988/article/details/133554967