c语言产生随机数_C语言 求的近似值
愉快的一天,不得不做的三件事:
????? ? 種田,鋤地,整代碼!!!
【題目】
用循環(huán)方法實現。
(1)請利用“正多邊形逼近”的方法求出π的近似值。
(2)利用隨機數法求π的近似值。
【設計思路】
(1)“正多邊形逼近”的方法思路:
利用圓內接正六邊形邊長等于半徑的特點將邊數翻番,作出正十二邊形,求出邊長,重復這一過程,就可獲得所需精度的π的近似值。
(2)隨機數法求π的近似值的思路:
在一個單位邊長的正方形中,以邊長為半徑,以一個頂點為圓心,在正方形上作四分之一圓。
隨機的向正方形內扔點,若落入四分之一圓內則計數。
重復向正方形內扔足夠多的點,將落入四分之一圓內的計數除以總的點數,其值就是π值四分之一的近似值。
該方法求出的π值只有統(tǒng)計次數足夠多時才可能準確。
【代碼分析】
double b,d,b0;?
?/*b為多邊形邊長,d為圓半徑與三角形中線之差*/
long i;? ?
?/*內接多邊形的邊數*/
? for(i=6,b=0.5;;i*=2)????
/*首先單位圓內接正六邊形,初始b等于半徑的一半,即為0.5;每次循環(huán),內接多邊形邊數翻一倍*/
? {
? b0=b;
/*保存本次正多邊形的邊長作為精確度控制的依據*/
? d=1-sqrt(1-b*b);
? b=sqrt(b*b+d*d)/2;
? if(2*b*i-b0*i<1e-15)????
? break;
/*精確度達到1e-15時,跳出循環(huán)*/
}
printf("方法一得到:π=%.15lf\n",2*i*b);
#define N 1e6????//定義一百萬個種子long i;
double x,y,k,PI;
srand((unsigned)time(NULL));?
/*srand()函數用來設置算法的種子,time(NULL)返回當前的時間,先調用srand(time(NULL)),把當前的時間作為種子,使程序每次運行產生不同的隨機數*/
for(i=0,k=0;i
{
x = rand() / (double)RAND_MAX;
y = rand() / (double)RAND_MAX;
/*RAND_MAX 是 中偽隨機數生成函數 rand 所能返回的最大數值,此時得到一個 0~1.0 之間的隨機浮點數*/
if (sqrt((x - 0.5)*(x - 0.5) + (y - 0.5)*(y - 0.5)) <= 0.5)?
? ? k++;????
/*記錄落入四分之一圓的點數*/
}
PI=4*k/N;
printf("方法二得到:π=%.15f\n",PI);
【代碼展示】
C語言? ?求 π 的近似值#include?
#include
#include
#include
#define N 1e6
void main1()
{
? double b,d,b0;
long i;
? for(i=6,b=0.5;;i*=2)
? {
? b0=b;
? d=1-sqrt(1-b*b);
? b=sqrt(b*b+d*d)/2;
? if(2*b*i-b0*i<1e-15)
? break;
}
? ? printf("方法一得到:π=%.15lf\n",2*i*b);
?}
void main2()
{
long i;
double x,y,k,PI;
srand((unsigned)time(NULL));?
for(i=0,k=0;i
{
x = rand() / (double)RAND_MAX;
? y = rand() / (double)RAND_MAX;
? if (sqrt((x - 0.5)*(x - 0.5) + (y - 0.5)*(y - 0.5)) <= 0.5)?
? ? k++;
}
PI=4*k/N;
printf("方法二得到:π=%.15f\n",PI);
}
void approximation()
{
printf("-------歡迎進入操作界面-------\n\n");
main1();
main2();
}
int main()
{
approximation();
return 0;
}
【運行結果展示】
IT 農工要回家休息了,我們下期再見吧
記得點擊“在看”進行收藏哦
往期精彩
C語言 用牛頓迭代法解方程
C語言 埃及分數
總結
以上是生活随笔為你收集整理的c语言产生随机数_C语言 求的近似值的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python语句结束标志_jinja2.
- 下一篇: 用java制作扑克牌_阿里三面被挂,幸获