weixin_57649440 2021-05-30 23:25 采纳率: 66.7%
浏览 36
已采纳

c语言编程的小问题,按要求补充代码

现在的代码怎么让最高分输出学号,我输不出去

#include <stdio.h>
#define N 30
typedef struct student
{
    char name[10];
    long studentID;
    int score;
}STU;
int MaxScore(struct student ary[],int size)
{
    int index = 0;
    int i = 0;
    int max = ary[0].score;
    for (; i <size; i++)
    {
        if (ary[i].score > max)
        {
            max = ary[i].score;
            index = i;
        }
    }
    printf("最高成绩学生:%s,学号:%d,成绩:%d\n",ary[index].name,ary[index].studentID,ary[index].score);
    return index;
}
int main(int argc, const char * argv[])
{
    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].studentID);
        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\t %d\n",s[i].name,s[i].studentID,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学生人数\n");
    printf("<60\t%d(%.1f%%)",n1,(float)n1*100/n);
    for(i=0;i<n1;i++)
        printf("*");
    printf("\n");
    printf("60~69\t%d(%.1f%%)",n2,(float)n2*100/n);
    for(i=0;i<n2;i++)
        printf("*");
    printf("\n");
    printf("70~79\t%d(%.1f%%)",n3,(float)n3*100/n);
    for(i=0;i<n3;i++)
        printf("*");
    printf("\n");
    printf("80~89\t%d(%.1f%%)",n4,(float)n4*100/n);
    for(i=0;i<n4;i++)
        printf("*");
    printf("\n");
    printf(">=90\t%d(%.1f%%)",n5,(float)n5*100/n);
    for(i=0;i<n5;i++)
        printf("*");
    printf("\n");
    MaxScore(s,n);
    return 0;
}
  • 写回答

2条回答 默认 最新

  • 胖哥王老师 单片机领域新星创作者 2021-05-31 07:23
    关注

     简单修改了一下代码,涉及到long型ID的地方,需要用%ld进行显示或者输入,记得点赞哦

    int MaxScore(struct student ary[],int size)
    {
        int index = 0;
        int i = 0;
        int max = ary[0].score;
        for (; i <size; i++)
        {
            if (ary[i].score > max)
            {
                max = ary[i].score;
                index = i;
            }
        }
        printf("最高成绩学生:%s,学号:%ld,成绩:%d\n",ary[index].name,ary[index].studentID,ary[index].score);
        return index;
    }
    int main(int argc, const char * argv[])
    {
        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("%ld",&s[n].studentID);
            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 %ld\t %d\n",s[i].name,s[i].studentID,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学生人数\n");
        printf("<60\t%d(%.1f%%)",n1,(float)n1*100/n);
        for(i=0;i<n1;i++)
            printf("*");
        printf("\n");
        printf("60~69\t%d(%.1f%%)",n2,(float)n2*100/n);
        for(i=0;i<n2;i++)
            printf("*");
        printf("\n");
        printf("70~79\t%d(%.1f%%)",n3,(float)n3*100/n);
        for(i=0;i<n3;i++)
            printf("*");
        printf("\n");
        printf("80~89\t%d(%.1f%%)",n4,(float)n4*100/n);
        for(i=0;i<n4;i++)
            printf("*");
        printf("\n");
        printf(">=90\t%d(%.1f%%)",n5,(float)n5*100/n);
        for(i=0;i<n5;i++)
            printf("*");
        printf("\n");
        MaxScore(s,n);
        return 0;
    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥30 vb net 使用 sendMessage 如何输入鼠标坐标
  • ¥200 求能开发抖音自动回复卡片的软件
  • ¥15 关于freesurfer使用freeview可视化的问题
  • ¥100 谁能在荣耀自带系统MagicOS版本下,隐藏手机桌面图标?
  • ¥15 求SC-LIWC词典!
  • ¥20 有关esp8266连接阿里云
  • ¥15 C# 调用Bartender打印机打印
  • ¥15 我这个代码哪里有问题 acm 平台上显示错误 90%,我自己运行好像没什么问题
  • ¥50 C#编程中使用printDocument类实现文字排版打印问题
  • ¥15 找会编程的帅哥美女 可以用MATLAB里面的simulink编程,用Keil5编也可以。