m0_74639975 2022-11-25 20:25 采纳率: 33.3%
浏览 253

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

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

  • 写回答

2条回答 默认 最新

  • ghc00259 2024-03-25 04:05
    关注
    
    #include <stdio.h>  
    int Score(int num[], float score[], int max_size); 
    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_score, score[30]; 
      printf("请输入学生学号以及成绩,输入-1结束输入:\n"); 
      n = Score(num, score, 30); 
      printf("请输入学生总数:%d\n", n); 
      fail = Fail(num, score, n); 
      printf("不及格人数: %d\n", fail); 
      ave_score = ave(score, n); 
      printf("平均分: %.2f\n", ave_score); 
      int count_above_ave = ave1(num, score, n); 
      printf("等于或大于平均分学生人数: %d\n", count_above_ave); 
      section(score, n); // 调用 section 函数 
    } 
    int Score(int num[], float score[], int max_size) 
    { 
      int i = 0;  
      while (i < max_size) { 
        if (scanf("%d%f", &num[i], &score[i]) != 2 || num[i] == -1) { 
          break;
        } 
        i++; 
      } 
      return i; // 返回实际输入的学生数量 
    } 
    int Fail(int num[], float score[], int n) 
    { 
      int i, count = 0; 
      for (i = 0; i < n; i++) { 
        if (score[i] < 60) { 
          printf("不及格学生学号:%d 分数:%.2f\n", num[i], score[i]); 
          count++; 
        } 
      } 
      printf("不及格人数: %d\n", count); 
      return count; 
    } 
    float ave(float score[], int n) 
    { 
      int i; 
      float sum = 0; 
      for (i = 0; i < n; i++) { 
        sum += score[i]; 
      } 
      return sum / n; 
    } 
    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 分数:%.2f\n", num[i], score[i]);  
          count++; 
        } 
      } 
      return count; 
    } 
    void section(float score[], int n) { 
      // 这里需要补充分数段统计的代码,例如: 
      int i, count_60_70 = 0, count_70_80 = 0, count_80_90 = 0, count_90_100 = 0; 
      for (i = 0; i < n; i++) { 
        if (score[i] >= 60 && score[i] < 70) { 
          count_60_70++; 
        } else if (score[i] >= 70 && score[i] < 80) { 
          count_70_80++; 
        } else if (score[i] >= 80 && score[i] < 90) { 
          count_80_90++; 
        } else if (score[i] >= 90 && score[i] <= 100) { 
          count_90_100++; 
        } 
      } 
    printf("60-70分数段的学生人数: %d\n", count_60_70);
    printf("70-80分数段的学生人数: %d\n", count_70_80);
    printf("80-90分数段的学生人数: %d\n", count_80_90);
    printf("90-100分数段的学生人数: %d\n", count_90_100);
    }
    
    评论

报告相同问题?

问题事件

  • 修改了问题 11月25日
  • 创建了问题 11月25日