单片机原理实验

合集下载

单片机实验原理

单片机实验原理

单片机实验原理单片机(Microcontroller)是嵌入式系统中常用的一种微型计算机系统,它集成了处理器、存储器、输入/输出接口以及各种外围设备接口等功能于一芯片之中。

单片机实验原理是指通过实验来研究和验证单片机的工作原理和应用。

一、单片机的基本原理单片机原理的核心是其内部结构,它主要分为中央处理器(CPU)、存储器、输入/输出(I/O)接口和定时/计数器等模块。

1. 中央处理器(CPU)中央处理器是单片机的核心,负责执行各种指令和数据处理操作。

它包括运算器、控制器和寄存器等组成部分,通过解码和执行内存中的指令来实现计算和控制功能。

2. 存储器存储器用于存储程序和数据。

单片机通常具有不同类型的存储器,如闪存(Flash Memory)用于存储程序代码,静态随机存取存储器(SRAM)用于数据存储等。

3. 输入/输出接口(I/O)输入/输出接口用于与外部设备进行数据交换。

常见的输入设备包括键盘、按键、传感器等,输出设备包括LED、数码管、液晶显示屏等。

通过输入/输出接口,单片机可以与外界进行数据交互。

4. 定时/计数器定时/计数器广泛应用于计时、脉冲计数、频率测量等。

通过定时/计数器,单片机可以进行时间控制和精确计数。

二、单片机实验方法与步骤进行单片机实验需要按照一定的步骤进行,以确保实验的顺利进行和结果的准确性。

1. 实验目的与设计在进行单片机实验之前,首先确定实验的目的。

根据实验要求和目的,设计实验的硬件连接电路和软件程序。

2. 准备实验材料与工具根据实验设计,准备所需的单片机开发板、传感器、按键、显示屏等硬件设备,以及相应的软件工具,如编译器和下载工具等。

3. 连接硬件电路按照实验设计,将各个硬件设备按照连接图连接到单片机开发板上。

确保电路连接正确可靠。

4. 编写程序代码根据实验设计,使用相应的编程语言,编写实验所需的程序代码。

代码应该符合单片机的编程规范,并考虑实验的特殊要求。

5. 下载程序到单片机使用下载工具将编写好的程序代码烧录到单片机中。

单片机原理实验设计(可编辑)

单片机原理实验设计(可编辑)

单片机原理实验设计目录实验一、单片机集成开发环境入门实验二、I/O口输入输出实验――循环灯程序设计实验三、I/O口输入输出实验――LED数码管动态显示与按键去抖程序设计实验四、定时器应用实验――LED数码动态显示与矩阵键盘赋值程序设计实验五、计数器应用实验――基于热敏电阻和555时基电路的简易温度计设计实验一、单片机集成开发环境入门实验目地掌握单片机集成开发软件“WAVE 3.2”的开发环境配置。

掌握单片机集成开发软件“WAVE 3.2”的基本功能,了解MCS-51系列单片机应用系统的软件开发过程。

掌握创建工程项目和管理工程项目的方法。

掌握MCS-51系列单片机汇编程序的编辑、编译方法。

掌握MCS-51系列单片机汇编程序的仿真调试方法和观察窗口的使用。

实验设备PC 兼容机一台,操作系统为WindowsXP,安装有单片机集成开发软件“WAVE 3.2”。

实验原理单片机集成开发软件“WAVE 3.2”简介单片机应用程序的设计步骤通常可分为以下几步:(1)根据单片机应用系统的功能进行算法构思和设计,画出程序流程图;(2)用单片机汇编语言、C语言或PLM语言(初学者一般应采用汇编语言)编写源程序;(3)将源程序翻译成单片机可执行的机器码程序,即所谓的目标程序,该过程称为汇编或编译;(4)程序调试,将目标程序下载到目标单片机(即应用系统板中的单片机),运行目标程序,对运行结果进行监控。

若运行结果与预期结果相符,程序正确,调试结束;否则由结果的差异分析算法或程序的可能错误,重复步骤2至4,修改源程序、重新汇编、再调试,直至程序正确。

以上步骤2至4可应用单片机集成开发软件在个人计算机上完成。

“WAVE 3.2”是一款功能强大的单片机集成开发软件,可开发多个系列的单片机应用系统。

该软件主要功能有:(1)集成了文本编辑器,可对源程序进行编辑、修改;(2)集成了汇编器,可对源程序进行汇编,自动查找源程序中的语法错误,并将无语法错误的源程序翻译成目标程序;(3)集成了仿真调试器,可对目标系统进行在线仿真调试,也可在个人计算机上对目标程序进行模拟仿真调试。

单片机原理实验 缩孔

单片机原理实验 缩孔

单片机原理实验缩孔
缩孔是一种常见的单片机原理实验,通过控制单片机输出的高低电平来控制传感器的灵敏度,从而实现对孔洞的检测和测量。

在这个实验中,我们将探讨如何利用单片机来进行缩孔实验,并通过实验结果来验证传感器的工作原理和性能。

我们需要准备的材料包括单片机开发板、传感器模块、LED灯、蜂鸣器等。

将传感器模块连接到单片机开发板上,并通过编程控制单片机的输出端口来控制传感器的工作状态。

传感器模块将会输出一个模拟信号,用于检测孔洞的大小和深度。

接下来,我们需要编写单片机的程序来实现缩孔实验。

首先,我们需要初始化单片机的引脚设置,并设置传感器模块的工作模式。

然后,我们可以通过读取传感器输出的模拟信号来判断孔洞的深度和大小,并根据不同的情况控制LED灯和蜂鸣器的状态。

在实验过程中,我们可以通过改变单片机输出的电平来模拟不同大小和深度的孔洞,并观察传感器的响应情况。

通过分析实验结果,我们可以得出传感器的灵敏度和准确度,从而评估传感器的性能和可靠性。

通过这个实验,我们不仅可以深入了解单片机的工作原理和编程方法,还可以学习到如何利用单片机来实现传感器的控制和应用。

缩孔实验是一个简单而有效的实验方法,可以帮助我们更好地理解传
感器的原理和应用,为日后的项目设计和开发奠定基础。

总的来说,缩孔实验是一个具有教育意义和实用性的单片机原理实验,通过这个实验,我们可以提高对传感器和单片机的理解,为未来的科研和工程项目打下坚实的基础。

希望通过这篇文章的介绍,读者能够对缩孔实验有更深入的了解,并能够在实践中运用这些知识。

单片机原理中断实验单片机原理实验报告

单片机原理中断实验单片机原理实验报告

单片机原理中断实验一、实验前准备1. 实验目的:本实验旨在通过学习和实践,掌握单片机原理中断的基本概念和工作原理,并能灵活运用中断技术解决实际问题。

2. 实验器材:- STC89C52单片机开发板- LED灯- 电阻、电容等基本电子元器件- 连接线3. 实验原理:单片机原理中断实验是通过将外部事件(如按键按下、定时器溢出等)与单片机的中断系统相连,实现对外部事件的即时响应和处理。

单片机的中断系统可以在常规程序运行的过程中接收和响应中断请求,提高系统的实时性和可靠性。

4. 实验步骤:- 首先,将开发板上的LED灯与单片机相连。

- 将外部事件(例如,按键)与单片机的中断引脚相连。

- 对中断相关的寄存器进行初始化设置。

- 编写相应的中断服务程序。

- 在主程序中编写相应的处理代码。

二、实验过程以按键中断为例,以下为实验过程的详细步骤:1. 硬件连接:将按键连接到单片机的外部中断引脚上,同时将LED灯连接到单片机的IO口上,以实现按键按下时LED灯的亮灭。

2. 寄存器设置:通过编程设置单片机的寄存器,使其能够正确地接收和响应外部中断请求。

具体的设置包括中断使能、中断触发方式、中断优先级等。

3. 中断服务程序编写:根据实际需求,编写相应的中断服务程序。

在按键中断的情况下,可以编写一个简单的中断服务程序,通过判断按键的状态来控制LED灯的亮灭。

4. 主程序编写:在主程序中,编写相应的处理代码。

在按键中断的情况下,可以编写一个循环程序,不断检测按键的状态,并根据按键状态控制LED灯的亮灭。

三、实验结果经过实验验证,成功利用中断技术实现了按键按下时LED灯的亮灭,实现了对外部事件(按键)的即时响应和处理。

实验结果表明单片机中断技术在提高系统的实时性和可靠性方面具有重要作用。

四、实验总结通过本次实验,我对单片机原理中断有了更深入的了解。

掌握了中断系统的基本原理和工作方式,并成功运用中断技术解决实际问题。

在今后的学习和实践中,我将进一步熟悉和应用中断技术,不断提高自己的技术水平。

单片机原理及应用实验二报告

单片机原理及应用实验二报告

单片机原理及应用实验二报告实验二:单片机IO口的输入输出实验一、实验目的:1.理解并掌握单片机IO口的输入输出原理;2.掌握基础的输入输出编程技巧;3.熟悉单片机实验的基本流程和实验报告格式。

二、实验器材:1.STM32F103C8T6开发板2.LED灯3.电阻(220Ω)4.面包板、杜邦线等。

三、实验原理:单片机的IO口是实现与外部器件进行通信的重要接口,通过编程,我们可以控制IO口的状态(低电平或高电平)来实现对外部器件的控制或检测。

IO口的输入输出原理主要有两种:1.三态输出方式:通过设置IO口的DDR寄存器来将IO口设置为输出模式(推挽输出),并通过设置IO口的ODR寄存器来控制IO口的输出状态为低电平或高电平;2.上拉输入方式:通过设置IO口的DDR寄存器来将IO口设置为输入模式,同时设置IO口的CR寄存器的PUPD位为上拉使能,通过读取IO口的IDR寄存器可以获取IO口的输入状态。

四、实验步骤:1.连接电路:将STM32F103C8T6开发板的VDD和VSS(即5V和GND)分别连接到面包板的3V3和GND,将LED的阳极(长脚)连接到STM32F103C8T6开发板的PA0引脚,将LED的阴极(短脚)通过一个220Ω的电阻连接到GND。

2. 打开Keil uVision5软件,创建一个新的工程,并选择适合的芯片型号(STM32F103C8T6)。

3.编写代码实现将PA0引脚设置为输出模式,并控制LED的亮灭。

五、实验代码:```c#include "stm32f10x.h"void GPIO_Configuration(void)GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);int main(void)GPIO_Configuration(;while (1)GPIO_SetBits(GPIOA, GPIO_Pin_0); // 点亮LEDGPIO_ResetBits(GPIOA, GPIO_Pin_0); // 关闭LED}```六、实验结果与分析:七、实验心得:本次实验主要学习了单片机IO口的输入输出原理,了解了三态输出方式和上拉输入方式,并通过实际编写代码的方式,在STM32F103C8T6开发板上实现了控制LED的亮灭。

单片机原理及应用实验报告2

单片机原理及应用实验报告2

单片机原理及应用实验报告2单片机原理及应用实验报告2实验报告:单片机原理及应用实验一、实验目的1、了解单片机的基本工作原理;2、掌握单片机的编程方法和编写汇编语言程序的能力;3、学习单片机的应用实验。

二、实验原理单片机是一种集成电路,内部包含了中央处理器、存储器和各种输入输出端口。

单片机的工作原理是通过对输入信号的处理和对输出信号的控制来实现各种功能。

单片机的编程方法一般采用汇编语言编写程序。

汇编语言是一种低级语言,可以直接对单片机进行操作。

通过编写汇编语言程序,可以实现各种功能,如控制LED灯的亮灭、控制电机的转动等。

本次实验主要通过控制LED灯的亮灭来演示单片机的应用。

在实验中,我们将使用汇编语言编写程序,通过编程来控制LED灯的亮灭。

三、实验步骤2、编写汇编语言程序:打开编程软件,进入编程界面,编写程序代码;3、编译程序:将编写好的程序进行编译,生成机器码;4、烧录程序:用编程工具将编译好的机器码烧录到单片机中;5、连接电路:使用面包板将单片机与LED灯连接起来;6、测试程序:将单片机的电源接通,观察LED灯的亮灭情况。

四、实验结果与分析经过以上步骤,我们成功地编写了汇编语言程序,并将程序烧录到了单片机中。

在实验中,我们观察到LED灯根据程序的控制产生了相应的亮灭效果。

实验结果表明,通过编程可以实现对单片机的控制,从而实现各种功能。

单片机在嵌入式系统、自动控制系统、家电等方面有着广泛的应用。

五、应用实例1、家居智能化控制:通过编程控制单片机,可以实现对家电的智能化控制。

例如,可以根据日出日落时间控制窗帘的开闭,根据室内温度控制空调的开关等。

2、工业自动化:在工业生产中,单片机可以用来控制各种设备和机械,实现生产线的自动化控制。

例如,可以根据产品的规格和数量,自动调整机械的工作速度和工作时间。

3、智能交通系统:在交通领域,单片机可以用来控制信号灯、道闸等设备,实现交通流量的控制。

例如,可以根据道路的拥堵程度和车辆的行驶速度,调整信号灯的红绿灯时间,从而达到交通畅通的目的。

单片机原理及接口技术实验报告

单片机原理及接口技术实验报告

单片机原理及接口技术实验报告一、引言单片机(Microcontroller)是一种集成为了处理器、存储器和各种接口电路的微型计算机系统。

它具有体积小、功耗低、成本低等优点,广泛应用于嵌入式系统、自动化控制、电子设备等领域。

本实验旨在深入了解单片机的原理和接口技术,并通过实验验证相关理论。

二、实验目的1. 理解单片机的基本原理和结构。

2. 掌握单片机与外部器件的接口技术。

3. 进一步培养实际操作能力和解决问题的能力。

三、实验仪器与材料1. 单片机开辟板2. 电脑3. 串口线4. LED灯5. 蜂鸣器6. 数码管7. 按键开关8. 电阻、电容等元件四、实验内容与步骤1. 单片机原理实验1.1 单片机的基本结构单片机由中央处理器(CPU)、存储器(RAM、ROM)、输入输出接口(I/O)、定时器/计数器、串行通信接口等组成。

通过学习单片机的基本结构,我们可以了解各个部份的功能和作用。

1.2 单片机的工作原理单片机的工作原理是指单片机在不同工作模式下的内部状态和运行规律。

通过学习单片机的工作原理,我们可以更好地理解单片机的工作过程,为后续的实验操作提供基础。

2. 单片机接口技术实验2.1 LED灯接口实验将LED灯与单片机相连,通过控制单片机的输出口电平,控制LED灯的亮灭。

通过实验,我们可以学习到单片机的输出接口的使用方法。

2.2 蜂鸣器接口实验将蜂鸣器与单片机相连,通过控制单片机的输出口电平和频率,控制蜂鸣器的声音。

通过实验,我们可以学习到单片机的输出接口的使用方法。

2.3 数码管接口实验将数码管与单片机相连,通过控制单片机的输出口电平和数据,显示不同的数字。

通过实验,我们可以学习到单片机的输出接口和数码管的使用方法。

2.4 按键开关接口实验将按键开关与单片机相连,通过检测单片机的输入口电平,实现按键的功能。

通过实验,我们可以学习到单片机的输入接口的使用方法。

五、实验结果与分析1. 单片机原理实验结果通过学习单片机的基本结构和工作原理,我们深入了解了单片机的内部组成和工作过程,为后续的接口技术实验打下了基础。

单片机实验原理

单片机实验原理

单片机实验原理单片机实验原理由三部分组成:单片机的工作原理、实验设计原理及实验原理。

单片机的工作原理:单片机(Microcontroller)是指将微型计算机的所有核心部件集成到一个芯片上的计算机系统。

单片机由中央处理器(CPU)、存储器(RAM、ROM)、输入/输出端口(I/O)、计时/计数器(Timer/Counter)、串行通信接口(UART、SPI、I2C)、模拟数模转换器(ADC)等组成。

它以存储器中的程序为指导,完成各种控制和处理任务。

单片机通过外部电路与外界进行信息交互。

输入/输出端口(I/O)是单片机与外部设备连接的接口,通过这些接口可以实现数字信号的输入和输出。

单片机通过控制输入/输出端口的电平状态来与外部设备进行交互,实现数据的输入和输出。

实验设计原理:实验设计原理是指进行单片机实验时所遵循的一些基本原则。

在进行单片机实验之前,我们需要明确实验的目的和要达到的效果,然后根据实验目的选择适合的单片机型号和外围电路。

接着,根据实验要求设计相应的电路板,并进行相应的电路设计和布线。

在实验中,我们需要编写相应的程序,用于控制单片机的工作。

编写程序遵循的原则包括程序的模块化设计和程序的正确性、高效性。

程序的模块化设计是指将程序按照功能划分为若干个模块,每个模块完成一个具体的功能。

程序的正确性是指程序的逻辑应该是正确的,能够按照预期的流程执行。

程序的高效性是指程序在执行过程中要尽量减少时间和空间复杂度,提高程序的运行效率。

实验原理:实验原理是指具体的实验过程和方法。

单片机实验一般分为硬件实验和软件实验两个方面。

硬件实验主要是通过搭建相应的电路来验证电路的功能,例如数码管显示、LED闪烁等。

软件实验则是通过编写相应的程序来实现实验的要求,例如按键控制、模拟信号采集等。

在进行实验之前,首先要对实验过程进行计划和设计。

根据实验的目的和要求,选择相应的实验方法和实验方案。

然后,进行电路搭建和程序编写,并对电路和程序进行测试和调试。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

..《单片机原理及应用》实验报告册系别:电气学院班级:自动化142姓名:学号:实验一:熟悉keil c51 集成开发环境及常用指令一、实验目的:(1)了解80c51典型应用系统的开发过程,熟悉keil c51集成开发环境;(2)掌握单步执行程序,查看专用寄存器和单片机RAM的执行结果;(3)掌握80c51的寻址方式及常用指令的使用方法。

二、实验内容(1)基本指令练习;(2)数据转送(循环方式)。

三、思考题1、分别执行以下程序,在调试状态下观察有关单元的内容顺序执行的程序:ORG 00HSJMP MAINORG 30HMAIN:MOV SP,#60HMOV R0,#40HMOV R1,#30HMOV 30H,#50HMOV A,#40HMOV @R0,A ;R0与A内容相等为40HINC AMOV A,@R1 ;A的内容为30H,R1的内容给APUSH ACC ;61H给APOP 32H ;60H给30HMOV A,#5FHSWAP A ;高四位低四位交换,A为F5HMOV DPTR,#0030HMOVX @DPTR,A循环程序:XUNHUAN1:MOV R0,#30H ;要赋值的首地址MOV R2,#10H ;一共赋值16次CLR A ;从0开始赋值LOOP1:MOV @R0,A ;赋值16次后停止赋值INC A ;32H=2,37H=7,3BH=0B,3FH=0FINC R0DJNZ R2,LOOP1XUNHUAN2:MOV R0,#30HMOV R1,#40HMOV R2,#10HLOOP2:MOV A,@R0 ;从40H开始一直赋值MOV @R1,A ;赋的值从30H开始INC R0 ;就是40H=30H,41H=31HINC R1 ;一直到R2=0DJNZ R2,LOOP2 ;就是4FH=3FH汇编程序3:PANDUAN1:MOV 30H,#10HMOV 31H,#4BHMOV R0,#30HMOV R1,#31HPAN0:MOV A,@R0CLR C ;进位位清零SUBB A,@R1 ;带进位位的加法JNC PAN1 ;判断进位位C,不为零跳转MOV A,@R0 ;所以当C等于零时,将MOV 40H,@R1 ;30H和30H的内容互换MOV @R0,40HMOV @R1,APAN0:NOPEND2、编程完成:单片机内部RAM40H~4FH置初值A0H~4FH 的内容传送到外部RAM中的2000H~200FH单元,在把外部RAM中的2000H~200FH单元的内容传送到单片机内部RAM的50H~5FH单元。

汇编代码:ORG 00HAJMP MAINORG 30HMAIN:MOV R0,#40HMOV R1,#16MOV A,#01HMOV DPTR,#2000HLOOP1:MOV @R0,AMOVX @DPTR,AINC DPTRINC R0INC ADJNZ R1,LOOP1 MOV R0,#50H MOV R1,#16MOV DPTR,#2000H LOOP2:MOVX A,@DPTR MOV @R0,AINC DPTRINC R0DJNZ R1,LOOP2 END实验二:中断、定时器与I/O口控制一、实验目的(1)掌握定时器/计数器、中断初始化程序设计的方法;(2) 掌握定时/计数器方式2的编程方法;(3)掌握中断的编程方法;(4)掌握使用单片机P1口和P3口做I/O输出,各参数的配置。

二、实验任务完成在每隔50MS/1S下接在P1口的八个发光二极管循环亮灭程序设计和调试。

要求:1、选择定时器T0方式一定时,中断方式产生50MS,使P1口的八个发光二极管循环亮灭。

2、用定时器与计数器的方式,使T0工作定时产生50MS,使T1工作与计数器,计数10次,每次T0溢出后从P3.0给T1端P3.5一个脉冲。

三、(1)用定时器定时,计数器计数,当50ms到来时,取反P3.0让P3.0口能够输出一个周期为100ms的脉冲,通过外接导线到P3.5,则计数器就有了外部脉冲的信号,而计数器是在下降沿时计数,所以应该让P3.0一开始就输出低电平。

电路图如下:(2)定时器方式一和方式二最大定时间分别是:方式一:65.536ms(2^13微秒)方式二:0.256ms(2^8微秒)实验三:扩展并行接口8155一、实验目的:(1)掌握8051单片机与8155的接口方法(2)掌握keil c51集成开发环境在硬件仿真条件下各参数的设置;(3)掌握软件延时和定时器中断延时的编程方法。

二、实验内容画出实验电路图:汇编程序:..ORG 0000HLJMP MAINORG 000BHLJMP TIMEOMAIN:MOV SP ,#60HMOV TMOD ,#01HMOV TH0 ,#3CHMOV TL0 ,#0B0H ;定时50msMOV DPTR ,7FF8 ;DPTR指向命令寄存器8155 MOV A ,#03H ;设定A,B,C工作方式MOVX @DPTR ,A ;启动8155MOV DPTR,#7FF9H ;打开A口MOV A ,#0FEHMOVX @DPTR ,A ;将流水灯值给PA口SETB EASETB ET0SETB TR0 ;打开单片机定时器0SJMP $TIME0:MOV TH0 ,#3CHMOV TL0 ,0B0HRL AMOVX @DPTR ,A ;将左移的值给PA口RETIEND实验四:并行A/D转换一、实验目的:(1)掌握并行A/D芯片ADC0809与单片机的接口方法(2)了解ADC0809芯片的性能;(3)通过实验了解单片机实现数据采集的方法。

二、实验内容:画出电路图:按图中cs接P2.7则模拟输入通道的地址值INT0~INT7:7FF8~7FFF#include"stdio.h"typedef int ElemType;typedef int Status;struct List{ElemType *list1; //指向线性表的第一个节点int length; //线性表的实际长度int listSize; //线性表的最大长度324};//附加1:给线性表增加空间Status AgainMalloc(struct List *L1){ElemType *p = (ElemType *)realloc(L1->list1,(L1->listSize + 1)*sizeof(ElemTy pe));if(!p){printf("存储空间分配失败!");exit(1);}L1->list1 = p; /*使list1指向新线性表空间*/L1->listSize=L1->listSize + 1; /*把线性空间大小修改为新的长度*/’.//附加2:遍历线性表元素Status Traverse(struct List *L1){int i;for(i = 0;i < L1->length;i++){printf("%d ",L1->list1[i]);}}//1.创建线性表,给定长度Status InitList(struct List *L1,int ms){if(ms<0){printf("初始化线性表的长度不能小于0\n");exit(1);}L1->length = 0;L1->listSize = ms;//给list1分配空间,单元大小为定义的ElemType类型,长度为ms L1->list1 = (ElemType *)malloc(ms * sizeof(ElemType));if(!L1)’.printf("空间分配失败!");exit(1);}else{printf("空间分配成功!\n");printf("您分配的空间大小为%d\n",ms);}return 0;}//2.销毁线性表Status DestoryList(struct List *L1){if(L1 != NULL){L1->length = 0;L1->listSize = 0;free(L1);}printf("销毁成功!\n");return 0;}’.//3.清空线性表Status ClearList(struct List *L1){//清空只需要将线性表的长度记为0即可。

L1->length = 0;printf("清空成功!\n");return 0;}//4.判断线性表是否为空(如果为空返回0,如果不为空返回1)Status ListEmpty(struct List *L1){if(L1->length != 0){printf("线性表不为空!\n");return 1;}else{printf("线性表为空!\n");return 0;}}//5.返回线性表的当前长度’.int ListLength(struct List *L1){return L1->length;}//6.返回第i个元素的值ElemType GetElem(struct List *L1,int i){if((i < 1)||(i > L1->listSize)){printf("查找的位置超出线性表的范围!");//退出exit(1);}else{//返回第pos个元素的值return L1->list1[i-1];}}//7.判断某个元素是否是线性表元素,如果是,返回这个元素第一次在线性表中出现的位置,如果不是返回0int IsElem(struct List *L1,ElemType e){’.//必须要先定义,后使用!int i;for(i = 0;i<L1->length;i++){if(L1->list1[i]==e)//因为i是从0,开始,所有返回i+1return i + 1;} //如果没有找到相应的元素,返回-1;return 0;}//8.返回某个元素的前驱元素(如果这个元素是第一个,则提示“这是第一个元素”)//1、如果这个元素不是线性表元素,返回-1//2、如果这个元素是线性表第一个元素,返回0,提示第一个元素没有前驱元素ElemType PriorElem(struct List *L1,ElemType e){//判断这个元素是否是线性表元素,如果是返回它的第一个位置//调用IsElem函数,并将结果返回给temp变量int temp = IsElem(L1,e);if(temp == 0){printf("这个元素不是线性表的元素");return -1;}else if(temp == 1)’.{printf("这个元素是第一个元素,没有前驱元素");return 0;}else{//返回e元素的前驱元素return L1->list1[temp-2];}}//9.返回某个元素的后继元素(如果这个元素是最后一个,则提示“这是最后一个元素”)//1、如果这个元素不是线性表元素,返回-1//2、如果这个元素是线性表的最后一个元素,返回0,提示最后一个元素没有后继元素ElemType NextElem(struct List *L1,ElemType e){//判断这个元素是否是线性表元素,如果是返回它的第一个位置//调用IsElem函数,并将结果返回给temp变量int temp = IsElem(L1,e);if(temp == 0){printf("这个元素不是线性表的元素");return -1;}else if (temp == L1->length)’.{printf("这个元素是最后一个元素,没有后继元素");return 0;}else{//返回e元素的后继元素return L1->list1[temp];}}//10.在线性表的指定位置i之前插入元素eStatus ListInsert(struct List *L1,int i,ElemType e){int temp;if((i < 1)||(i > L1->length + 1)){printf("i越界,不能插入");exit(1);} //如果线性表的长度等于最大长度,增加空间if(L1->length == L1->listSize){//每次增加1个ElemType单位的个空间AgainMalloc(L1);} //将位置i之后的元素向后以一个位置for(temp = (L1->length+1);temp >= i;temp--)L1->list1[temp] = L1->list1[temp-1];//在i-1的位置插入新元素eL1->list1[i-1] = e;//长度加1L1->length = L1->length +1;return 0;}//11.删除线性表中指定位置i的元素e,并将e返回ElemType ListDelete(struct List *L1,int i){ElemType e;int temp;if((i < 1)||(i > L1->length)){printf("要删除的元素超出线性表的范围!");exit(1);} //将第i个位置的元素返回给ee = L1->list1[i-1];for(temp = i;i < L1->length;i++){//将第i+1个元素的值赋值给第i个位置L1->list1[i-1] = L1->list1[i];}//将长度减去1L1->length = L1->length - 1;return e;}int main(){int itemp = 0;int anytemp = 0;int i = 1;int listlength = 0;ElemType e;struct List L1;printf("线性表的基本操作!\n");printf("**************初始化操作*****************\n");printf("请输入初始化的长度:");scanf("%d",&itemp);//1.创建--InitList(struct List *L1,int ms)InitList(&L1,itemp);printf("请输入线性表的值,不能超过%d个,以911结束,911不算长度:\n",itemp); for(i = 1;i <= itemp;i++){scanf("%d",&e);//这里不能是exit,exit直接退出了所有程序,所以是breakif(e == 911)break;//10.在线性表指定位置i之前插入元素eListInsert(&L1,i,e);}//5.返回长度--ListLength(struct List *L1)listlength = ListLength(&L1);printf("目前,线性表的长度为:%d\n",listlength);//遍历线性表printf("目前,线性表的值为:\n");//遍历,在Traverse中输出Traverse(&L1);//6.返回第i个元素值--GetElem(struct List *L1,int i)printf("请输入,要返回第几个元素值:\n");//输入时,要在这里赋值地址“&”scanf("%d",&anytemp);printf("第%d个位置元素的对应的元素值为:%d\n",anytemp,GetElem(&L1,anytemp)); //8.返回某个元素的前驱--PriorElem(struct List *L1,ElemType e)printf("返回线性表元素的前驱,请输入线性表元素:\n");scanf("%d",&e);printf("元素%d的前驱元素是:%d\n",e,PriorElem(&L1,e));//9.返回某个元素的后继--NextElem(struct List *L1,ElemType e) printf("返回线性表元素的后继,请输入线性表元素:\n");scanf("%d",&e);printf("元素%d的后继元素是:%d\n",e,NextElem(&L1,e));//11.删除线性表指定位置i的元素,将结果e返回--ListDelete(struct List *L1,int i)listlength = ListLength(&L1);printf("目前,线性表的长度为:%d\n",listlength);printf("请输入要删除第几个位置的元素:\n");scanf("%d",&i);ListDelete(&L1,i);listlength = ListLength(&L1);printf("目前,线性表的长度为:%d\n",listlength);printf("目前,线性表的值为:\n");//遍历,在Traverse中输出Traverse(&L1);return 0;}。

相关文档
最新文档