文档库 最新最全的文档下载
当前位置:文档库 › 《汇编语言程序设计》 实验指导书2012.5.24)

《汇编语言程序设计》 实验指导书2012.5.24)

《汇编语言程序设计》 实验指导书2012.5.24)
《汇编语言程序设计》 实验指导书2012.5.24)

《汇编语言程序设计》课程实验指导书(Assembly Language Programming)

计算机科学与技术系

杨定安编写

佛山科学技术学院

2012 年 5 月

摘要

汇编语言实验主要使学生掌握DEBUG或DEB2000调试程序中各命令的使用方法,掌握MASM汇编程序对汇编语言源程序进行编辑、汇编、连接、装配、调试到运行的上机操作方法。本实验大纲要求学生熟练掌握汇编语言指令练习、顺序程序设计、分支程序设计、循环程序设计和子程序设计。

目录

实验一宏汇编程序(MASM)及汇编语言上机过程 (4)

实验二程序的基本结构练习 (8)

实验三汇编编译器的使用及程序调试 (11)

实验四分支程序设计 (17)

实验五循环程序设计 (19)

实验六子程序设计 (23)

实验七汇编语言与C语言混合程序设计 (29)

实验一宏汇编程序(MASM)及汇编语言上机过程

一、实验目的

1.通过实验了解和熟悉微机系统的配置。

2.学习在DEBUG状态下输入汇编源程序的方法。

3.初步掌握调试(在DEBUG状态下)的过程。

二、实验原理

1. 本实验要求在DEBUG状态下输入汇编源程序,并用DEBUG命令进行调试。用单步跟踪的方法验证指令的功能。

2. 以下是给定的参考程序,并在实验时在每条指令的“;”符号右边按要求填写指令的执行结果。

注:⑴微机进入DEBUG状态下之后,一切立即数和地址数据均被默认为十六进制数,在输入时数的后面不加后缀“H”;

⑵在DEBUG状态下执行程序时,“INT 20H”指令可使系统执行完该指令前的程序时返回到“-”提示符状态,并且恢复CS和IP寄存器原来的值。

三、实验仪器

微机一台,U盘一块。

四、实验步骤

1.开机和关机操作顺序

开机:先打开微机外部设备电源开关,如显示器,最后打开主机电源开关。

关机:与开机相反,先关掉主机电源开关,然后关闭所有外设的电源开关。

2. 装入DEBUG程序

若计算机系统启动正常,可以进入MASM文件夹或MASM5文件夹从磁盘上调用DEBUG,程序到内存。如是WINDOWS环境下,先运行CMD命令,然后运行CD MASM命令,再运行DEB2000命令。一般C盘上装有DEBUG和DEB2000软件,若没有,可以用复制命令从其它盘拷贝过来,然后从装有DEBUG和DEB2000软件的磁盘上调用DEBUG和DEB2000软件程序。例如:

C :\MASM> DEB2000↙(↙回车符)

-(-DEBUG 提示符)

当显示器出现提示符“-”时,说明已进入DEBUG状态,这时,可用DEBUG命令进行操作。

4. 用DEBUG的Register命令检查所有寄存器内容,并作记录。命令格式:

R [寄存器名]

检查和修改寄存器内容的命令R,它有三种方式:

1)显示CPU内部所有寄存器内容和标志位状态;格式为:-R

R命令显示中标志位状态的含义如下表所示:

标志名置位复位

方向Direction(减量/增量)DN UP

中断Interrupt(允许/屏蔽)EI DI

符号Sign(负/正)NG PL

零Zero(是/否)ZR NZ

辅助进位Auxiliary Carry(是/否)AC NA

奇偶Parity(偶/奇)PE PO

进位Carry(是/否)CY NC 2)显示和修改某个指定寄存器内容,格式为:

-R 寄存器名

例如打入:-R AX

系统将响应如下:

AX FIF4

表示AX当前内容为F1F4,此时若不对其作修改,可按ENTER键,否则,打入修改后内容,如:

-R BX

BX 0369

:059F

则BX内容由0369改为059F

3)显示和修改标志位状态,命令格式为:

-RF

系统将给出响应,如

OV DN EI NG ZR AC PE CY-

这时若不作修改可按ENTER键,否则在“-”号之后键入修改值,键入顺序任意。如

OV DN EI NG ZR AC PE CY-PONZDINV

5. 用DEBUG的Assemble命令输入汇编源程序。格式:

A [内存地址]

注:用“[ ]”符号括起来的部分表示可以省略。

该命令的功能是从指定的内存地址开始(括号不要输入)逐条输入汇编语言源程序并汇编成机器码存入内存。若地址缺省,则接上一个A命令最后一条指令之后输入汇编语句,若没有用过A 命令,则从CS:0100H地址开始输入。例如:

-A

0CD3:0100-

在输入A命令之后,或每输入一条指令之后,显示器的左端给出了内存的段地址和偏移地址。

每条指令均用回车(↙)结束。若输入的指令有语法错误,DEBUG拒绝接收,并给出提示,此时可以重新输入。程序的最后一条指令输入完之后,再按一次回车键(↙),即可结束汇编命令,回到DEBUG提示符“-”状态。

6. 用DEBUG的Unassemble命令反汇编。命令格式:

U [起始地址[终止地址]]

该命令的功能是从起始地址到终止地址反汇编目标码,缺省值是接上一个U命令或从CS:

0100H地址开始。例如:

-U

显示器上将显示程序的内存地址、指令机器码的汇编源程序三列对照清单。

7. 用DEBUG的Trace命令单步跟踪程序。命令格式:

T [ =起始地址] [指令条数] 注意:=符号不能缺

该命令的功能是从指定的起始地址开始逐条执行指令,每执行完一条指令,屏幕显示所有寄存器内容和下一条指令地址和指令。若[=起始地址]缺省,则T命令从CS:IP地址开始执行指令。

例如:

-T↙

重复这一过程,即可看到每条指令执行后,所有寄存器和标志寄存器的标志位内容。此时,要检查内存单元的数据,可用DEBUG的Dump命令,命令格式:

D[起始地址[终止地址]]

该命令的功能是从起始地址到终止地址,连续显示存贮器单元的内容。若地址缺省,则接上一个D命令或从DS:0100H地址开始显示。例如:

-D↙

参考程序:

MOV AX, 2000 ; AL=

MOV DS, AX ; DS=

NOT AX ; AX=

XOR AX, AX ; AX=

DEC AX ; AX=

INC AX ; AX=

MOV BX, 2030 ; BH=

MOV SI, BX ; SI=

MOV [SI], BL ; [2030H]=

MOV WORD PTR[SI], 10F ; [2030H]= [2031H]=

MOV DI, SI ; DI=

MOV [DI+50], BH ; [DI+50H]=

MOV BH, [SI] ; BH=

MOV BL, [DI+50] ; BL=

MOV SP, 5000

PUSH AX ; AX= [SS:4FFEH]= [SS:4FFFH]=

PUSH BX ; BX= [SS:4FFCH]= [SS:4FFDH]=

POP AX ; AX=

POPF ; F=

XCHG BX, AX ; BX=

STD ; F=

STI ; F=

CLD ; F=

CLI ; F=

ADC DI, 2050 ; DI= F=

ADC SP, DI ; SP= F=

ADC AX, 1500 ; AX= F=

SUB AX, BX ; AX= BX=

SHL AH, 1 ; AH=

RCL AX, 1 ; AX=

SHR BH, 1 ; BH=

RCR BL, 1 ; BL=

MOV CL, 4

MOV DX, 80F0

ROL DX, CL ; DX= CL=

INT 20 ; CS= IP=

五、实验报告要求

1. 整理每条指令执行的结果,填到打印清单的右半部分(应注意内存数据检查的正确性)。

2. 比较实验记录与理论分析的结果是否相同,若有不同,找出差别及问题所在。

3.总结本次实验的体会。

实验二程序的基本结构练习

一、实验目的

1. 熟悉IBM PC机的基本指令。

2. 继续熟悉计算机键盘及各功能键(参阅DOS操作手册)。

3. 继续学习DEBUG命令。

4. 验证指令的功能。

二、实验原理

在DEBUG状态下,分别输入下面各程序段,每输入完一个程序段,用G命令进行连续方式执行程序,在连续执行时,要记录程序的执行结果。

参考程序:

1. 在内存10000H单元开始,建立00H~0FH~00H 31个数,要求00H~0FH数据逐渐增大,0FH~00H逐渐减小。该程序从内存CS:0100H地址开始输入。首先运行A100命令进入输入汇编语句状态。

13A2:0100 MOV AX, 1000

13A2:0103 MOV DS, AX

13A2:0105 MOV SI, 0

13A2:0108 MOV CL, 0F

13A2:010A XOR AX, AX

13A2:010C MOV [SI], AL

13A2:010E INC SI

13A2:010F INC AL

13A2:0111 DEC CL

13A2:0113 JNZ 010C

13A2:0115 MOV CX, 10

13A2:0118 MOV [SI], AL

13A2:011A INC SI

13A2:011B DEC AL

13A2:011D LOOP 0118

13A2:011F INT 20

注:转段指令的符号地址直接用绝对偏移地址,该地址在用A命令汇编输入时,可以看到程序全部运行完之后,可用DEBUG的Dump命令查看建立的数据块内容。例如:

-D1000:00 1E

2. 把上一个程序的执行结果(建立的31个字节数据块,其首地址在10000H),分几种方式传送

(a) 该程序从内存CS:0150H开始输入。把数据块传送到5050H开始的存贮区域中。

首先运行A150命令进入输入汇编语句状态。然后将如下程序输入。DEBUG下不支持符号地址,如PPEA:标号等,在命令A下输入程序时,不能输入标号(如PPEA:),在用到标号的指令(如LOOP,JNZ等),在其后直接输入要跳转的目的地址。

MOV AX, 1000

MOV DS, AX

MOV SI, 0

MOV DI, 5050

MOV CX, 1F ; 数据块长度是31

PPEA:MOV AL, [SI]

MOV [DI], AL

INC SI

INC DI

LOOP PPEA

INT 20

检查内存数据块的传送情况,可用“D”命令。

(b) 用串传送指令MOVSB,把数据块传送到5150H开始的区域,该程序从内存CS:0200H开始输入。

MOV AX, 1000

MOV DS, 5150

MOV CX, 1F

CLD

PPEB: MOVSB

DEC CX

JNZ PPEB

INT 20

检查程序最后的执行结果,可用“D”命令,例如:

-D1000:5150↙

(c) 用重复串操作指令“REP MOVSB”把数据块传送到5250H开始的区域。该程序从CS:250H地址开始输入。

MOV AX, 1000

MOV DS, 5250

MOV CX, 1F

CLD

REP MOVSB

检查程序的最后执行结果时,可用:

-D1000: 5250H

(d) 用串操作的减量工作方式,把数据块传送到501FH开始的区域。该程序从CS:0300H开始输入。

MOV AX, 101F

MOV DS, 501F

MOV CX, 1F

STD

REP MOVSB

INT 20

检查程序的最后执行结果,用D命令:

-D1000:5000↙

三、实验仪器

1. IBM-PC 微机或兼容机一套。

2. 准备一U盘,用于存放你的程序。

四、实验步骤

参照实验一的步骤,按照本实验程序的内容,分别输入各段程序,并单步和连续执行程序,记录每条指令的执行结果和每个程序段的最后结果。在作单步操作或用G命令设段点操作时,在暂停处,可以检查所有寄存器和有关内存单元的内容,这不会影响程序的继续执行。

若想把源数据块重新换一批数据,可以用DEBUG的Fill命令填充新的数据。例如:-F1000:00 L1F 33↙

从1000:0000H开始的31个字节被替换成33H。

五、实验预习要求

1.继续阅读PC微机DOS操作手册有关命令说明。

2.认真阅读DEBUG调试程序的命令说明。

3.仔细阅读本实验给出的各程序段。

4.写出每个程序段的结果数据(分析结果),并说明结果所在的位置(寄存器或存贮器)。

六、实验报告要求

1. 整理每个程序段在实验时的记录内容。

2. 比较每个程序段的特点。

3. 分析本次实验出现的问题,找出问题所在。

实验三汇编编译器的使用及程序调试

一、实验目的

1.、掌握Masm的使用;掌握Link的使用;掌握Debug或Deb2000的使用;熟悉一种界面操作下的集成汇编语言编译器。

二、实验要求:

1根据实验目的,认真完成实验中给出的任务;

2根据实验过程和结果,完成实验报告;

3在实验报告中应认真写出自己的实验心得和体会;

4鼓励同学进行交流,但是禁止抄袭!

5每人一组,独立完成。

三、实验原理及内容:

1、实验内容:本实验是汇编语言学习的第一个实验,要求利用汇编语言实现一个Dos界面下的最简单的“Hello World”程序,只要可以实现在屏幕上输出一行字符即可;

2、实验原理:

一般的汇编程序包括两个部分:数据段和代码段(有的程序还会有堆栈段),每个部分都有比较固定的格式;

汇编程序的输入和输出实现相对比较麻烦,需要调用Dos中断来实现,希望学习输入和输出中断是如何实现的;

对于在字符界面下的汇编程序从asm源代码到生成可执行exe文件中间有多个步骤,需要用到masm、link,需要熟练掌握;

汇编语言的调试相对也比较麻烦,需要用到Debug或Deb2000命令,希望掌握常用的Debug或Deb2000选项,能够看懂反汇编的结果。

四、实验软硬件环境:奔腾系列机器,操作系统为Dos或者Windows系列,相关的汇编语言编译

工具(MASM、LINK和DEBUG)以及集成编译器。

五、实验步骤和方法:

本实验重点在于熟悉汇编语言编译器的使用及程序的调试,实验内容相对比较简单,但是中间需要大家熟练掌握其中涉及到的每一个步骤,为后续实验打下良好的基础。

下面是以MASM 5.0,在winxp环境下,按照给定的任务为例进行的步骤说明(由于这是第一个汇编程序,我们提供一个最基本的源程序供大家参考;):

1、将包括MASM、LINK以及DEBUG或Deb2000的文件架MASM拷贝到计算机C盘的根目录下;

2、打开记事本,输入如下代码:

DATAS SEGMENT ;数据段

msg db "Hello World!", 13,10,"$" ;此处输入数据段代码

DATAS ENDS

STACKS SEGMENT ;堆栈段

;此处输入堆栈段代码

STACKS ENDS

CODES SEGMENT ;代码段

ASSUME CS:CODES,DS:DA TAS,SS:STACKS

START:

MOV AX,DA TAS

MOV DS,AX

LEA DX,msg ;此处输入代码据段代码

mov ah,9

INT 21h

MOV AH,4CH

INT 21H

CODES ENDS

END START

保存为firPro.asm,保存位置为“C:\masm\”。

注意:后缀名一定要为“.asm”,否则,可能出现错误!使文件显示后缀名以便修改的方法如下图示:

a)打开资源管理器,选择文件夹选项,如图1-1所示;

b)将“隐藏已知文件类型的扩展名”选项前的去掉,如图1-2所示;

c)将文件名“firPro.txt”重命名为“firPro.asm”即可。

图1-1 打开文件夹选项

(1)在“运行”窗口键入“cmd”,回车,打开字符界面,进入masm文件夹下,如图1-3所示;

图1-3 进入masm文件夹

(2)键入masm firPro.asm,并回车,如图1-4所示。

其中:Object filename是编译为目标文件的名称,直接回车,表示默认和源文件同名,只是后缀名不同,本试验中均为默认;编译之后文件夹中出现一个新文件:firPro.obj,如图1-5所示:

图1-4 masm后的结果

(3)键入link firPro.obj,回车,如图1-6所示:

其中:Run File是可执行的目标文件名,直接回车,表示默认和源文件同名,只是后缀名不同。编译之后文件夹中出现一个新文件:FIRPRO.exe,如图1-7所示:

(4)键入可执行文件名FIRPRO ,回车,显示的运行结果如图1-8所示:

(5)利用Debug,进行反汇编,键入:Debug firpro.exe,回车,如下图1-9所示:

(6)在出现的光标后,键入U,出现反汇编后的结果,如图1-10所示:

(7)键入q,回车,推出反汇编程序,如图1-11所示:

至此,我们对MASM、LINK以及DEBUG的使用方法已经有了比较清楚的了解。

另外,我们还提供了另外一个集成的编译环境,“Masm for Windows集成实验环境”,大家可以仿照上述步骤,熟悉一下所提供的集成试验环境。

希望大家在熟悉了最基本的masm、link以及Debug的基础之上再去使用所提供的集成试验环境!

图1-6 link命令的执行

图1-8 可执行文件的执行结果

图1-9 反汇编之后的结果

图1-10 反汇编命令U的结果

图1-11 推出反汇编的命令

四、实验预习要求:认真阅读实验指导书附录部分的内容,了解最基本的汇编语言的知识,

包括8088/8086的体系结构和指令系统,在以后的实验中将会不断的用到相关的指令,在实验课中给出的课件中的相关内容也请大家仔细研读。根据实验过程和实验结果完成实验报告,并按时上交

五、思考题:

1、在图1-4中,masm filename.asm后,如果不是连续回车,而是输入字符串结果会有什

么不同;

2、在图1-11中,每行的类似于“0B4F:xxxx”表示什么意思?

3、在图1-11中,为什么首行和源程序不同,而又有那些是相同的,可否给出一些原因?

注意:思考题不做硬性要求。

实验四分支程序设计

一、实验目的:通过上机编程,熟悉利用汇编语言设计不同种类分支程序的方法,掌握汇编

语言中实现分支程序的相关汇编指令。

二、实验要求:

(1)设计并实现一个求解一组无符号字节序列中的最大值和最小值的汇编程序;

(2)每人一组,独立完成;

(3)根据实验目的,认真完成实验中给出的任务;根据实验过程和结果,完成实验报告并及时上交相关文档;在实验报告中应认真写出自己的实验心得和体会;鼓励

同学进行交流,但是禁止抄袭!

三、实验原理及内容:

在实际问题中,需要对不同情况做不同的处理,这就需要使用到分支结构。汇编语言中的分支程序是利用条件转移指令或者跳转表,使程序在执行到某条指令后,根据运行结果是否满足一定条件来改变程序执行的顺序,然后执行不同的条件下对应的指令。如果进行的是逻辑分支,可以用每次分两支的方法来达到程序多分支的目的。一般而言,分支程序的结构通常有三种形式:不完全分支、完全分支和多分支,如图所示:

在本实验中,我们以求解一组无符号字节序列中的最大值和最小值的问题进行讲解分支程序的设计和实现。最终结果是序列中的最大数和最小数,我们可以将寄存器BX的高位和低位分别用于存放最大数和最小数,然后,将序列中的两个数存入其中,再将序列中的其他数分别与BH和BL中的数进行比较,如果大于BH或者小于BL,则将寄存器中的数用当前取出的数进行替换,完全比较之后,BH和BL中数即为整个序列中的最大数和最小数。

四、实验软硬件环境:奔腾系列机器,操作系统为Dos或者Windows系列,相关的汇编语言

编译工具(MASM、LINK和DEBUG)以及集成编译器。

五、实验步骤和方法:

本实验重点算法的理解以及相关指令的灵活应用。

(1)分析问题,设计算法。;

(2)根据上述算法,编制程序流程图,如图4-1所示;

图4-1 程序流程图

(3)根据流程图,编写实现代码;

(4)程序汇编为目标文件.obj。

(5)目标文件.obj链接为可执行文件.exe。;

(6)使用Debug调试运行程序,设置断点,查询相关寄存器内容,调试直至得到正确的结果。(7)根据实验过程和实验结果完成实验报告,并按时上交。

注意:在程序设计中,注意相关的寄存器的用途,如CX的作用,SI的作用,以及汇编语言中,一个寄存器的高低位可以分开使用的特点。

六、实验预习要求:预习相关的汇编语言指令,着重是理解相关寄存器的特定用途,如:SI、CX等,以及寄存器的高低位可以分开使用的特点。学校印刷的标准报告纸写实验报告。

七、思考题:

(1)总结汇编语言中的寄存器分为那几类,每类各有什么特点?

(2)总结汇编语言中如何利用相关指令实现分支程序设计?

实验五循环程序设计

一、实验目的

进一步掌握分支程序和循环程序的编写方法。

二、实验原理

设有10个学生的成绩分别为56、69、84、82、73、88、99、63、100和80分。试编制程序分别统计低于60分、60~69分、70~79分、80~89分、90~99分及100分的人数存放到s5、s6、s7、s8、s9及s10单元中。

这一题目的算法很简单,成绩分等部分采用分支结构,统计所有成绩则用循环结构完成。程序框图如下图所示。

三、实验仪器

1. IBM-PC 微机或兼容机一套。

2. 准备一张已格式化过的用户软盘(空盘),用于存放你的程序。

开 始

初始化计数单元

初始化循环计数值

初始化首地址

取一个成绩

Y

<60? N Y <70? N

Y

<80?

N

Y <90? N

N =100?

Y

修 改 地 址

N 循环结束?

Y

结 束

程 序 框 图

四、实验步骤

输入编写的源程序,进行调试。 参考程序如下:

;PROGRAM TITLE GOES HERE ――result

;************************************ datarea segment ;define data segment grade dw 56,69,84,82,73,88,99,63,100,80 s5 dw 0 S10+1 S9+1

S8+1

S7+1

S6+1 S5+1

链表实验报告

C语言程序设计实验报告 实验一:链表的基本操作一·实验目的 1.掌握链表的建立方法 2.掌握链表中节点的查找与删除 3.掌握输出链表节点的方法 4.掌握链表节点排序的一种方法 5.掌握C语言创建菜单的方法 6.掌握结构化程序设计的方法 二·实验环境 1.硬件环境:当前所有电脑硬件环境均支持 2.软件环境:Visual C++6.0 三.函数功能 1. CreateList // 声明创建链表函数 2.TraverseList // 声明遍历链表函数 3. InsertList // 声明链表插入函数 4.DeleteTheList // 声明删除整个链表函数 5. FindList // 声明链表查询函数 四.程序流程图 五.程序代码 #include #include typedef int Elemtype; typedef int Status; typedef struct node//定义存储节点 { int data;//数据域 struct node *next;//结构体指针 } *linklist,node;//结构体变量,结构体名称 linklist creat (int n)//创建单链表 { linklist head,r,p;//定义头指针r,p,指针 int x,i; head=(node *)malloc(sizeof(node));//生成头结点

r=head;//r指向头结点 printf("输入数字:\n"); for(i=n;i>0;i--)//for 循环用于生成第一个节点并读入数据{ scanf("%d",&x); p=(node *)malloc(sizeof(node)); p->data=x;//读入第一个节点的数据 r->next=p;//把第一个节点连在头结点的后面 r=p;//循环以便于生成第二个节点 } r->next=0;//生成链表后的断开符 return head;//返回头指针 } void output (linklist head)//输出链表 { linklist p; p=head->next; do { printf("%3d",p->data); p=p->next; } while(p); printf("\n") } Status insert ( linklist &l,int i, Elemtype e)//插入操作 { int j=0; linklist p=l,s; while(jnext; ++j; } if(!p || j>i-1) return -1; else { s=(node *)malloc(sizeof(node)); s->data=e; s->next=p->next; p->next=s; return 1; } } Status delect ( linklist &l,int i, Elemtype &e)//删除操作 { int j=0; linklist p=l,q; while(jnext) { p=p->next; ++j; } if(!p->next || j>i-1) return -1;

《数据结构》实验报告 设计循环单链表

《数据结构》实验报告 1、实验名称:设计循环单链表 2、实验日期: 2013-3-26 3、基本要求: 1)循环单链表的操作,包括初始化、求数据元素个数、插入、删除、取数据元素; 2)设计一个测试主函数实际运行验证所设计循环单链表的正确性。 4、测试数据: 依次输入1,2,3,4,5,6,7,8,9,10,删除5,再依次输出数据元素。 5、算法思想或算法步骤: 主函数主要是在带头结点的循环单链表中删除第i个结点,其主要思想是在循环单链表中寻找到第i-1个结点并由指针p指示,然后让指针s指向a[i]结点,并把数据元素a[i]的值赋给x,最后把a[i]结点脱链,并动态释放a[i]结点的存储空间。 6、模块划分: 1)头文件LinList.h。头文件LinList.h中包括:结点结构体定义、初始化操作、求当前数据个数、插入一个结点操作、删除一个结点操作以及取一个数据元素操作; 2)实现文件dlb.cpp。包含主函数void main(void),其功能是测试所设计的循环单链表的正确性。

7、数据结构: 链表中的结点的结构体定义如下: typedef struct Node { DataType data; struct Node *next; }SLNode; 8、源程序: 源程序存放在两个文件中,即头文件LinList.h和实现文件dlb.cpp。//头文件LinList.h typedef struct Node { DataType data; struct Node *next; }SLNode; void ListInitiate(SLNode **head) //初始化 { *head=(SLNode *)malloc(sizeof(SLNode)); //申请头结点,由head指示其地址 (*head)->next=*head; }

测试技术实验指导书及实验报告2006级用汇总

矿压测试技术实验指导书 学号: 班级: 姓名: 安徽理工大学 能源与安全学院采矿工程实验室

实验一常用矿山压力仪器原理及使用方法 第一部分观测岩层移动的部分仪器 ☆深基点钻孔多点位移计 一、结构简介 深基点钻孔多点位移计是监测巷道在掘进和受采动影响的整个服务期间,围岩内部变形随时间变化情况的一种仪器。 深基点钻孔多点位移包括孔内固定装置、孔中连接钢丝绳、孔口测读装置组成。每套位移计内有5~6个测点。其结构及其安装如图1所示。 二、安装方法 1.在巷道两帮及顶板各钻出φ32的钻孔。 2.将带有连接钢丝绳的孔内固定装置,由远及近分别用安装圆管将其推至所要求的深度。(每个钻孔布置5~6个测点,分别为;6m、5m、4m、3m、2m、lm或12m、10m、8m、6m、4m、2m)。 3.将孔口测读装置,用水泥药圈或木条固定在孔口。 4。拉紧每个测点的钢丝绳,将孔口测读装置上的测尺推至l00mm左右的位置后,由螺丝将钢丝绳与测尺固定在一起。 三、测试方法 安装后先读出每个测点的初读数,以后每次读得的数值与初读数之差,即为测点的位移值。当读数将到零刻度时,松开螺丝,使测尺再回到l00mm左右的位置,重新读出初读数。 ☆顶板离层指示仪 一、结构简介: 顶板离层指示仪是监测顶板锚杆范围内及锚固范围外离层值大小的一种监测仪器,在顶板钻孔中布置两个测点,一个在围岩深部稳定处,一个在锚杆端部围岩中。离层值就是围岩中两测点之间以及锚杆端部围岩与巷道顶板表面间的相对位移值。顶板离层指示仪由孔内固定装置、测量钢丝绳及孔口显示装置组成如图1所示。

二、安装方法: 1.在巷道顶板钻出φ32的钻孔,孔深由要求而定。 2.将带有长钢丝绳的孔内固定装置用安装杆推到所要求的位置;抽出安装杆后再将带有短钢丝绳的孔内固定装置推到所要求的位置。 3.将孔口显示装置用木条固定在孔口(在显示装置与钻孔间要留有钢丝绳运动的间隙)。 4.将钢丝绳拉紧后,用螺丝将其分别与孔口显示装置中的圆管相连接,且使其显示读数超过零刻度线。 三、测读方法: 孔口测读装置上所显示的颜色,反映出顶板离层的范围及所处状态,显示数值表示顶板的离层量。☆DY—82型顶板动态仪 一、用途 DY-82型顶板动态仪是一种机械式高灵敏位移计。用于监测顶底板移近量、移近速度,进行采场“初次来压”和“周期来压”的预报,探测超前支撑压力高 峰位置,监测顶板活动及其它相对位移的测量。 二、技术特征 (1)灵敏度(mm) 0.01 (2)精度(%) 粗读±1,微读±2.5 (3)量程(mm) 0~200 (4)使用高度(mm) 1000~3000 三、原理、结构 其结构和安装见图。仪器的核心部件是齿条6、指针8 以及与指针相连的齿轮、微读数刻线盘9、齿条下端带有读 数横刻线的游标和粗读数刻度管11。 当动态仪安装在顶底板之间时,依靠压力弹簧7产生的 弹力而站立。安好后记下读数(初读数)并由手表读出时间。 粗读数由游标10的横刻线在刻度管11上的位置读出,每小 格2毫米,每大格(标有“1”、“22'’等)为10毫米,微读数 由指针8在刻线盘9的位置读出,每小格为0.01毫米(共200 小格,对应2毫米)。粗读数加微读数即为此时刻的读数。当 顶底板移近时,通过压杆3压缩压力弹簧7,推动齿条6下 移,带动齿轮,齿轮带动指针8顺时针方向旋转,顶底板每 移近0.01毫米,指针转过1小格;同时齿条下端游标随齿条 下移,读数增大。后次读数减去前次读数,即为这段时间内的顶底板移近量。除以经过的时间,即得

实验空间数据库管理及属性编辑实验报告

实验报告 一、实验名称 二、实验目的 三、实验准备 四、实验内容及步骤 五、实验后思考题 班级:资工(基)10901 姓名:魏文风 序号:28 实验二、空间数据库管理及属性编辑 一、实验目的 1.利用ArcCatalog管理地理空间数据库,理解Personal Geodatabse空间数据库模型的有关概念。 2.掌握在ArcMap中编辑属性数据的基本操作。 3.掌握根据GPS数据文件生成矢量图层的方法和过程。 4.理解图层属性表间的连接(Join)或关联(Link)关系。 二、实验准备 预备知识: ArcCatalog 用于组织和管理所有GIS 数据。它包含一组工具用于浏览和查找地理数据、记录和浏览元数据、快速显示数据集及为地理数据定义数据结构。 ArcCatalog 应用模块帮助你组织和管理你所有的GIS 信息,比如地图,数据集,模型,元数据,服务等。它包括了下面的工具: ●浏览和查找地理信息。 ●记录、查看和管理元数据。 ●创建、编辑图层和数据库 ●导入和导出geodatabase 结构和设计。 ●在局域网和广域网上搜索和查找的GIS 数据。

管理ArcGIS Server。 ArcGIS 具有表达要素、栅格等空间信息的高级地理数据模型,ArcGIS支持基于文件和DBMS(数据库管理系统)的两种数据模型。基于文件的数据模型包括Coverage、Shape文件、Grids、影像、不规则三角网(TIN)等GIS数据集。 Geodatabase 数据模型实现矢量数据和栅格数据的一体化存储,有两种格式,一种是基于Access文件的格式-称为Personal Geodatabase,另一种是基于Oracle或SQL Server等RDBMS关系数据库管理系统的数据模型。 GeoDatabase是geographic database 的简写,Geodatabase 是一种采用标准关系数据库技术来表现地理信息的数据模型。Geodatabase是ArcGIS软件中最主要的数据库模型。 Geodatabase 支持在标准的数据库管理系统(DBMS)表中存储和管理地理信息。 在Geodatabase数据库模型中,可以将图形数据和属性数据同时存储在一个数据表中,每一个图层对应这样一个数据表。 Geodatabase可以表达复杂的地理要素(如,河流网络、电线杆等)。比如:水系可以同时表示线状和面状的水系。 基本概念:要素数据集、要素类 数据准备: 数据文件:National.mdb ,GPS.txt (GPS野外采集数据)。 软件准备: ArcGIS Desktop 9.x ---ArcCatalog 三、实验内容及步骤 第1步启动ArcCatalog打开一个地理数据库 当ArcCatalog打开后,点击, 按钮(连接到文件夹). 建立到包含练习数据的连接(比如 “E:\ARCGIS\EXEC2”), 在ArcCatalog窗口左边的目录树中, 点击上面创建的文件夹的连接图标旁的(+)号,双击个人空间数据库-National.mdb。打开它。. 在National.mdb中包含有2个要素数据集、1个关系类和1个属性表第2步预览地理数据库中的要素类 在ArcCatalog窗口右边的数据显示区内,点击“预览”选项页切换到“预览”视图界面。在目录树中,双击数据集要素集-“WorldContainer”,点击要素类-“Countries94”激活它。 在此窗口的下方,“预览”下拉列表中,选择“表格”。现在,你可以看到Countries94的属性表。查看它的属性字段信息。 花几分钟,以同样的方法查看一下National.mdb地理数据库中的其它数据。

单链表实验报告

计算机与信息技术学院综合性、设计性实验报告 一、实验目的 (1)熟悉顺序表的创建、取值、查找、插入、删除等算法,模块化程序设计方法。 二、实验仪器或设备 (1)硬件设备:CPU为Pentium 4 以上的计算机,内存2G以上 (2)配置软件:Microsoft Windows 7 与VC++6.0 三、总体设计(设计原理、设计方案及流程等) 设计原理: 单链表属于线性表,线性表的存储结构的特点是:用一组任意存储单元存储线性表的数据元素,这组存储单元可以是连续的,也可以是不连续的。因此,对于某个元素来说,不仅需要存储其本身的信息,还需要存储一个指示其直接后继的信息。 设计方案: 采用模块化设计的方法,设计各个程序段,最终通过主函数实现各个程序段的功能。设计时,需要考虑用户输入非法数值,所以要在程序中写入说可以处理非法数值的代码。 设计流程: 1. 引入所需的头文件; 2. 定义状态值; 3. 写入顺序表的各种操作的代码; 写入主函数,分别调用各个函数。在调用函数时,采用if结构进行判断输 入值是否非法,从而执行相应的程序 四、实验步骤(包括主要步骤、代码分析等) #include // EOF(=A Z 或F6),NULL #in clude // srand( ) ,rand( ),exit (n) #in clude // malloc( ),alloc( ),realloc() 等 #in clude // INT_MAX 等 #in clude #in clude #in clude // floor(),ceil( ),abs() #in clude // cout,ci n #in clude // clock( ),CLK_TCK,clock_t #defi ne TRUE 1 #defi ne FALSE 0 #defi ne OK 1 #defi ne ERROR 0 #defi ne INFEASIBLE -1

混凝土结构实验指导书及实验报告(学生用)

土木工程学院 《混凝土结构设计基本原理》实验指导书 及实验报告 适用专业:土木工程周淼 编 班级::学 号: 理工大学 2018 年9 月

实验一钢筋混凝土梁受弯性能试验 一、实验目的 1.了解适筋梁的受力过程和破坏特征; 2.验证钢筋混凝土受弯构件正截面强度理论和计算公式; 3.掌握钢筋混凝土受弯构件的实验方法及荷载、应变、挠度、裂缝宽度等数据的测试技术 和有关仪器的使用方法; 4.培养学生对钢筋混凝土基本构件的初步实验分析能力。 二、基本原理当梁中纵向受力钢筋的配筋率适中时,梁正截面受弯破坏过程表现为典型的三个阶段:第一阶段——弹性阶段(I阶段):当荷载较小时,混凝土梁如同两种弹性材料组成的组合梁,梁截面的应力呈线性分布,卸载后几乎无残余变形。当梁受拉区混凝土的最大拉应力达到混凝土的抗拉强度,且最大的混凝土拉应变超过混凝土的极限受拉应变时,在纯弯段某一薄弱截面出现首条垂直裂缝。梁开裂标志着第一阶段的结束。此时,梁纯弯段截面承担的弯矩M cr称为开裂弯矩。第二阶段——带裂缝工作阶段(II阶段):梁开裂后,裂缝处混凝土退出工作,钢筋应力急增,且通过粘结力向未开裂的混凝土传递拉应力,使得梁中继续出现拉裂缝。压区混凝土中压应力也由线性分布转化为非线性分布。当受拉钢筋屈服时标志着第二阶段的结束。此时梁纯弯段截面承担的弯矩M y称为屈服弯矩。第三阶段——破坏阶段(III阶段):钢筋屈服后,在很小的荷载增量下,梁会产生很大的变形。裂缝的高度和宽度进一步发展,中和轴不断上移,压区混凝土应力分布曲线渐趋丰满。当受压区混凝土的最大压应变达到混凝土的极限压应变时,压区混凝土压碎,梁正截面受弯破坏。此时,梁承担的弯矩M u 称为极限弯矩。适筋梁的破坏始于纵筋屈服,终于混凝土压碎。整个过程要经历相当大的变形,破坏前有明显的预兆。这种破坏称为适筋破坏,属于延性破坏。 三、试验装置

数据库原理实验报告(2)

南京晓庄学院 《数据库原理与应用》 课程实验报告 实验二数据库的创建、管理、备份及还原实验 所在院(系):数学与信息技术学院 班级:11软工转本2 学号: 1130708 11130710 姓名:马琦乔凌杰

1.实验目的 (1)掌握分别使用SQL Server Management Studio图形界面和Transact-SQL语句创建和修改 数据库的基本方法; (2)学习使用SQL Server查询分析窗口接收Transact-SQL语句和进行结果分析。 (3)了解SQL Server的数据库备份和恢复机制,掌握SQL Server中数据库备份与还原的方 法。 2.实验要求 (1)使用SQL Server Management Studio创建“教学管理”数据库。 (2)使用SQL Server Management Studio修改和删除“教学管理”数据库。 (3)使用Transact-SQL语句创建“教学管理”数据库。 (4)使用Transact-SQL语句修改和删除“教学管理”数据库。 (5)使用SQL Server Management Studio创建“备份设备”;使用SQL Server Management Studio对数据库“教学管理”进行备份和还原。 (6)SQL Server 2005数据库文件的分离与附加。 (7)按要求完成实验报告 3.实验步骤、结果和总结实验步骤/结果 (1) 总结使用SQL Server Management Studio创建、修改和册除“TM”(教学管理)数据库的过程。 新建数据库如下图所示: 进入sql server management studio 主界面,选择数据库右击新建数据库。 如何修改数据库 进入sql server management studio 主界面,选择数据库右击属性即可看到数据库信息,可更改数据库基本信息。

单链表的插入和删除实验报告

. 实验一、单链表的插入和删除 一、目的 了解和掌握线性表的逻辑结构和链式存储结构,掌握单链表的基本算法及相关的时间性能分析。 二、要求: 建立一个数据域定义为字符串的单链表,在链表中不允许有重复的字符串;根据输入的字符串,先找到相应的结点,后删除之。 三、程序源代码 #include"stdio.h" #include"string.h" #include"stdlib.h" #include"ctype.h" typedef struct node //定义结点 { char data[10]; //结点的数据域为字符串 struct node *next; //结点的指针域 }ListNode; typedef ListNode * LinkList; // 自定义LinkList单链表类型 LinkList CreatListR1(); //函数,用尾插入法建立带头结点的单链表

ListNode *LocateNode(); //函数,按值查找结点 void DeleteList(); //函数,删除指定值的结点void printlist(); //函数,打印链表中的所有值 void DeleteAll(); //函数,删除所有结点,释放内存 //==========主函数============== void main() { char ch[10],num[10]; LinkList head; head=CreatListR1(); //用尾插入法建立单链表,返回头指针printlist(head); //遍历链表输出其值 printf(" Delete node (y/n):");//输入“y”或“n”去选择是否删除结点scanf("%s",num); if(strcmp(num,"y")==0 || strcmp(num,"Y")==0){ printf("Please input Delete_data:"); scanf("%s",ch); //输入要删除的字符串 DeleteList(head,ch); printlist(head); } DeleteAll(head); //删除所有结点,释放内存 } //==========用尾插入法建立带头结点的单链表

土工实验指导书及实验报告

土工实验指导书及实验报告编写毕守一 安徽水利水电职业技术学院 二OO九年五月

目录 实验一试样制备 实验二含水率试验 实验三密度试验 实验四液限和塑限试验 实验五颗粒分析试验 实验六固结试验 实验七直接剪切试验 实验八击实试验 土工试验复习题

实验一试样制备 一、概述 试样的制备是获得正确的试验成果的前提,为保证试验成果的可靠性以及试验数据的可比性,应具备一个统一的试样制备方法和程序。 试样的制备可分为原状土的试样制备和扰动土的试样制备。对于原状土的试样制备主要包括土样的开启、描述、切取等程序;而扰动土的制备程序则主要包括风干、碾散、过筛、分样和贮存等预备程序以及击实等制备程序,这些程序步骤的正确与否,都会直接影响到试验成果的可靠性,因此,试样的制备是土工试验工作的首要质量要素。 二、仪器设备 试样制备所需的主要仪器设备,包括: (1)孔径0.5mm、2mm和5mm的细筛; (2)孔径0.075mm的洗筛; (3)称量10kg、最小分度值5g的台秤; (4)称量5000g、最小分度值1g和称量200g、最小分度值0.01g的天平;

(5)不锈钢环刀(内径61.8mm、高20mm;内径79.8mm、高20mm或内径61.8mm、高40mm); (6)击样器:包括活塞、导筒和环刀; (7)其他:切土刀、钢丝锯、碎土工具、烘箱、保湿器、喷水设备、凡士林等。 三、试样制备 (一)原状土试样的制备步骤 1、将土样筒按标明的上下方向放置,剥去蜡封和胶带,开启土样筒取土样。 2、检查土样结构,若土样已扰动,则不应作为制备力学性质试验的试样。 3、根据试验要求确定环刀尺寸,并在环刀内壁涂一薄层凡士林,然后刃口向下放在土样上,将环刀垂直下压,同时用切土刀沿环刀外侧切削土样,边压边削直至土样高出环刀,制样时不得扰动土样。 4、采用钢丝锯或切土刀平整环刀两端土样,然后擦净环刀外壁,称环刀和土的总质量。 5、切削试样时,应对土样的层次、气味、颜色、夹杂物、裂缝和均匀性进行描述。 6、从切削的余土中取代表性试样,供测定含水率以及颗粒分析、界限含水率等试验之用。

空间数据库报告

武汉理工大学 《空间数据库》实验报告 班级:地理1502班姓名:xx 学号:xxx 第1章需求分析 1.1需求概述 图书管理系统主要是适用于学校的,通过oracle数据库进行逻辑处理,实现对图书、读者(学生)、出版社信息的增删改查,核心功能是实现借书和还书操作,亮点是增添了学生可以挂失和修改密码的功能。下面设计的图书管理信息系统,这些功能均已实现。 1.2功能需求 图1.1

第2章概念设计 2.1 实体与属性 根据需求建立五个实体(admin,book,publisher,reader,booktype),并赋予其各自的属性,如图2.1 图2.1 2.2 初步E-R图 将各个局部E-R图合并,消除属性冲突、命名冲突、结构冲突,然后再用分析的方法或者规范化理论来消除冗余,生成基本E-R图,流程如图2.2,合并后的初步E-R图如图2.3所示。 图2.2

图2.3 第3章逻辑设计 3.1 逻辑结构设计 逻辑结构设计的流程图如图3.1所示,主要包括三个部分:1、将基本E-R图根据七条转化原则转化为一般数据模型;2、根据所选用的DBMS(Oracle)的功能及限制,将数据模型转换为Oracle 规定的模型。 图3.1

3.2 优化后的模型 管理员(职工号,姓名,性别,年龄,密码) 借阅者(卡号,姓名,年龄,性别,密码,专业,学院,最大借阅量)书籍(索书号,书名,作者,出版社号,类型号,价格,是否被借阅)出版社(出版社号,出版社名,电话,地址) 类型(类型号,类型名,所在楼层) 借阅(借阅号,借阅时间,归还时间,是否过期,卡号,索书号) 第4章物理设计 4.1 设计数据表 管理员表(admin) 图书表(book) 图书类型表(bookType)

链表实验报告

链表实验报告

————————————————————————————————作者: ————————————————————————————————日期:

《数据结构》实验报告二 系别:嵌入式系统工程系班级:嵌入式11003班 学号:11160400314姓名:孙立阔 日期:2012年4月9日指导教师:申华 一、上机实验的问题和要求: 单链表的查找、插入与删除。设计算法,实现线性结构上的单链表的产生以及元素的查找、插入与删除。具体实现要求: 1.从键盘输入10个字符,产生不带表头的单链表,并输入结点值。 2.从键盘输入1个字符,在单链表中查找该结点的位置。若找到,则显示“找到了”;否则, 则显示“找不到”。 3.从键盘输入2个整数,一个表示欲插入的位置i,另一个表示欲插入的数值x,将x插 入在对应位置上,输出单链表所有结点值,观察输出结果。 4.从键盘输入1个整数,表示欲删除结点的位置,输出单链表所有结点值,观察输出结果。 5.将单链表中值重复的结点删除,使所得的结果表中个结点值均不相同,输出单链表所有结 点值,观察输出结果。 6.删除其中所有数据值为偶数的结点,输出单链表所有结点值,观察输出结果。 7.(★)将单链表分解成两个单链表A和B,使A链表中含有原链表中序号为奇数的元素, 而B链表中含有原链表中序号为偶数的元素,且保持原来的相对顺序,分别输出单链表A和单链表B的所有结点值,观察输出结果。 二、程序设计的基本思想,原理和算法描述: (包括程序的结构,数据结构,输入/输出设计,符号名说明等) 创建一个空的单链表,实现对单链表的查找,插入,删除的功能。 三、源程序及注释: #defineOK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 #define TRUE 1

CAD上机实验指导书及实验报告

北京邮电大学世纪学院 实验、实习、课程设计报告撰写格式与要求 (试行) 一、实验报告格式要求 1、有实验教学手册,按手册要求填写,若无则采用统一实验报告封面。 2、报告一律用钢笔书写或打印,打印要求用A4纸;页边距要求如下:页边距上下各为2.5厘米,左右边距各为2.5厘米;行间距取固定值(设置值为20磅);字符间距为默认值(缩放100%,间距:标准)。 3、统一采用国家标准所规定的单位与符号,要求文字书写工整,不得潦草;作图规范,不得随手勾画。 4、实验报告中的实验原始记录,须经实验指导教师签字或登记。 二、实习报告、课程设计报告格式要求 1、采用统一的封面。 2、根据教学大纲的要求手写或打印,手写一律用钢笔书写,统一采用国家标准所规定的单位与符号,要求文字书写工整,不得潦草;作图规范,不得随手勾画。打印要求用A4纸;页边距要求如下:页边距上下各为2.5厘米,左右边距各为2.5厘米;行间距取固定值(设置值为20磅);字符间距为默认值(缩放100%,间距:标准)。 三、报告内容要求 1、实验报告内容包括:实验目的、实验原理、实验仪器设备、实验操作过程、原始数据、实验结果分析、实验心得等方面内容。 2、实习报告内容包括:实习题目、实习任务与要求、实习具体实施情况(附上图表、原始数据等)、实习个人总结等内容。 3、课程设计报告或说明书内容包括:课程设计任务与要求、总体方案、方案设计与分析、所需仪器设备与元器件、设计实现与调试、收获体会、参考资料等方面内容。 北京邮电大学世纪学院 教务处 2009-8

实验报告 课程名称计算机绘图(CAD) 实验项目AutoCAD二维绘图实验 专业班级 姓名学号 指导教师实验成绩 2016年11月日

电子科技大学-空间数据库上机实验报告

一、建立Geodatabase数据文件 1、新建一个Geodatabase: 如图1.1所示:在ArcCatalog环境下新建一个名为“Personal Geodatabase”的数据文件。 1.1 建好的Geodatabase 数据文件 2、新建要素集: 在Personal Geodatabase下,新建一个shanghai要素集,定义坐标系统为高斯投影(如图 1.2所示),单位为米,精度为1。

1.2 创建要素数据集 3、新建要素类: 在shanghai要素集中,新建一个parcel和pole要素类,parcle的Shape字段类型为polygon,新增字段parcel_name(文本型)、owner_name (文本型);pole的Shape 字段类型为点类型,新增三个字段:类型(短整型)、高度(短整型)和管理部门(文本型)。 1.3 创建parcel要素类 1.4 创建pole要素类 4、新建表:

如图1.5所示,在Personal Geodatabase下,新建一个owner表,新增字段name (文本型)、age (短整型) 1.5 创建owner表 二、创建子类 1、新建子类: 单击鼠标右键,打开pole要素类的属性表,选择子类选项卡,根据type字段创建pole类型子类,包括Wood、Steel和Cement。 图2.1 pole要素类新建子类 2、对子类赋值: 如图2.2所示,在ArcMap环境下通过列表框选择对要素子类进行赋值。

图2.2 pole要素类赋值 三、按子类定义pole要素类的域: 1、打开Geodatabase的属性表,定义三个域:Wood_pole高度域(短整型),20—30ft;Steel_pole的高度域(短整型),30—50ft;pole的管理部门域(文本),市管,区县管。 图3.1 按子类定义pole要素类的域

单链表实验报告

数据结构 课程设计 设计题目:单链表 专业班级:11软会四班 指导教师:吉宝玉 日期:2012 目录 一、实验目的 (2) 1、 (2) 2、 (2) 二、实验内容 (3)

三、实验基本要求(软、硬件) (3) 四、算法设计思想 (3) 1、 (3) 2、 (3) 3、 (3) 4、 (3) 5、 (3) 6、 (3) 7、 (3) 8、 (3) 五、算法流程图 (4) 六、算法源代码 (4) 七、运行结果 (9) 1、 (9) 2、 (10) 3、 (11) 4、 (11) 5、 (11) 6、 (12) 7、 (12) 8、 (13) 9、 (13) 八、收获及体会 (14) 一、实验目的 1、理解并掌握单链表的结构特点和相关概念; 2、学会单链表的基本操作:建立、插入、删除、查找、 输入、撤销、逆置、求前驱和后继等并实现其算法。

二、实验内容 利用头插建立一个带头结点的单链表,并用算法实现该单链表的插入、删除查找、输出、求前驱和后继、再把此单链表逆置,然后在屏幕上显示每次操作的结果当所有操作完成后能撤销该单链表。 三、实验基本要求(软、硬件) 用VC++6.0软件平台,操作系统:Windows XP 硬件:内存要求:内存大小在256MB,其他配置一般就行。 四、算法设计思想 1、定义一个创建链表的函数,通过该函数可以创建一个链表,并为下面的函数应用做 好准备。 2、定义输出链表的算法,通过对第一步已经定义好的创建链表函数的调用,在这一步 通过调用输出链表的函数算法来实现对链表的输出操作。 3、定义一个遍历查找的算法,通过此算法可以查找到链表中的每一个节点是否存在。 4、定义查找链表的每一个前驱和后继,通过定义这个算法,可以很容易的实现对链表 的前驱和后继的查找工作。 5、定义插入节点的算法,通过定义这个算法,并结合这查找前驱和后继的算法便可以 在连链表的任意位置进行插入一个新节点。 6、定义删除节点的操作,这个算法用于对链表中某个多余节点的删除工作。 7、定义一个逆置单链表的操作,通过定义这个算法,可以逆置输出单链表。 8、定义一个撤销链表的算法,这个算法用于删除单链表中的所有节点,使链表为空。

链表实现多项式相加实验报告

实验报告 课程名称:数据结构 题目:链表实现多项式相加 班级: 学号: 姓名: 完成时间:2012年10月17日

1、实验目的和要求 1)掌握链表的运用方法; 2)学习链表的初始化并建立一个新的链表; 3)知道如何实现链表的插入结点与删除结点操作; 4)了解链表的基本操作并灵活运用 2、实验内容 1)建立两个链表存储一元多项式; 2)实现两个一元多项式的相加; 3)输出两个多项式相加后得到的一元多项式。 3、算法基本思想 数降序存入两个链表中,将大小较大的链表作为相加后的链表寄存处。定义两个临时链表节点指针p,q,分别指向两个链表头结点。然后将另一个链表中从头结点开始依次与第一个链表比较,如果其指数比第一个小,则p向后移动一个单位,如相等,则将两节点的系数相加作为第一个链表当前节点的系数,如果为0,则将此节点栓掉。若果较大,则在p前插入q,q向后移动一个,直到两个链表做完为止。 4、算法描述 用链表实现多项式相加的程序如下: #include #include #include struct node{ int exp; float coef; struct node*next; };

void add_node(struct node*h1,struct node*h2); void print_node(struct node*h); struct node*init_node() { struct node*h=(struct node*)malloc(sizeof(struct node)),*p,*q; int exp; float coef=1.0; h->next=NULL; printf("请依次输入多项式的系数和指数(如:\"2 3\";输入\"0 0\"时结束):\n"); p=(struct node*)malloc(sizeof(struct node)); q=(struct node*)malloc(sizeof(struct node)); for(;fabs(coef-0.0)>1.0e-6;) { scanf("%f %d",&coef,&exp); if(fabs(coef-0.0)>1.0e-6) { q->next=p; p->coef=coef; p->exp=exp; p->next=NULL; add_node(h,q); } } free(p); free(q); return(h); } void add_node(struct node*h1,struct node*h2) { struct node*y1=h1,*y2=h2; struct node*p,*q; y1=y1->next; y2=y2->next; for(;y1||y2;) if(y1) { if(y2) { if(y1->expexp) y1=y1->next; else if(y1->exp==y2->exp) { y1->coef+=y2->coef; if(y1->coef==0)

《流体力学》课程实验(上机)指导书及实验报告格式

《流体力学》课程实验指导书袁守利编 汽车工程学院 2005年9月

前言 1.实验总体目标、任务与要求 1)学生在学习了《流体力学》基本理论的基础上,通过伯努利方程实验、动量方程实 验,实现对基本理论的验证。 2)通过实验,使学生对水柱(水银柱)、U型压差计、毕托管、孔板流量计、文丘里流量计等流体力学常用的测压、测流量装置的结构、原理和使用有基本认识。 2.适用专业 热能与动力工程 3.先修课程 《流体力学》相关章节。 4.实验项目与学时分配 5. 实验改革与特色 根据实验内容和现有实验条件,在实验过程中,采取学生自己动手和教师演示相结合的方法,力求达到较好的实验效果。

实验一伯努利方程实验 1.观察流体流经实验管段时的能量转化关系,了解特定截面上的总水头、测压管水头、压强水头、速度水头和位置水头间的关系,从而加深对伯努利方程的理解和认识。 2.掌握各种水头的测试方法和压强的测试方法。 3.掌握流量、流速的测量方法,了解毕托管测速的原理。 二、实验条件 伯努利方程实验仪 三、实验原理 1.实验装置: 图一伯努利方程实验台 1.水箱及潜水泵 2.上水管 3.电源 4.溢流管 5.整流栅 6.溢流板 7.定压水箱 8.实验 细管9. 实验粗管10.测压管11.调节阀12.接水箱13.量杯14回水管15.实验桌 2.工作原理 定压水箱7靠溢流来维持其恒定的水位,在水箱下部装接水平放置的实验细管8,水经实验细管以恒定流流出,并通过调节阀11调节其出水流量。通过布置在实验管四个截面上的四组测压孔及测压管,可以测量到相应截面上的各种水头的大小,从而可以分析管路中恒定流动的各种能量形式、大小及相互转化关系。各个测量截面上的一组测压管都相当于一组毕托管,所以也可以用来测管中某点的流速。 电测流量装置由回水箱、计量水箱和电测流量装置(由浮子、光栅计量尺和光电子

数据结构实验报告 - 答案汇总

数据结构(C语言版) 实验报告

专业班级学号姓名 实验1 实验题目:单链表的插入和删除 实验目的: 了解和掌握线性表的逻辑结构和链式存储结构,掌握单链表的基本算法及相关的时间性能分析。 实验要求: 建立一个数据域定义为字符串的单链表,在链表中不允许有重复的字符串;根据输入的字符串,先找到相应的结点,后删除之。 实验主要步骤: 1、分析、理解给出的示例程序。 2、调试程序,并设计输入数据(如:bat,cat,eat,fat,hat,jat,lat,mat,#),测试程序 的如下功能:不允许重复字符串的插入;根据输入的字符串,找到相应的结点并删除。 3、修改程序: (1)增加插入结点的功能。 (2)将建立链表的方法改为头插入法。 程序代码: #include"stdio.h" #include"string.h" #include"stdlib.h" #include"ctype.h" typedef struct node //定义结点 { char data[10]; //结点的数据域为字符串 struct node *next; //结点的指针域 }ListNode; typedef ListNode * LinkList; // 自定义LinkList单链表类型 LinkList CreatListR1(); //函数,用尾插入法建立带头结点的单链表 LinkList CreatList(void); //函数,用头插入法建立带头结点的单链表 ListNode *LocateNode(); //函数,按值查找结点 void DeleteList(); //函数,删除指定值的结点 void printlist(); //函数,打印链表中的所有值 void DeleteAll(); //函数,删除所有结点,释放内存

电磁场实验指导书及实验报告

CENTRAL SOUTH UNIVERSITY 题目利用Matlab模拟点电荷电场的分布姓名xxxx 学号xxxxxxxxxx 班级电气xxxx班 任课老师xxxx 实验日期2010-10

电磁场理论 实验一 ——利用Matlab 模拟点电荷电场的分布 一.实验目的: 1.熟悉单个点电荷及一对点电荷的电场分布情况; 2.学会使用Matlab 进行数值计算,并绘出相应的图形; 二.实验原理: 根据库伦定律:在真空中,两个静止点电荷之间的作用力与这两个电荷的电量乘积成正比,与它们之间距离的平方成反比,作用力的方向在两个电荷的连线上,两电荷同号为斥力,异号为吸力,它们之间的力F 满足: R R Q Q k F ? 212 = (式1) 由电场强度E 的定义可知: R R kQ E ? 2 = (式2) 对于点电荷,根据场论基础中的定义,有势场E 的势函数为 R kQ U = (式3) 而 U E -?= (式4) 在Matlab 中,由以上公式算出各点的电势U ,电场强度E 后,可以用Matlab 自带的库函数绘出相应电荷的电场分布情况。 三.实验内容: 1. 单个点电荷 点电荷的平面电力线和等势线 真空中点电荷的场强大小是E=kq /r^2 ,其中k 为静电力恒量, q 为电量, r 为点电荷到场点P(x,y)的距离。电场呈球对称分布, 取电量q> 0, 电力线是以电荷为起点的射线簇。以无穷远处为零势点, 点电荷的电势为U=kq /r,当U 取

常数时, 此式就是等势面方程.等势面是以电荷为中心以r 为半径的球面。 平面电力线的画法 在平面上, 电力线是等角分布的射线簇, 用MATLAB 画射线簇很简单。取射线的半径为( 都取国际制单位) r0=, 不同的角度用向量表示( 单位为弧度) th=linspace(0,2*pi,13)。射线簇的终点的直角坐标为: [x,y]=pol2cart(th,r0)。插入x 的起始坐标x=[x; *x].同样插入y 的起始坐标, y=[y; *y], x 和y 都是二维数组, 每一列是一条射线的起始和终止坐标。用二维画线命令plot(x,y)就画出所有电力线。 平面等势线的画法 在过电荷的截面上, 等势线就是以电荷为中心的圆簇, 用MATLAB 画等势 线更加简单。静电力常量为k=9e9, 电量可取为q=1e- 9; 最大的等势线的半径应该比射线的半径小一点 r0=。其电势为u0=k8q /r0。如果从外到里取7 条等势线, 最里面的等势线的电势是最外面的3 倍, 那么各条线的电势用向量表示为: u=linspace(1,3,7)*u0。从- r0 到r0 取偶数个点, 例如100 个点, 使最中心点的坐标绕过0, 各点的坐标可用向量表示: x=linspace(- r0,r0,100), 在直角坐标系中可形成网格坐标: [X,Y]=meshgrid(x)。各点到原点的距离为: r=sqrt(X.^2+Y.^2), 在乘方时, 乘方号前面要加点, 表示对变量中的元素进行乘方计算。各点的电势为U=k8q. /r, 在进行除法运算时, 除号前面也要加点, 同样表示对变量中的元素进行除法运算。用等高线命令即可画出等势线 contour(X,Y,U,u), 在画等势线后一般会把电力线擦除, 在画等势线之前插入如下命令hold on 就行了。平面电力线和等势线如图1, 其中插入了标题等等。越靠近点电荷的中心, 电势越高, 电场强度越大, 电力线和等势线也越密。

相关文档
相关文档 最新文档