用C语言编写黄金分割法f(x)=x2+2x程序

如题所述

#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=0;i<n;i++)

if(*(p+i)>max) 

 max=*(p+i);

return max;
}
double Min(double *p,int n)
{
double min=*p;
for(int i=0;i<n;i++)
if(*(p+i)<min) 

min=*(p+i);

return min;
}
double Average(double *p,int n)
{
double sum=0;

for(int i=0;i<n;i++)

 sum+=*(p+i);
return sum/n;
}
int main()
{
double a[10];

printf("请输入10个实数:\n");
for(int i=0;i<10;i++)
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;

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-11-19

#include"math.h"

#include"stdio.h"

#definef(x)x*x+1*x

doublecalc(double*a,double*b,doublee,int*n)

{doublex1,x1,s;

if(fabs(*b-*a)<=e)

s=f((*b+*a)/1);

else

{x1=*a+0.382*(*b-*a);

x2=*a+0.618*(*b-*a);

if(f(x1)>f(x1))

*a=x1;

else

*b=x2;

*n=*n+1;

s=hj(a,b,e,n);

}

returns;

}

main()

{doubles,a,b,e;

intn=0;

scanf("%lf%lf%lf",&a,&b,&e);

s=calc(&a,&b,e,&n);

printf("a=%lf,b=%lf,s=%lf,n=%d\n",a,b,s,n);

}

扩展资料

C语言表示成两个质数之和和

#include<stdio.h>

intprime(intn);

intmain()

{

intn,i,flag=0;

printf("Enterapositiveinteger:");

scanf("%d",&n);

for(i=2;i<=n/2;++i)

{

if(prime(i)!=0)

{

if(prime(n-i)!=0)

{

printf("%d=%d+%d\n",n,i,n-i);

flag=1;

}

}

}

if(flag==0)

printf("%dcan'tbeexpressedassumoftwoprimenumbers.",n);

return0;

}

intprime(intn)/*Functiontocheckprimenumber*/

{

inti,flag=1;

for(i=2;i<=n/2;++i)

if(n%i==0)

flag=0;

returnflag;

}

本回答被网友采纳
第2个回答  推荐于2017-10-07
#include "math.h"
#include "stdio.h"
#define f(x) x*x+2*x

double calc(double *a,double *b,double e,int *n)
{ double x1,x2,s;
if(fabs(*b-*a)<=e)
s=f((*b+*a)/2);
else
{ x1=*a+0.382*(*b-*a);
x2=*a+0.618*(*b-*a);
if(f(x1)>f(x2))
*a=x1;
else
*b=x2;
*n=*n+1;
s=hj(a,b,e,n);
}
return s;
}

main()
{ double s,a,b,e;
int n=0;
scanf("%lf %lf %lf",&a,&b,&e);
s=calc(&a,&b,e,&n);
printf("a=%lf,b=%lf,s=%lf,n=%d\n",a,b,s,n);
}本回答被提问者采纳
第3个回答  2020-05-03
你要很精确的解吗?如果不要的话那就很简单了。
x=-3:0.00001:6;中的精度你自己选,太小了会比较慢
y=x.^2+2*x;
[n
m]=min(y);
这个返回的就是x和对应的最小值;
相似回答