Q&A (電気電子)

6人の2科目(国語・数学)の点数を読み込んで、科目・学生ごとの平均を求めるプログラム

できたのでメモです。

プログラム

#include <iostream>
#define STUDENT 6
#define SUBJECT 2

int main()
{
    int tensu[STUDENT][SUBJECT];
    int sum_sub[SUBJECT] = { 0 };
    int sum_stu[STUDENT] = { 0 };


    int ave[STUDENT][SUBJECT];

    int i, j;

    for (i = 0; i < STUDENT; i++) {
        printf("----%d人目の点数----\n",i+1);
        for (j = 0; j < SUBJECT; j++) {
            if (j == 0) {
                printf("国語:");
            }
            else {
                printf("数学:");
            }
            scanf_s("%4d",&tensu[i][j]);
            sum_stu[i] += tensu[i][j];      //生徒一人の国語と数学の合計点
            sum_sub[j] += tensu[i][j];      //科目ごとの合計点
        }
        putchar('\n');
    }

    //科目ごとの合計点
    printf("----科目ごとの合計点と平均点は以下の通りです。----\n");

    for (i = 0; i < SUBJECT; i++) {
        switch (i) {
        case 0:printf("国語の合計点:"); break;
        case 1:printf("数学の合計点:"); break;
        }
        printf("%d\n", sum_sub[i]);
        switch (i) {
        case 0:printf("国語の平均点:"); break;
        case 1:printf("数学の平均点:"); break;
        }
        printf("%.1f\n",((double)sum_sub[i])/STUDENT);
    }

    //生徒ごとの合計点

    printf("\n----生徒ごとの合計点----\n\n");
    for (i = 0; i < 6; i++) {
        printf("----生徒%d----\n", i + 1);
        printf("合計点:%d\n",sum_stu[i]);
        printf("平均点:%.1f\n\n", ((double)sum_stu[i])/SUBJECT);
    }


}

実行結果

----1人目の点数----
国語:100
数学:98

----2人目の点数----
国語:78
数学:96

----3人目の点数----
国語:36
数学:48

----4人目の点数----
国語:91
数学:82

----5人目の点数----
国語:100
数学:100

----6人目の点数----
国語:97
数学:89

----科目ごとの合計点と平均点は以下の通りです。----
国語の合計点:502
国語の平均点:83.7
数学の合計点:513
数学の平均点:85.5

----生徒ごとの合計点----

----生徒1----
合計点:198
平均点:99.0

----生徒2----
合計点:174
平均点:87.0

----生徒3----
合計点:84
平均点:42.0

----生徒4----
合計点:173
平均点:86.5

----生徒5----
合計点:200
平均点:100.0

----生徒6----
合計点:186
平均点:93.0

メモ

科目数は2つなので、科目の合計はsum_sub[2]の配列として用意する。
配列を内側のループ(科目数)であるjで動かせば、科目ごとに代入の対象となる配列が切り替わるので、これを合計すれば科目ごとの合計値が求まる。

生徒数は6人なので、生徒ごとの合計値を格納する配列はsum_stu[6]となる。
配列を外側のループ(生徒数)であるiで動かせば、生徒ごとに配列が切り替わるので、これを合計すれば、個人の合計値が求まる。

scanf_s("%4d",&tensu[i][j]);
            sum_stu[i] += tensu[i][j];      //生徒一人の国語と数学の合計点
            sum_sub[j] += tensu[i][j];      //科目ごとの合計点

※i:生徒の人数j:科目の数

-Q&A (電気電子)
-,