第一篇:计算方法与实习上机报告
计算方法与实习
——上机报告
学院:电子工程学院
2015.1.4
学号:***
姓名: 刘
波
习题一: 舍入误差及稳定性
一、实验目的
(1)通过上机编程,复习巩固以前所学程序设计语言及上机操作指令;(2)通过上机计算,了解舍入误差所引起的数值不稳定性
二、实验内容
21、用两种不同的顺序计算n,分析其误差的变化
n1100002、已知连分数fb0a1,利用下面的算法计算f:
b1a2/b2a3/(...an/bn)ai
1(in1,n2,..., 0fd0 di1写一程序,读入n,b0,b1,...,bn,a1,...,an,计算并打印f dnbn,dibi
3、给出一个有效的算法和一个无效的算法计算积分
xnyndx
(n0,1,..., 104x1N11311
4、设SN2,已知其精确值为
22NN1j2j1(1)编制按从大到小的顺序计算SN的程序 1(2)编制按从小到大的顺序计算SN的程序
(3)按两种顺序分别计算S1000,S10000,S30000,并指出有效位数
三、实验步骤、程序设计、实验结果及分析
21、用两种不同的顺序计算n,分析其误差的变化
n110000(1)实验步骤:
分别从1~10000和从10000~1两种顺序进行计算,应包含的头文件有stdio.h和math.h(2)程序设计: a.顺序计算
#include
sum=sum+(1/pow(n,2));
if(n%1000==0)printf(“sun[%d]=%-30f”,n,sum);
if(n>=10000)break;
n++;} printf(“sum[%d]=%fn”,n,sum);} b.逆序计算
#include
while(n!=0){
sum=sum+(1/pow(n,2));
if(n%200==0)
printf(“sum[%d]=%-10f”,n,sum);
if(n<1)break;
n--;} printf(“sum[%d]=%fn”,n,sum);}
(3)实验结果及分析: 程序运行结果: a.顺序计算
b.逆序计算
结果分析:两种不同顺序计算结果是一样的,顺序计算误差从一开始就很小,而逆序计算误差最开始十分大,后来结果正确。
2、已知连分数fb0(1)实验步骤: 利用 dnbn,dibia1,计算f:
b1a2/b2a3/(...an/bn)ai1,0
(in1,n2,...,fd0,计算f
di1(2)程序设计 #include
printf(“nplease input a[0] to a[n-1]:n”);for(i=1;i printf(“a[%d]=”,i); scanf(“%f”,&a[i]);} printf(“nplease input b[0] to b[n-1]:n”);for(i=0;i printf(“b[%d]=”,i); scanf(“%f”,&b[i]);} d[n]=b[n];for(i=n-1;i>=0;i--) c[i]=b[i]+a[i+1]/c[i+1];printf(“nf=%fn”,c[0]);}(3)实验结果 程序运行结果: 3、给出一个有效的算法和一个无效的算法计算积分 xnyndx (n0,1,..., 104x11(1)实验步骤 利用C语言编写程序,分别使用数值稳定的和数值不稳定的计算公式所建立的递推公式进行计算。 (2)程序设计 #include 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”);} }(3)实验结果及分析 程序运行结果: 结果分析:无效算法数值不稳定,误差造成的影响特别大 4、设SN j2N11311,已知其精确值为 22NN1j21(1)实验步骤 先编程按从大到小的顺序计算SN的程序,再编程按从小到大的顺序计算SN的程序,然后按两种顺序分别计算S1000,S10000,S30000。(2)程序设计 #include 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]=%fnSN[10000]=%fnSN[30000]=%fn”,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]=%fnSN[10000]=%fnSN[30000]=%fn”,SN[1000],SN[10000],SN[30000]);}(3)实验结果及分析 程序运行结果: : : 结果分析:不同顺序计算所得结果是一样的。 四、总结 通过这次上机,学习了解了舍入误差在不同算法时对结果的影响不同,稳定的算法才能获得正确的结果。 习题二: 一、实验目的 (1)通过对二分法与牛顿迭代法做编程练习和上机运算,进一步体会二分法和牛顿法的不同。 (2)编写割线迭代法的程序,求非线性方程的解,并与牛顿迭代法作比较。 二、实验内容 1、用牛顿法求下列方程的根(1)xe0 (2)xe10(3)lgxx20 2、编写割线法程序求解第一问的方程 三、实验步骤、程序设计、实验结果及分析 1、牛顿法(1)实验步骤 通过定义牛顿法求方程的子函数,用main函数调用子函数求根(2)程序设计 #include float ff1(float x){ return x*x-exp(x);} x2xfloat 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: %.4fn ”,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;}(3)实验结果及分析 2、割线法(1)程序设计 #include 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)熟悉求解线性方程组的有关理论和方法; (2)会编制列主元消去法,LU分解法,雅可比及高斯-赛德尔迭代法的程序;(3)通过实际计算,进一步了解各种方法的优缺点,选择合适的数值方法。 二、实验内容 1、用列主元消去法解方程组 2、用LU分解法解方程组 三、实验步骤、程序设计、实验结果及分析 1、用列主元消去法解方程组(1)程序设计 #include 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(){ int i;float x[4];float c[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]=%fn”,i,x[i]);}(2)实验结果及分析 (1)题 (2)题 2、用LU分解法解方程组(1)程序设计 #include 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));} } 四、总结 掌握了用列主元消去法和LU分解法求解方程组程序编写的技巧。 习题四: 插值法 一、实验目的 (1)熟悉拉格朗日插值法多项式和牛顿插值多项式,注意其不同点;(2)掌握三次样条插值解决一些实际问题。 二、实验内容 1、按所给数据做二次插值,并求给定点的函数值 2、按所给数据做五次插值,并求给定点的函数值 3、牛顿前插公式计算函数值 三、实验步骤、程序设计、实验结果及分析 1、二次插值(1)程序设计 #include //n为(n+1)次插值; { int i,j;float *a,yy=0; a=new float[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];} delete a;return yy;} void main(){ float x[5]={-3.0,-1.0,1.0,2.0,3.0};float y[5]={1.0,1.5,2.0,2.0,1.0};float xx1=-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=%fn”,xx1,yy1);printf(“x2=%-20f,y2=%fn”,xx2,yy2);printf(“x3=%-20f,y3=%fn”,xx3,yy3);}(2)实验结果 2、五次插值(1)程序设计 #include //n为(n+1)次插值; { int i,j;float *a,yy=0; a=new float[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];} delete a;return yy;} void main(){ float x[6]={0.30,0.42,0.50,0.58,0.66,0.72};float y[6]={1.04403,1.08462,1.11803,1.15603,1.19817,1.23223};float xx1=0.46,xx2=0.55,xx3=0.60,yy1,yy2,yy3;yy1=Lagrange(x,y,xx1,6);yy2=Lagrange(x,y,xx2,6); yy3=Lagrange(x,y,xx3,6);printf(“x1=%-20f,y1=%fn”,xx1,yy1);printf(“x2=%-20f,y2=%fn”,xx2,yy2);printf(“x3=%-20f,y3=%fn”,xx3,yy3);} (2)实验结果 3、牛顿前插公式计算函数值(1)程序设计 #include int k,i;f[0][0]=y[0];f[1][0]=y[1];f[2][0]=y[2];f[3][0]=y[3];for(k=1;k<=n;k++) for(i=0;i<=(N-k);i++) f[i][k]=f[i+1][k-1]-f[i][k-1];return;} void main(){ int i,k=1;float a,b=1,m=21.4,t=1.4,f[4][4]={0};float x[5]={20,21,22,23,24};float y[5]={1.30103,1.32222,1.34242,1.36173,1.38021};Difference(y,f,N);a=f[0][0];for(i=1;i<=N;i++){ k=k*i; b=b*(t-i+1); a=a+b*f[0][i]/k;} printf(“x(k)n”);for(i=0;i<=4;i++) printf(“%-20f”,x[i]);printf(“ny(k)n”); for(i=0;i<=4;i++) printf(“%-20f”,y[i]);for(k=1;k<=3;k++){ printf(“nF(%d)n ”,k); for(i=0;i<=(3-k);i++) { printf(“%-20f”,f[i][k]); } } printf(“n”);printf(“f(%f)=%-20f”,m,a);printf(“n”);}(2)实验结果 四、总结 学习了插值法,学会了利用插值法编程求多项式的解,可以求解很多问题,让求解多项式解变得非常简单。 习题五: 曲线拟合 一、实验目的 (1)了解最小二乘法的基本原理,通过计算机解决实际问题;(2)了解超定方程组的最小二乘解法。 二、实验内容 1、分别用抛物线yabxcx2和指数曲线yaebx拟合所给数据,并比较这两个拟合函数的优劣。 2、按所给实验数据,用形如yabx的抛物线进行最小二乘拟合。 三、程序设计、结果分析 1、分别用抛物线yabxcx和指数曲线yae拟合所给数据 a.抛物线 (1)程序设计: #include 2bx2 float y[15]={33.4,79.50,122.65,159.05,189.15,214.15,238.65,252.50,267.55,280.50,296.65,301.40,310.40,318.15,325.15};void Approx(float[],float[],int,int,float[]);Approx(x,y,15,2,a);for(i=0;i<=2;i++) printf(“a[%d]=%fn”,i,a[i]);} void Approx(float x[],float y[],int m,int n,float a[]){ int i,j,t;float *c=new float[(n+1)*(n+2)];float power(int,float);void ColPivot(float *,int,float[]);for(i=0;i<=n;i++){ for(j=0;j<=n;j++) { *(c+i*(n+2)+j)=0; for(t=0;t<=m-1;t++) *(c+i*(n+2)+j)+=power(i+j,x[t]); } *(c+i*(n+2)+n+1)=0; for(j=0;j<=m-1;j++) *(c+i*(n+2)+n+1)+=y[j]*power(i,x[j]);} ColPivot(c,n+1,a);delete c;} 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));} } float power(int i,float v){ float a=1;while(i--)a*=v;return a;}(2)实验结果 2、最小二乘拟合(1)程序设计 #include //增加了数组z; {z[n]=log(y[n]/x[n]);} void Approx(float[],float[],int,int,float[]);Approx(x,z,15,1,a); //变成一次拟合; //for(i=0;i<=1;i++) //printf(“a[%d]=%fn”,i,a[i]);printf(“a=exp(a[0])=%fn”,exp(a[0]));printf(“b=-a[1]=%fn”,-a[1]);} void Approx(float x[],float y[],int m,int n,float a[]){ int i,j,t;float *c=new float[(n+1)*(n+2)];float power(int,float);void ColPivot(float *,int,float[]);for(i=0;i<=n;i++){ for(j=0;j<=n;j++) { *(c+i*(n+2)+j)=0; for(t=0;t<=m-1;t++) *(c+i*(n+2)+j)+=power(i+j,x[t]); } *(c+i*(n+2)+n+1)=0; for(j=0;j<=m-1;j++) *(c+i*(n+2)+n+1)+=y[j]*power(i,x[j]);} ColPivot(c,n+1,a);delete c;} 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));} } float power(int i,float v){ float a=1;while(i--)a*=v;return a;}(2)实验结果 四、总结 通过曲线拟合,最小二乘法的基本原理的学习,我学会了利用计算机解决现实实际问题中的曲线拟合。 习题六: 数值积分 一、实验目的 (1)通过实际计算体会各种方法的精确度;(2)会编写用龙贝格算法求定积分的程序。 二、实验内容 编写复化柯特斯求积分公式,并计算例题1例题2,观察n为多少时有6位有效数字。 三、程序设计、实验结果及分析(1)程序设计 #include c1+=(*f)(a+k*h); c2+=(*f)(a+k*h+h/4); c3+=(*f)(a+k*h+h/2); c4+=(*f)(a+k*h+3*h/4);} c=h/90*(7*((*f)(a)+(*f)(b))+14*c1+32*c2+12*c3+32*c4);return c;} float f(float x){ return 1/sqrt(1+x*x*x);} void main(){ int i,n=4;float c;for(i=0;i<=4;i++){ c=Cotes(f,0,1,n); printf(“C(%d)=%fn”,n,c); n*=2;} } #include c1+=(*f)(a+k*h); c2+=(*f)(a+k*h+h/4); c3+=(*f)(a+k*h+h/2); c4+=(*f)(a+k*h+3*h/4);} c=h/90*(7*((*f)(a)+(*f)(b))+14*c1+32*c2+12*c3+32*c4);return c;} float f(float x){ // return 1/sqrt(1+x*x*x); if(x==0)return 1; else return sin(x)/x;} void main(){ int i,n=4;float c;for(i=0;i<=4;i++){ // c=Cotes(f,0,1,n); c=Cotes(f,0,5,n); printf(“C(%d)=%fn”,n,c); n*=2;} } (2)实验结果及分析 四、总结 学习了复化辛卜生公式,自适应梯形公式,龙贝格算法,运用求解定积分并控制精度的方法。 习题七: 常微分方程数值解法 一、实验目的 (1)熟悉求解常微分方程初值问题的有关方法和理论,主要是改进欧拉公式,四阶龙格-库塔法和阿当姆斯方法; (2)编制上述方法计算机程序,包括求解微分方程组的计算程序;(3)针对实习题编制程序,并上机计算其所需要的结果; (4)体会各种解法的功能,优缺点及适用场合,会选取适当的求解方法。 二、实验内容 1、分别用改进欧拉法与四阶龙格-库塔公式(取h0.1)求解下列微分方程初值问题 2、用四阶龙格-库塔公式(取h0.1)解下列微分方程组初值问题 三、实验步骤、程序设计、实验结果及分析 1、分别用改进欧拉法与四阶龙格-库塔公式(取h0.1)求解下列微分方程初值问题 a.改进欧拉法(1)程序设计 #include yp=y+h*(*f)(x,y); x=x0+i*h; yc=y+h*(*f)(x,yp); y=(yp+yc)/2; printf(“x[%d]=%fty[%d]=%fn”,i,x,i,y);} } float f(float x,float y){ //return x*x+y*y; //题(1) //return 1/(1+y*y); //题(2) return y-2*x/y; //题(3)} void main(){ float xn=1.0,x0=0,y0=1; ModEuler(f,x0,y0,xn,10);} (2)实验结果及分析(1) (2) (3) b.四阶龙格-库塔公式(1)程序设计 #include K1=(*f)(x,y); K2=(*f)(x+h/2,y+h*K1/2); K3=(*f)(x+h/2,y+h*K2/2); K4=(*f)(x+h,y+h*K3); y=y+h*(K1+2*K2+2*K3+K4)/6; x=a+i*h; printf(“x[%d]=%fty[%d]=%fn”,i,x,i,y);} } float f(float x,float y){ //return x*x+y*y; //题(1) //return 1/(1+y*y); //题(2) return y-2*x/y; //题(3)} void main(){ float a=0,b=1.0,y0=1;Runge_Kutta(f,a,b,y0,10);}(2)实验结果(1) (2) (3) 2、四阶龙格-库塔公式解微分方程组初值问题(1)程序设计 #include K1=(*f)(x,y,z);l1=(*g)(x,y,z); K2=(*f)(x+h/2,y+h*K1/2,z+h*l1/2);l2=(*g)(x+h/2,y+h*K1/2,z+h*l1/2); K3=(*f)(x+h/2,y+h*K2/2,z+h*l2/2);l3=(*g)(x+h/2,y+h*K2/2,z+h*l2/2); K4=(*f)(x+h,y+h*K3,z+h*l3);l4=(*g)(x+h,y+h*K3,z+h*l3); y=y+h*(K1+2*K2+2*K3+K4)/6; z=z+h*(l1+2*l2+2*l3+l4)/6; x=a+i*h; printf(“x[%d]=%fty[%d]=%ftz[%d]=%fn”,i,x,i,y,i,z);} } float f(float x,float y,float z){ return 120-2*y+2*z; } float g(float x,float y,float z){ return 2*y-5*z; } void main(){ float a=0,b=1.0,y0=0,g0=0;Runge_Kutta(f,g,a,b,y0,g0,10);} (2)实验结果 四、总结 通过这次学习,我掌握了根据不同场合选择不同方法计算求解问题的方法,主要学习了改进欧拉法和四阶龙格-库塔法求解微分方程的求解问题方法。 计算方法上机汇总: 通过对这门课的学习,我们学习了很多计算方程、曲线拟合、求解微分方程的方法。而实习 课让我们将所学的原理应用到实践中去,上机编写程序的过程中我们不断的运用已学知识,掌握了求解各种实际问题的方法,并且体会了不同的方法的不同结果,从而在不同的场合,要用合适的计算方法来求解问题。我们求解的问题包括误差分析,线性方程组的求解,微分方程的求解等问题。在选择合适的计算方法的时候要考虑方法的收敛性,稳定性,以及哪种方法计算速度快,最终结果误差小。这门课与计算机密切结合并且实用性极强,能够将所学的知识在实践中得到应用,加强了我对专业学习的信心。 参考文献: 【1】孙志忠.计算方法典型例题分析.第二版.北京:科学出版社,2005 【2】孙志忠,袁慰平,计算方法与实习.第二版.南京:东南大学出版社,2011 【3】谭浩强.C程序设计.第四版.北京:清华大学出版社,2010 ◆ 《数值计算方法》 合肥工业大学数学与信息科学系 编 合肥工业大学出版社 ◆ 《计算方法》 邓建中等编,西安交大出版社,1985。 ◆ 《数值计算和C程序集》蒋长锦编著,中国科学技术大学出版社,1998。◆ 《计算方法引论》徐萃薇编,高等教育出版社,1999。 ◆ 黄友谦,程诗杰,陈浙鹏,《数值试验》,北京:高等教育出版社,1989 ◆ 蔡大用,《数值分析与实验学习指导》,北京:清华大学出版社与施普林格出版社,2001 ◆ 肖筱南,《值计算方法与上机实习指导》,北京:北京大学出版社,2004 ◆ A.Quarteroni, R.Sacco, F.Saleri,《Numerical Mathematics》, New York:Springer-Verlag, 2000 龙格-库塔 #include #include float function(float x,float y) { return(0-(y*y));//f(x,y)µÄ±í´ïʽ } int main() { float x0,x1,y0,y1,k1,k2,k3,k4,a,b,c,n,h;int i; scanf(“%f %f %f %f”,&a,&b,&c,&n);x0=a; y0=c; h=(b-a)/n; for(i=1;i<=n;i++) { k1=h*function(x0,y0); k2=h*function(x0+h/2,y0+k1/2);k3=h*function(x0+h/2,y0+k2/2);k4=h*function(x0+h,y0+k3);x1=x0+h; y1=y0+(k1+2*k2+2*k3+k4)/6; printf(“x%d=%f,y%d=%fn”,i,x1,i,y1);x0=x1; y0=y1; } return 0; } 拉格朗日 #include #include #include #define maxlength 500 #define pi 3.14*** floata[maxlength],f[maxlength]; float n; floatlagrange(floata[],floatf[],float x,int n) { int k=0,j; floaty=0.0,l; while(k<=n) { l=1.0; // printf(“%lfn”,y); for(j=0;j<=n;j++) { if(j!=k) { l=l*(x-a[j])/(a[k]-a[j]);// printf(“%lfn”,l); } } //printf(“%lfn”,f[k]); // printf(“%lfn”,l); y=y+l*f[k]; k++; } printf(“x=%f,y=%fn”,x,y); return y; } float fx1(floatx) { return(1/(1+x*x)); } floatfx2(floatx) { return exp(x); } floatfx3(float x) { return sqrt(x); } void math1(float c,float n) { int i=0; float h; h=2*c/n; while(i<=n) { a[i]=i*h-5; i++; } } void math2() { int i=0; while(i<=n) { a[i]=cos((2*i+1)*pi/2/(n+1)); i++; } } int main() { n=20; int i; math1(5,n); for(i=0;i<=n;i++) { f[i]=fx1(a[i]) } lagrange(a,f,0.75,n); return 0; } 龙贝格 #include #include #include double t[1000],r[1000]; double f(double x) { return(x*x*exp(x)); } int main() { double h,a,b,e; int i,N,m; scanf(“%lf,%lf,%d,%lf”,&a,&b,&N,&e); h=b-a; m=0; t[1]=0.5*h*(f(a)+f(b)); printf(“%lf”,t[1]); r[0]=t[0]; while(1) { printf(“n”); for(i=0;i<((m<4)?m:4);i++) t[i]=r[i]; m++; h=h/2; r[0]=t[0]/2; for(i=1;i<=pow(2,m);i++) r[0]+=h*f(a+(i-0.5)*h)/2; printf(“%lf”,r[0]); r[1]=(4*r[0]-t[0])/3; printf(“ %lf”,r[1]); if(m==1) continue; r[2]=(16*r[1]-t[1])/15; printf(“ %lf”,r[2]); if(m==2) continue; r[3]=(64*r[2]-t[2])/63; printf(“ %lf”,r[3]); if(m==3) continue; if((fabs(r[3]-t[3])<=e)||(m==N)) break; } printf(“nthe current time is :%dn”,m); return 0; } 牛顿 #include #include #include double function(double point) { return(point*point-2*point*exp(-point)+exp(-2*point)); } double d_function(double point) { return(2*point+2*point*exp(-point)-2*exp(-point)-2*exp(-2*point));} int main() { double beginner,error1,error2; int max_times=0; beginner=error1=error2=0; scanf(“%lf %lf %lf %d”,&beginner,&error1,&error2,&max_times);int current_times=0; while(current_times<=max_times) { if(fabs(function(beginner)) { printf(“%lfn”,beginner); return 0; } if(fabs(d_function(beginner)) { printf(“failuren”); return 0; } beginner=beginner-function(beginner)/d_function(beginner);if(fabs(function(beginner)/d_function(beginner)) printf(“%lfn”,beginner); return 0; } current_times++; } printf(“failuren”); return 0; } 《计算方法》 上机 实验报告 班 级:XXXXXX 小组成员: :XXXXXXX XXXXXXX XXXXXXX XXXXXXX 任课教 师:XXX 二〇一八年五月二十五日 前言 通过进行多次得上机实验,我们结合课本上得内容以及老师对我们得指导,能够较为熟练地掌握Newton 迭代法、Jacobi 迭代法、Gauss-Seidel 迭代法、Newton 插值法、Lagrange 插值法与Gauss 求积公式等六种算法得原理与使用方法,并参考课本例题进行了 MATLAB 程序得编写。 以下为本次上机实验报告,按照实验内容共分为六部分.实验 一: 一、实验 名称 及题目: : New tn on 迭代法 例 2、7(P38):应用 Newton 迭代法求 在 附近得数值解,并使其满足、二、解题 思路: 设就是得根,选取作为初始近似值,过点做曲线得切线,得方程为,求出与轴交点得横坐标,称为得一次近似值,过点做曲线得切线,求该切线与轴得横坐标称为得二次近似值,重复以上过程,得得近似值序列,把称为得次近似值,这种求解方法就就是牛顿迭代法。 三、b Matlab 程序 代码: f f u nc t ion newt o n_it er r at io n(x 0 ,tol) syms z % % 定义自变量 f f o rma t l l on n g %定义精度 f= = z *z *z z--z z - 1; f1=diff(f); %求导 y=su b s(f,z ,x0); y1=s u bs(f 1, , z,x0);% % 向函数中代值 x1=x0 - y/y1;k=1 ; w w h il e abs((x1 1 — x0)〉= = t ol x x 0 =x1; y=sub s(f,z, x 0); y1=sub s((f 1, z, , x 0); x1 = x0--y /y1 ; k=k+1; e nd x =dou b le(x x 1)) K 四、运行 结果: 实验二: : 一、实验名称 及题目: Jac ob b i迭代法 例3、7(P74):试利用 Jacobi 迭代公式求解方程组 要求数值解 为方程组得精确解、二、解题思路 : 首先将方程组中得系数矩阵分解成三部分,即:,为对角阵,为下三角矩阵,为上三角矩阵。之后确定迭代格式,(, 即迭代次数),称为迭代矩阵。最后选取初始迭代向量,开始逐次迭代。最后验证精度。(迭代阵:。)雅克比迭代法得优点明显,计算公式简单,每迭代一次只需计算一次矩阵与向量得乘法,且计算过程中原始矩阵 A 始终不变,比较容易并行计算.然而这种迭代方式收敛速度较慢,而且占据得存储空间较大。 三、Mb atlab 程序代码: : functio n jacob i(A A,b,x0,ep s,x1)) D = = diag(diag(A));% % 求A得对角矩阵 L = —t t ril l(A,--1);% %求 求 A A 得下三角矩阵 U U =--tr r iu((A, , 1);%求 A A 得上三角矩阵 B = D(L+ U)); f = D\b; x = B*x x 0 +f ; n = 1;% % 迭代次数 wh ile no o rm((x — x1)> =eps s x = B * x+f ; n = n+1; end format lo ng g n n x jingdu= n orm(x — x 1) 四、运行 结果: 实验三: : 一、实验 名称及题目: : Gauss — Seide l 迭代法 例3、8(P75):试利用 Gauss-Seidel 迭代公式求解方程 组,并 使 其 数 值 解为方程组得精确解、二、解题思路: : Gauss-Seidel迭代法与 Jacobi 迭代法思路相近,首先将方程组中得系数矩阵分解成三部分,即:,为对角阵,为下三角矩阵,为上三角矩阵.之后确定迭代格式,,(, 即迭代次数),称为迭代矩阵。最后选取初始迭代向量,开始逐次迭代。最后验证精度。(迭代阵:.)Gauss—Seidel迭代法与 Jacobi 迭代法相比速度更快,但不全如此。有例子表明:Gauss-Seidel 迭代法收敛时,Jacobi迭代法可能不收敛;而Jacobi迭代法收敛时,Gauss—Seidel 迭代法也可能不收敛。 三、Ma a tl l ab程序代码: fu n ctio n g g a uss_ se e i del(A,b, x0 0,eps,x1) D = di ag(d iag((A)));% %求 求 A A 得对角矩阵 L L = = -t ri l((A,— 1);;%求 A A 得下三角矩阵 U U = — triu(A,1);%求 A A 得上三角矩阵 B =(D -L))U; f f =(D D — L))b; x = = B B * x0+ f;; n = 1;% % 迭代次数 w hil e norm(x1--x)>=eps x = B*x+f; n = n+1; e nd format lon g n n x x j j i ngdu=norm(x1 — x) 四、运行 结果: : 实验 四: : 一、实验 名称及题目: : Lagra n ge 插值法 例 4、1(P88): 给 定 函 数 及 插 值 节 点、试构造 Lagrange 插值多项式,给出其误差估计,并由此计算 及其误差、二、解题思路: : 一般来说,如果我们有个点,各互不相同。那么应用拉格朗日插值公式所得到得拉格朗日插值多项式为:,其中每个为拉格朗日基本多项式(或称插值基函数),其表达式为:。 三、Matl ab b 程序代码: : f f u nctio n y y = lagrange(x 0,x) n=lengt h(x0);% % 向量长度 s= 0; f or k=1:nk %k 从 从 1 1 到 到 n n 得循环 p=1 1、0; for j= 1 :n if j j ~ =k %“ ~= ”不等于得意思 p =p*(x x — x 0(j))/(x0(k)--x0(j)); e nd en d y 0= x0((k)*(1+cos(x x 0(k)));; s= p*y 0+ s;; end format lon g s wu ch a =a b s(x*((1 +c o s(x)))--s) 四、运行结果 :、五、Lagran ge e插值图像绘制 %Lagrange插值图像算法 x=linspace(0,1002,200); s=linspace(0,1000,200); x0=[0;pi/8;pi/4;3*pi/8;pi/2]; n=length(x0); s=0; for k=1:n p=1、0; for j=1:n if j~=k p=p、*(x-x0(j))/(x0(k)—x0(j)); end end y0=x0(k)*(1+cos(x0(k))); s=p*y0+s; end plot(x,s,’r“); grid on; title(”Lagrange²åֵͼÏñ’) xlabel(’X’),ylabel(“Y”); axis normal; 实验 五: : 一、实验 名称及题目: : Ne wt on 插值法 例 4、3(P 96): 已 知 , 试 取 插 值 节 点,构造 4 次 Newton 插值多项式,由此计算 得逼近值,并指出其绝对误差、二、解题思路: : 将 拉 格 朗 日 插 值 公 式 中 得 改 写成:))...((...))(()()(1 0 1 0 2 0 1 0 n n nx x x x a x x x x a x x a a x N ,其中,为待 定 定 系 数.又 。 将 带 入 可得:))...()(](,..., , [...)](, [)()(1 1 0 1 0 0 1 0 0 n nx x x x x x x x x f x x x x f x f x f.三、Matl ab b 程序代码: : function newt on _interpol a tion(x 0,x)) f f orm m at t lo ng g n n =l l en gt h((x 0); syms z f =sq rt t(1+c os h(z)^ 2); a(1)= sub s(f,z,x 0(1));; f or k=1 :n — 1 y0=subs(f,z z,x x 0(k))); y 1=subs(f, z,x0(k+ 1)));; d(k,1) =(y1--y y 0)/(x 0(k +1 1)-x x 0(k k));;%一阶差商 e nd f f or r j=2: n--1 1 fo r k k =1 1 :n n —j j d(k, j) =(d(k+1,j j — 1))— d(k, j- 1))/(x0((k +j)-x x 0((k));% % 二阶差商及以上 en d end d d d o uble(d)) for j =2: n a(j)=d(1,j — 1); end b b(1 1) =1 ;c c(1)= a(1); f f or r j=2 :n n b b(j) =(x--x0(j j--1))、*b(j j — 1);; c(j)=a(j)、*b(j); e e nd d n n p =dou b le(su m(c c)) w w u cha=d ou bl e(abs(np--su bs(f ,z,x))))) 四、运行结果: 五、Newton插值 图 像绘制 实验 六: : 一、实验 名称及题目: Gauss 求积公式 例 5、7(P140):试构造 Gauss 型求积公式,并由此计算积分、二、解题思路: : 设高斯-勒让德求积公式就是:,依次代入,解得.利用换元公式变换原式得积分上下限,在套用高斯—勒让德求积公式求得积分.三、b Matlab 程序代码: : fu u n ct io o n g aus s(a,b) sy m s t t f=sqrt(t t)/(1 + t)^2; P P =[--s s q rt(3/5)0 sqrt(3 /5)]; A=[ 5/ 9 8/9 5 /9 9 ]; s= 0; f or i i = 1:3; x=P(i); y=s u bs(f,t,(b--a)* x /2+(a+b b) /2);; s=s + A(i)*y; end form a t l ong S= d oub l e((a a — b)/2* s) 四、运行结果: : 结束语 在本学期得《计算方法》课程学习中,我们感受到了巧妙得数学计算方法在解决实际问题中带来得便利与高效,借助计算机解决科学计算问题也就是我们当代大学生应当掌握得必要技能。 在本课程得上机实验过程中,我们亲自体验了课本中所学到得算法在计算机上得使用,使用计算机语言,如MATLAB 与 C 语言等进行编程,加深了我们对各类算法及其理论得理解,并进一步激发了我们对《计算方法》这门课程进行持续学习得学习兴趣。 文献检索实习报告(参考格式) 课程名称:文献检索日期: 学院:班号:姓名:学号: 实验名称:电子图书等资源检索。 实验目的:掌握图书资源如何检索和利用,熟悉人名录或机构名录的检索。实验内容: 1、用CALIS检索你们自己任课教师的编著发表情况。 2、用超星检索自己所在专业的某一方面的图书出版情况,并采集某一本书的一段文字,一个图。(以超星为例) (1).登陆四川理工学院图书馆主页。 (2).找到电子资源,点击进入图书馆电子资源界面。 (3).找到热门资源中的“超星数字图书馆”,并点击“本地”,进 入超星数字图书馆。 (4).找到“浏览器”,点击并下载超星星浏览器。 (5).下载好“超星星浏览器”后就可以浏览图书了。 (6).例如查 3、利用物竞化学品数据库检索某一具体化学物质的相关数据。 4、用万方数据库检索我国某一位院士/科学家/某学科领域著名学者的名录。 实习报告要求:用自己姓名作为文件名称,将作业发送给各班指定的同学。 计算机上机实习报告 姓名:张陆浩 班级:高材11001 学号:201001978 老师:张老师 熊老师 时间:2011年12月24日 一.实验目的: 1.熟悉VB 6.0的开发环境,掌握基本的编程方法,熟悉用VB语言完成一个应用程序的设计过程,掌握有关编辑和调试程序的方法和技巧;2.主要掌握VB语言中的标准模块的建立﹑数据文件的读出与写入、数组与选择结构的运用,图形操作等内容 3.了解开发简单应用程序的全过程,包括:分析﹑设计﹑编程﹑调试和编写报告.二.实习要求: (一)。用记事本新建一个文本文件,将本班M名学生N门考试课的成绩输入到这个文件中,建议按如下形式存放(注:20=M<=50,5<=N<=8,下文以M=4,N=3为例): 学号 姓名 英语 数学 物理 化学 VB 1 张陆浩 2 林丹 3 李宗伟 4 李永波 (二)。将N门考试课以及其分数输入到另一个数据文件(文件类型同上题)中,建议以下列形式存放: 编号 课程名称 课程学分 1 英语 5.0 2 数学 4.5 3 物理 5.0 4 化学 4.5 5 VB 4.5 (三)。请编写一个简单的学生成绩管理程序,以完成以下功能: 1.根据以上两文件内容分别计算每个学生N门课程的加权平均分(保留两位小数,四舍五入),按平均分排列名次,平均分相同则名 次并列。用VB创建一个数据文件,存放班级的成绩表。 2.分别统计全班每门课的平均分,并计算各分数段(90分以上;80~89;70~79;60~69;60分以下)的学生数。.3.打印每名学生成绩条(并将结果存放到用VB创建的一个新的数据文件中)。 4.显示所有存在不及格课程的学生的名单(含学号,不及格课程名称,课程的学分及成绩)。 5.屏幕显示优等生名单及打印每门课程成绩分布图。优等生条件(只要满足三个中任一个就可以): a)平均分>=90分 b)名次在本班位于前四名 c)平均分>=85分,并且至少有一门课的成绩>=95分 三、实习步骤 1、用记事本新建一个学生成绩文本文件(其中包括学生学号,成绩,姓名,课程及成绩)。 2、用记事本新建一个课程学分文本文件。 3、编辑菜单编辑器:编辑四个可拉式菜单,包括学生成绩、成绩处理、成绩编辑、画图。 4、编辑代码:分别编辑打印学生成绩和学分代码,编辑加权平均分、各科平均分、分数段、成绩条、排名、优等生、差等生的代码,还有画各科目成绩人数图的代码。 5、调试程序代码并保存。 6、打印代码。 三.相关数据列表: (一)。源文件 (1)成绩 学号 姓名 英语 数学 物理 化学 VB 1 张陆浩 97 98 97 97 98 2 林丹 92 87 79 91 84 3 李宗伟 75 96 83 75 73 4 李永波 89 93 83 86 82 5 王仪涵 92 79 89 86 80 6 汪鑫 93 65 86 68 84 7 付海峰 94 91 89 92 80 8 湛龙 86 83 88 80 92 9 盖德 68 79 54 72 71 10 陶菲克 69 76 59 81 75 11 佐佐木 85 83 68 57 71 12 李娜 94 63 62 65 53 13 陈金 86 79 89 94 83 14 兰洋 91 93 92 89 75 15 小志 95 89 93 86 87 16 棃一名 92 86 83 67 59 17 吴凯飞 67 75 57 82 62 18 江方 93 80 73 76 84 19 胡艳 74 68 58 63 71 20 张继原 68 95 68 84 93(2).学分 编号 课程名称 课程学分 1 英语 5.0 2 数学 4.5 3 物理 5.0 4 化学 4.5 5 VB 4.5 四.运行效果: (一).学生管理 (1)打开课程成绩及学分 (2)打开计算的加权平均分﹑排名及各科平均分 (三).编辑 (1)打开计算的各科人数分布 (2)打开按学号查找每个学生的成绩 a)输入要查找学生的学号 b)得到该生的成绩条 (3)打开查找到的优等生信息 (4)打开不及格学生的分布 (四).成绩分布图 五.实习小结 通过两个星期的上机实习,我体会颇深,不仅表现在VB语言程序设计中,而且表现在与人交流和独立自主完成任务的决心中。 本次上机在VB程序设计中我学会了很多以前不会或根本一点都不懂的东西。比如,在程序设计过程中,刚开始我弄不清楚怎样把编辑的文件读到VB中,但是通过询问老师和同学讨论,终于弄清了思路,即先将文件打开,再将数据分别放入若干个数组中,最后再将它读出来。除此之外,我还明白了变量的作用域对编程的重要性和子过程,函数过程数据处理的帮助。而对以前学的,像选择结构,循环结构等也进行了巩固和运用。在数据处理和打印的时候进行了大量运用。为了使程序更人性化化,我还运用了msgbox,inputbox等方法,使我对所学的知识进行了综合的运用。 我相信通过这次实习,我对VB和计算机语言都有了更深刻的认识。虽然在实习的过程中,我发现了自己在编写程序中的不足,像思维不够严密等,但我相信,只要认真、努力就一定会有收获 六.程序代码 (一).创建标准模块 Type student “定义变量:student” number As String * 9 name As String * 3 score(1 To 5)As Single average As Single rank As Integer End Type Type class “定义变量:class” num As String * 9 nam As String * 3 scor As Single End Type Public stu()As student, cla()As class, sumscor As Integer, subj()As class Public q(5)As Integer, t(5)As Integer, x(5)As Integer, y(5)As Integer, h(5)As Integer “定义删除空格函数” Public Function deletespace(str As String)As String Dim i% i = InStr(str, “ ”)Do While i <> o str = Replace(str, “ ”, “ ”)i = InStr(str, “ ”)Loop deletespace = str End Function Public Sub addave(stu()As student, cou()As course)“定义计算加 For i = 1 To UBound(stu)权平均分 Dim jqpj!, x!, y!的子过 程 x = 0 y = 0 For j = 1 To 5 x = x + cou(j).score y = y + stu(i).score(j)* cou(j).score Next j stu(i).jqpj = y / x Next i End Sub Public Sub mc(stu()As student)“定义计算排名的子过程” For i = 1 To UBound(stu)stu(i).rank = 0 For j = 1 To UBound(stu)If stu(i).jqpj <= stu(j).jqpj Then stu(i).rank = stu(i).rank + 1 End If Next j Next i End Sub(二).读取考试成绩和课程学分(1).打开文件 Private Sub studentscore_Click()CommonDialog1.Filter = “文本文件|*.txt” CommonDialog1.ShowOpen Open CommonDialog1.FileName For Input As #1 Line Input #1, str1 Print str1 Do While Not EOF(1)Line Input #1, str str = deletespace(Trim(str))a = Split(str, “ ”)n = n + 1 ReDim Preserve stu(n)stu(n).number = a(0)stu(n).name = a(1)For i = 1 To 5 stu(n).score(i)= a(i + 1)Next i Loop For i = 1 To n Print stu(i).number;Spc(1);stu(i).name;Spc(3);For j = 1 To 5 Print stu(i).score(j);Spc(3);Next j Print Next i Close #1 End Sub Private Sub classrank_Click()CommonDialog2.Filter = “文本文件|*.txt” CommonDialog2.ShowOpen Open CommonDialog2.FileName For Input As #2 Line Input #2, str2 Print str2 sumscor = 0 Do While Not EOF(2)Line Input #2, str3 str3 = deletespace(Trim(str3))b = Split(str3, “ ”)m = m + 1 ReDim Preserve cla(m)cla(m).num = b(0)cla(m).nam = b(1)cla(m).scor = b(2)sumscor = sumscor + Val(cla(m).scor)Loop For k = 1 To m Print cla(k).num;Spc(2);cla(k).nam;Spc(3);cla(k).scor;Spc(3)Next k End Sub(2).分数处理 Private Sub ran_Click()“加权平均分及名次” Form1.Cls For n = 1 To 20 sum = 0 For i = 1 To 5 sum = sum + stu(n).score(i)* cla(i).scor Next i stu(n).average = Format(sum / sumscor, “##.##”)Next n For n = 1 To 20 stu(n).rank = 1 For j = 1 To 20 If stu(n).average < stu(j).average Then stu(n).rank = stu(n).rank + 1 End If Next j Next n Print “学号”;Spc(6);“姓名”;Spc(4);“英 语”;Spc(2);“数 学”;Spc(2);“ 物 理”;Spc(3);“化 学”;Spc(2);“V B”;Spc(2);“加权平均分”;Spc(2);“名次” For n = 1 To 20 Print stu(n).number;Spc(1);stu(n).name;Spc(3);For i = 1 To 5 Print stu(n).score(i);Spc(3);Next i Print stu(n).average;Spc(3);stu(n).rank Next n End Sub Private Sub eaverage_Click()“ 课程平均分” Print Spc(7);“英 语”;Spc(1);“数 学”;Spc(1);“ 物 理”;Spc(1);“化 学”;Spc(1);“V B” Print “平均分”;For i = 1 To 5 sum = 0 For n = 1 To 20 sum = sum + stu(n).score(i)Next n j = Format(sum / 20, “00.00”)Print Spc(2);j;Next i End Sub(3).编辑 Private Sub scor_Click()“计算打印个分数段人数” Form1.Cls Print “范围”;“英 语”;Spc(3);“数 学”;Spc(3);“ 物 理”;Spc(3);“化 学”;Spc(3);“V B” For i = 1 To 5 For n = 1 To 20 Select Case stu(n).score(i)Case 90 To 100 q(i)= q(i)+ 1 Case 80 To 89 x(i)= x(i)+ 1 Case 70 To 79 t(i)= t(i)+ 1 Case 60 To 69 h(i)= h(i)+ 1 Case Else y(i)= y(i)+ 1 End Select Next n Next i Print “>90”;For i = 1 To 5 Print Spc(4);q(i);Next i Print Print “80_89”;For i = 1 To 5 Print Spc(4);x(i);Next i Print Print “70_79”;For i = 1 To 5 Print Spc(4);t(i);Next i Print Print “60_69”;For i = 1 To 5 Print Spc(4);h(i);Next i Print Print “<60”;For i = 1 To 5 Print Spc(4);y(i);Next i End Sub Private Sub stuscolist_Click()“打印成绩条” Form1.Cls n = InputBox(“请输入学号”)Print “学号”;Spc(5);“姓名”;Spc(3);“英 语”;Spc(3);“数 学”;Spc(3);“ 物 理”;Spc(3);“化 学”;Spc(3);“V B” Print stu(n).number;Spc(1);stu(n).name;Spc(3);For i = 1 To 5 Print stu(n).score(i);Spc(3);Next i End Sub Private Sub excellent_Click()“打印优等生” Form1.Cls Dim t As Integer Print “姓名”;Spc(4);“学号”;Spc(8);“英 语”;Spc(4);“数 学”;Spc(3);“ 物 理”;Spc(3);“化 学”;Spc(4);“V B”;Spc(6);“平均分”;Spc(4);“名次” For i = 1 To 20 t = 0 For j = 1 To 5 If stu(i).score(j)>= 95 Then t = t + 1 End If Next j If stu(i).average >= 85 And t >= 2 Or stu(i).average >= 90 Or stu(i).rank <= 3 Then Print stu(i).name;Spc(2);stu(i).number;Spc(3);For j = 1 To 5 Print stu(i).score(j);Spc(5);Next j Print stu(i).average;Spc(5);stu(i).rank End If Next i End Sub Private Sub ugstulist_Click()“打印不及格学生” Form1.Cls For n = 1 To 20 For i = 1 To 5 If stu(n).score(i)< 60 Then Print stu(n).number;stu(n).name;stu(n).score(i);cla(i).nam;cla(i).scor End If Next i Next n End Sub(5).成绩分布图 Private Sub Command1_Click()“新建窗体form2” For i = 0 To 4 Picture1(i).Scale(0, 14)-(100, 0)Picture1(i).Line(10, 2)-(92, 2), vbRed Picture1(i).Print “分数段” Picture1(i).Line(10, 2)-(10, 14), vbRed Picture1(i).Print “人数” For j = 2 To 10 Step 2 Picture1(i).CurrentY = j + 2 Picture1(i).CurrentX = 4 Picture1(i).Print j Next j Picture1(i).CurrentX = 10 Picture1(i).CurrentY = 2 Picture1(i).Line(10, 2)-(26, 2 + q(1 + i)), vbGreen, BF Picture1(i).CurrentX = 26 Picture1(i).CurrentY = 2 Picture1(i).Line(26, 2)-(42, 2 + x(i + 1)), vbRed, BF Picture1(i).CurrentX = 42 Picture1(i).CurrentY = 2 Picture1(i).Line(42, 2)-(58, 2 + t(i + 1)), vbGreen, BF Picture1(i).CurrentX = 58 Picture1(i).CurrentY = 2 Picture1(i).Line(58, 2)-(74, 2 + h(i + 1)), vbRed, BF Picture1(i).CurrentX = 74 Picture1(i).CurrentY = 2 Picture1(i).Line(74, 2)-(90, 2 + y(i + 1)), vbGreen, BF Picture1(i).Line(10, 2)-(26, 2), vbGreen Picture1(i).Line(26, 2)-(42, 2), vbRed Picture1(i).Line(42, 2)-(58, 2), vbGreen Picture1(i).Line(58, 2)-(74, 2), vbRed Picture1(i).Line(74, 2)-(90, 2), vbGreen Picture1(i).CurrentX = 10 Picture1(i).CurrentY = 2 Picture1(i).Print “ >=90 80-89 70-79 60-69 <=60” Next i End Sub第二篇:计算方法上机实验
第三篇:计算方法上机实验报告
第四篇:上机实习报告格式
第五篇:计算机上机实习报告