这个代码出了什么问题??它给出的输出为0.0000

  • 本文关键字:输出 0000 问题 代码 c
  • 更新时间 :
  • 英文 :

#include<stdio.h>     
double sum_1(int n)    
{
int i=1;    
double s;    
while(n>0)    
{
s=s+i/(2*i+2);    
i=i+2;
n--;
}    
return s;
}
int main()    
{
int n=5;    
double s1;    
printf("Enter n:n");    
scanf("%d",&n);    
s1= sum_1(n);    
printf("sum = %lf",s1);    
return 0;    
}

问题是

s=s+i/(2*i+2);

在第一次迭代中,未初始化地使用s。由于这是一个可以具有陷阱表示的类型,并且它的地址永远不会被占用,因此尝试在这里使用未初始化的值会调用未定义的行为。

也就是说,声明的分组

s=s+i/(2*i+2);

与相同

s = s + ( i / (2*i+2) );
^^^^^^^^^^^^^---- integer division

所以,它涉及整数除法,这很可能是你不想要的。您需要强制执行浮点运算,如

s=s+i/(float)(2*i+2);

最后,对于打印double%f是足够的,不需要%lf并且没有效果。

最新更新