作业帮 > 综合 > 作业

关于C语言循环结构的一个简单问题

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/07/02 19:01:00
关于C语言循环结构的一个简单问题
我想用π/4≈1-1/3+1/5-1/7.这个公式求一下π的近似值,编程如下:
#include "stdio.h"
void main()
{
double PI = 0.0;
int x = 1,y = 1;
for(;y < 10000000;)
{
PI = PI + x * (1 / y);
x = x * -1;
y = y + 2;
}
printf("PI = %.6lf\n",4*PI);
}
最后结果是4,也就是只运行了一次循环是为什么呢?
#include "stdio.h"
void main()
{
double PI = 0.0;
int x = 1,y = 1;
for(;y < 10000000;)
{
PI = PI + x * ((double)1 / (double)y); //此处1和y为int型时,1/y等于0(类型强转),因此PI的值始终不变
x = x * -1;
y = y + 2;
}
printf("PI = %.6lf\n",4*PI);
}
再问: 谢谢你,我明白了!在此还想请教一个问题,实型和整形混合运算的时候,是实型转换成整形运算,还是反之呢?为什么1/y强制转换成double之后就变成零了?谢谢!
再答: 整形转换成实形

PI = PI + x * (1 / y); 不能直接理解城混合运算,你可以把这个公式拆开理解

1/y是两个整形运算,首先得到的结果是整形0,再怎么强转也还是0(或者0.0之类)

计算机对于复杂的表达式,也是一步一步运算得出的结果
再问: 最后一个问题,为什么1/y=0?不是1除以1等于1吗?麻烦了,谢谢!
再答: 第一次是1除以1等于1,以后的计算全部为0了,所以最后PI的值为1