C程问题.

来源:百度知道 编辑:UC知道 时间:2024/05/30 11:32:18
要求:
编写函数,根据整型形参n的值,计算如下公式:
1-1/2+1/3-1/4.......+(-1)的n+1次方*1/n

我编写的程序是:
#include <stdio.h>
double add(int n);
main()
{
int n;
printf("输入n值:");
scanf("%d",&n);
printf("公式=%lf\n",add(n));
}
double add(int n)
{
int i,m=1;
double e=0;
for(i=1;i<=n;i++,m=-m)
e=e+m/i;
return e;
}
但运行结果总是1.00000
大家能帮我看看是哪里错了吗?应该怎么改?谢谢!

当i,m都为int的时候
m/i得到的结果是整除的结果
也即是1 div 2=0 1 div 3=0 ……后面的全是0
自然结果是1.0000了
你试试float m

将变量m以为double就可以了,如果不改则m/i会自动取整

m定义为double

因为i,m为int
所以m/i也为int =0

改为float i,m=1;

两个int型的数字做除法结果也是一个int型的数字。
程序格式还很规范,如果是一个初学者这是一个值得夸奖的地方。
但是这样一个问题,本来是应该你自己去调试,去找错的,C的特点就是这样,很小的疏忽导致了错误!做个细心人吧...

int i,m=1;
使m/i得到的结果是整除
从i=2开始m/i的值都为0

可以改成int i=1;
double m=1.0;