计算每门课的平均分。

这是题目(只看第三问即可)

img


我的代码

#include <stdio.h>
float a_stu[10000];
float a_cour[10];
float score[10000][10];
int main()
{
    void input_stu(int L,int M);
    void aver_stu(int L,int M);
    void aver_cour(int L,int M);
    int cmp_stu1(int L,int M);
    int i,j,L,M;
    printf("请输入班级人数:");
    scanf("%d",&L);
    printf("请输入考试科目数量:");
    scanf("%d",&M);
    input_stu(L,M);
    aver_stu(L,M);
    aver_cour(L,M);
    for(i=0;i<L;i++)
    printf("第%d个学生平均分:%.1f\n",i+1,a_stu[i]);
    for(j=0;j<M;j++)
    printf("第%d门课程的平均分为:%.1f\n",j+1,a_cour[j]);
    for(j=0;j<M;j++) 
    printf("第%d门课程最高分是第%d个学生\n",j+1,cmp_stu1(L,M));
    return 0;
}
void input_stu(int L,int M)
{
    int i,j;
    for(i=0;i<L;i++)
    {
    printf("请输入第%d个学生的成绩:\n",i+1);
    for(j=0;j<M;j++)
    scanf("%f",&score[i][j]);
    }
}
void aver_stu(int L,int M)
{
    int i,j; 
    for(i=0;i<L;i++)
    {
        float sum=0;
        for(j=0;j<M;j++)
        sum+=score[i][j];
        a_stu[i]=sum/L;
    }
}
void aver_cour(int L,int M)
{
    int i,j;
    for(j=0;j<M;j++)
    {
        float sum=0;
        for(i=0;i<L;i++)
        sum+=score[i][j];
        a_cour[j]=sum/M;
    }
}
int cmp_stu1(int L,int M)
{
    int i,j,num1,max;
    for(j=0,i=0;j<M;j++)
    {
    max=score[0][j];
        for(i=0;i<L;i++)
        {
        if(max<=score[i][j])
            {
            max=score[i][j];
            num1=i+1;
            }
        }
    }
    return num1;
}

第三问为什么运行结果数据错误?

img

printf("第%d门课程的平均分为:%d\n",j+1,a_cour[j]);
改成
printf("第%d门课程的平均分为:%1f\n",j+1,a_cour[j]);

改动处见注释,供参考 :

#include <stdio.h>
float a_stu[10000];
float a_cour[10];
float score[10000][10];
int main()
{
    void input_stu(int L,int M);
    void aver_stu(int L,int M);
    void aver_cour(int L,int M);
    int cmp_stu1(int L,int M);
    int i,j,L,M;
    printf("请输入班级人数:");
    scanf("%d",&L);
    printf("请输入考试科目数量:");
    scanf("%d",&M);
    input_stu(L,M);
    aver_stu(L,M);
    aver_cour(L,M);
    for(i=0;i<L;i++)
        printf("第%d个学生平均分:%.1f\n",i+1,a_stu[i]);
    for(j=0;j<M;j++)
        printf("第%d门课程的平均分为:%.1f\n",j+1,a_cour[j]);
    for(j=0;j<M;j++)
        printf("第%d门课程最高分是第%d个学生\n",j+1,cmp_stu1(L,j)); //cmp_stu1(L,M)
    return 0;
}
void input_stu(int L,int M)
{
    int i,j;
    for(i=0;i<L;i++)
    {
        printf("请输入第%d个学生的成绩:\n",i+1);
        for(j=0;j<M;j++)
            scanf("%f",&score[i][j]);
    }
}
void aver_stu(int L,int M)
{
    int i,j; 
    for(i=0;i<L;i++)
    {
        float sum=0;
        for(j=0;j<M;j++)
            sum+=score[i][j];
        a_stu[i]=sum/L;
    }
}
void aver_cour(int L,int M)
{
    int i,j;
    for(j=0;j<M;j++)
    {
        float sum=0;
        for(i=0;i<L;i++)
            sum+=score[i][j];
        a_cour[j]=sum/M;
    }
}
int cmp_stu1(int L,int M)
{
    int i,j = M,num1,max; //修改
    //for(j=0,i=0;j<M;j++)修改
    //{                   修改
        max=score[0][j];
        for(i=0;i<L;i++)
        {
            if(max<=score[i][j])
            {
                max=score[i][j];
                num1=i+1;
            }
        }
    //}                  修改
    return num1;
}