求助高手C语言编程的!!

来源:百度知道 编辑:UC知道 时间:2024/05/31 05:10:43
这两个设计有什么区别,急!!!
第一个:
#include<stdio.h>
void main()
{
int n,k;
double p,m,s,r;
scanf("%d",&n);
m=1.0;
for (k=1;k<=n;k++)
{
if(k%2==0)
s=k/(k+1);
else
s=(k+1)/k;
r=s*m;
}
p=2*r;
printf("%.5f",p);

}
第二个:
#include <stdio.h>
int main()
{
int n,k=1,a,b,d;
double c=1.0,e;
scanf("%d",&n);
while(k<=n)
{
d=k%2;
if(d==0)
{
a=(k/2)*2;
b=(k/2)*2+1;
}
else
{
a=(k/2+1)*2;
b=(k/2)*2+1;
}
c= c*a/b;
k++;
}
e=2*c;
printf("%.5f\n",e);
return 0;
}

其它地方没什么区别 主要在r=s*m和c=c*a/b之间
当k=3时,s=4/3=1;r=s*m=1*1.0 ;
而a=4;b=3;c=c*a/b=c*4/3;第二个c是上次循环结束时的c,已经不是1.0了,而且c*a/b是左结合律,相当于(c*a)/b,得到的结果就更不相同了;
除非将c=1.0改为m=1.0
将c=c*a/b改为c=m*(a/b);

服你了! 这么长的题目辛苦费都没有!

简单看看 应该区别在这c= c*a/b; 多了一个c ,而那个是r=s*m;直接覆盖