加权平均数介绍
加权平均数是一种平均数的计算方式,其中每个数据点的贡献度是不同的,贡献度由权重决定。与普通的算术平均数不同,加权平均数将每个数据的值乘以相应的权重,再求和,最后除以所有权重的总和。加权平均数通常用于数据中不同元素的重要性不相同的情况。
加权平均数的公式
加权平均数的计算公式为:
加权平均数 = (w1 * x1 + w2 * x2 + ... + wn * xn) / (w1 + w2 + ... + wn)
其中:
x1, x2, ..., xn
是数据值。w1, w2, ..., wn
是相应的权重。加权平均数
是加权平均值。
举例说明
假设有三个数值 5, 7, 和 9,分别对应的权重为 1, 2, 和 3。那么它们的加权平均数计算如下:
加权平均数 = (1 * 5 + 2 * 7 + 3 * 9) / (1 + 2 + 3) = (5 + 14 + 27) / 6 = 46 / 6 ≈ 7.67
代码示例
#include <stdio.h>
#include <string.h>
#include <ctype.h>
// 校验身份证号码的权重数组
int weights[] = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
// 校验码对应规则
char checkCodes[] = {'1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'};
// 校验身份证号码是否合法
int validateIDCard(const char *id)
{
// 计算校验码
int sum = 0;
for (int i = 0; i < 17; i++)
{
sum += (id[i] - '0') * weights[i];
}
int mod = sum % 11;
char expectedCheckCode = checkCodes[mod];
// 校验码比较
if (toupper(id[17]) != expectedCheckCode)
{
return 0;
}
return 1;
}
int main()
{
char id[19];
printf("请输入身份证号码:");
scanf("%18s", id);
if (validateIDCard(id))
{
printf("身份证号码合法\n");
}
else
{
printf("身份证号码不合法\n");
}
return 0;
}