需要用数组计算进展

时间:2013-11-10 14:21:04

标签: c arrays

我有以下任务:

如果序列x1 + x2 + .... + x20被授予以下规则,则计算x1, x2, ... xnx1 = 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");
}

3 个答案:

答案 0 :(得分: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和最终结果。然后,您将获得所需的所有信息。此外,this C arrays tutorial可以帮助您理解数组。

希望对你有所帮助。

答案 1 :(得分: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)的原因是因为数组是从零开始的。

答案 2 :(得分: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];
}

现在,我说没有必要存储每个值,更准确地说,您只能存储最后2个值。我会让你做这个练习(我认为这是一个很好的练习)。