0

处理要求计算“y”值的作业,如果给出“n”和“x”,则作业:在此处输入图像描述

应该行:

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

3 回答 3

0
P=P*(F+i/2); should be inside else
于 2013-01-07T15:15:17.207 回答
0

它应该在else子句内部,在for循环之后。此外,您必须F每次1在计算阶乘之前重新初始化。我会这样重写它:

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)
    }
}
于 2013-01-07T15:16:56.447 回答
0

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

但还有更多问题:

  • 您需要F为每个阶乘计算重置
  • P=P*(F+i/2)您内部进行 的整数除法,当为奇数时会i给出不正确的结果。i

您还可以通过计算 fori == 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==2和的特殊情况i==3

于 2013-01-07T15:37:25.097 回答