📅  最后修改于: 2023-12-03 15:42:10.297000             🧑  作者: Mango
本题出自GATE 2017 MOCK II考试,要求使用C语言实现一个程序,根据输入的数据统计学生成绩的均值和方差。具体问题描述如下:
给定学生的分数s1,s2,...,sn以及权重w1,w2,...,wn。每个权重wi代表相应的分数si的权重(wi>=0且∑wi = 1)。计算学生的平均分和方差。
程序输入格式如下:
第一行包含一个整数n,表示学生的数量。
第二行包含n个实数分数s1,s2,...,sn,表示每个学生的分数。
第三行包含n个实数权重w1,w2,...,wn,表示每个学生分数的权重。
本题解决方案详细步骤如下:
int n; // 学生数量
double s[100]; // 学生成绩数组
double w[100]; // 权重数组
double d, u; // 平均分和方差
scanf("%d", &n);
for(int i=0; i<n; i++)
scanf("%lf", &s[i]);
for(int i=0; i<n; i++)
scanf("%lf", &w[i]);
d = 0;
for(int i=0; i<n; i++)
d += s[i] * w[i];
u = 0;
for(int i=0; i<n; i++)
u += w[i] * ((s[i]-d)*(s[i]-d));
printf("平均分:%.2lf\n", d);
printf("方差:%.2lf\n", u);
完整程序代码如下:
#include <stdio.h>
int main()
{
int n; // 学生数量
double s[100]; // 学生成绩数组
double w[100]; // 权重数组
double d, u; // 平均分和方差
// 读取输入数据
scanf("%d", &n);
for(int i=0; i<n; i++)
scanf("%lf", &s[i]);
for(int i=0; i<n; i++)
scanf("%lf", &w[i]);
// 计算均值
d = 0;
for(int i=0; i<n; i++)
d += s[i] * w[i];
// 计算方差
u = 0;
for(int i=0; i<n; i++)
u += w[i] * ((s[i]-d)*(s[i]-d));
// 输出结果
printf("平均分:%.2lf\n", d);
printf("方差:%.2lf\n", u);
return 0;
}
以上是本题的解题思路和完整程序代码。需要注意的是,本题输入的数组s和w的长度不超过100。同时,输出的平均分和方差需要保留2位小数,因此使用了%.2lf占位符来输出这两个变量的值。