1、求和算法
假设我们有一个 n 元素数组,我们想计算它们的总和。a 是一个索引从 0 到 n-1 的数组 。它的元素将被标记为:a[0], a[1],a[2],a[3],...,a[n-1]。
要计算此数组元素的总和,我们将执行以下步骤:
- 一开始我们将用值 0 初始化(和值)结果,
- 然后我们将依次遍历数组的所有元素,并将它们的值添加到我们的结果中,
- 遍历所有元素后,我们将得到数组元素的总和。
2、用于交作业的非C#风格的源代码
private void button1_Click(object sender, EventArgs e)
{int n = 5;int[] a = new int[n];a[0] = 10;a[1] = 5;a[2] = 2;a[3] = 5;a[4] = 10;int sum = 0;for (int i = 0; i < n; i++){sum = sum + a[i];}string s = "数组A的和值 = " + sum;MessageBox.Show(s, "数组和值计算");
}
知识点:
(1)数组的定义;
(2)数组初值的给定;
(3)for 循环语句;
3、真正C# 风格的源代码
private void button1_Click(object sender, EventArgs e)
{int[] a = { 10, 5, 2, 5, 10 };int sum = 0;foreach (int x in a) sum += x;string s = "数组A的和值 = " + sum;MessageBox.Show(s, "数组和值计算");
}
知识点:
(1)数组定义的新方法,直接给定初值;无需给定组数维度;
(2)foreach 循环;
(3)+= 语法;
4、遗留的问题
(1)计算精度的问题
浮点数计算中,一个特别大的数字 + 特别小的数字,会出现 大鱼吃小鱼的情况,就是说结果等于大数,小数没有体现出来!!!
(2)数据超限的问题
比如一个很大的整数数组(int),其和值可能超过了 int 可以表示的最大数!
5、灵活的代码
你可以仔细阅读下面的代码,学到更多的知识。
/// <summary>
/// 扩展的数组类
/// </summary>
public class EArray
{/// <summary>/// 生成一个n维的随机试验整数数组/// 数据范围在 -v/2 ... v/2 之间/// </summary>/// <param name="n"></param>/// <param name="v"></param>/// <returns></returns>public int[] RandArray(int n, int v){int[] va = new int[n];Random rand = new Random((int)DateTime.Now.Ticks);for (int i = 0; i < n; i++){va[i] = rand.Next(v) - (v / 2);Thread.Sleep(1);}return va;}/// <summary>/// 生成一个n维的随机试验浮点数数组/// 数据范围在 -v/2 ... v/2 之间/// </summary>/// <param name="n"></param>/// <param name="v"></param>/// <returns></returns>public double[] RandArray(int n, double v){double[] va = new double[n];Random rand = new Random((int)DateTime.Now.Ticks);for (int i = 0; i < n; i++){va[i] = rand.NextDouble() * v - v * 0.5;Thread.Sleep(1);}return va;}/// <summary>/// 数组和值计算/// </summary>/// <param name="va"></param>/// <returns></returns>public static long Sum(int[] va){long sum = 0;foreach (int x in va) sum += x;return sum;}/// <summary>/// 浮点数数组的和值计算/// </summary>/// <param name="va"></param>/// <returns></returns>public static double Sum(double[] va){// 先排序可以改善精度问题的解决// 具体细节请阅读 深度混淆 的相关博文// https://blog.csdn.net/beijinghorn/article/details/129748303Array.Sort(va);double sum = 0.0;foreach (double x in va) sum += x;return sum;}/// <summary>/// 金融类数组和值计算/// </summary>/// <param name="va"></param>/// <returns></returns>public static decimal Sum(decimal[] va){decimal sum = 0.0m;foreach (decimal x in va) sum += x;return sum;}
}
知识点
(1)怎么生成随机的浮点数?
(2)小数点后面精度要求高的用 decimal 类型的数组;
(3)怎么改善 大鱼吃小鱼的情况?