第一篇:《数值分析》上机实习报告
数值分析上机实验报告
姓 名:班 级:学 号:院 系:机械工程学院指导教师:C语言)
2006级 2006050349
(for(j=0;j } void guss(float a[N][N],float b[N])/* 子函数高斯消去法*/ { int i,j; { } printf(“Household变换的结果:”);/*输出Household变换的结果*/ for(i=0;i for(j=0;j } if(j%N==0)printf(“n”);s=0.0;for(i=j+1;i } for(i=0;i } for(k=0,i=0;i q[i]=y[i]-k*u[i];for(i=0;i } x[N-1]=y[N-1]/u[N-1];for(i=N-1;i>=0;i--)x[i]=(y[i]-a[i][i+1]*x[i+1])/u[i];printf(“消去法的结果:n”);/*输出消去法的结果*/ for(i=0;i } printf(“n”);} void sor(float a[N][N],float b[N])/*子函数超松驰法*/ { float a1[N][N];int i,j,k,m;float x[N],temp[N][N];float w=1.4,h=0,g=0;for(m=0;m { for(j=1;j<=N;j++){ if(j<=i-1)h+=temp[i-1][j-1]*x[j-1];else if(j==i)h+=0;else h+=temp[i-1][j-1]*x[j-1]; q[i]=a[i][i-1]/u[i-1];u[i]=a[i][i]-q[i]*a[i-1][i];y[i]=b[i]-q[i]*y[i-1];if(i==5)printf(“n”);printf(“x%d=%9.6f ”,i,x[i]); } g=(h+b[i-1])*w;x[i-1]=(1-w)*x[i-1]+g;h=0.0;g=0.0;} } printf(“超松弛法的结果:n”);/*输出超松弛法的结果*/ for(i=0;i 四、运行结果 Household变换的结果: 12.3841-4.8931 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000-4.8931 25.3984 6.4941 0.0000-0.0000 0.0000-0.0000-0.0000-0.0000 0.0000 6.4941 20.6115 8.2439-0.0000-0.0000-0.0000 0.0000 0.0000 0.0000 0.0000 8.2439 23.4229-13.8801-0.0000 0.0000-0.0000 0.0000 0.0000-0.0000-0.0000-13.880129.6983 4.5345 0.0000 0.0000 0.0000 0.0000 0.0000-0.0000-0.0000 4.5345 16.0061 4.8814 0.0000-0.0000 0.0000-0.0000-0.0000 0.0000 0.0000 4.8814 26.0133-4.5036 0.0000 0.0000-0.0000 0.0000-0.0000 0.0000 0.0000-4.5036 21.2540 4.5045 0.0000-0.0000 0.0000 0.0000 0.0000-0.0000 0.0000 4.5045 14.5341 消去法的结果: x0= 1.075799 x1= 2.275744 x2=-2.855514 x3= 2.293097 x4= 2.112633 x5=-6.423833 x6= 1.357923 x7= 0.634245 x8=-0.587266 超松弛法的结果: x0= 1.073409 x1= 2.272580 x2=-2.856600 x3= 2.292511 x4= 2.112164 x5=-6.422582 x6= 1.357802 x7= 0.634259 x8=-0.587042 五、问题讨论: 1.算法分析 SOR方法的矩阵形式为: X(m)=(E-ωL)-1((1-ω)E+ωR)x(m-1)+(E-ωL)-1ωg 若记 Lω=(E-ωL)-1((1-ω)E+ωR),SOR收敛的充要条件是S(Lω)<1.且若A为对称正定阵,则当松弛因子ω满足0<ω<2时,SOR方法收敛。此题中矩阵B是对称正定阵,且是三对角的,所以选择合适的松驰因子ω,收敛速度是很快的。2.上机出现情况 数组作为子函数参数时,实现的是地址传递,会改变原数组中元素的值,因此主函数调用housholder变换子函数后,原数组a[9][9]中的值已经改变为三对角阵。以下的消去法、超松弛法子函数调用的是已经三对角化后的a[9][9]的值。 调用时由于没有定义housholder变换子函数中数组a[][]的大小,运行时出现以下错误提示: error C2087: ' Xn1 , Zk mkmax(Xn)sa[0]=a[0][0]-x;if(sa[0]==0)sa[1]=a[0][1]*a[0][1];else sa[1]=a[1][1]-x-a[0][1]*a[0][1]/sa[0];for(i=2;i } float duifen(float a[N][N])/*对分法求取方程的解的子函数*/ { float ss1=0,ss2=23,ss=0,h=0,g=0;float l,ll;h=f(a,ss2);while(1){ ss1=ss;g=f(a,ss);ss=0.5*(ss+23);l=0.5*(ss1+23);if(g-h==1)break;{ if(sa[i-1]*sa[i-2]!=0)sa[i]=a[i][i]-x-a[i-1][i]*a[i-1][i]/sa[i-1];else if(sa[i-2]==0)sa[i]=a[i][i]-x;if(sa[i-1]==0)sa[i]=-1;} { if(sa[i]>=0)hh+=1;else hh+=0;} for(i=0;i float fanmi(float a[N][N])/*反幂法求解方程的解的子函数*/ { float mk=0,t,t1;float z[N],yy[N],a3[N][N];int i,j,k,m,tt;float h=0;float l[N]={0,};t1=duifen(a);/*调用对分法求取方程的解*/ for(i=0;i for(m=0;m } printf(“反幂法的解的特征向量是:n”);{if(m==5)printf(“n”);printf(“%-10.6f”,z[m]);} /*输出反幂法的解的特征向量*/ return 0;for(m=0;m printf(“n”);main(){ float a[N][N]={{12.3841,-4.8931},{-4.8931,25.3984,6.4941},{0,6.4941,20.6115,8.2439}, {0,0,8.2439,23.4229,-13.8801},{0,0,0,-13.8801,29.6983,4.5345},{0,0,0,0,4.5345,16.0061,4.8814}, {0,0,0,0,0,4.8814,26.0133,-4.5036},{0,0,0,0,0,0,-4.5036,21.2540,4.5045},{0,0,0,0,0,0,0,4.5045,14.5341}}; printf(“对分法的结果是:n”);printf(“d=%f”,duifen(a));/*调用对分法并输出对分法近似解*/ fanmi(a);/*调用反幂法求解*/ } 四、运行结果 对分法的结果是: d=21.916260 反幂法的结果是: d=21.928129 反幂法的解的特征向量是: 0.157066-0.306359 0.282201 0.285925 0.198640 0.533758 0.462842 1.000000 0.611843 五、问题讨论 1.算法分析 1)对分法简单可靠,数值稳定性较高,对于求少量几个特征值特别适宜.但收敛速度较慢.2)反幂法是结合对分法使用的,近似值较恰当,其收敛速度是很快.只要迭代两次就可得到较满意的结果.但在运用中需把一般矩阵化为Hessebberg阵才可计算.2.上机出现情况 当把对分法及反幂法全部写在主函数中,实现题目全部要求时,主函数过于冗长,不利于纠错,也不利于实现共享,通过修改对分法及反幂法为子函数调用,以便于调试,亦有利于共享。 for(j=0;j } b[0]=2*h*b[0];a[i][i-1]=1;a[i][i]=4;a[i][i+1]=1;b[N-1]=2*h*b[N-1];for(i=1;i u[0]=a[0][0];/*消去法求c[i]*/ y[0]=b[0];for(i=1;i } c[N-1]=y[N-1]/u[N-1];for(i=N-2;i>=0;i--) for(i=0;i } s=0.0;for(i=0;i b[N-1]=b[N-1]+b[N-2];q[i]=a[i][i-1]/u[i-1];u[i]=a[i][i]-q[i]*a[i-1][i];y[i]=b[i]-q[i]*y[i-1];c[i]=(y[i]-a[i][i+1]*c[i+1])/u[i];e=fabs(*x-i);if(e>=2) w[i]=0;w[i]=0.5*fabs(e*e*e)-e*e+2.0/3.0;w[i]=(-1.0/6.0)*fabs(e*e*e)+e*e-2*fabs(e)+4.0/3.0;else if(e<=1)else } *x=s;*x1=(c[(int)(m+1)]-c[(int)(m-1)])/2.0;void main(){ } 四、运行结果 三次样条插值求得的结果是: f(4.563)=1.517932 f'(4.563)=0.249350 五、问题讨论: 样条插值效果比Lagrange插值好,由于样条插值不必经过所有点,所以没有Runge现象.而且插值函数比较光滑。 其基本思想是对均匀分划的插值函数的构造,三次样条函数空间中不取1,x,x,x,(x-xj)+为基函数,而取B样条函数Ω3(x-xj/h)为基函数.由于三次样条函数空间是N+3维的,故我们把分点扩大到N1X-1,XN+1,则任意三次样条函数可用Ω3(x-xj/h)线性组合来表示 S(x)= 不同插值问题,若能确定cj由解的唯一性就能求得解S(x).2 33float b[N]={1,0,0.69314718,1.0986123,1.3862944,1.6094378,1.7917595, 1.9459101,2.079445,2.1972246,2.3025851,0.1};float x,x1;float h;h=1;x=4.563;scyt(&x,&x1,b,h);/*调用三次样条插值子函数*/ printf(“f(4.563)=%.6fn”,x);printf(“f'(4.563)=%.6fn”,x1);printf(“三次样条插值求得的结果是:n”); cjΩ3(x-xj/h)这样对 j1 7 4float z;z=pow(x,7)-28*pow(x,4)+14;return(z);float z;z=7*pow(x,6)-112*pow(x,3);return(z);x=fabs(f1(a))>fabs(f1(b))?a:b;/*初始值的选择*/ } main(){ float a,b; /*变量定义及赋初值*/ float min;float result;a=0.1;b=1.9;min=1e-5;result=ndf(a,b,min);/*调用牛顿法子函数*/ printf(“用牛顿法求方程在取初值为(0.1,1.9)区间端点时的近似根为:n”);printf(“x=%.6fn”,result);} 四、运行结果 用牛顿法求方程在取初值为(0.1,1.9)区间端点时的近似根为: x=0.845497 五、问题讨论 1.Newton法收敛速度比较快,是平方收敛,但它是局部收敛。2.采用newton法求方程平方收敛,较为精确。但需求函数导数。 3.初始值取为区间端点xo时,取使f(xo)f´´(xo)>0的一个,本例中取为xo=1.9。 (k) (0) (0) 3x1.42float z;z=pow(3,y)*pow(y,1.4)*(5*y+7)*sin(y*y);return(z);s=0;for(i=1;i<=(pow(2,j-1));i++)s+=(b-a)*(*f)(a+(2*i-1)*(b-a)/pow(2,j))/pow(2,j-1);t[1][j]=(t[1][j-1]+s)/2; } { } z=t[i+1][0];return(z);for(j=1;j<=N-i+1;j++)t[i+1][j-1]=(pow(4,i)*t[i][j]-t[i][j-1])/(pow(4,i)-1);break;if(fabs(t[i][0]-t[i+1][0])<=min)main(){ } 四、运行结果 用Romberg算法求积分的结果(允许误差为0.00001): I=440.536011 五、问题讨论: 1.算法分析 1)Romberge算法的优点是: 把积分化为代数运算,而实际上只需求T1,以后用递推可得.算法简单且收敛速度快,一般4或5次即能达到要求.2)Romberge算法的缺点是: 对函数的光滑性要求较高,计算新分点的值时,这些数值的个数成倍增加。 2.上机出现问题 本程序一开始编写时,是利用函数的递归调用来实现,编译正常通过,但运行时出现异常,经分析可能是多次递归产生误差,改用数组代替递归来存放Tij的值时,运行正常。 (i)float a,b;/*变量定义及初始化*/ float min;float result;float(*p)(float);a=1;b=3;min=1e-5;p=f;result=lbg(a,b,min,p);/*调用龙贝格法求积分子函数*/ printf(“用Romberg算法求积分的结果(允许误差为0.00001):n”);printf(“I=%.6fn”,result); } } for(i=0;i<4;i++){ } fkt(work1,work2);*t=ttemp+temp[i];for(j=0;j } } 四、运行结果 定步长四阶Runge-Kutta法求微分方程组解的结果: T Y1 Y2 Y3 0.025000| 0.025000| 0.151579| 8.346120 0.045000| 0.045000| 0.312984| 7.538067 0.085000| 0.085000| 0.560777| 4.944312 0.100000| 0.100001| 0.629078| 4.178828 五、问题讨论: 1.算法分析 1)Runge_Kutta方法的优点: 精度高,不必用别的方法求开始几点的函数值。 可根据f'(t,y)变化的情况与需要的精度自动修改步长。程序简单,存储量少。方法稳定。 rgkt(n,&t,step,&y,work1,work2,work3);/*调用Runge-Kutta算法求解*/ if(i==49||i==89||i==169||i==199)printf(“%9.6f|%9.6f|%9.6f|%9.6fn”,t,y[0],y[1],y[2]);2)Runge_Kutta方法的缺点: 每步要计算函数值f(t,y)四次,在f(t,y)较复杂时,工作量大, 且每一步缺乏可靠的检查。 2.上机出现情况 当用主函数实现题目全部要求时,主函数过于冗长,不利于修改和纠错,也不利于实现共享,通过修改Runge_Kutta法及函数表达式为子函数调用,并把一些条件语句放进子函数中,主函数只控制初始值及结果精度要求,经如此修改后便于阅读和调试。 数值分析上机实习报告要求 1.应提交一份完整的实习报告。具体要求如下: (1)要有封面,封面上要标明姓名、学号、专业和联系电话; (2)要有序言,说明所用语言及简要优、特点,说明选用的考量; (3)要有目录,指明题目、程序、计算结果,图标和分析等内容所在位置,作到 信息简明而完全; (4)要有总结,全方位总结机编程计算的心得体会; (5)尽量使报告清晰明了,一般可将计算结果、图表及对比分析放在前面,程序 清单作为附录放在后面,程序中关键部分要有中文说明或标注,指明该部分的功能和作用。 2.程序需完好保存到期末考试后的一个星期,以便老师索取用于验证、询问或质疑部分内容。 3.认真完成实验内容,可以达到既学习计算方法又提高计算能力的目的,还可以切身体会书本内容之精妙所在,期间可以得到很多乐趣。 4.拷贝或抄袭他人结果是不良行为,将视为不合格。 5.报告打印后按要求的时间提交给任课老师。 数值分析上机试题 10(选择其中两个题目) 1. 给定三个n阶线性方程组Ax=b,其中A的元素aij(i,j,=1,…,n)与阶数分别为 (1)aij=(i+j-1)2, n=3,4,5,…,9; (2)aij=(i+j)2, n=3,4,5 (3)aij=1/(i+j-1), n=3,4,5,6; b的元素bi=ai1+ai2+…,ain,(i=1,2,…,n) 已知其准确解为x=(1,1,...,1)T, 用列主元素法分别求解上列方程组。输出各步主元,解释所遇到的现象。 2.用雅格比法与高斯-赛德尔迭代法解下列方程组Ax=b,研究其收敛性,上机验证理论分析是否正确,比较它们的收敛速度,观察右端项对迭代收敛有无影响。 (1)A行分别为A1=[6,2,-1],A2=[1,4,-2],A3=[-3,1,4]; b1=[-3,2,4]T, b2=[100,-200,345]T,(2)A行分别为A1=[1,0,8,0.8],A2=[0.8,1,0.8],A3=[0.8,0.8,1];b1=[3,2,1] T, b2=[5,0,-10]T,1 (3)A行分别为A1=[1,3],A2=[-7,1];b=[4,6]T,3.松弛因子对SOR法收敛速度的影响。 用SOR法求解方程组Ax=b,其中 41-3141-2-2...,B ....141-2-314 要求程序中不存系数矩阵A,分别对不同的阶数取w=1.1, 1.2,...,1.9进行迭代,记录近似解x(k)达到||x(k)-x(k-1)||<10-6时所用的迭代次数k,观察松弛因子对收敛速度的影响,并观察当w0或w2会有什么影响? 4.某实际问题中两次过程记录测得(x,y)数据点如下:其中yi=f(xi),i=1,…,21 第一次的数据为: x=[-5.0000-4.5000-4.0000-3.5000-3.0000-2.5000-2.0000 -1.5000-1.0000-0.500000.50001.00001.5000 2.00002.50003.00003.50004.00004.50005.0000]; y =[-0.0000-0.0001-0.0002-0.0003-0.0004-0.0048-0.0366 -0.1581-0.3679-0.389400.38940.36790.1581 0.03660.00480.00040.00030.00020.00010.0000] 第二次的数据为: x=[-5.0000-4.7000-4.4000-4.1000-3.8000-3.5000-3.2000 -2.9000-2.6000-2.3000-2.0000-1.7000-1.4000-1.1000 -0.8000-0.5000-0.20000.10000.40000.70001.0000 1.30001.60001.90002.20002.50002.80003.1000 3.40003.70004.00004.30004.60004.9000] y=[-0.0000-0.0000-0.0000-0.0000-0.0000-0.0000-0.0001 -0.0006-0.0030-0.0116-0.0366-0.0945-0.1972-0.3280 -0.4218-0.3894-0.19220.09900.34090.42880.3679 0.23990.12370.05140.01740.00480.00110.0002 0.00000.00000.00000.00000.00000.0000] 现考虑分段低次或样条插值,或直接插值,总之用不超过7次的分段或不分段插值多项式近似该过程的对应规律y=f(x),请给出一种解决方案使得误差尽量小表示尽量简单。 5.用Runge-Kutta 4阶算法对初值问题y/=-20*y,y(0)=1按不同步长求解,用于观察稳定区间的作用,推荐两种步长h=0.1,0.2。 注:此方程的精确解为:y=e-20x 文献检索实习报告(参考格式) 课程名称:文献检索日期: 学院:班号:姓名:学号: 实验名称:电子图书等资源检索。 实验目的:掌握图书资源如何检索和利用,熟悉人名录或机构名录的检索。实验内容: 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 CAD 班级:电子质检1101班 姓名:郭利智 学号:2011110902 指导老师:潘庆杰 上机实习报告 CAD上机实习报告 1.实习任务 用一周的时间对AUTOCAD软件练习的同时,完成机自教研室发的二维图例以及6个练习图,并完成相应的实习报告,并将绘制图形的各个步骤在实习报告中体现出来,将在实习过程中遇到的问题和绘图的关键步骤更具体的按要求写。 2.实习任务图(见附页) 3.实习任务图分析: 在老师所给的这些图中,基本包含了所有AUTOCAD经常使用的画图命令,并且能够进行熟练的操作,为以后的学习和工作打下坚定的基础。因此,画好这些图很有意义。 4.CAD上机实习总结 我们在此CAD培训中,不仅掌握了一些画图命令,更加熟悉了CAD环境和CAD桌面系统操作并且能够熟练的进行操作,进而画出一些简单二维图形,还学会了一些画图的快捷命令,使我的画图速度有所提高,也为我以后的学习和工作提供了有利的条件。 对于AUTOCAD,在绘图过程中,通过老师的讲解和自己的摸索以为自己以前所学的知识,我能熟练的运用有关快捷的命令,比起以前手绘图快了许多。更重要的是掌握了有关字母类的快捷命令,更方便了绘图。第二篇:西南交大数值分析上机实习报告
第三篇:上机实习报告格式
第四篇:计算机上机实习报告
第五篇:CAD上机实习报告