N1k000000 2022-12-22 13:13 采纳率: 84.4%
浏览 113
已结题

输入学生各科成绩,输出低于平均分的成绩

代码输出分数结果全为0,求修改

img


#include "stdio.h"
#define N 10   //学生人数上限
#define M  5   //课程门数上限
struct stud
{   char name[10];   //姓名
    double course[M];//成绩
    double aver;     //平均分
}s[N];
int main()
{   int n,m,i,j;
    double sum,course[M]={0};   //统计每门课程的平均分
    scanf("%d,%d",&n,&m);        //输入学生人数与课程门数    
struct stud s[n];
for(i=0;i<n;i++)
{
scanf("%s\n",s[i].name);
for(j=0;j<m;j++)
{
scanf("%d",&s[i].course[j]);
if(j==0)
course[0]+=s[i].course[j];
if(j==1)
course[1]+=s[i].course[j];
if(j==2)
course[2]+=s[i].course[j];
}
printf("\n");
}   
printf("name      ");
    for(j=0;j<m;j++)             //求每门课程的平均分
    {    course[j]=course[j]/n;
         printf("CNO:%d   ",j+1);//显示栏目
    }
    printf("\n");
    for(i=0;i<n;i++)
    {    printf("%10s",s[i].name);
         for(j=0;j<m;j++)
            if(s[i].course[j]<course[j])
                printf("%5.1f   ",s[i].course[j]);
            else
                printf("%8c",32);
         printf("\n");    
     }
     return 0;
}
  • 写回答

2条回答 默认 最新

  • a5156520 2022-12-22 13:27
    关注

    把第20行的scanf("%d",&s[i].course[j]); 改为scanf("%lf",&s[i].course[j]);试试,因为学生信息结构stud的课程成绩course数组是double类型,它在scanf()函数里需要使用%lf占位符来获取数据,修改如下:

     
    #include "stdio.h"
    #define N 10   //学生人数上限
    #define M  5   //课程门数上限
    struct stud
    {   char name[10];   //姓名
        double course[M];//成绩
        double aver;     //平均分
    }s[N];
    int main()
    {   int n,m,i,j;
        double sum,course[M]={0};   //统计每门课程的平均分
        scanf("%d,%d",&n,&m);        //输入学生人数与课程门数    
    struct stud s[n];
    for(i=0;i<n;i++)
    {
    scanf("%s\n",s[i].name);
    for(j=0;j<m;j++)
    {
    scanf("%lf",&s[i].course[j]);
    if(j==0)
    course[0]+=s[i].course[j];
    if(j==1)
    course[1]+=s[i].course[j];
    if(j==2)
    course[2]+=s[i].course[j];
    }
    //printf("\n");
    }   
    printf("\n");
    printf("%-10s","name");
        for(j=0;j<m;j++)             //求每门课程的平均分
        {    course[j]=course[j]/n;
             printf("CNO:%d   ",j+1);//显示栏目
        }
        printf("\n");
        for(i=0;i<n;i++)
        {    printf("%-10s",s[i].name);
             for(j=0;j<m;j++)
                if(s[i].course[j]<course[j])
                    printf("%-5.1f   ",s[i].course[j]);
                else
                    printf("%8c",32);
             printf("\n");    
         }
         return 0;
    }
    
    

    img

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

报告相同问题?

问题事件

  • 系统已结题 12月30日
  • 已采纳回答 12月22日
  • 修改了问题 12月22日
  • 创建了问题 12月22日

悬赏问题

  • ¥15 unity第一人称射击小游戏,有demo,在原脚本的基础上进行修改以达到要求
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染