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

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

代码输出分数结果全为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日

悬赏问题

  • ¥20 给自己本科IT专业毕业的妹m找个实习工作
  • ¥15 用友U8:向一个无法连接的网络尝试了一个套接字操作,如何解决?
  • ¥30 我的代码按理说完成了模型的搭建、训练、验证测试等工作(标签-网络|关键词-变化检测)
  • ¥50 mac mini外接显示器 画质字体模糊
  • ¥15 TLS1.2协议通信解密
  • ¥40 图书信息管理系统程序编写
  • ¥20 Qcustomplot缩小曲线形状问题
  • ¥15 企业资源规划ERP沙盘模拟
  • ¥15 树莓派控制机械臂传输命令报错,显示摄像头不存在
  • ¥15 前端echarts坐标轴问题