从键盘输入一个班(全班最多不超过30人)学生某门课的成绩,当输入成绩为负值时,输入结束,分别实现下 10

从键盘输入一个班(全班最多不超过30人)学生某门课的成绩,当输入成绩为负值时,输入结束,分别实现下列功能:(1)统计不及格人数并打印不及格学生名单;(2)统计成绩在全班平... 从键盘输入一个班(全班最多不超过30人)学生某门课的成绩,当输入成绩为负值时,输入结束,分别实现下列功能:
(1)统计不及格人数并打印不及格学生名单;
(2)统计成绩在全班平均分及平均分之上的学生人数,并打印这些学生的名单;
(3)统计各分数段的学生人数及所占的百分比。
展开
 我来答
jxjiangzl
2015-03-04 · TA获得超过778个赞
知道小有建树答主
回答量:371
采纳率:100%
帮助的人:356万
展开全部
#include <stdio.h>
#include <string.h>
struct ScoreRecord
{
    char xm[10];
    float score;
};

int main()
{
    ScoreRecord cj[30];
    char s[10];
    float x,sum=0,average;
    int i=0,c,iFailCount=0,iHigh=0;
    int iC100=0,iC80=0;
    printf("姓名:");
    gets(s);
    printf("\n成绩:");
    scanf("%f",&x);
    fflush(stdin);
    while(x>=0)
    {
        strcpy(cj[i].xm,s);
        cj[i].score=x;
        sum+=x;
        if(x<60)
        iFailCount++;
        else if(x<80)
        iC80++;
        else iC100++;
        printf("姓名:");
        gets(s);
        printf("\n成绩:");
        scanf("%f",&x);
        fflush(stdin);
        i++;
    }
    average=sum/(i-1);
    printf("不及格名单:\n");
    c=i;
    for(i=0;i<c;i++)
    {
        if(cj[i].score>average)
        iHigh++;
        if(cj[i].score<60)
        printf("%s\t%.2f\n",cj[i].xm,cj[i].score);
    }
    printf("不及格人数:%d\n",iFailCount);
    printf("高于平均分名单:\n");
    for(i=0;i<c;i++)
    {
        if(cj[i].score>average)
        printf("%s\t%.2f\n",cj[i].xm,cj[i].score);
    }
    printf("高于平均分的人数:%d\n",iHigh);
    printf("不及格人数:%d\t所占有比例:%.2f\n",iFailCount,(float)iFailCount/c*100);
    printf("60-80人数:%d\t所占有比例:%.2f\n",iC80,(float)iC80/c*100);
    printf("80-100人数:%d\t所占有比例:%.2f\n",iC100,(float)iC100/c*100);
    return 0;
}
雷霹雳0247
2013-12-14 · 超过54用户采纳过TA的回答
知道答主
回答量:111
采纳率:0%
帮助的人:122万
展开全部
struct Student//学生结构体{char name[9];//名字
float score;//分数};
void main(){Student stu[Count];
int inputCount = 0;//输入的学生人数
int unpassCount = 0;//不及格人数
printf("请输入学生名字和分数,输入成绩为时-1时,结束输入\n");
while(inputCount < 30){printf("请输入第%d个学生名字:",inputCount + 1);
scanf("%s",stu[inputCount].name);
printf("请输入分数:");
scanf("%f",&stu[inputCount].score);
if(stu[inputCount].score < 0) break;
else inputCount++;}
printf("不及格学生名字:\n");
unpassCount++;}}printf("不及格人数是 %d 人\n",unpassCount);}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yang131105
2012-04-20
知道答主
回答量:1
采纳率:0%
帮助的人:1621
展开全部
先不说统计啥的,fun1()里你的scanf("%d",&x[i]);没有放到for循环里。我忘了c里面数组申请时下标从1还是从0开始了,那么只有x[3]有值,或者根本没有x[3],内存溢出。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
biosorry
2011-11-21 · TA获得超过7074个赞
知道大有可为答主
回答量:2546
采纳率:78%
帮助的人:791万
展开全部
#include<stdio.h>
#define N 30
typedef struct student
{
char name[10];
int score;
}STU;
void main()
{
STU s[N];
int n=0;
int i;
int n1=0;
int n2=0;
int n3=0;
int n4=0;
int n5=0;
int n6=0;
int total=0;
float aver;
printf("请输入学生姓名与成绩:");
do
{
scanf("%s",&s[n].name);
scanf("%d",&s[n].score);
n++;
}while(s[n-1].score>=0);
n--;
for(i=0;i<n;i++)
{
total+=s[i].score;
if(s[i].score<60)
n1++;
else if(s[i].score<70)
n2++;
else if(s[i].score<80)
n3++;
else if(s[i].score<90)
n4++;
else
n5++;
}
printf("不及格人数为:%d,名单如下:\n",n1);
for(i=0;i<n;i++)
{
if(s[i].score<60)
printf("%s\t %d\n",s[i].name,s[i].score);
}
aver=(float)total/n;
for(i=0;i<n;i++)
{
if(s[i].score>aver)
n6++;
}
printf("平均分为:%.1f,分数在平均分以上的人数为:%d,名单如下:\n",aver,n6);
for(i=0;i<n;i++)
{
if(s[i].score>aver)
printf("%s\t %d\n",s[i].name,s[i].score);
}
printf("分数段\t学生人数\t图形\n");
printf("<60\t%d(%.1f%%)\t",n1,(float)n1*100/n);
for(i=0;i<n1;i++)
printf("*");
printf("\n");
printf("60~69\t%d(%.1f%%)\t",n2,(float)n2*100/n);
for(i=0;i<n2;i++)
printf("*");
printf("\n");
printf("70~79\t%d(%.1f%%)\t",n3,(float)n3*100/n);
for(i=0;i<n3;i++)
printf("*");
printf("\n");
printf("80~89\t%d(%.1f%%)\t",n4,(float)n4*100/n);
for(i=0;i<n4;i++)
printf("*");
printf("\n");
printf(">=90\t%d(%.1f%%)\t",n5,(float)n5*100/n);
for(i=0;i<n5;i++)
printf("*");
printf("\n");
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式