求助 c语言题
题目:1-1/3+1/5-1/7+1/9.... 求共五十项之和我的代码
#include <stdio.h>
int main()
{
int i = 1;
float y;
double s = 1.0;
int k = -1;
double sum=0;
for (; i<=50; i++)
{
if (i % 2 != 0 &&i!=1)
{
y = (float)i;
sum = 1.0/ y;
s += k*sum;
k = -k;
}
}
printf("%f\n", s);
system("pause");
return 0;
} 结果是 0.795394
网上代码 结果是0.780399
#include<stdio.h>
int main()
{
long n;
while (scanf_s("%ld", &n) != -1)
{
double s = 0.0;
int i, a = 1;
for (i = 1; i <= 2 * n - 1; i += 2)
{
if (((i + 1) / 2) % 2 == 1)
s += 1.0 / i;
else
s -= 1.0 / i;
}
printf("%.5f", s);
}
return 0;
}
为什么结果差精度?? 求助 本帖最后由 jhq999 于 2021-10-28 22:15 编辑
for (; i<50; i++)//49项+上s=1一共50项
{
y = (float)(2*i+1);
sum = 1.0/ y;
s += k*sum;
k = -k;
} 本帖最后由 wutianlong220 于 2021-10-28 23:56 编辑
我仔细算了,你的题目其实并没有问题,你的精度是对的。你仔细看你网上找过来的那段代码,
如果整理一下其实是这样的:
#include<stdio.h>
int main()
{
long n;
while (scanf("%ld", &n) != -1) {
double s = 0.0;
int i, a = 1;
for (i = 1; i <= 50; i += 2) {
if (((i + 1) / 2) % 2 == 1) {
s += 1.0 / i;
} else {
s -= 1.0 / i;
}
}
printf("%.5f", s);
}
return 0;
}
因为他的精度是需要手动输入需要求的位数,我们把他的代码改一下,把手动输入的那个地方去掉,代码就变成了这样:
#include<stdio.h>
int main()
{
//long n;
//while (scanf("%ld", &n) != -1) {
double s = 0.0;
int i, a = 1;
for (i = 1; i <= 50; i += 2) {
if (((i + 1) / 2) % 2 == 1) {
s += 1.0 / i;
} else {
s -= 1.0 / i;
}
printf("%d %f %f\n",i, 1.0/i , s); //这一段是我自己加的,用来打印精度
}
printf("%.5f", s);
//}
return 0;
}
和你的代码一样,都是前50项的和相加,我这边算出来的结果是:
然后再看看你的代码:
#include <stdio.h>
int main()
{
int i = 1;
float y;
double s = 1.0;
int k = -1;
double sum=0;
for (; i<=50; i++)
{
if (i % 2 != 0 &&i!=1)
{
y = (float)i;
sum = 1.0/ y;
s += k*sum;
k = -k;
printf("%d %f %f %f\n",i, y, sum, s);
}
}
printf("%f\n", s);
//system("pause");
return 0;
}
也加上一段打印精度,结果如图:
你看,这不是一样的吗?
我猜你之前觉得精度不一样,是不是在输入的时候,填写了50,但是因为网上那个答案,填写进去的数字是n,还需要2*n-1,导致最终的计算精度远远大于你代码当中的50,所以导致了你的精度比它差很多。 {:10_254:} {:10_256:} #include <stdio.h>
int main()
{
double sum = 0;
int s = 1;
for(int i = 1, n = 0; n < 50; i += 2, n++){
sum += s*(1.0/i);
s = -s;
}
printf("%lf", sum);
return 0;
}0.780399 1molHF 发表于 2021-10-29 10:53
额 wutianlong220 发表于 2021-10-28 23:55
我仔细算了,你的题目其实并没有问题,你的精度是对的。你仔细看你网上找过来的那段代码,
如果整理一下其 ...
谢谢哥
页:
[1]