=10000)break;  n++; } printf("sum[%d]=%f\n",n,sum); } 结果: (2)逆序"/> =10000"/>
首页 > 计算方法与实习上机题答案

计算方法与实习上机题答案

2019-04-21 18页 doc 58KB 104阅读

用户头像

is_654168

暂无简介

举报
计算方法与实习上机题答案实习题1 1用两种不容的顺序计算 ,分析误差的变化 (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)逆序计算 源代码...
计算方法与实习上机题答案
实习题1 1用两种不容的顺序计算 ,误差的变化 (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() 继续阅读
/
本文档为【计算方法与实习上机题答案】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索