C语言编程题,计算S=1-1/2+1/3-1/4.....+1/m

如题,这是我自己编的,但是结果总是显示1.000000,麻烦各位大神帮我看看哪里错了。
#include
int main()
{
float s=0,t;
int m,n;
printf("输入数值m:\n");
scanf("%d",&m);
for (n=1;n<=m;n++)
{

if(n%2==1)

t=1/n;

else t=-1/n;
s=s+t;
}
printf("%f\n",s);
return 0;
}

n是整型,执行1/n后也是个整型。代码修改:

#include <stdio.h>

int main()

{

float s=0,t;

float m=4,n;

printf("输入数值m:\n");

scanf("%f",&m);float k=1;

for(n=1;n<=m;n++)

{

t=1/n*k;

k=-k;

s=s+t;

}

printf("%f\n",s);

return 0;

}

扩展资料:

通常情况,单精度浮点数占4字节(32位)内存空间,其数值范围为-3.4E38~3.4E+38,;双精度型占8 个字节(64位)内存空间,其数值范围为-1.79769313486232E308 到1.79769313486232E308。

双精度浮点型类型数值可转换到其他类型的整数或浮点数,反之亦然。双精度浮点型常量的最后一个字符可加上“d”或“D”。其存储格式与浮点型类似,最高位为符号位,次高11位为指数位,其次52位为尾数。

双精度型就是双精度浮点型,同数值型比,它能提供更高的数值精度,采用固定存储长度的浮点数形式,每个双精度浮点型数据占8个字节。与数值型数据不同,它的小数点位置是由输入的数据值来决定的,并且只能用于表中的字段。

参考资料:

百度百科-双精度浮点型

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2018-02-26
由于你的n是int型,则1/n是整数,程序中的1/n或(-1)/n一直是0,所以s一直都是0;将t=1/n和t=(-1)/n改为t=1/(float)n和t=-1/(float)n即可,即将n强制转换为float型,这样1/n就可以表示为小数了。

希望可以帮到你!本回答被提问者和网友采纳
第2个回答  2014-04-16

/*

输入数值n:10

0.645635

Press any key to continue

*/

#include <stdio.h>

int main() {
double sum = 0,i,n;
double item = 1,sign = 1;
printf("输入数值n:");
scanf("%lf",&n);
for(i = 1; i <= n; i++) {
sum += sign / i;
sign = -sign;
}
printf("%lf\n",sum);
return 0;
}

第3个回答  2014-04-16
#include<stdio.h>
int main()
{
float s=0,t;
int m,n;
printf("输入数值m:\n");
scanf_s("%d",&m);
for (n=1;n<=m;n++)
{
if(n%2==1)
t=1.0/n;
else
t=-1.0/n;
s=s+t;
}
printf("%f\n",s);
return 0;
}
//该程序已在VS中调试通过,望采纳!
第4个回答  2014-04-16
# include <stdio.h>
int main()
{
float sum = 0,t;
int m,i,f = 1;
scanf("%d",&m);
for(i=1;i<=m;i++)
{
t = 1.0/i*f;
sum += t;
f = -f;
}
printf("\n\n sum is %f",sum);
return 0;
}

相似回答