你这个代码排版,看着头晕。
#include <stdio.h>
#include <math.h>
int fun()
{
double findRoot(double a,double b,double d,int *ct);【*ct是啥意思】
double y;
int ct;
y=findRoot(0,2,1e-6,&ct);
printf("解为%.6lf\n迭代的次数=%d\n",y,ct);
}
int main()
{
fun();
return 0;
}
double findRoot(double a,double b,double d,int *ct)【从这一步开始都没看懂】
{
double x,f;
*ct=0;
while(1)【为什么是1】
{
(*ct)++;
x=(a+b)/2;
f=x*x*x*x+2*x*x*x +x*x - 5;
if (fabs(f)<d)
break;
if (f>0)
b=x;
else
a=x;
}
return x;【为什么是return x,而不是return 0】
}
关于这个问题,解答如下:
1.double findRoot(double a,double b,double d,int *ct);
中的*ct是指针,我说了,你的计数无法返回,只能通过这个方式返回
指针可以在函数中改变它指向的内容的,而a,b,d是不能在函数中改变的
2. while(1)是定义一个死循环,也就是循环条件恒为真(1),我是通过
if (fabs(f)<d) //当得到符合精度条件的解
break; //循环退出
3. return x;就是返回方程的解x,你return 0的话没有意义的(大多函数的返回值都是有意义的)
另外,上面的程序就是用二分法求
x*x*x*x+2*x*x*x +x*x - 5=0
在区间(0,2)间的解,所以程序不需要任何输入的