题目取自2015年蓝桥杯校内选拔赛B组第3题,是一个非常有意义的题。
如果x的x次幂结果为10(参见【图1.png】),你能计算出x的近似值吗?
显然,这个值是介于2和3之间的一个数字。
请把x的值计算到小数后6位(四舍五入),并填写这个小数值。
如果从数学的角度看,x^x=10,两边对自然对数求导数,得到
x*ln(x)=ln 10
两边求导数,得
1+ln(x)=0
因此可得
x=e^{-1}
这个答案显然是错误的。考虑到部分学生可能还没有学数值分析,因此,考虑采用二分查找法进行。将函数进行变换,两边对10求导,得到如下的公式:
x*log(x)=1
即logx=1/x
因此构造函数f(x)=log10(x)-1/x,求它在区间(2,3)之间的根。对二分查找法进行变形,按照题目规定的精度进行迭代,将步长设置为1e-8,可以得到如下的参考程序:
#include <stdio.h>
#include <math.h>double f(double x)
{return log10(x)-1.0/x;
}int main()
{double a=2., b=3., oldmid=0, mid=(a+b)/2;while(fabs(oldmid-mid)>1e-8){oldmid=mid;if (f(mid)*f(a)>0)a=mid+1e-8;elseb=mid-1e-8;mid=(a+b)/2; }printf("%.8f\n",mid);return 0;}