如何减去两个数字并将结果添加到序列中的第三个数字?

时间:2015-12-13 12:00:43

标签: c# listbox

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

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

每次程序启动时将在listBox中显示的第一个数字是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());
        }

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

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

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

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

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

如果我解释问题不好,我很抱歉,我试着尽可能具体。我知道我错过了一小部分,但我无法弄清楚它是什么,对于写作感到抱歉,英语不是我的母语。

提前致谢

4 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

看起来序列公式是

  

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;
    }      
}

答案 2 :(得分:0)

        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;
    }

试试这个,它会起作用。

答案 3 :(得分:0)

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

以下是您的计划的更正版本---&gt;

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());
    }
}

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