回复 7# 的帖子
今天遇到高手了,总想问很多问题。帮我再看看另外一个问题:我的一个同学感叹如果有个程序能够解所有的方程就好了(一元任意次),有一天突然想写个程序试试。程序的一些思路如下:先输入你要解的方程的系数,然后依次输入各位系数从(高次到低次),然后开始解方程,输出结果。
具体的一些操作是各位系数用用一个数组代替,由于解任意方程的故把数组的范围设得越大越好我设的10位(即可解不超过十次的方程)。当输入N后通过计算比较它与十的关系,让数组前面的几位为0。后几位系数,为输入的系数。解方程用的是二分法,但是二分法有给出一个区间,为了不漏根,把这个区间的长度设计为0.01。也是为了求到尽量多的跟,我让程序从-100扫描到100这个区间。应该在这样地毯式的搜索中大部分的根都可以解出来了.....具体程序如下:
#include<stdio.h>
#include<math.h>
void main()
{
float x,x0,x1,x2,y0,y1,y,y2;
float a[10];
int i,m,n;
printf("qing shuru fangcheng cishu:\n");
scanf("%d",&n);
m=10-n;
for(i=0;i<m;i++) a[i]=0;printf("qing shuru ge xishu(yong kongge gekai):\n");
for(i=m;i<=10;i++) scanf("%f\n",&a[i]);
y=a[0]*x*x*x*x*x*x*x*x*x*x+a[1]*x*x*x*x*x*x*x*x*x+a[2]*x*x*x*x*x*x*x*x
+a[3]*x*x*x*x*x*x*x+a[4]*x*x*x*x*x*x+a[5]*x*x*x*x*x
+a[6]*x*x*x*x+a[7]*x*x*x+a[8]*x*x+a[9]*x+a[10];
for(x1=-100,x2=-100+0.01;x1<=100;x1=x1+0.01,x2=x2+0.01)
{
x=x1;y1=y;x=x2,y2=y;y0=1;
if(y1*y2<0)
{
while(fabs(y0)>0.0001)
{x=(x1+x2)/2;
y0=y;x0=x;
if(y1*y0>0) {y1=y0;x1=x0;}
else if(y1*y0==0)
printf("%f\n",x0); else {y2=y0;x2=x0;} } }
else if(y1*y2==0){if (y1==0) printf("%f\n") ;
else printf("%f\n,x0");
} }
getch();
}
虽然这样计算机要做大量的计算,区间就有10000个还别说每个区间的逼近计算,但至少有点反应撒。上面的程序有几个警告说在X定义以前可能用到了它。哎呀.....没搞懂!!请大虾指教哈.....我用的是WIN TC!!!谢谢了