我有以下任务:
如果序列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");
}
答案 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个值。我会让你做这个练习(我认为这是一个很好的练习)。