我正在尝试编写一个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());
}
但我无法弄清楚如何编写序列部分的代码,该代码应该将结果添加到下一个计算出的数字。上面的代码只会从下一个数字中减去结果并打印结果,但现在如何将减法结果添加到下一个数字并再次打印到列表框?
第一个序列号 - 第二个序列号=结果(在列表框中显示)
结果+第三个序列号=结果(显示在列表框中)
结果 - 第四个序列号=结果(显示在列表框中)
结果+第五个序列号=结果(在列表框中显示)
如果我解释问题不好,我很抱歉,我试着尽可能具体。我知道我错过了一小部分,但我无法弄清楚它是什么,对于写作感到抱歉,英语不是我的母语。
提前致谢
答案 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());
}
}
我希望它能解决你的问题。 :)