使用 C# 实现加权平均算法(含完整代码与实现解析)
				
									
					
					
						|  | 
							admin 2025年7月17日 22:4
								本文热度 912 | 
					
				 
				
今天我们讨论一个数学问题“加权平均法”。
在数据分析、考试成绩计算、统计学和金融等场景中,经常会用到 加权平均(Weighted Average) 算法。相比简单平均数,加权平均数能根据不同数据的重要程度(权重)计算更准确的结果。
本文将一步步实现一个通用的 C# 加权平均数计算方法,附带完整示例代码,并解析每一处实现细节,帮助我们举一反三,灵活运用在实际项目中。
什么是加权平均?

加权平均数公式是:
其中:
C# 实现思路
核心思路:
完整示例代码
下面是使用 C# 10 编写的示例,兼容 .NET 6 及以上:
using System;
using System.Collections.Generic;
using System.Linq;
namespaceWeightedAverageDemo
{
    classProgram
    {
        static void Main(string[] args)
        {
            // 示例:3 门课程成绩及其权重
            List<double> scores = new List<double> { 85, 92, 78 };
            List<double> weights = new List<double> { 0.3, 0.5, 0.2 };
            double weightedAverage = CalculateWeightedAverage(scores, weights);
            Console.WriteLine($"加权平均成绩:{weightedAverage:F2}");
        }
        /// <summary>
        /// 计算加权平均数
        /// </summary>
        /// <param name="values">值集合</param>
        /// <param name="weights">权重集合</param>
        /// <returns>加权平均数</returns>
        static double CalculateWeightedAverage(List<double> values, List<double> weights)
        {
            if (values == null || weights == null)
                thrownew ArgumentNullException("values 和 weights 不能为空。");
            if (values.Count != weights.Count)
                thrownew ArgumentException("值集合和权重集合的长度必须一致。");
            double weightedSum = 0;
            double weightSum = 0;
            for (int i = 0; i < values.Count; i++)
            {
                weightedSum += values[i] * weights[i];
                weightSum += weights[i];
            }
            if (weightSum == 0)
                thrownew DivideByZeroException("权重之和不能为零。");
            return weightedSum / weightSum;
        }
    }
}
代码解析
- • List<double> scores和List<double> weights:用于存放数据值和对应权重。
- • CalculateWeightedAverage方法:
- • Console.WriteLine用:F2保留两位小数输出。
 ---
---
扩展:使用 LINQ 重写
如果你想用更函数式的写法,也可以用 LINQ:
static double CalculateWeightedAverageLinq(List<double> values, List<double> weights)
{
    if (values == null || weights == null)
        thrownew ArgumentNullException();
    if (values.Count != weights.Count)
        thrownew ArgumentException("值和权重长度必须一致。");
    double weightedSum = values.Zip(weights, (v, w) => v * w).Sum();
    double weightSum = weights.Sum();
    if (weightSum == 0)
        thrownew DivideByZeroException();
    return weightedSum / weightSum;
}
这里用到了:
适用场景举例
总结
本次内容涵盖以下关键点:
欢迎关注,我们后面继续研究【移动加权平均算法】
参考内容
百科-加权平均值
阅读原文:原文链接
该文章在 2025/7/18 10:45:53 编辑过