C言語のお勉強ページに対するご意見・ご感想スレ
15:へなちょこ管理人 ★2008/09/01(月) 15:45:08
でけた。
ちょこちょこデバッグしながらで仕様を思い出せないですが、
なんとか期待通りの動作をしました。

/*
5人の学生の3教科(国語・数学・英語)の点数を
2次元配列を用いて処理するプログラムを自由に作成せよ。
例1):科目別の最高点を求める。
例2):各学生の3教科の平均点を求める。
*/

#include    <stdio.h>

#define    NINZU    5
#define    KYOKA    3

void max(const int ma[NINZU][KYOKA], int no, int mb[KYOKA])
{
    int    i, j;
    
    for ( i = 0; i < KYOKA; i++ )    {
        mb[i] = ma[0][i];
    }
    
    for ( i = 1; i < no; i++ )
        for ( j = 0; j < KYOKA; j++ )
            if ( mb[j] < ma[i][j] )
                mb[j] = ma[i][j];
}

void avg(const int va[NINZU][KYOKA], int no, int vc[NINZU])
{
    int    i, j;
    for ( i = 0; i < NINZU; i++ )
        for( j = 0; j < no; j++ )
            vc[i] += va[i][j];
    
    for ( i = 0; i < NINZU; i++ )
        vc[i] /= no;
}

int main(void)
{
    int    i;
    int    a[NINZU][KYOKA] = { 0 };
    int    b[KYOKA] = { 0 };
    int    c[NINZU] = { 0 };
    
    printf("%d人の国語、数学、英語の点数を入力して下さい。\n", NINZU);
    for ( i = 0; i < NINZU ; i++ )    {
        printf("[%02d] 国語:", i + 1);    scanf("%d", &a[i][0]);
        printf("   数学:");            scanf("%d", &a[i][1]);
        printf("   英語:");            scanf("%d", &a[i][2]);
    }
    
    max(a, NINZU, b);
    avg(a, KYOKA, c);
    
    printf("国語の最高点:%d\n", b[0]);
    printf("数学の最高点:%d\n", b[1]);
    printf("英語の最高点:%d\n", b[2]);

    for ( i = 0; i < NINZU; i++ )    {
        printf("%02d人目の平均点:%d\n", i + 1, c[i]);
    
    return 0;
}
1-AA