巴比倫算法求平方根

分析:
巴比倫算法介紹:
1.??? 假設(shè)要求a的平方根,先找到一個近似值x0,如a/2;
2.??? 被開方數(shù)a除以近似值x0;
3.??? 求第一步和第二步得到的值的平均數(shù);
4.??? 令平均數(shù)為新的近似值,返回第二步,循環(huán)計算(根據(jù)精度要求,進行循環(huán)控制)
經(jīng)過前面四個步驟,可以得到如上公式;
對公式的理解:可以把xn理解為x0,xn+1理解為x1,然后套用公式即可
程序=算法(解決問題的步驟)+數(shù)據(jù)結(jié)構(gòu)(數(shù)據(jù)類型的選擇)
程序如下:
//習題5.12平方根的迭代公式
#include<stdio.h>
#include<math.h>//需要使用絕對值函數(shù)fabs()
int main()
{
????? float a,x0,x1;//根據(jù)算法和數(shù)據(jù)精度的要求,需要定義三個變量和將變量定義為float型。
????? printf("請輸入正數(shù)a的值:"); //用于提示用戶輸入一個被開方數(shù);
????? scanf("%f",&a);//沒加取地址符,由于這個里沒寫,導致輸出沒有結(jié)果
????? x0=a/2;//第一步,取得一個近似值
????? x1=(x0+(a/x0))/2;//根據(jù)公式,算出第二步
????? do//do循環(huán),先執(zhí)行循環(huán)體,后判斷是否滿足條件
????? {
??????????? x0=x1;
??????????? x1=(x0+(a/x0))/2;
????? ?} while(fabs(x1-x0)>=1e-5);//判斷條件是否滿足,滿足結(jié)束循環(huán),不滿足繼續(xù)循環(huán);
????? printf("%f的平方根為:%f",a,x1);
????? return 0;
?}
?