实习题1
1用两种不容的顺序计算
,
分析
定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析
误差的变化
(1)顺序计算
源代码:
#include
#include
void main()
{
double sum=0;
int n=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)逆序计算
源代码:
#include
#include
void main()
{
double sum=0;
int n=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已知连分数
利用下面的方法计算f:
写一个程序,读入n,
,计算并打印f
源代码:
#include
#include
void main()
{
int i=0,n;
float a[1024],b[1024],d[1024];
printf("please input n,n=");
scanf("%d",&n);
printf("\nplease input a[1] to a[n]:\n");
for(i=1;i<=n;i++)
{
printf("a[%d]=",i);
scanf("%f",&a[i]);
}
printf("\nplease input b[0] to b[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给出一个有效的算法和一个无效的算法计算积分
源代码:
#include
#include
main()
{
double y_0=(1/4.0)*log(5),y_1;
double y_2=(1.0/55.0+1.0/11.0)/2,y_3;
int n=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设
,已知其精确值为
(1)编制按从小到大顺序计算
的程序
(2)编制按从小达到的顺序计算
的程序
(3)按两种顺序分别计算
,并指出有效位数
源代码:
#include
main()
{
int N;
double SN[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]);
}
结果:
实习题2
1.用牛顿法求下列方程的根
源代码:
#include
#include
typedef float (*p)(float );
float ff1(float x)
{
return x*x-exp(x);
}
float ff2(float x)
{
return x*exp(x)-1;
}
float ff3(float x)
{
return log(x)+x-2;
}
float answer(float(*p)(float))
{
int k=2;
float m=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("iteration times: %d, roots: %.4f\n ",k-2,n);
return 0;
}
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);
return 0;
}
结果:
2.编写一个割线法的程序,求解上述各方程
源代码:
#include
#include
float gexian(float,float);
float f(float);
main()
{
int i,j;
float x1=2.2;
float x2=2,x3;
scanf("%d",&i);
if(i==1)
printf("%f",x1);
else if(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));
}
}
float f(float x)
{
return (x*x-exp(x));
}
float gexian(float x1,float x2)
{
return (x2-(f(x2)/(f(x2)-f(x1)))*(x2-x1));
}
结果:
实习题3
1用列主元消去法解下列方程组;
源程序:
#include
#include
void ColPivot(float*,int,float[]);
void ColPivot(float*c,int n,float x[])
{
int i,j,t,k;
float p;
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));
}
}
void main()
继续阅读