2、编写一个函数double mysqrt(double y);
求y
的正平方根,参数y
是正实数。我们用折半查找来找这个平方根,在从0到y
之间必定有一个取值是y
的平方根,如果我们查找的数x
比y
的平方根小,则x2<y,如果我们查找的数x
比y
的平方根大,则x2>y,我们可以据此缩小查找范围,当我们查找的数足够准确时(比如满足|x2-y|<0.001),就可以认为找到了y
的平方根。思考一下这个算法需要迭代多少次?迭代次数的多少由什么因素决定?
注:转载请注明源地址:http://blog.youkuaiyun.com/whorus1/article/list/2,谢谢!
#include<stdio.h>
double mysqrt(double start, double end ,double y)
{
double mid = (end + start)/2;
if (mid*mid - y < -0.001 ) {
mysqrt (mid, end, y);
} else if (mid*mid - y > 0.001) {
mysqrt (start, mid, y);
} else {
printf ("%f\n", mid);
return mid;
}
}
int main()
{
double y;
printf ("please enter the num:");
scanf ("%lf",&y);
mysqrt(0, y, y);
return 0;
}
————————————————————————————————————————————————————————————————————————————
2014年3月14日:之前的版本想在main中打印总是出错,在if分支语句中都加return后解决,修改后的代码如下:
#include<stdio.h>
double mysqrt(double start, double end ,double y)
{
double mid = (end + start)/2;
if (mid*mid - y < -0.001 ) {
return mysqrt (mid, end, y);
} else if (mid*mid - y > 0.001) {
return mysqrt (start, mid, y);
} else {
return mid;
}
}
int main()
{
double y;
printf ("please enter the num:");
scanf ("%lf",&y);
printf ("The square root of %f is %f\n", y, mysqrt(0, y, y));
return 0;
}