C语言中 求计算s=1+1/2+1/3+...+1/10程序中的错误之处

#include<stdio.h>
void main()
{int n;
float s;
s=1.0;
for(n=10;n>1;n--) s=s+1/n;
printf("%6.4\n",s)
}
程序运行之后出错,为什么s=s+1/n是错误之处?

1和n是整型, 1/n默然是int型,所以只对结果的小数取整数部分,结果就不对。

修改,强制类型转换:如下,

#include<stdio.h>
void main()
{
int n;
float s;
s=1.0f;
for(n=10; n>1; n--)
s=s+(float)1/n;
printf("%6.4f\n", s);
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2015-12-26

在C语言中,整数除以整数的结果是整数,所以要想计算精确到小数,则定义成double类型即可。

参考代码:

#include<stdio.h>
int main()
{
int i;
double s=0,t=1.0;
for(i=1;i<=10;i++)
s+=t/i;
printf("%6.4lf\n",s);
return 0;
}
/*
运行结果:
2.9290
*/

第2个回答  2010-07-04
#include<stdio.h>
void main()
{int n;
float s;
s=1.0;
for(n=10;n>1;n--) s=s+1;
printf("%6.4\n",s)
}
第3个回答  2010-07-04
这个,那个,你printf语句后面少了个“;”

C语言中 求计算s=1+1\/2+1\/3+...+1\/10程序中的错误之处
1和n是整型, 1\/n默然是int型,所以只对结果的小数取整数部分,结果就不对。修改,强制类型转换:如下,include<stdio.h> void main(){ int n;float s;s=1.0f;for(n=10; n>1; n--)s=s+(float)1\/n;printf("%6.4f\\n", s);} ...

C语言的题,要求1+1\/2+1\/3+……1\/10的值,用for语句怎么编程,请高手帮 ...
k++应该在for循环里!for循环只针对对应的下行语句,所以for循环没走k++这个语句!还有你s3定义的类型也是不对的,s3应该是float吧?小数嘛。最后输出记得f%哦!

关于c语言的题“求S=1\/1!+1\/2!+1\/3!+…+1\/N!”我知道算法但是我的结果最...
你的程序没有问题,结果也没有问题。是因为double类型的有效位数是15位,到了第16位及后面的数字,就没有意义了。这里要涉及截断误差和积累误差。二进制无法精确表示某些十进制小数,而计算机内存容量又是有限的,所以在表示十进制数值时,必然会因为参与表达数值小数部分的二进制位数有限而产生误差。而这...

C语言以下程序功能是求 S =1+ 1\/2 +1\/3 +…+ 1\/10 ,输出结果应为3.9290...
include <stdio.h>void main() {int n=10 ;float s=1.0 ; do{s = s+ 1.0\/n ; \/\/应该是1.0,否则,如果是1\/n是两个整数整除,结果还是整数,小数部分被丢弃。n>1时,结果都是0n-- ;} while (n>=1) ; \/\/最小要到1printf("%6.4f \\n" ,s );} ...

C语言 sum=1+1\/2+...+1\/n
错在t的值,第一次是t=1\/2;但第二次t=1\/(1\/2)=4.这有问题 应该改成t=1\/i;

C语言计算s=1+1\/2+1\/4+1\/7+...一直到最后项小于1E-6,我的程序错在哪...
a>=1E-6这个是不对的,应该是1\/a的值,不然a一直网上递增,循环退不出去

用C语言求 S=1+1\/2!+1\/3!+...+1\/100!
楼上的算出来结果比我的大,主要是因为他用double 来声明的,有效位数比long float少,而且用浮点数的时候本来就会有误差,所以用一个整型的分母比较精确点!include <stdio.h> main(){ long float s=0;int n=1, deno=1 ;\/*deno 是分母*\/ do { s=s+(long float)1\/deno; \/*(long float...

c语言编程出现输出-nan(ind),哪里错了,本来计算1-1\/2+1\/3...+1\/9...
结论是,当使用C语言编程计算1-1\/2+1\/3...+1\/9-1\/10时,可能会出现输出结果为-nan(ind)的情况。下面我们将分析代码并找出可能的问题。在C语言的程序中,函数suanfa(int n)用于计算一系列分数的和,然后在main函数中调用它并输出结果。问题可能出在while循环部分,特别是处理奇数项和偶数项时...

以下c语言,为什么不能实现s=1+1\/(1+2)+1\/(1+2+3)...++1\/(1+2+...+...
include<stdio.h> float fun(int n){ float i ,s1=0;float s=0;for(i=1;i<=n;i++){ s1=s1+i;s=s+1\/s1;} return s;} void main(){ float a;float s2;printf("please input number\\n") ;scanf("%f",&a);s2=fun(a);printf("the result is %f",s2);} ...

C语言编程:计算1+1\/2+1\/3+……+1\/10
include <stdio.h>void main(){int i;double s=0;for(i=1;i<=10;i++)s+=1.0\/i;printf("%lf",s);}

相似回答