|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
题目:
学分绩点-加权平均成绩
大学里每一门课程都有一定的学分。只有通过这门课的考试,才能获得相应的学分。只有学分积累到专业要求后才能毕业。如果提前修完所要求课程与学分,还可以提前毕业。学分制是一种更加灵活的弹性学制,为学生在校期间创造了更多的灵活性,包括在一段时间内申请休学、创业,鼓励学有余力的同学提前毕业以及辅修、攻读其他专业和学位。大学每年的优秀和奖学金评选均需计算学分绩点(加权平均成绩)。
学分绩点计算的是学生每门课程的期末分数(课程成绩)按照学分的加权平均值(加权平均成绩)。
请你写一个程序求班级每人的学分绩点。
输入格式:
第一行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[cla],a[cla];
for(i=0; i<cla; i++)
{
scanf("%f",&c[i]);
sum1+=c[i];
}
for(j=0; j<n; j++)
{
sum2=0.0;
for(i=0; i<n; i++)
{
scanf("%f",&a[i]);
sum2+=(a[i]*(c[i]/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[cla] , a[cla] ;
- for(i=0; i<cla; i++)
- {
- scanf("%f",&c[i]);
- sum1 += c[i] ;
- }
- for(j = 0 ; j < n ; j ++)
- {
- sum2 = 0.0 ;
- for(i = 0 ; i < cla ; i ++) // 这里有错
- {
- scanf("%f" , & a[i]) ;
- sum2 = sum2 + a[i] * c[i] / sum1 ;
- }
- printf("%.3f\n" , sum2) ; // 这里有错
- }
- return 0;
- }
复制代码
|
|