做作业所需的解决方案 - C#

时间:2012-07-21 16:16:33

标签: c#

我正在学习C#atm并试图解决我书中描述的一个问题。 写一个程序,计算和打印(精度为0.001)序列1 + 1/2 - 1/3 + 1/4 - 1/5 + ....我知道这是一个常见的问题,但我几乎失去了整整一天要解决它,但我不能单独做(也许我不够努力)。

static void Main()
{
    double sum = 0D;
    double sum1 = 0d;
    int i = 1;
    while ( i <100)
    {
        i++;
        if (i % 2 == 0)
        {
            sum1 = sum1 +(1 / i);
        }
        else
        {
            sum1 = sum1 -(1 / i);
        }

        sum = sum1 + sum;
        Console.WriteLine(Math.Round(sum, 3));
    }
}

3 个答案:

答案 0 :(得分:10)

由于“i”是一个整数,除法1 / i总是得到0(除了i = 1的情况),因为“/”是一个整数除法运算符,它从不给出分数。所以你应该将一个双重值1.0 / i除以得到分数。

此外,循环条件i <100不是您所需要的。最好设置那里(1.0 / i> 0.001)或变换(i <1000)。对于您所拥有的序列,它将保证所需的准确度。

答案 1 :(得分:1)

你的计算精度不是0.001,你在每一步都是四舍五入。您需要让循环运行abs(current_sum - previous_sum) >= 0.001current_sum是当前迭代的总和,previous_sum是前一次迭代的总和。

答案 2 :(得分:-2)

你已经知道这是谐波系列吗?

Wikipedia on harmonic series

这很容易计算,但我不确定你的意思 预备部分。

        double harmonic = 0;
        int partialSumsUpTo = 10000;

        for (double i = 1; i <= partialSumsUpTo; ++i)
        {
            double part = 1 / i;
            harmonic += Math.Round(part, 5);
        }

请注意这不是扰流板,因为您需要交替谐波系列 为你的功课。但是你肯定会自己得到这个部分。