【问题标题】:simple procedural maths program in C#C#中的简单程序数学程序
【发布时间】:2014-09-30 16:44:41
【问题描述】:

所以我正在用 C# 创建一个非常简单的程序(我的第一个程序)。 它应该平均X个数字..而不是手动写出来,它会更好地在程序上完成(我不确定这是否是一个词)。基本上就像我在下面的示例中使用“金额”所做的那样。我可以将它除以 2(在这种情况下)。但相反,我有一个变量随着每个新条目而增加 - 因此无论有多少条目,程序都可以工作。

我需要对变量“first”、“second”等做同样的事情。我需要一些可以根据条目数动态变化的变量。这在算法方面应该是一个平静的蛋糕,但这是我使用 C# 的第一天,我无法做到(即因为我缺乏语法知识)。

        double first;
        double second;
        int amount = 0;
        double result;

        Console.Write("Write your first number");
        first = int.Parse(Console.ReadLine());
        ++amount; 

        Console.Write("Write your second number");
        second = int.Parse(Console.ReadLine());
        ++amount;

        result = (first + second) / amount;

        Console.Write("The average of your numbers is: " + result);

谢谢

【问题讨论】:

  • 那么除了需要一个循环之外,你的问题到底是什么?
  • 您的问题中缺少一个问题,但我假设您正在寻找 do..while/while 循环。
  • @Mephy 就是这样!抱歉,我想不出名字……那在 C# 中会是什么样子?
  • 如果这是您使用 C# 的第一天,也许您应该在提问之前阅读更多相关信息。如果你自己尝试一些东西,你会学到更多,而不是带着基本的问题在这里得到一个简单的答案。
  • 要了解它在 C# 中的样子,请阅读 the doc。它就是为此目的而存在的。

标签: c# average


【解决方案1】:

这是我认为你想要的要点。我将使用伪代码为您提供学习 C# 的机会:

create a list of numbers
output prompt
read input line

while the input line had a value
  parse the input value
  add the parsed value to the list of numbers
  output prompt
  read input line

calculate the sum of the values divided by the length of the list
output the calculated average

【讨论】:

  • 您可以保留一个运行总计,而不是处理一个列表并在以后汇总它。不像你需要保留数字。
  • @CoreyOgburn:这也是一种有效的方法。在实践中,我经常发现如果我将输入的收集与计算分开,代码更容易调试、单元测试、维护和适应新的需求。
  • @StriplingWarrior 完全正确!这是我需要做的。但即使有一个循环(如上面的 cmets 所建议的)我也有一些问题。循环只能增加列表的长度。我需要的是每个值都将被动态分配给一个变量(一次一个值的临时容器,只是为了执行当前的添加)。
  • @Mike94:对于不习惯使用数据结构的开发人员来说,这是一个常见的误解。 您不需要为每个值创建一个新变量:一旦您有了一个数字列表,您就可以简单地调用 LINQ .Average() 扩展方法来计算该列表中值的平均值.在幕后,该方法使用循环来保持总和的运行总和(如 Corey 建议的那样),然后将其除以列表的长度。
  • 好的,非常感谢。我看了一点 LINQ 扩展方法 (code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b)。虽然我不认为我能够成功地将它实现到我的程序中,但至少我知道理论上我将如何处理 C# 中的类似任务。
【解决方案2】:

我想你是在寻找回归平均线吗?

class Program
{
    static void Main(string[] args)
    {
        //Compute Average Recursively:

        int average_count = 0;
        double average = 0;

        average = RecursiveAverage(average, ref average_count, 1);
        average = RecursiveAverage(average, ref average_count, 2);
        average = RecursiveAverage(average, ref average_count, 3);
        average = RecursiveAverage(average, ref average_count, 4);

        Console.WriteLine(average); //2.5
    }

    private static double RecursiveAverage(double previous, ref int average_count, double next)
    {
        average_count += 1;
        return ((average_count - 1.0) / (average_count)) * previous + (1.0 / (average_count)) * next;
    }

}

见:http://people.revoledu.com/kardi/tutorial/RecursiveStatistic/Time-Average.htm

更新:无限期地更新平均值(或直到 average_count 变得太大而没有 BigInteger 存储)而不必记住所有数字...

while (true)
{
    var next = int.Parse(Console.ReadLine());
    average = RecursiveAverage(average, ref average_count, next);
    Console.WriteLine("Average is now: " + average); 
}

【讨论】:

  • 这里不完全是我需要的递归平均值。虽然这是一个很好的例子(也是一个非常有用的小程序),但我也会尝试这个。谢谢!
  • 他为什么会在递归平均之后呢?与其他任何更简单的解决方案相比,这有什么优势?
  • 我读到“X 个数的平均值”来暗示一个未知数的平均值。鉴于他要求用户输入;假设输入大小未知。
  • 编写的代码只会计算 4 个输入的平均值。对于每个额外的输入,您将不得不添加另一行代码。所以程序需要在编译时知道输入的数量。
猜你喜欢
  • 1970-01-01
  • 2013-06-15
  • 1970-01-01
  • 1970-01-01
  • 2013-11-22
  • 1970-01-01
  • 2013-09-30
  • 1970-01-01
相关资源
最近更新 更多