请用大白话讲解一下以下代码的意思,这是个dowhile求算数平方根,但我看不懂,求解释?

#include <stdio.h> double DoSqrt(double z){ ꀀꀀꀀꀀdouble a=1; ꀀꀀꀀꀀdouble b=0; ꀀꀀꀀꀀdouble c=0; ꀀꀀꀀꀀdo{ ꀀꀀꀀꀀꀀꀀꀀꀀif(b*b<z){ ꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀb+=a; ꀀꀀꀀꀀꀀꀀꀀꀀ} ꀀꀀꀀꀀꀀꀀꀀꀀelse{ ꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀc=b; ꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀb-=a; ꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀa/=10; ꀀꀀꀀꀀꀀꀀꀀꀀ} ꀀꀀꀀꀀ}while(a>0.000001); ꀀꀀꀀꀀreturn (b+c)/2; } int main(){ ꀀꀀꀀꀀdouble x, y; ꀀꀀꀀꀀprintf("请输入一个数字:"); ꀀꀀꀀꀀscanf("%lf", &x); ꀀꀀꀀꀀif(x<0){ ꀀꀀꀀꀀꀀꀀꀀꀀprintf("输入错误。"); ꀀꀀꀀꀀ} else { ꀀꀀꀀꀀꀀꀀꀀꀀy=DoSqrt(x); ꀀꀀꀀꀀꀀꀀꀀꀀprintf("%g 的平方根为: %g.尀n", x, y); ꀀꀀꀀꀀ} ꀀꀀꀀꀀint z=1; ꀀꀀꀀꀀdo{ ꀀꀀꀀꀀꀀꀀꀀꀀmain(); ꀀꀀꀀꀀꀀꀀꀀꀀz++; ꀀꀀꀀꀀ}while(z>10); ꀀꀀꀀꀀreturn 0; }
2026年09月21日 21:32
有2个网友回答
网友(1):

变量a表示递增步长;
变量b是从0开始不断试探b的平方有没有超过参数z。如果不超过(即b*b当b平方超过了z时,用变量c暂存该值(它的平方刚刚超出z),同时这说明了上一次加的步长值稍大了点导致超出了,所以此时要将b恢复到加步长a之前的值(即b-=a;),并且将步长a缩小一点(即a/=10;)然后再去循环试探b加上现在小一点的步长后有没有超过。
若不超过,则以这个新的小步长递增继续试探;若超过了,则将步长a再继续缩小并继续试探。
以此一直循环直到步长a等于0.000001时结束试探。
返回值(b+c)/2表示取介于最后一次试探值b和稍微大一点导致超出的值c之间的中间值,即这个值已经是比较接近平方根的值了。

网友(2):

看不懂很正常,因为这是基于数学公式。
你先搜下求平方根的公式