问题:
从键盘输入一个班(全班最多不超过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);
}
}
}
结果:
大家好,我不知道问题出在了哪里?还请大家多多指示帮忙修改一下,谢谢大家