编写程序,输入n的值,求 :1-1/2+1/3-1/4+1/5-1/6+1/7-...+1/n

#include<stdio.h>intmain(){inti,n,m=-1,k=0;doublej,sum=0.0;scanf("%d",&n);for(i=1;i<=... #include <stdio.h>
int main ()
{
int i,n,m=-1,k=0;
double j,sum=0.0;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
m=-m;
j=m/(k+1);
sum=sum+j;
k++;
}
printf("%.4f\n",sum);
return 0;
}
运行出来无论输入多少,输出的值都是1.000.请各位高手帮忙。
展开
 我来答
岁月哪曾斑驳
2013-02-02 · TA获得超过742个赞
知道小有建树答主
回答量:278
采纳率:50%
帮助的人:347万
展开全部
#include <stdio.h>
int main ()
{
int i,n,m=-1,k=0;
double j,sum=0.0;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
m=-m;
j=m/(double)(k+1);//这里必须加入强制类型转换,否则会发生截断
sum=sum+j;
k++;
}
printf("%.4lf\n",sum);
return 0;
}
追问
我把程序按照你的意思改了一下,可以运行了。改成:
#include
int main ()
{
int i,n,m=-1;
double j,sum=0.0,k=0.0;(这里改了)
scanf("%d",&n);
for(i=1;i<=n;i++)
{
m=-m;
j=m/(k+1);
sum=sum+j;
k++;
}
printf("%.4f\n",sum);
return 0;
}
请问为什么k必须是实型?整型为什么不行呢?
追答
对于式子a = b / c,如果除法涉及的因子b、c都是int,那么编译器会认为b/c的结果也是int,然后将这一结果向a赋值,如果需要再强制转换为a的数据类型。而浮点数转向整数的时候是不进位的,而是舍去小数部分,即截断。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式