📜  门| GATE 2017 MOCK II |问题12(1)

📅  最后修改于: 2023-12-03 15:42:10.297000             🧑  作者: Mango

门| GATE 2017 MOCK II |问题12

本题出自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,表示每个学生分数的权重。

本题解决方案详细步骤如下:

  1. 定义变量和数组
int n;          // 学生数量 
double s[100];  // 学生成绩数组 
double w[100];  // 权重数组 
double d, u;    // 平均分和方差 
  1. 读取输入数据
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]);
  1. 计算均值
d = 0;
for(int i=0; i<n; i++)
    d += s[i] * w[i];
  1. 计算方差
u = 0;
for(int i=0; i<n; i++)
    u += w[i] * ((s[i]-d)*(s[i]-d));
  1. 输出结果
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占位符来输出这两个变量的值。