求每门课的平均分问题

#include<stdio.h>
int main()
{
    float averc(float array[2]);
    float score[2][5];
    int i,j;
    for(i=0;i<2;i++)
        for(j=0;j<5;j++)
            scanf("%f",&score[i][j]);
        for(j=0;j<5;j++)
            printf("%f ",averc(score[j]));
}
float averc(float array[2])
{
    int i,j;
    float s=0;
    for(i=0;i<2;i++)
        s=s+array[i];
    s=s/2.0;
    return s;
}

两个人,五门课,求每门课平均成绩,要求使用函数,请问这个程序哪里有问题??


#include<stdio.h>
int main()
{
    float averc(float array[2][5]);
    float score[2][5];
    int i,j;
    for(i=0;i<2;i++)
        for(j=0;j<5;j++)
            scanf("%f",&score[i][j]);
    averc(score);
}
float averc(float array[2][5])
{
    int i,j;
    for(j=0;j<5;j++)
    {
        float s = 0;
        for(i=0;i<2;i++)
            s=s+array[i][j];
        s=s/2.0;
        printf("%f",s);
    }
    return 0;
}

完全可以把j的循环放到函数里面去

    for(j=0;j<5;j++)
        printf("%f ",averc(score[j]));
    这个算的是每个人的平均成绩而不是每门课

其实二维数组在计算机中是以一维数组的形式保存的,只是每个元素又是一个数组。例如s[2][3],在内存中的顺序是:{s[0][1]s[0][2]s[0][3]},{s[1][1]s[1][2]s[1][3]}。s[2][3]可以说只有两个元素:数组s[0]和数组s[1]。所以s[1]是个一维数组。它包含三个元素。本题中你想使用s[0][0]和s[1][0]求平均值,但它们不是相邻的。除非你再写一个数组保存它俩,不然不能把直接函数的形参设为一个数组。(并没有数组连续的保存这两个数)

#include<stdio.h>
int main()
{
    float averc(float a,float b);
    float score[2][5];
    int i, j;
    for (i = 0; i < 2; i++)
        for (j = 0; j < 5; j++)
            scanf("%f", &score[i][j]);
    for (i = 0; i < 5; i++)
        printf("平均分:%f\n", averc(score[0][i],score[1][i]));
}
float averc(float a,float b)
{
    return (a+b)/2;
}