灯火阑珊201 发表于 2022-10-24 21:50:11

帮忙找个bug

题目:
学分绩点-加权平均成绩

大学里每一门课程都有一定的学分。只有通过这门课的考试,才能获得相应的学分。只有学分积累到专业要求后才能毕业。如果提前修完所要求课程与学分,还可以提前毕业。学分制是一种更加灵活的弹性学制,为学生在校期间创造了更多的灵活性,包括在一段时间内申请休学、创业,鼓励学有余力的同学提前毕业以及辅修、攻读其他专业和学位。大学每年的优秀和奖学金评选均需计算学分绩点(加权平均成绩)。
学分绩点计算的是学生每门课程的期末分数(课程成绩)按照学分的加权平均值(加权平均成绩)。
请你写一个程序求班级每人的学分绩点。

输入格式:
第一行2个正整数n和k,分别表示计算的人数和课程数目;
第二行k个以空格分隔的实数,依次表示k门课的学分;
其后n行,依次表示n个同学的成绩,每行k个以空格分隔的实数。

输出格式:
每行输出一个同学的学分绩点,小数点后保留3位小数。

输入样例:
3 5
6 3.5 4 3 1
89 92.5 88 78 96
92 89 92.5 88 89
78 98 99 94 92
输出样例:
87.986
90.657
90.343

我的代码如下:
#include<stdio.h>
int main()
{
        int n,cla,i,j;
        float sum1=0.0,sum2;
        scanf("%d %d",&n,&cla);
        float c,a;
        for(i=0; i<cla; i++)
        {
                scanf("%f",&c);
                sum1+=c;
        }
        for(j=0; j<n; j++)
        {
      sum2=0.0;
                for(i=0; i<n; i++)
                {
                        scanf("%f",&a);
                        sum2+=(a*(c/sum1));
                }
                printf("%.3f\n",sum2/cla);
        }
        return 0;
}

输入题目给的例子之后是这样的
3 5
6 3.5 4 3 1
89 92.5 88 78 96
13.826
92 89 92.5 88 89
13.394
13.826

很疑惑,为什么输入第二行学生成绩之后会直接打印两次,求大佬解决!!!

jackz007 发表于 2022-10-24 22:48:58

本帖最后由 jackz007 于 2022-10-24 22:55 编辑

#include<stdio.h>
int main()
{
      int n,cla,i,j;
      float sum1=0.0,sum2;
      scanf("%d%d",&n,&cla) ;
      float c , a ;
      for(i=0; i<cla; i++)
      {
                scanf("%f",&c);
                sum1 += c;
      }
      for(j = 0 ; j < n ; j ++)
      {
                sum2 = 0.0                               ;
                for(i = 0 ; i < cla ; i ++)                // 这里有错
                {
                        scanf("%f" , & a)             ;
                        sum2 = sum2 + a * c / sum1 ;
                }
                printf("%.3f\n" , sum2)                  ; // 这里有错
      }
      return 0;
}

灯火阑珊201 发表于 2022-10-24 23:04:07

jackz007 发表于 2022-10-24 22:48


谢谢大佬!!正确了!
页: [1]
查看完整版本: 帮忙找个bug