帮忙找个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: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;
} jackz007 发表于 2022-10-24 22:48
谢谢大佬!!正确了!
页:
[1]