#includedouble hanshu (double x);
void main()
{
int k;
double a,a1,a2,b,y1,y2,c,e,i,j;
e=0.618,k=0;
printf("a=");
scanf("%lf",&a);
printf("b=");
scanf("%lf",&b);
printf("c=");
scanf("%lf",&c);
a1=b-e*(b-a);
y1=hanshu(a1);
a2=a+e*(b-a);
y2=hanshu(a2);
printf("输出次数=%d\n a=%lf, a1=%lf, a2=%lf, b=%lf, y1=%lf, y2=%lf\n",k,a, a1,a2,b,y1,y2);
i=(b-a)/b;
j=(y2-y2)/y2;
while(fabs(i)>=c||fabs(j>=c))
{
k++;
if(y1>=y2)
{
a=a1,a1=a2,y1=y2,a2=a+e*(b-a),y2=hanshu(a2);
}
else{b=a2,a2=a1,y2=y1,a1=b-e*(b-a),y1=hanshu(a1);
}
printf("输出次数=%d\n a=%lf, a1=%lf, a2=%lf, b=%lf, y1=%lf, y2=%lf\n",k,a,a1,a2,b,y1,y2);
i=(b-a)/b;
j=(y2-y1)/y2;
}
printf("k=%lf\n",0.5*(a+b));
}
double hanshu (double x)
{
double m;
m = x*x+2*x;
return m;
}实验结果(要求附上程序运行结果截图)
5、 手算过程
如以下表格: