2000多年前,古希腊的柏拉图派学者欧多克斯,首先使用规尺分已知线段为“黄金分割”,他的作法如下:
1?过B点,作BC⊥AB,而且使BC=12AB;
2?连AC;
3?以C为圆心,CB为半径作圆弧,交AC于D;
4?以A为圆心,AD为半径作圆弧交线段AB于P,则P点分AB成黄金分割。
这个作法十分简便,证明也很容易。
设AB=a,则BC=a2,由勾股定理可知:
AC=AB2+BC2=a2+(a2)=52a;
AD=AC-DC=52a-a2=5-12a;
AP=AD=5-12a。
这就证明了,P点分AB成黄金分割。
这个作图方法,叫做“黄金分割法”,P点为“黄金分割点”。
#include#includefloat getequation(float x)
{
return x*x-2*x+2
}
void main()
{
float a=0
float b=6
float result = 0
do {
float c=a+0.618*(b-a)
float d=a+b-c
if(fabs(getequation(c)) <fabs(getequation(d)))
{
a=d
result = c
}
else
{
b=c
result = d
}
} while(fabs(getequation(result)) >0.01)
printf("f(a)=a*a-7*a+10\n")
printf("a=%f\n",result)
}
扩展资料
C语言编写程序求最大值
#include<stdio.h>
double Max(double*p,int n)
{
double max=*p
for(int i=0i<ni++)
if(*(p+i)>max)
max=*(p+i)
return max
}
double Min(double *p,int n)
{
double min=*p
for(int i=0i<ni++)
if(*(p+i)<min)
min=*(p+i)
return min
}
double Average(double *p,int n)
{
double sum=0
for(int i=0i<ni++)
sum+=*(p+i)
return sum/n
}
int main()
{
double a[10]
printf("请输入10个实数:\n")
for(int i=0i<10i++)
scanf("%f",&a[i])
printf("这10个数中最大值为:%f\n",Max(a,10))
printf("这10个数中最小值为:%f\n",Min(a,10))
printf("这10个数的平均值为:%f\n",Average(a,10))
return 0;
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)