中国石油大学(华东)计算方法上机实验程序
- 格式:pdf
- 大小:149.23 KB
- 文档页数:15
《数据结构》实验报告学号2015011512 姓名胡明禹专业数学与应用数学时间2018.4.3一、实验题目实验3 顺序栈基本操作二、实验目的1.熟练掌握顺序栈的实现和基本操作2.理解栈后进先出的特点3.熟练应用顺序栈解决实际问题三、算法设计分析(一)数据结构的定义数据结构是计算机存储、组织数据的方式。
数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。
(二)总体设计此处给出主要函数功能、及函数间调用关系的的描述。
例如:①初始化并建立一个新栈表函数②栈清空函数③栈判断是否为空函数④进栈函数⑤出栈函数⑥取栈顶元素函数⑦输出栈元素函数⑧计算栈中元素个数函数⑨销毁栈函数(1)主函数:统筹调用各个函数以实现相应功能void main()(2)①初始化并建立一个新栈表SqStack *InitStack(SqStack *s){int i;s=(SqStack*)malloc(sizeof(SqStack));s->top=-1;printf("输入顺序栈元素(以0结束):\n");scanf("%d",&i);do{s->top++;//栈顶指针增加一s->data[s->top]=i; //将新插入元素赋值给栈顶空间scanf("%d",&i);while(i!=0);printf("成功\n");return s;}②栈清空函数void SetNULL(SqStack *s){//清空栈s->top=-1;//当栈存在一个元素时,top等于0,因此通常把空栈的条件定位top等于-1 }③栈判断是否为空函数int EMPTY(SqStack *s){//判断栈空if(s->top>=0)return 0;else return 1;}④进栈函数SqStack *Push(SqStack *s){//进栈int a;printf("插入数字:");scanf("%d",&a);if(s->top==maxsize-1)//判断是否栈满{printf("overflow");//溢出return NULL;}else{s->top++;//栈顶指针增加1s->data[s->top]=a;//将新插入元素赋值给栈顶空间}return s;}⑤出栈函数SqStack *Pop(SqStack *s){//出栈if(s->top==-1)//当栈存在一个元素时,top等于0,因此通常把空栈的条件定位top等于-1 {printf("underlow");return s;}else{s->top--;//栈顶指针减一printf("删除的栈顶元素:");printf("%d\n",(s->data[s->top+1]));//若栈不为空,则删除s的栈顶元素}return s;}⑥取栈顶元素函数void GetTop(SqStack *s){//取栈顶if(s->top==-1){printf("SqStack is empty");//当栈存在一个元素时,top等于0,因此通常把空栈的条件定位top 等于-1}else{printf("当前栈顶元素是:");printf("%d\n",(s->data[s->top]));//取栈顶元素地址}}⑦输出栈元素函数void print(SqStack *s){//输出栈int i=0;if(s->top==-1){printf("成功!");}while(i<=s->top){//遍历栈中所有元素printf("%d ",s->data[i]);i++;}}⑧计算栈中元素个数函数void Count(SqStack *s){//计算栈中元素int i=0;while(i<=s->top){i++;}printf("个数为%d",i);}⑨销毁栈函数int DestroyStack_Sq(SqStack *s){ //销毁一个顺序栈Sfree(s);s=NULL;return 1;}四、实验测试结果及结果分析(一)测试结果(此处给出程序运行截图)(二)结果分析成功完成了题目所要求的插入,删除,查找等基本操作。
《计算方法》实验报告二级学院:计算机学院专业:指导教师:班级学号:姓名:实验一1、 实验目的:1) 熟悉用牛顿法解非线性方程的过程;熟悉用弦截法求解非线性方程的过程 2) 编程实现牛顿法、弦截法求非线性方程的根。
2、 实验要求:1) 认真分析题目的条件和要求,复习相关的理论知识,选择适当的解决方案和算法;2) 编写上机实验程序,作好上机前的准备工作;3) 上机调试程序,并试算各种方案,记录计算的结果(包括必要的中间结果);4) 分析和解释计算结果; 5) 按照要求书写实验报告; 3、 实验内容:1)用牛顿法求解01553=-x 的根,取初始值为10。
2) 用弦截法求解数学方程。
010*15.110*4.181.9*002.0)(255.15=--=--x x x f 4、题目、原理、程序及结论 题目:非线性方程的迭代数值解1.牛顿法。
2.单点弦截法,双点弦截法。
原理: 牛顿法:设r 是方程f(x) = 0的根,选取x0作为r 初始近似值,过点(x0,f(x0))做曲线y = f(x )的切线L ,L 的方程为y = f(x0)+f'(x0)(x-x0),求出L 与x 轴交点的横坐标 x1 = x0-f(x0)/f'(x0),称x1为r 的一次近似值。
过点(x1,f(x1))做曲线y = f(x )的切线,并求该切线与x 轴交点的横坐标 x2 = x1-f(x1)/f'(x1),称x2为r 的二次近似值。
重复以上过程,得r 的近似值序列,其中x(n+1)=x(n )-f(x(n))/f'(x(n)),称为r 的n+1次近似值,这就是牛顿迭代法的原理。
弦截法:设方程f(x) = 0的根在两个数x1,x2之间,连接这两点所对应的函数值,连线与x 轴的交点为新的x ,若f(x)与f(x1)同号,则把x 当作新的x1,将新的x1与x2连接,如此循环,如果f(x)与f(x1)异号,则把把x 当作新的x2,将x1与新的x2连接,如此循环,直到满足误差要求求出解,这就是弦截法的原理。
1.拉格朗日插值多项式,用于离散数据的拟合#include <stdio.h>#include <conio.h>#include <alloc.h>float lagrange(float *x,float *y,float xx,int n) /*拉格朗日插值算法*/{ int i,j;float *a,yy=0.0; /*a作为临时变量,记录拉格朗日插值多项式*/a=(float *)malloc(n*sizeof(float));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];}free(a);return yy;}main(){ int i,n;float x[20],y[20],xx,yy;printf("Input n:");scanf("%d",&n);if(n>=20) {printf("Error!The value of n must in (0,20)."); getch();return 1;} if(n<=0) {printf("Error! The value of n must in (0,20)."); getch(); return 1;} for(i=0;i<=n-1;i++){ printf("x[%d]:",i);scanf("%f",&x[i]);}printf("\n");for(i=0;i<=n-1;i++){ printf("y[%d]:",i);scanf("%f",&y[i]);}printf("\n");printf("Input xx:");scanf("%f",&xx);yy=lagrange(x,y,xx,n);printf("x=%f,y=%f\n",xx,yy);getch();}2.牛顿插值多项式,用于离散数据的拟合#include <stdio.h>#include <conio.h>#include <alloc.h>void difference(float *x,float *y,int n){ float *f;int k,i;f=(float *)malloc(n*sizeof(float));for(k=1;k<=n;k++){ f[0]=y[k];for(i=0;i<k;i++)f[i+1]=(f[i]-y[i])/(x[k]-x[i]);y[k]=f[k];}return;}main(){ int i,n;float x[20],y[20],xx,yy;printf("Input n:");scanf("%d",&n);if(n>=20) {printf("Error! The value of n must in (0,20)."); getch(); return 1;} if(n<=0) {printf("Error! The value of n must in (0,20).");getch(); return 1;} for(i=0;i<=n-1;i++){ printf("x[%d]:",i);scanf("%f",&x[i]);}printf("\n");for(i=0;i<=n-1;i++){ printf("y[%d]:",i);scanf("%f",&y[i]);}printf("\n");difference(x,(float *)y,n);printf("Input xx:");scanf("%f",&xx);yy=y[20];for(i=n-1;i>=0;i--) yy=yy*(xx-x[i])+y[i];printf("NewtonInter(%f)=%f",xx,yy);getch();}3.高斯列主元消去法,求解其次线性方程组第一种#include<stdio.h>#include <math.h>#define N 20int main(){ int n,i,j,k;int mi,tmp,mx;float a[N][N],b[N],x[N];printf("\nInput n:");scanf("%d",&n);if(n>N){ printf("The input n should in(0,N)!\n");getch();return 1;}if(n<=0){ printf("The input n should in(0,N)!\n");getch();return 1;}printf("Now input a(i,j),i,j=0...%d:\n",n-1); for(i=0;i<n;i++){ for(j=0;j<n;j++)scanf("%f",&a[i][j]);}printf("Now input b(i),i,j=0...%d:\n",n-1);for(i=0;i<n;i++)scanf("%f",&b[i]);for(i=0;i<n-2;i++){ for(j=i+1,mi=i,mx=fabs(a[i][j]);j<n-1;j++) if(fabs(a[j][i])>mx){ mi=j;mx=fabs(a[j][i]);}if(i<mi){ tmp=b[i];b[i]=b[mi];b[mi]=tmp;for(j=i;j<n;j++){ tmp=a[i][j];a[i][j]=a[mi][j];a[mi][j]=tmp;}}for(j=i+1;j<n;j++){ tmp=-a[j][i]/a[i][i];b[j]+=b[i]*tmp;for(k=i;k<n;k++)a[j][k]+=a[i][k]*tmp;}}x[n-1]=b[n-1]/a[n-1][n-1];for(i=n-2;i>=0;i--){ x[i]=b[i];for(j=i+1;j<n;j++)x[i]-=a[i][j]*x[j];x[i]/=a[i][i];}for(i=0;i<n;i++)printf("Answer:\n x[%d]=%f\n",i,x[i]); getch();return 0;}第二种#include<math.h>#include<stdio.h>#define NUMBER 20#define Esc 0x1b#define Enter 0x0dfloat A[NUMBER][NUMBER+1] ,ark;int flag,n;exchange(int r,int k);float max(int k);message();main(){float x[NUMBER];int r,k,i,j;char celect;clrscr();printf("\n\nUse Gauss.");printf("\n\n1.Jie please press Enter."); printf("\n\n2.Exit press Esc.");celect=getch();if(celect==Esc)exit(0);printf("\n\n input n=");scanf("%d",&n);printf(" \n\nInput matrix A and B:"); for(i=1;i<=n;i++){printf("\n\nInput a%d1--a%d%d and b%d:",i,i,n,i);for(j=1;j<=n+1;j++) scanf("%f",&A[i][j]);}for(k=1;k<=n-1;k++){ark=max(k);if(ark==0){printf("\n\nIt's wrong!");message();}else if(flag!=k)exchange(flag,k);for(i=k+1;i<=n;i++)for(j=k+1;j<=n+1;j++)A[i][j]=A[i][j]-A[k][j]*A[i][k]/A[k][k];}x[n]=A[n][n+1]/A[n][n];for( k=n-1;k>=1;k--){float me=0;for(j=k+1;j<=n;j++){me=me+A[k][j]*x[j];}x[k]=(A[k][n+1]-me)/A[k][k];}for(i=1;i<=n;i++){printf(" \n\nx%d=%f",i,x[i]);}message();}exchange(int r,int k){int i;for(i=1;i<=n+1;i++)A[0][i]=A[r][i];for(i=1;i<=n+1;i++)A[r][i]=A[k][i];for(i=1;i<=n+1;i++)A[k][i]=A[0][i];}float max(int k){int i;float temp=0;for(i=k;i<=n;i++)if(fabs(A[i][k])>temp){temp=fabs(A[i][k]);flag=i;}return temp;}message(){printf("\n\n Go on Enter ,Exit press Esc!");switch(getch()){case Enter: main();case Esc: exit(0);default:{printf("\n\nInput error!");message();} }}4.龙贝格求积公式,求解定积分#include<stdio.h>#include<math.h>#define f(x) (sin(x)/x)#define N 20#define MAX 20#define a 2#define b 4#define e 0.00001float LBG(float p,float q,int n){ int i;float sum=0,h=(q-p)/n;for (i=1;i<n;i++)sum+=f(p+i*h);sum+=(f(p)+f(q))/2;return(h*sum);}void main(){ int i;int n=N,m=0;float T[MAX+1][2];T[0][1]=LBG(a,b,n);n*=2;for(m=1;m<MAX;m++){ for(i=0;i<m;i++)T[i][0]=T[i][1];T[0][1]=LBG(a,b,n);n*=2;for(i=1;i<=m;i++)T[i][1]=T[i-1][1]+(T[i-1][1]-T[i-1][0])/(pow(2,2*m)-1);if((T[m-1][1]<T[m][1]+e)&&(T[m-1][1]>T[m][1]-e)){ printf("Answer=%f\n",T[m][1]); getch();return ;}}}5.牛顿迭代公式,求方程的近似解#include<stdio.h>#include<math.h>#include<conio.h>#define N 100#define PS 1e-5#define TA 1e-5float Newton(float (*f)(float),float(*f1)(float),float x0 ) { float x1,d=0;int k=0;do{ x1= x0-f(x0)/f1(x0);if((k++>N)||(fabs(f1(x1))<PS)){ printf("\nFailed!");getch();exit();}d=(fabs(x1)<1?x1-x0:(x1-x0)/x1);x0=x1;printf("x(%d)=%f\n",k,x0);}while((fabs(d))>PS&&fabs(f(x1))>TA) ;return x1;}float f(float x){ return x*x*x+x*x-3*x-3; }float f1(float x){ return 3.0*x*x+2*x-3; }void main(){ float f(float);float f1(float);float x0,y0;printf("Input x0: ");scanf("%f",&x0);printf("x(0)=%f\n",x0);y0=Newton(f,f1,x0);printf("\nThe root is x=%f\n",y0); getch();}。
金山与微软博弈学生姓名:张青学号:专业班级:自动化一班2012年11目录1. 从合作到交锋............................................................................................ 错误!未定义书签。
1.1创业之初............................................................................................. 错误!未定义书签。
1.2微软搅局............................................................................................. 错误!未定义书签。
2. 寻找希望之路............................................................................................ 错误!未定义书签。
2.1主动兼容尝甜头................................................................................. 错误!未定义书签。
2.2政府带头支持国产软件..................................................................... 错误!未定义书签。
政府采购 ......................................................................................... 错误!未定义书签。
金山与微软博弈1.从合作到交锋1.1创业之初WPS,1989年诞生自一个叫求伯君的24岁年轻人之手。
《数据结构》实验报告学号2015011512 姓名胡明禹专业数学与应用数学时间2018.4.24一、实验题目实验5 稀疏矩阵的转置二、实验目的1. 稀疏矩阵的压缩存储方法2. 掌握稀疏矩阵的转置算法三、算法设计分析(一)实验内容1.从键盘输入数据,建立稀疏矩阵的三元组顺序存储2.实现稀疏矩阵的转置算法3.输出原矩阵及转置后的矩阵4.实现矩阵的快速转置算法(二)总体设计此处给出主要函数功能、及函数间调用关系的的描述。
例如:①创建稀疏矩阵函数②转置矩阵T函数③快速转置函数④输出函数⑤输出原矩阵和转置函数其功能描述如下:(1)主函数:统筹调用各个函数以实现相应功能Status main()(2)①创建稀疏矩阵函数Status CreateSMatrix(TSMatrix &M){printf("请输入原矩阵:\n");printf("行数、列数:");scanf("%d%d", &M.mu, &M.nu);printf("元素总数:");scanf("%d", &M.tu);printf("输入各个对应压缩值:\n");for (int i = 1; i <= M.tu; ++i)scanf("%d%d%d", &M.data[i].i, &M.data[i].j, &M.data[i].e); return OK;}②转置矩阵T函数Status TransposeSMatrix(TSMatrix M, TSMatrix &T){ int p, q, col;T.mu = M.nu; T.nu = M.mu; T.tu = M.tu;if (T.tu){q = 1;for (col = 1; col <= M.nu; ++col)for (p = 1; p <= M.tu; ++p)if (M.data[p].j == col){T.data[q].i = M.data[p].j;T.data[q].j = M.data[p].i;T.data[q].e = M.data[p].e;++q;}}printf("\n\n稀疏矩阵M转置成功。
《计算机网络技术与应用》 上机实验指导手册计算机网络课程组中国石油大学(华东)计算机与通信工程学院2012年9月目 录实验一 HTML简单网页制作 (1)实验二 FrontPage网页设计 (4)实验三 GIF动画设计与制作 (6)实验四 Web网站架设与发布 (8)实验五 网络连接管理 (11)实验六 网络共享与远程桌面 (14)实验七 网络常用命令 (17)实验八 VMware虚拟机使用 (20)实验九 网络嗅探与报文分析 (23)实验十 DNS域名服务 (27)实验十一 DHCP动态主机配置服务 (30)实验十二 Proxy代理服务 (34)实验十三 VPN组建与管理 (37)实验十四 电子邮件服务 (40)实验十五 FTP文件下载 (43)实验一 HTML简单网页制作一、实验目的学习HTML制作网页的基本方法,掌握HTML的基本语法和文档结构,制作简单网页,形成网页设计的直观印象。
二、实验环境记事本、写字板或EditPlus等文本编辑器,IE/火狐/遨游等浏览器。
三、实验原理1、Web服务和HTML语言概述Web服务(WWW)是目前应用最广的一种基本互联网应用,它基于HTML语言,通过URL全球资源定位标识,将全世界的Web服务和其它资源链接起来。
Web服务基于客户机/服务器方式而工作,作为服务器端的Web站点通过HTML超文本标记语言把信息组织成为图文并茂的超文本,提供给作为客户端的浏览器。
HTML是互联网上的通用语言,是HyperText Markup Language的缩写,即超文本标记语言,1993年出现1.0版,历经了2.0版、3.2版、4.0版,目前已经出现HTML5.0。
网页制作者使用它可以建立包含文本、表单、图片、音/视频、动画等内容的复杂网页,这些页面可以在公开发布后被互联网上任何用户浏览。
HTML文件是由一系列标记组成的纯文本文件,不需要专门的软件来建立HTML文件,掌握HTML语言语法后只需要通用字处理器软件(如Word、记事本、写字板等等),就可以创建HTML文件而生成网页。
实验一寻址方式和汇编语言程序上机调试步骤2、在数据段X单元存放有数据42,Y单元存放有数据-43,编程求这两数之和,并把结果存放到S单元。
data segmentx db 42y db -43s db 0data endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axmov al,xadd al,ymov s,alloop: jmp loopcode endsend start3、已知数据段X单元存放的数据为10H,编程将该数据左移四位后存放到Y单元。
data segmentx db 10hy db 0hdata endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axmov cl,4hmov al,xrol ax,clmov y,alloop: jmp loopcode endsend start实验二循环程序设计1、编程将数据段从00H单元起始的十个单元赋值,值为00H~09H。
DATA SEGMENT DAT DB 10 DUP(?)DATA ENDSCODE SEGMENTASSUME DS:DATA,CS:CODESTART:MOV AX,DATAMOV DS,AXMOV CX,10MOV BX,0LOOPER: MOV DAT[BX],BLINC BXLOOP LOOPERLOOP:JMP LOOPCODE ENDSEND START2、现有两组数,X= -78, 127,-128, -125,88,Y=32, -43, 76, 95, 1。
编程求两个数组之和,并将结果传送到S数组内,S (i)= X(i)+ Y(i)。
DATA SEGMENTORG 0000HX DB -78,127,-128,-125,88Y DB 32,-43,76,95,1S DB 5 DUP(?)DATA ENDSCODE SEGMENTASSUME DS:DATA,CS:CODESTART:MOV AX,DATAMOV DS,AXMOV CX,5MOV BX,0LOOPER :MOV AL,X[BX]MOV DL,Y[BX]ADD AL,DLMOV S[BX],ALINC BXLOOP LOOPERLOOP: JMP LOOPCODE ENDSEND START3、现有两个多位十进制数,X=5790123467,Y=1357902468。
流体力学模拟上机实验学院专业班级姓名学号指导教师年月流体力学模拟上机作业摘要:流体力学数值模拟是在流体力学的学习过程中很重要的一部分,以计算机为技术手段,运用一定的计算技术寻求流体力学复杂问题的离散化数值解。
引言流体力学是连续介质力学的一门分支,是研究流体(包含气体,液体以及等离子态)现象以及相关力学行为的科学。
可以按照研究对象的运动方式分为流体静力学和流体动力学,还可按流动物质的种类分为水力学,空气动力学等等。
描述流体运动特征的基本方程是纳维-斯托克斯方程,简称N-S方程。
纳维-斯托克斯方程基于牛顿第二定律,表示流体运动与作用于流体上的力的相互关系。
纳维-斯托克斯方程是非线性微分方程,其中包含流体的运动速度,压强,密度,粘度,温度等变量,而这些都是空间位置和时间的函数。
一般来说,对于一般的流体运动学问题,需要同时将纳维-斯托克斯方程结合质量守恒、能量守恒,热力学方程以及介质的材料性质,一同求解。
由于其复杂性,通常只有通过给定边界条件下,通过计算机数值计算的方式才可以求解。
二维有障碍通道内的流动计算目的初步掌握软件的操作和边界条件的设置方法通过计算了解障碍通道内的流体运动的特性物理问题假设流体在一个两维通道内的流动,流体从左边流入,从右边流出,通过数值模拟的方法分析判断流体的运动特性。
模型的建立启动Gambit软件创建控制点,设定workingdictory开始建立建立模型。
1.流动空间面建立10m*10m计算空间矩形面。
2.建立车型障碍物车轮半径---0.2车轮原点坐标---X=4,X=8车体位置--- X=4,Y=0.4 宽4米,高3米。
操作步骤:建立车体solid1 ,平移障碍物至x=处。
建立车轮solid2,调整到设置位置,通过copy功能复制solid2建立另一车轮solid3,并平移至适当位置。
点击布尔运算按钮substract real face对于创建的面进行布尔运算(同时减掉solid1,solid2,solid3)得到计算网格填充生成区间。