【问题标题】:How to subtract two numbers and add the result to the third number in a sequence?如何减去两个数字并将结果添加到序列中的第三个数字?
【发布时间】:2015-12-13 12:00:43
【问题描述】:

我正在尝试编写一个 C# 程序,该程序从用户那里获取输入值,然后将该值放入一个序列中,然后在列表框中打印每个计算出的序列数的结果。顺序是这样的:

S = 1 - X + X^2 / 2! - X^3 / 3! + X^4 / 4! - ...

每次程序启动时列表框中显示的第一个数字是 1。我被困在我应该从用户输入 (X) 中减去 1 的部分,然后将结果添加到计算出的第三个数字序列。例如,如果用户输入 2 作为输入,则第一个输出为 1,第二个输出为 -1,然后程序应将结果 (-1) 与序列的第三个计算数相加,即 2,输出应为 1。再次减去将第四个计算数的结果 (1) 再次添加到序列的第五个计算数中,然后...

到目前为止,我写了这个:

private void button1_Click(object sender, EventArgs e)
    {
        int x = Convert.ToInt32(textBox1.Text);
        listBox1.Items.Clear();
        listBox1.Items.Add("1".ToString());
        double numerator = 1, Fact = 1, firstNum = 1, result;
        for (int i = 1; i <= 20; i++)
        {
            numerator = x * numerator;
            Fact = Fact * i;
            result = numerator / Fact;
            firstNum = firstNum - result;
            listBox1.Items.Add(firstNum.ToString());
        }

但我不知道如何为应该将结果添加到下一个计算数字的序列部分编写代码。上面的代码只会从下一个数字中减去结果并打印结果,但是现在如何将减法的结果添加到下一个数字并再次打印到列表框?

第一个序列号 - 第二个序列号 = 结果(显示在列表框中)

结果 + 序列的第三个数 = 结果(显示在列表框中)

结果 - 序列的第四个数字 = 结果(显示在列表框中)

结果 + 序列的第五个数 = 结果(显示在列表框中)

如果我把问题解释得不好,我很抱歉,我尽量做到具体。我知道我错过了一个很小的部分,但我不知道它是什么,并且很抱歉写作,英语不是我的母语。

提前致谢

【问题讨论】:

  • 能否提供姓名序号和要计算的结果序号?
  • 如果我理解正确的话。例如,用户在文本框中输入 2。第一个输出为1,第二个输出为(1-2=-1),第三个输出为(-1+4/2=1),第四个输出为(1-8/6=-0.33),第五个输出为(- 0.33+16/24= 0.33),第六个输出是(0.33-32/120= 0.064)。这是序列的第一个第六个输出,但我希望它像这样继续到第 20 号,甚至让用户在第二个文本框中输入另一个数字作为序列限制。
  • 对不起,直到数字 20 我是指序列的第 20 个数字。直到“ i ”在循环中等于 20。 (i

标签: c# listbox


【解决方案1】:

你几乎是在正确的轨道上。只是缺少一些东西。

这是您的程序的更正版本 --->

private void button1_Click(object sender, EventArgs e)
{
    int x = Convert.ToInt32(textBox1.Text);
    listBox1.Items.Clear();
    listBox1.Items.Add("1".ToString());
    double numerator = 1, Fact = 1, firstNum = 1, result=0;
    for (int i = 1; i <= 20; i++)
    {
        Fact = 1;       // Reinitialising every time for new denomerator.
        numerator = Math.Pow(x, i);     // This is how power is calculated.
        for (int j = 1; j<=i; j++)      // One more inner loop is needed for Factorial.
            Fact = Fact * j;
        result = numerator / Fact;
        firstNum = firstNum + (Math.Pow(-1, i) * result);   // This is the main logic for alternate plus minus.
        listBox1.Items.Add(firstNum.ToString());
    }
}

希望它能解决您的问题。 :)

【讨论】:

  • 非常感谢。这正是我所缺少的,是 Factorial 的第二个内部循环,而且我也不知道交替加减的逻辑。再次感谢您抽出宝贵时间帮助我。
  • 不客气。您可以自己获得解决方案,只需学习如何调试程序即可。
【解决方案2】:

也许尝试将减法的结果(firstNum - result)存储到变量中,然后将其添加到下一个数字?

【讨论】:

  • 我试过了,但它会打印一些奇怪的结果,而且程序会给出超过 20 个输出。
【解决方案3】:

看起来序列公式是

f(i) = (-x)^i / i! for i in 0..N, 0! = 1

可以如下产生

private void button1_Click(object sender, EventArgs e)
{
    int x = Convert.ToInt32(textBox1.Text);
    listBox1.Items.Clear();
    double numerator = 1, denominator = 1;
    int i = 0;
    while(true)
    {
        var result = numerator / denominator;
        listBox1.Items.Add(result.ToString());;
        if (++i > 20) break;
        numerator *= -x;
        denominator *= i;
    }      
}

【讨论】:

    【解决方案4】:
            var seqLimit = Convert.ToInt32(Textbox1.Text);
            var numberX = Convert.ToInt32(XTextBox.Text);
            ListBox1.Items.Clear();
            var result = 1.0;
            for (var i = 1; i <= seqLimit; i++)
            {
                ListBox1.Items.Add(result);
                if (i%2 == 0) result = result + (Math.Pow(numberX, i)/Factorial(i));
                else result = result - (Math.Pow(numberX, i)/Factorial(i));
            } 
    
    
        static int Factorial(int n)
        {
            if (n <= 1)
                return 1;
            int result = 1;
            for (int i = 2; i <= n; i++)
            {
                result = result * i;
            }
            return result;
        }
    

    试试这个,它会工作。

    【讨论】:

      猜你喜欢
      • 2012-10-19
      • 2021-12-25
      • 1970-01-01
      • 1970-01-01
      • 2016-08-21
      • 2017-06-30
      • 1970-01-01
      • 1970-01-01
      • 2020-12-11
      相关资源
      最近更新 更多