ほぷしぃ

納得C言語!

[第12回]演習問題V 第4問の解答

演習問題V 第4問の解答


4 10人分のテスト点数(平均点表示付)

解答プログラム

#include <stdio.h>

// 関数のプロトタイプ宣言
void avg(int a[10][2]);

int main()
{
    //int型配列の宣言
    int a[10][2];
    int b = 0 ,c = 0, d = 0 ;

    printf("点数を入力してください\n");

    //点数入力
    for(b=0;b<10;b++){
        printf("%d人目:",b+1);
        scanf("%d",&a[b][0]);

        //0点未満、101点以上の入力で再度入力を求める
        if(a[b][0]<0 || a[b][0]>100){
            printf("入力エラー\nもう一度入力してください\n");
            b--;
            continue;
        }
    }

    //a[b][1]をで初期化
    //a[0][1]〜a[9][1]までとなる
    for(b=0;b<10;b++){
        a[b][1]=1;
    }

    //順位決定のfor2重ループ
/*
a[b][0]とa[d][0]を比較し後者が小さければ後者の
a[d][1]に1を足す
すべてと比較をするので、小さいほうは常に足され
順位をつけることができる
*/
    for(b=0;b<10;b++){
        for(d=0;d<10;d++){
            if(a[b][0]>a[d][0]){
                a[d][1]++;
            }
        }
    }

    //点数と順位の表示
    for(b=0;b<10;b++){
        printf("%d人目->点数:%3d順位:%3d\n",b+1,a[b][0],a[b][1]);
    }

    avg(a);
    return 0;
}

//平均を求める関数
void avg(int a[10][2])
{
    int sum = 0,avg = 0, i;

    //a[0][0]〜a[9][0]までsumに足していく
    for(i=0;i<10;i++){
        sum = sum + a[i][0];
    }

    //平均点を算出
    avg = sum / 10;
    printf("平均点は%d\n",avg);

    //追加で平均点以下を表示する
    for(i=0;i<10;i++){
        if(a[i][0]<avg){
            printf("平均点以下は%d番で\t%d点です\n",i+1,a[i][0]);
        }
    }

    return;
}


解説

数値の入力と順位の決定方法は(3)と同じですね。
平均を求めて表示する自作関数を作ります。
このとき、引数で2次元配列を渡します。
平均値は第7回の例題5、6でやっていますね。
また、配列をforで回してあげて平均と比較し、点数が平均点以下なら表示するようにすれば、追加のプログラムの出来上がり!


ヒント ページのトップ  [第13回]ポインタ