原先的代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int i, n;
float x, sum = 0.0;
puts("求m(n)=1/2+2/3+...+n/n+1。");
puts("请输入n的值:");
scanf("%d", &n);
if (n > 0)
{
for (i = 1; i <= n; i++)
{
x = i / (i + 1);
sum += x;
}
printf("n=%d时,m(n)=1/2+2/3+...+n/n+1=%.2f", n, sum);
}
else
puts("输入错误,请输入正整数!");
return 0;
}
输出后发现无论如何sum都等于0
最后发现,需要对 i / (i + 1)强制类型转换,否则两个整型变量,输出结果只能是0
改为:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int i, n;
float x, sum = 0.0;
puts("求m(n)=1/2+2/3+...+n/n+1。");
puts("请输入n的值:");
scanf("%d", &n);
if (n > 0)
{
for (i = 1; i <= n; i++)
{
x =(float) i / (i + 1);//这个float特别关键
sum += x;
}
printf("n=%d时,m(n)=1/2+2/3+...+n/n+1=%.2f", n, sum);
}
else
puts("输入错误,请输入正整数!");
return 0;
}
结果正常