用c语言,分别用for、while、do while计算π的值,至少精确到小数点后6位
时间: 2024-11-15 16:33:07 浏览: 0
在C语言中,利用公式Monte Carlo方法(又称投掷硬币法)来估算圆周率π的一个简单实现通常是通过随机生成大量点并判断它们是否落在单位圆内来完成的。以下是使用for、while和do-while循环分别实现的例子,这里假设我们会在100万次迭代中进行计算:
1. **使用for循环**:
```c
#include <stdio.h>
#include <time.h>
#define PI_POINTS 1000000
double estimatePi(int count) {
srand(time(0));
int in_circle = 0;
for (int i = 0; i < count; ++i) {
double x = ((double) rand()) / RAND_MAX;
double y = ((double) rand()) / RAND_MAX;
if (x * x + y * y <= 1.0) {
in_circle++;
}
}
return 4.0 * in_circle / count;
}
int main() {
printf("Estimated value of Pi: %.6f\n", estimatePi(PI_POINTS));
return 0;
}
```
2. **使用while循环**:
```c
#include <stdio.h>
#include <time.h>
double estimatePi(int count) {
srand(time(0));
int in_circle = 0, i = 0;
while (i < count) {
double x = ((double) rand()) / RAND_MAX;
double y = ((double) rand()) / RAND_MAX;
if (x * x + y * y <= 1.0) {
in_circle++;
}
i++;
}
return 4.0 * in_circle / count;
}
int main() {
printf("Estimated value of Pi: %.6f\n", estimatePi(PI_POINTS));
return 0;
}
```
3. **使用do-while循环**:
```c
#include <stdio.h>
#include <time.h>
double estimatePi(int count) {
srand(time(0));
int in_circle = 0, i = 0;
do {
double x = ((double) rand()) / RAND_MAX;
double y = ((double) rand()) / RAND_MAX;
if (x * x + y * y <= 1.0) {
in_circle++;
}
i++;
} while (i < count);
return 4.0 * in_circle / count;
}
int main() {
printf("Estimated value of Pi: %.6f\n", estimatePi(PI_POINTS));
return 0;
}
```
以上代码都会计算出近似的π值,但请注意,这种方法得到的结果并不精确,因为这是基于概率的估计。
阅读全文