ljw-70350719 2022-06-10 18:23 采纳率: 100%
浏览 1075
已结题

C语言学生成绩统计代码:从键盘输入一个班(全班人数在15~20之间)学生某门课的成绩

从键盘输入一个班(全班人数在1520之间)学生某门课的成绩,当输入成绩为负值时,输入结束,分别实现下列功能,并在一个主函数内全部实现:
(1)录入每个学生的学号(学号:2016001
2016020)和考试成绩;
(2)计算课程的总分和平均分;
(3)按成绩由高到低排出名次表;

这是第三问,哪位同志知道哪错了,求指点
#include <stdio.h>
#define N 20
void main()
{ int a[N]={2016001},i,j;
float(b[N]),x;
for(i=0;i<N-1;i++)
a[i+1]=a[i]+1;
printf("请按学号输入成绩: \n");
for (i= 0; i<N;i++)
{
ai:printf("%d: ",a[i]);
scanf("%f",&b[1]);
if(b[i]> 100 || b[i]<0)
{
printf("%d成绩输入错误,请从新输入 \n", a[i]);
goto ai;
}
}
for (i=0; i < N-1; i++)
{
for(j=i;j<N;j++)
{
if(b[i]<b[j])
{
x=b[j];
b[i]=b[j];
x=a[i];
a[i]=a[j];a[j]=x;
}
}
}
for(i=0;i,N;i++)
{
printf("第%d名:%d\t",i+1, a[i]);
printf("%f\n", b[i]);
}
system("pause");
}

  • 写回答

1条回答 默认 最新

  • qzjhjxj 2022-06-11 00:11
    关注

    修改见注释,供参考:

    #include <stdio.h>
    #define N 20
    void main()
    {
       int   a[N]={2016001},i,j,n;
       float b[N], x , sum = 0 ,ave = 0;//float(b[N])
       for(i=0;i<N-1;i++)
           a[i+1]=a[i]+1;
       printf("请按学号输入成绩: \n");
       for (i= 0; i < N; i++)
       {
           do{ //修改
               printf("%d: ",a[i]);
               scanf("%f",&b[i]);//scanf("%f",&b[1]);
               if(b[i] > 100)    //if(b[i]> 100 || b[i]<0)
                  //{
                 printf("%d成绩输入错误,请从新输入 \n", a[i]);
                 //goto ai;
                 //}
           }while (b[i] > 100); //修改
           if(b[i] < 0)  break; //当输入成绩为负值时,输入结束
           sum += b[i];         //修改 计算课程的总分
       }
       if (i != 0) ave = sum / i; //修改 计算课程的平均分
       for (n = i,i = 0; i < n-1; i++) //for (i=0; i < N-1; i++)
       {
           for(j = i + 1;j < n; j++) //for(j = i;j < n; j++)
           {
               if(b[i] < b[j])
               {
                   x=b[j];
                   b[j]=b[i]; // b[i]=b[j];
                   b[i]=x;    //修改
                   x=a[i];
                   a[i]=a[j];
                   a[j]=x;
               }
           }
       }
       for(i=0;i < n;i++) //for(i=0;i,N;i++)
       {
            printf("第%d名:%d\t%f\n",i+1, a[i], b[i]);
                          //printf("%f\n", b[i]);
       }
       printf("sum=%.2f,ave=%.2f\n",sum,ave);
       system("pause");
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 6月19日
  • 已采纳回答 6月11日
  • 创建了问题 6月10日

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?