产品序列&阶乘分配,不确定代码行是否在正确的位置

时间:2013-01-07 15:11:56

标签: c++ sequence product

处理要求计算'y'值的作业,如果给出'n'和'x', 作业:enter image description here

该行:

    P=P*(F+i/2); 

在'else {}'里面?!

代码:

//Calculate the value of 'y';
#include<iostream>
using namespace std;

int main()
{
    double y, P=1, F=1;
    int x, n, i, j;
    cout<<"The value of x=";
    cin>>x;
    cout<<"The value of n=";
    cin>>n;
    for(i=1;i<=n;i++)
    {
        if(i==2||i==3)
        {
        }
        else
        {
            for(j=1;j<=(2*i-1);j++)
            {
                F=F*j;
            }
        }
        P=P*(F+i/2);
    }
y=pow((2*x+3),3)+P;
cout<<"The result for the value of y="<<y<<endl;
return 0;
}

3 个答案:

答案 0 :(得分:0)

P=P*(F+i/2); should be inside else

答案 1 :(得分:0)

else周期之后,它应该在for子句中。此外,在计算阶乘之前,您必须每次重新初始化F1。我会这样重写:

for(i=1;i<=n;i++)
{
    if((i!=2) && (i!=3))
    {
        F = 1; // Don't forget this!
        for(j=1;j<=(2*i-1);j++)
        {
            F=F*j;
        }

        P=P*(F+i/2.0); // Don't forget the 2.0 (or you'll get integer division)
    }
}

答案 2 :(得分:0)

P=P*(F+i/2)确实应该在else分支内。

但还有更多问题:

  • 您需要为每个因子计算重置F
  • P=P*(F+i/2)范围内,您正在进行i的整数除法,当i为奇数时会产生错误的结果。

您还可以通过计算i == 1的计算来简化循环:

P=1.5; /* For i == 1 */
for(i=4;i<=n;i++)
{
    F=1.0;
    for(j=1;j<=(2*i-1);j++)
    {
        F=F*j;
    }
    P=P*(F+i/2.0);
}

这会删除i==2i==3的特殊情况。