C语言:一维数组进行学生成绩统计

问题:
从键盘输入一个班(全班最多不超过30人)学生某门课的成绩,当输入成绩为负值时,输入结束,分别实现下列功能:
(1)统计不及格人数并打印不及格学生名单;
(2)统计成绩在全班平均分及平均分之上的学生人数,并打印这些学生的名单;
(3)统计各分数段的学生人数及所占的百分比。
[提示:
(1)用num[i]存放第i+1个学生的学号,用score[i]存放第i+1个学生的成绩。设置计数器count,当score[i]<60时,计数器count计数一次,并打印num[i]和score[i]。
(2)先计算全班平均分aver,当第i个学生的成绩score[i]>=aver时,打印num[i]和score[i]。
(3)将成绩分为6个分数段,60分以下为第0段,60至69为第1段,70到79分为第2段,80~89是第3段,90--99分第4段,100分为第5段,因此成绩与分数段的对应关系为:

各分数段的学生人数保存在数组stu中,用stu[i]存放第i段的学生人数。对于每个学生的成绩,先计算出该成绩所对应的分数段,然后将相应的分数段的人数加1,即stu[i]++。从本次实验开始,所有实验都使用函数来编程。

我的解答:

#include <stdio.h> 
int Score(int num[],float score[]);
int Fail(int num[],float score[],int n);
float ave(float score[],int n);
int ave1(int num[],float score[],int n);
void section(float score[],int n);

int main()
{
    int n,num[30],fail=0;
    float ave=0,score[30];
    printf("请输入学生学号以及成绩:\n");
    n=Score(num,score);
    printf("请输入学生总数:%d\n",n);
    fail=Fail(num,score,n);
    printf("不及格人数: %d\n",fail);
    ave=ave1(num,score,n);
    printf("等于或大于平均分学生人数: %d\n",ave);
    section(score,n);
}

int Score(int num[],float score[])
{
    int i=0; 
    scanf("%d%f",&num[i],score[i]);
    while (score[i]>=0)
    {
        i++;
        scanf("%d%f",&num[i],score[i]);
    }
    return 1;
}

int Fail(int num[],float score[],int n)
{
    int i,count=0;
    for(i=0;i<n;i++)
    {
        if(score[i]<60)
        {
            printf("不及格学生学号:%d 分数:%d\n",num[i],score[i]);
            count++;
        }
    }
     printf("不及格人数: %d\n",count);
     return count;
}

float ave(float score[],int n)
{
    int i;
    float ave=0,sum=0;
    for(i=0;i<n;i++)
    {
        sum=sum+score[i];
    }
    int k=i;
    ave=sum/k;
    return ave;
}

int ave1(int num[],float score[],int n)
{
    int i,count=0;
    float aver=ave(score,n);
    for(i=0;i<n;i++)
    {
        if(score[i]>=aver)
        {
            printf("高于或等于平均分的学生学号:%d 分数:%d\n",num[i],score[i]); 
            count++;
        }
    }
    printf("高于或等于平均分人数: %d\n",count);
    return count;
}

void section(float score[],int n)
{
    int i,j,stu[6];
    for(i=0;i<6;i++)
    {
        stu[i]=0;
    }
    for(i=0;i<n;i++)
    {
        if(score[i]<60)
        {
            j=0;
        }
        else
        {
            j=((int)score[i]-50)/10;
        }
        stu[j]++;
    }
    for(i=0;i<6;i++)
    {
        if(i==0)
        {
            printf("<60  %d  %.2f\n",stu[i],(float)stu[i]/(float)n*100);
        }
        else if(i==5)
        {
            printf("100  %d  %.2f\n",stu[i],(float)stu[i]/(float)n*100);
        }
        else
        {
            printf("%d--%d  %d  %.2f\n",(i+5)*10,(i+5)*10+9,
                    stu[i],(float)stu[i]/(float)n*100);
        }
    }
}



结果:

img

大家好,我不知道问题出在了哪里?还请大家多多指示帮忙修改一下,谢谢大家