实习题11用两种不容的顺序计算644834.1100012nn,分析误差的变化(1)顺序计算源代码:#includestdio.h#includemath.hvoidmain(){doublesum=0;intn=1;while(1){sum=sum+(1/pow(n,2));if(n%1000==0)printf(sun[%d]=%-30f,n,sum);if(n=10000)break;n++;}printf(sum[%d]=%f\n,n,sum);}结果:(2)逆序计算源代码:#includestdio.h#includemath.hvoidmain(){doublesum=0;intn=10000;while(1){sum=sum+(1/pow(n,2));if(n%1000==0)printf(sum[%d]=%-30f,n,sum);if(n=1)break;n--;}printf(sum[%d]=%f\n,n,sum);}结果:2已知连分数))//(.../(322101nnbaabababf利用下面的方法计算f:011)0,...,2,1(,dfnnidabdbdiiiinn写一个程序,读入n,nnba,,计算并打印f源代码:#includestdio.h#includemath.hvoidmain(){inti=0,n;floata[1024],b[1024],d[1024];printf(pleaseinputn,n=);scanf(%d,&n);printf(\npleaseinputa[1]toa[n]:\n);for(i=1;i=n;i++){printf(a[%d]=,i);scanf(%f,&a[i]);}printf(\npleaseinputb[0]tob[n]:\n);for(i=0;i=n;i++){printf(b[%d]=,i);scanf(%f,&b[i]);}d[n]=b[n];for(i=n-1;i=0;i--)d[i]=b[i]+a[i+1]/d[i+1];printf(\nf=%f\n,d[0]);}结果:3给出一个有效的算法和一个无效的算法计算积分10)10,...1,0(14ndxxxynn源代码:#includestdio.h#includemath.hmain(){doubley_0=(1/4.0)*log(5),y_1;doubley_2=(1.0/55.0+1.0/11.0)/2,y_3;intn=1,m=10;printf(有效算法输出结果:\n);printf(y[0]=%-20f,y_0);while(1){y_1=1.0/(4*n)+y_0/(-4.0);printf(y[%d]=%-20f,n,y_1);if(n=10)break;y_0=y_1;n++;if(n%3==0)printf(\n);}printf(\n无效算法的输出结果:\n);printf(y[10]=%-20f,y_2);while(1){y_3=1.0/n-4.0*y_2;printf(y[%d]=%-20f,m-1,y_3);if(m=1)break;y_2=y_3;m--;if(m%2==0)printf(\n);}}结果:4设NjNjS2211,已知其精确值为)11123(21NN(1)编制按从小到大顺序计算NS的程序(2)编制按从小达到的顺序计算NS的程序(3)按两种顺序分别计算30000100001000,,SSS,并指出有效位数源代码:#includestdio.hmain(){intN;doubleSN[30000];SN[30000]=(3.0/2.0-1.0/30000.0-1/30001.0)/2.0;for(N=30000;N=2;N--)SN[N-1]=SN[N]-1.0/(N*N-1);printf(从大到小顺序计算:\nSN[1000]=%f\nSN[10000]=%f\nSN[30000]=%f\n,SN[1000],SN[10000],SN[30000]);SN[2]=(3.0/2-1.0/2.0-1/3.0)/2.0;for(N=3;N=30000;N++)SN[N]=SN[N-1]+1.0/(N*N-1);printf(从小到大顺序计算:\nSN[1000]=%f\nSN[10000]=%f\nSN[30000]=%f\n,SN[1000],SN[10000],SN[30000]);}结果:实习题21.用牛顿法求下列方程的根02xex01xxe02lgxx源代码:#includestdio.h#includemath.htypedeffloat(*p)(float);floatff1(floatx){returnx*x-exp(x);}floatff2(floatx){returnx*exp(x)-1;}floatff3(floatx){returnlog(x)+x-2;}floatanswer(float(*p)(float)){intk=2;floatm=1,n=-1,x2,a,b,c;if(p==ff3)n=2;printf(x[0]=%.4f,x[1]=%.4f,,m,n);while(1){if(fabs(m-n)1e-4)break;a=p(n)*(n-m);b=p(n)-p(m);c=a/b;x2=n-c;m=n;n=x2;printf(x[%d]=%.4f,,k,x2);k++;if(k%3==0)printf(\n);}if(k%3!=0)printf(\n);printf(iterationtimes:%d,roots:%.4f\n,k-2,n);return0;}main(){printf(x*x-exp(x),\n);answer(ff1);printf(x*exp(x)-1,\n);answer(ff2);printf(lg(x)+x-2,\n);answer(ff3);return0;}结果:2.编写一个割线法的程序,求解上述各方程源代码:#includestdio.h#includemath.hfloatgexian(float,float);floatf(float);main(){inti,j;floatx1=2.2;floatx2=2,x3;scanf(%d,&i);if(i==1)printf(%f,x1);elseif(i==2)printf(%f,x2);else{for(j=3;j=i;j++){x3=gexian(x1,x2);x1=x2;x2=x3;}printf(%f,gexian(x1,x2));}}floatf(floatx){return(x*x-exp(x));}floatgexian(floatx1,floatx2){return(x2-(f(x2)/(f(x2)-f(x1)))*(x2-x1));}结果:实习题31用列主元消去法解下列方程组;43443233312)1(421432143214321xxxxxxxxxxxxxxx4341220332282)2(432132143214321xxxxxxxxxxxxxxx源程序:#includestdio.h#includemath.hvoidColPivot(float*,int,float[]);voidColPivot(float*c,intn,floatx[]){inti,j,t,k;floatp;for(i=0;i=n-2;i++){k=i;for(j=i+1;j=n-1;j++)if(fabs(*(c+j*(n+1)+i))(fabs(*(c+k*(n+1)+i))))k=j;if(k!=i)for(j=i;j=n;j++){p=*(c+i*(n+1)+j);*(c+i*(n+1)+j)=*(c+k*(n+1)+j);*(c+k*(n+1)+j)=p;}for(j=i+1;j=n-1;j++){p=(*(c+j*(n+1)+i))/(*(c+i*(n+1)+i));for(t=i;t=n;t++)*(c+j*(n+1)+t)-=p*(*(c+i*(n+1)+t));}}for(i=n-1;i=0;i--){for(j=n-1;j=i+1;j--)(*(c+i*(n+1)+n))-=x[j]*(*(c+i*(n+1)+j));x[i]=*(c+i*(n+1)+n)/(*(c+i*(n+1)+i));}}voidmain(){inti;floatx[4];floatc[4][5]={1,1,0,3,4,2,1,-1,1,1,3,-1,-1,3,-3,-1,2,3,-1,4};ColPivot(c[0],4,x);for(i=0;i=3;i++)printf(x[%d]=%f\n,i,x[i]);}结果:第(1)题第(2)题2、源代码:#includestdio.hvoidmain(){floatx[4];inti;floata[4][5]={48,-24,0,-12,4,-24,24,12,12,4,0,6,20,2,-2,-6,6,2,16,-2};voidDirectLU(float*,int,float[]);DirectLU(a[0],4,x);for(i=0;i=3;i++)printf(x[%d]=%f\n,i,x[i]);}voidDirectLU(float*u,intn,floatx[]){inti,r,k;for(r=0;r=n-1;r++){for(i=r;r=n;i++)for(k=0;k=r-1;k++)*(u+r*(n+1)+i)-=*(u+r*(n+1)+k)*(*(u+k*(n+1)+i));for(i=r+1;i=n-1;i++){for(k=0;k=r-1;k++)*(u+i*(n+1)+r)-=*(u+i*(n+1)+k)*(*(u+k*(n+1)+r));*(u+i*(n+1)+r)/=*(u+r*(n+1)+r);}}for(i=n-1;i=0;i--){for(r=n-1;r=i+1;r--)*(u+i*(n+1)+n)-=*(u+i*(n+1)+r)*x[r];x[i]=*(u+i*(n+1)+n)/(*(u+i*(n+1)+i));}}实习题41、源代码:#includestdio.hfloatLagrange(floatx[],floaty[],floatxx,intn)//n为(n+1)次插值;{inti,j;float*a,yy=0;a=newfloat[n];for(i=0;i=n-1;i++){a[i]=y[i];for(j=0;j=n-1;j++)if(j!=i)a[i]*=(xx-x[j])/(x[i]-x[j]);yy+=a[i];}deletea;returnyy;}voidmain(){floatx[5]={-3.0,-1.0,1.0,2.0,3.0};floaty[5]={1.0,1.5,2.0,2.0,1.0};floatxx1=-2,xx2=0,xx3=2.75,yy1,yy2,yy3;yy1=Lagrange(x,y,xx1,3);yy2=Lagrange(x,y,xx2,3);yy3=Lagrange(x,y,xx3,3);printf(x1=%-20f,y1=%f\n,xx1,yy1);printf(x2=%-20f,y2=%f\n,xx2,yy2);printf(x3=%-20f,y3=%f\n,xx3,yy3);}结果:2、源代码:#includestdio.hfloatLagrange(floatx[],floaty[],floatx