0

我有以下任务:

计算x1 + x2 + .... + x20,如果序列x1, x2, ... xn被授予以下规则:x1 = 1, x2 = 0.3, x(i) = (i +1) * x(i-2), i = 3,4 ..

有人可以帮助完成这项任务吗?我不知道如何开始写进度......我试过写这个:

int main()
{
    int i;
    double X[20];
    for (i=3; i<=19; i++){
        X[i]=(i+1)*X[i-2];
    }

    for (i=0; i<=19; i++)
        printf("%7d%13d\n", i, X[i]);

    system ("pause");
}
4

3 回答 3

1

让我们看一下您当前的代码:

int main()
{
    int i;
    double X[20];
    for (i=3; i<=19; i++){
        X[i]=(i+1)*X[i-2];
    }

    for (i=0; i<=19; i++)
        printf("%7d%13d\n", i, X[i]);

    system ("pause");
}

不要忘记,当您在 C 中声明数组时,索引从 0 而不是 1 开始。然后,x1 = 1, x2 = 0.3将被解释为 :X[0] = 1;X[1] = 0.3;

接下来,x(i) = (i +1) * x(i-2), i = 3,4 ..将被解释为:

for (i=2; i<=19; i++){
    X[i]=(i+2) * X[i-2];
}

现在,您想xi对 i = 1,...,20 求和。然后,您的代码将是这样的:

int main()
{
    double X[20];

    // First two elements of your serie.
    X[0] = 1;
    printf("%7d%13f\n", 1, X[0]);
    X[1] = 0.3;
    double result = X[0] + X[1];
    printf("%7d%13f\n", 2, X[1]);

    // Third element to the 20th element of your serie.
    for (int i=2; i<=19; i++){
        X[i]=(i+2)*X[i-2];
        printf("%7d%13f\n", i+1, X[i]);
        result += X[i];
    }

    printf("\nSum of xi = %f", result);

    system ("pause");
    return 0;
}

这将跟踪X[i]、 迭代i和最终结果。然后,您将获得所需的所有信息。此外,这个 C 数组教程可以帮助您理解数组。

希望对您有所帮助。

于 2013-11-10T15:29:03.360 回答
0

提醒一下,您需要:对于[1,20] 中x1 = 1, x2 = 0.3, x(i) = (i +1) * x(i-2)的每个值。i

不必为了计算总和而存储所有内容,但这是您的选择。所以从创建数组开始:

double X[21]; // 21 because you start from 1 and not 0.

然后初始化前 2 个值:

X[1] = 1;
X[2] = 0.3;

现在您可以使用您的循环(但最多 20 个):

for (i=3; i<=20; i++){
    X[i]=(i+1)*X[i-2];
}

您还可以计算总和:

double sum = X[1] + X[2];
for (i=3; i<=20; i++){
    X[i]=(i+1)*X[i-2];
    sum += X[i];
}

现在,我说不必存储每个值,更准确地说,您只能存储最后两个值。我会让你把它当作一个练习(我认为这是一个很好的练习)。

于 2013-11-10T15:54:51.047 回答
0

通过一些修改,您的解决方案几乎是正确的,试试这个:

int main(void) {

    int i;
    double result = 1.3;
    double X[20];
    X[0] = 1;
    X[1] = 0.3;

    for (i=2; i<=19; i++){
       X[i]=(i+2)*X[i-2];
       result += X[i];
    }

    printf("%f", result);
    system ("pause");


   return 0;
}

(i+2)代替的原因(i+1)是因为数组是从零开始的。

于 2013-11-10T15:20:14.077 回答