本人菜鸟,求高手告诉错在何处?在线等。。。。。。。。。

来源:百度知道 编辑:UC知道 时间:2024/09/24 14:12:33
#include"stdio.h"
#include"math.h"
main()
{
int i=1,j=1,an=1,sn=1,pi;
do
{j=-j;
i+=2;
an=j*1/i;
sn=sn+an;}
while(fabs(an)>1e-6);
printf("the pi=%d",4*sn);
}
结果是4,sn为什么还是1,为什么没变?

我给你改了一下 ,你看看吧,你最主要的是数据类型没有分清
#include"math.h"
main()
{
int i=1;
double j=1,an=0,sn=1,pi;
do
{
j=-j;
i+=2;
an=j/i; //这一句你把j,i 都弄成int型了计算的时候结果an也是
int 型,而真分数转化成int行都为0,fabs(0)<1e-6只计
算一次循环就出来了,所以an=an+0=1+0=1.
sn=sn+an;
} while(fabs(an)>1e-6);
printf("the pi=%f\n",4*sn);
}

#include"stdio.h"
#include"math.h"
main()
{
int i=1,j=1,an=1,sn=1,pi;
do
{j=-j; //这一句,j-=j;
i+=2;
an=j*1/i;
sn=sn+an;}
while(fabs(an)>1e-6);
printf("the pi=%d",4*sn);
}

an为int型的,an=j*1/i这一句本来是要将an的值改变为-1/3,结果an的值就变为了0.所以sn=sn+an对sn的值没有影响。while(fabs(an)>1e-6)这是循环的额条件,而an为零,不满足条件,所以不会再做第二次了,也就是说整个循环体只计算一遍 ,就直接输出最后结果

意图是什么 %d 是格式化为整型 所以小数点后面的全部舍去 不四舍五入

an=j*1/i; 得an=0;
sn=sn+an;}得sn=1;
while(fabs(an)>1e-6);因为语句后面有分号,所以与