级数:1 + 1/3 + 1/5 +...最多 N 项
Series: 1 + 1/3 + 1/5 +...upto N terms
我最近在编程测试中被问到这个问题。我似乎无法理解为什么我会得到答案“1”。我是 C
编程语言的初学者。
这是我的代码:
#include<stdio.h>
int main()
{
float c = 0;
int n, i = 1;
printf("Enter the number here: ");
n = getchar();
while (i <= 2*n - 1)
{
c = c + (1/i);
i = i + 2;
}
printf("%f", c);
}
我已经尝试过使用 for
循环,但答案还是一样。如有任何帮助,我们将不胜感激!
您的代码中的问题在于这一行:
c = c + (1/i);
这里括号内进行的运算是整数除法!因此,当 i
的任何值大于 1
时,结果将为零。然后将此零转换为浮点值。
要强制编译器使用浮点数除法,请使用:
c = c + (1.0/i);
我同意阿德里安的回答。
另一个问题是,当浮点数以任意顺序添加时,浮点数在系统中的表示方式可能会丢失精度。
为了获得最大精度,浮点数应从小到大依次相加。
我最近在编程测试中被问到这个问题。我似乎无法理解为什么我会得到答案“1”。我是 C
编程语言的初学者。
这是我的代码:
#include<stdio.h>
int main()
{
float c = 0;
int n, i = 1;
printf("Enter the number here: ");
n = getchar();
while (i <= 2*n - 1)
{
c = c + (1/i);
i = i + 2;
}
printf("%f", c);
}
我已经尝试过使用 for
循环,但答案还是一样。如有任何帮助,我们将不胜感激!
您的代码中的问题在于这一行:
c = c + (1/i);
这里括号内进行的运算是整数除法!因此,当 i
的任何值大于 1
时,结果将为零。然后将此零转换为浮点值。
要强制编译器使用浮点数除法,请使用:
c = c + (1.0/i);
我同意阿德里安的回答。
另一个问题是,当浮点数以任意顺序添加时,浮点数在系统中的表示方式可能会丢失精度。
为了获得最大精度,浮点数应从小到大依次相加。