实验4代码

合集下载

汇编语言实验4详细讲解

汇编语言实验4详细讲解

汇编语言实验4详细讲解一、引言汇编语言是一种底层的计算机语言,它直接操作计算机的硬件。

在汇编语言实验4中,我们将深入了解汇编语言的一些重要概念和技巧。

本文将详细讲解汇编语言实验4的内容,帮助读者更好地理解和应用汇编语言。

二、实验目的汇编语言实验4的主要目的是学习和掌握在汇编语言中使用条件和循环结构的方法。

通过实验,我们将能够编写能够根据条件执行不同操作的程序,并实现循环执行一定次数的功能。

三、实验内容1. 条件结构条件结构是根据条件的真假来执行不同的操作。

在汇编语言中,我们可以使用条件跳转指令来实现条件结构。

条件跳转指令根据条件寄存器的值来决定是否跳转到指定的地址执行。

常用的条件跳转指令有JZ、JNZ、JC、JNC等。

2. 循环结构循环结构是重复执行一段代码的结构。

在汇编语言中,我们可以使用循环指令来实现循环结构。

循环指令根据计数器的值来判断是否继续执行循环体,并在每次循环结束后更新计数器的值。

常用的循环指令有LOOP、LOOPE、LOOPZ、LOOPNE、LOOPNZ等。

四、实验步骤1. 定义和初始化计数器在循环结构中,我们首先需要定义一个计数器,并对其进行初始化。

计数器可以使用DX寄存器或AX寄存器来保存。

2. 执行循环体在循环结构中,我们需要执行的代码放在循环体中。

循环体的代码将会被重复执行,直到计数器的值为0或满足其他条件。

3. 更新计数器的值在每次循环结束后,我们需要更新计数器的值。

可以使用INC或DEC指令对计数器进行加1或减1操作。

4. 判断是否继续执行循环在每次循环结束后,我们需要判断是否继续执行循环。

可以使用循环指令来实现此功能。

根据计数器的值或其他条件来判断是否继续执行循环。

五、实验示例下面是一个简单的实验示例,演示了如何使用条件和循环结构来实现一个简单的程序:```MOV CX, 10 ; 初始化计数器为10MOV AX, 0 ; 将AX寄存器清零LOOP_START:ADD AX, CX ; 将CX的值加到AX中LOOP LOOP_START ; 循环执行,直到CX的值为0MOV BX, AX ; 将AX的值保存到BX寄存器中```在上面的示例中,我们首先将CX寄存器初始化为10,然后将AX 寄存器清零。

C++语言程序设计实验4(类和对象)

C++语言程序设计实验4(类和对象)

是:用初始对象的每个数据成员的值,初始化将要建立的对象的对应数据成员。
构造函数和拷贝构造函数的声明格式如下:
class 类名
{
public: 类名(形参); 类名(类名 &对象名);
//构造函数 //拷贝构造函数
... ...
}; 类名::类名()
//构造函数的实现
{ 函数体;
} 类名::类名(类名 &对象名)
6. 本章小结
本章主要介绍了面向对象的基本概念、类和对象的声明、构造函数、析构函数、内联成 员函数、拷贝构造函数、类的组合。
类是面向对象程序设计中最重要、最基本的概念,也是学习面向对象方法时遇到的第 1 个难点。类是对逻辑上相关的函数和数据的封装,是对问题的抽象描述。
要理解类与对象,必须要结合实例来学习,读者可以思考:除了书中列出的例子,现实 世 界 中 还 有 哪 些 有 形 或 无 形 的 事 务 可 以 被 抽 象 为 程 序 中 的 类 ,每 个 类 又 存 在 哪 些 对 象( 实 体 )。 这样可以对类的概念了解的快一些。
本章开始的每章的最后有一个实例——人员信息管理程序,这个例子贯穿后续各章,利 用每章介绍的只是不断丰富程序的功能,建议课后仔细阅读、体会,并尝试修改、补充程序 的功能。
另外,本章中还介绍了利用 UML 语言表示类与对象的方法,以后各章还将进一步介绍 用 UML 语言表示类之间的关系,但这远不是 UML 语言的全部,这方面的内容也不是初学者 学习的重点,读者可以不必深究,了解一下就可以了。如果有需要,可以另外学习软件工程 的课程。
面向对象的程序设计目的是:实现软件设计的产业化。主要观点是认为自然界是由实体 (对象)所组成。程序设计的出发点是:使用面向对象的观点来描述模仿并处理现实问题。 他要求:高度概括、分类、抽象。

实验四Δm及CVSD编译码实验

实验四Δm及CVSD编译码实验
3. 用PN15序列完成差分编码解码仿真实验。
4. 数据分析整理(尤其是实验过程中拍照记录的波形,尽可能将该照片的测量点(如编码输出、CLK等)标注在原理框图中,并将照片中CH1、CH2标出来)。实验中增量调制编码输出的基带码型是什么?
答:此图CH1表示增量调制的原信号;CH2表示增量调制的基带码型。
八、实验预习内容
(1)CMI反转码:“1”交替用“11”和“00”表示,“0”用“01”表示。定时信息丰富。具有纠错能力。
同时具有以下优点:
①不存在直流分量,且低频分量较小;
②信息码流中具有很强的时钟分量,便于从信号中提取时钟信息;
③具有一定的检错能力。
(2)BPH:全称是数字双向码。又称分相码或曼彻斯特码,它是对每个二进制代码分别利用两个不同的二进制新码去取代。
③具有检错能力,如果在整个传输过程中,因传号极性交替规律受到破坏而出现误码时,在接收端很容易发现这种错误。
(4)HDB3:三阶高密度双极性码是一种适用于基带传输的编码方式,它是为了克服AMI码的缺点而出现的。
编码规则:①先将消息代码变换成AMI码,若AMI码中连0的个数小于4,此时的AMI码就是HDB3码;
项目三:不同量阶△M编译码的性能
项目四:△M编译码语音传输系统
项目五:CVSD量阶观测
项目六:CVSD一致脉冲观测
项目七;CVSD量化噪声观测
项目八:CVSD码语音传输系统
五、实验记录
TP4(信源延时)和TH14(编码输出) TP4(信源延时)和TP3(本地译码)
项目二 CH1信源延时,CH2本地译码项目三 量阶3000,Vpp=3V
2Байду номын сангаасCVSD编译码
(1)实验原理框图

设计模式实验4 抽象工厂模式.doc

设计模式实验4 抽象工厂模式.doc

实验报告课程:设计模式实验学期:2010-2011学年第一学期任课教师:专业:学号:姓名:成绩:实验4 抽象工厂模式1.题目:使用抽象工厂模式实现一个DIY电脑店,其中的电脑配置有三个种类:学生版、家庭装、豪华版。

2.模式设计的UML类图:3.程序源代码:(1)计算机配置工厂接口ComputerConfigurationFactory.java:public interface ComputerConfigurationFactory{public Cpu createCpu();public Ram createRam();public Mainboard createMainboard();public Harddisk createHarddisk();public Display createDisplay();}(2)计算机配置工厂接口的各个子类:public class StudentComputerConfigurationFactory implements ComputerConfigurationFactory{public Cpu createCpu(){ return new StudentCpu(); }public Ram createRam(){ return new StudentRam(); }public Mainboard createMainboard(){ return new StudentMainboard(); }public Harddisk createHarddisk(){ return new StudentHarddisk(); }public Display createDisplay(){ return new StudentDisplay(); }}public class HomeComputerConfigurationFactory implements ComputerConfigurationFactory{public Cpu createCpu(){ return new HomeCpu(); }public Ram createRam(){ return new HomeRam(); }public Mainboard createMainboard(){ return new HomeMainboard(); }public Harddisk createHarddisk(){ return new HomeHarddisk(); }public Display createDisplay(){ return new HomeDisplay(); }}public class DeluxeComputerConfigurationFactory implements ComputerConfigurationFactory{public Cpu createCpu(){ return new DeluxeCpu(); }public Ram createRam(){ return new DeluxeRam(); }public Mainboard createMainboard(){ return new DeluxeMainboard(); }public Harddisk createHarddisk(){ return new DeluxeHarddisk(); }public Display createDisplay(){ return new DeluxeDisplay(); }}(3)电脑各种配置的接口:public interface Cpu{public String toString();}public interface Ram{public String toString();}public interface Mainboard{public String toString();}public interface Harddisk{public String toString();}public interface Display{public String toString();}(4)电脑配置Cpu接口的各个子类:public class StudentCpu implements Cpu {public String toString(){ return"Intel 奔腾双核 E5400(盒)"; } }public class HomeCpu implements Cpu{public String toString(){ return"Intel 酷睿i5 650(盒)"; } }public class DeluxeCpu implements Cpu{public String toString(){ return"Intel 酷睿i7 980X(至尊版)"; }}(5)电脑配置Ram接口的各个子类:public class StudentRam implements Ram{public String toString(){ return"宇瞻2GB DDR3 1333(经典系列)"; }}public class HomeRam implements Ram{public String toString(){ return"金士顿4GB DDR3 1333(骇客神条套装)"; } }public class DeluxeRam implements Ram{public String toString(){ return"海盗船TW3X4G2000C9DF"; }}(6)电脑配置Mainboard接口的各个子类:public class StudentMainboard implements Mainboard {public String toString(){ return"铭瑄 MS-M3A890G"; }}public class HomeMainboard implements Mainboard {public String toString(){ return"技嘉GA-870A-UD3"; }}public class DeluxeMainboard implements Mainboard {public String toString(){ return"华硕Rampage III Extreme"; }}(7)电脑配置Harddisk接口的各个子类:public class StudentHarddisk implements Harddisk {public String toString(){ return"希捷250GB 7200.12 8M"; }}public class HomeHarddisk implements Harddisk{public String toString(){ return"三星500GB 7200转 16M(串/金宝)"; }}public class DeluxeHarddisk implements Harddisk {public String toString(){ return"希捷Cheetah 15K.7 600GB"; }}(8)电脑配置Display接口的各个子类:public class StudentDisplay implements Display {public String toString(){ return"飞利浦193E1SB"; }}public class HomeDisplay implements Display{public String toString(){ return"三星P2450H"; }}public class DeluxeDisplay implements Display {public String toString(){ return"戴尔UltraSharp 2408WFP"; }}(9)抽象产品计算机类Computer.java:public abstract class Computer{String name;Cpu cpu;Ram ram;Mainboard mainboard;Harddisk harddisk;Display display;public abstract void prepare();public void setName(String name){ =name; }public String getName(){ return name; }public String getCpu(){ return cpu.toString(); }public String getRam(){ return ram.toString(); }public String getMainboard(){ return mainboard.toString(); }public String getHarddisk(){ return harddisk.toString(); }public String getDisplay(){ return display.toString(); }}(10)抽象产品计算机类的子类PrepareComputer.java:public class PrepareComputer extends Computer{ComputerConfigurationFactory ConfigurationFactory;public PrepareComputer(ComputerConfigurationFactoryConfigurationFactory) {this.ConfigurationFactory = ConfigurationFactory;}public void prepare(){cpu = ConfigurationFactory.createCpu();ram = ConfigurationFactory.createRam();mainboard = ConfigurationFactory.createMainboard();harddisk = ConfigurationFactory.createHarddisk();display = ConfigurationFactory.createDisplay();}}(11)抽象计算机店类ComputerStore.java:public abstract class ComputerStore{protected abstract Computer createrComputer(String item);public Computer orderComputer(String type){Computer computer = createrComputer(type);;computer.prepare();return computer;}}(12)抽象计算机店类的子类DIYComputerStore.java:public class DIYComputerStore extends ComputerStore{protected Computer createrComputer(String item){Computer computer = null;ComputerConfigurationFactory studentConfigurationFactory =new StudentComputerConfigurationFactory();ComputerConfigurationFactory homeConfigurationFactory =new HomeComputerConfigurationFactory();ComputerConfigurationFactory deluxeConfigurationFactory =new DeluxeComputerConfigurationFactory();if(item.equals("学生版")){computer = newPrepareComputer(studentConfigurationFactory);computer.setName("学生版");}else if(item.equals("家庭装")){computer = new PrepareComputer(homeConfigurationFactory);computer.setName("家庭装");}else if(item.equals("豪华版")){computer = newPrepareComputer(deluxeConfigurationFactory);computer.setName("豪华版");}return computer;}}(13)实现用户界面的主类DIYStore.java:(由于代码过长,只列出主要部分)public class DIYStore extends javax.swing.JFrame {public DIYStore() {super("XXXXX");initComponents();}private void initComponents(){ jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("种类"));buttonGroup1.add(jRadioButton1);jRadioButton1.setText("学生版");buttonGroup1.add(jRadioButton2);jRadioButton2.setText("家庭装");buttonGroup1.add(jRadioButton3);jRadioButton3.setText("豪华版");jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder("配置"));jLabel1.setText("CPU:");jLabel2.setText("内存:");jLabel3.setText("主板:");jLabel4.setText("硬盘:");jLabel5.setText("显示器:");jTextField1.setText("");jTextField2.setText("");jTextField3.setText("");jTextField4.setText(""); jTextField5.setText("");jButton1.setText("退出");jButton2.setText("清空");jButton3.setText("确定");}private void jButton1ActionPerformed(java.awt.event.ActionEvent evt){ System.exit(0);}private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { buttonGroup1.clearSelection();jTextField1.setText("");jTextField2.setText("");jTextField3.setText("");jTextField4.setText("");jTextField5.setText("");}private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {String[] configuration = getConfiguration();jTextField1.setText(configuration[0]);jTextField2.setText(configuration[1]);jTextField3.setText(configuration[2]);jTextField4.setText(configuration[3]);jTextField5.setText(configuration[4]);}public String[] getConfiguration(){ComputerStore DIYstore = new DIYComputerStore();Computer computer = null;String[] configuration = new String[5];if(jRadioButton1.isSelected())computer = DIYstore.orderComputer("学生版");else if(jRadioButton2.isSelected())computer = DIYstore.orderComputer("家庭装");else if(jRadioButton3.isSelected())computer = DIYstore.orderComputer("豪华版");configuration[0] = computer.getCpu();configuration[1] = computer.getRam();configuration[2] = computer.getMainboard();configuration[3] = computer.getHarddisk();configuration[4] = computer.getDisplay();return configuration;}public static void main(String args[]) {java.awt.EventQueue.invokeLater(new Runnable() { public void run() {new DIYStore().setVisible(true);}});}}。

实验4 顺序结构程序设计

实验4  顺序结构程序设计

河北工业大学城市学院《汇编语言程序设计》实验报告实验4 顺序结构程序设计一、实验目的1.掌握汇编语言集成开发环境下编写完整汇编程序的书写方法。

2.掌握汇编语言集成开发环境下汇编程序的汇编、连接、执行和调试。

3.常用伪指令的使用。

4. 掌握顺序结构程序的编写方法。

二、实验内容1.从键盘输入一个大写字母,将其转换为小写字母并显示在屏幕上解:程序代码为:DATAS SEGMENTDATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS START:MOV AX,DATASMOV DS,AXMOV AH,1;功能号为1,键盘输入单字符并回显INT 21HADD AL,32MOV DL,ALMOV AH,2;功能号为2,显示输出单字符INT 21HMOV AH,4CHINT 21HCODES ENDSEND START运行结果如图所示:2.在内存X和Y单元各存放了一个非压缩BCD码,将它们组合为压缩BCD码并存于Z单元(高地址做高位)。

解:程序代码为:DATAS SEGMENTX DB 00000101BY DB 00000110BZ DB?DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS START:MOV AX,DATASMOV DS,AXMOV CL,4SHL X,CLMOV CL,YOR CL,XMOV Z,ALMOV AH,4CHINT 21H CODES ENDSEND START运行结果如图所示:3.在内存TAB开始的16个单元连续存放了0-15的平方值(0-225),任给一个数X(0 ≤X ≤15),求X的平方值,并把结果存放在Y单元中。

解:程序代码为:DATAS SEGMENTTAB DB 0,1,4,9,16,25,36DB 49,64,81,100,121DB 144,169,196,225X DB 6Y DB? DATAS ENDS CODESSEGMENTASSUME CS:CODES,DS:DATAS START:MOV AX,DATASMOV DS,AXLEA BX,TABMOV AL,XMOV AH,0ADD BX,AXMOV AL,[BX]MOV Y,ALMOV AH,4CHINT 21H CODES ENDSEND START。

20192419实验四《Python程序设计》实验报告

20192419实验四《Python程序设计》实验报告

20192419实验四《Python程序设计》实验报告20192419 2019-2020-2 《Python程序设计》实验4课程:《Python程序设计》班级:1924姓名:万腾阳学号:20192419实验教师:王志强实验⽇期:2020年6⽉3⽇必修/选修:公选课1. Python综合应⽤:运⽤pygame尝试编写flappy bird代码2. ⼀开始,我打算照着课本将飞机⼤战的代码稍作更改,差不多就相当于flappy bird代码。

但是经过⼀段时间编写后,我发现课本上的代码⼀环扣⼀环,稍作更改⼀处,就会导致出现错误,甚⾄有时候不报错,但是整个程序连图⽚的不产⽣,⼗分令⼈⼼烦。

后⾯,我上⽹查找了视频,参照视频我编出了flappy bird,视频中也存在⼀些⼩错误,这在稍后再讲。

代码:import pygameimport sysimport timeclass Bird(object):#定义⼩鸟def __init__(self):#定义初始化⽅法self.birdRect = pygame.Rect(65,50,50,50)self.birdStatus = [pygame.image.load(r'picture/1.png'),pygame.image.load(r'picture/2.png'),pygame.image.load(r'picture/dead.png')]self.status = 0self.birdx = 120self.birdy = 350self.jump = Falseself.jumpSpeed = 10self.gravity = 5self.dead = Falsedef birdUpdate(self):#定义移动⽅法if self.jump:self.jumpSpeed -= 1self.birdy -= self.jumpSpeedelse:self.gravity += 0.2self.birdy += self.gravityself.birdRect[1] = self.birdyclass Pipeline(object):#定义管道类def __init__(self):self.wallx = 400self.pineUp = pygame.image.load(r'picture/top.png')self.pineDown = pygame.image.load(r'picture/bottom.png')def updatePipeline(self):#定义移动⽅法self.wallx -= 5if self.wallx < -80 :global scorescore +=1self.wallx = 400def createMap():screen.blit(background,(0,0))#显⽰管道screen.blit(Pipeline.pineUp,(Pipeline.wallx,-300))screen.blit(Pipeline.pineDown,(Pipeline.wallx, 500))Pipeline.updatePipeline()#显⽰⼩鸟if Bird.dead:Bird.status = 2elif Bird.jump:Bird.status = 1screen.blit(Bird.birdStatus[Bird.status] , (Bird.birdx,Bird.birdy))Bird.birdUpdate() #更新⼩鸟状态font.render('Score'+str(score),-1,(255,255,255))screen.blit(font.render('Score'+str(score),-1,(255,255,255)),(100,50))pygame.display.update()def checkDead():upRect = pygame.Rect(Pipeline.wallx,-300,Pipeline.pineUp.get_width(),Pipeline.pineUp.get_height())downRect = pygame.Rect(Pipeline.wallx, 500, Pipeline.pineDown.get_width(), Pipeline.pineDown.get_height())#检测矩形碰撞if upRect.colliderect(Bird.birdRect) or downRect.colliderect(Bird.birdRect):Bird.dead = True#边界检测else:if 0 < Bird.birdRect[1] < height:Bird.dead = Falsereturn Trueelse:return Falsedef getResult():#获取总分final_text1 = "Game Over"final_text2 = "Your Score:" + str(score)ft1_font = pygame.font.SysFont("Arial",70)ft1_surf = font.render(final_text1,1,(242,3,36))ft2_font = pygame.font.SysFont("Arial", 50)ft2_surf = font.render(final_text2, 1, (253, 177, 6))screenwidth = int (screen.get_width() / 2)surf1 = int(ft1_surf.get_width()/2)surf2 = int(ft2_surf.get_width() / 2)screen.blit(ft1_surf,[screenwidth- surf1,100])screen.blit(ft2_surf, [screenwidth- surf2, 200])pygame.display.update()if __name__ == '__main__':pygame.init()pygame.font.init()#初始化字体类font = pygame.font.SysFont(None,50)size = width,height = 400,650screen = pygame.display.set_mode(size) #设置窗⼝clock = pygame.time.Clock() #设置时钟color = (255,255,255)Bird = Bird()#实例⼩鸟类Pipeline = Pipeline()score = 0while True:clock.tick(60)#每秒执⾏60次#轮询事件监测for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit()if event.type == pygame.KEYDOWN or pygame.MOUSEBUTTONDOWN and not Bird.dead:Bird.jump = TrueBird.gravity = 5Bird.jumpSpeed = 10# screen.fill(color)background = pygame.image.load(r'picture/background.png')if checkDead():passelse:createMap()getResult()time.sleep(2)createMap() #⽣成地图pygame.quit()```以上是本次实验的代码,⼀开始需要通过代码显⽰窗⼝,并设置其背景及宽度和长度,然后循环绘制屏幕,更新屏幕。

实验四 链表

实验四 链表

实验二链表的基本操作一、实验目的掌握链表的基本概念、结构的定义,通过设计程序掌握链表上的基本操作:建立、插入、删除、查找以及链表合并等,并理解线性表的两种存储结构:顺序表和链表的区别。

二、实验准备1. 复习C语言中指针的用法,特别是结构体的指针的用法。

2. 了解链表(含带头结点的链表、循环链表)的概念,链表的结构定义方法。

单链表是线性表的链式存储表示,是用一组任意的存储单元依次存储线性表的数据元素。

因此,为了表示每个数据元素a i与其直接后继元素a i+1之间的逻辑关系,对数据元素a i来说,除了存储其本身的信息之外,还需存储一个指示其直接后继的信息(即直接后继的存储位置),而这部分就是用指针来完成的。

3. 掌握线性表在链式存储结构上实现基本操作:建立、查找、插入、删除等算法。

在实现这些算法的时候,要注意判断输入数据的合法性,除此之外还要要注意以下内容:✧在实现查找的时候,首先要判断该顺序表是否为空,其次要判断查找后的结果(查到时输出查到的数据,未查到时给出相关提示)。

✧在实现插入的时候,由于是链式存储,它可以随机产生和回收存储空间,所以它不要判断线性表是否为满,但仍需判断要插入的位置是否合法,原因同实验一,其次要注意插入的时候语句的顺序不可颠倒,否则出错。

例如:ps所指向结点要插入在p所指向的结点之后,则:正确形式:s->next=p->next; p->next=s;错误形式:p->next=s;s->next=p->next(因为此时p->next已经指向s了)在实现删除的时候,首先要判断线性表是否为空,为空则不能删除;其次在删除后要回收空间。

例如:删除如上图所示s所指向的结点p->next=p->next->next;free(s);4. 链表部分相关操作代码:⑴单链表的结构定义:#include <stdio.h>typedef int elemtype;typedef struct lnode{ elemtype data;struct lnode *next;}*linklist;⑵建立单链表的算法int n; /*n作为整个程序的全局变量*/linklist *creat(void){ linklist *head, *p1, *p2;n=0;p1=p2=(linklist *)malloc(sizeof(linklist));scanf(“%d”,&p1->data);head=null;while(p1->data!=0){ n=n+1;if(n==1) head=p1;else p2->next=p1;p2=p1;p1=(linklist *)malloc(sizeof(linklist));scanf(“%d”,&p1->data);}p2->next=null;return(head);}⑶单链表的插入算法int insert(linklist *head, int i,elemtype e) { linklist *p, *s;int j;p=head; j=0;while(p && j<i-1){ p=p->next;++j;}if(!p||j>i-1){ printf(“无法插入”);return 0;}s=(linklist *)malloc(sizeof(lnode));s->data=e;s->next=p->next;p->next=s;return 1;}⑷单链表的删除算法int deltree(linklist *head,int i,elemtype e){ linklist *p, *q;int j;lp=head; j=0;while(p->next && j<i-1){ p=p->next;++j;}if(!(p->next)||j>i-1){ printf(“无法删除”);return 0;}q=p->next;p->next=q->next;e=q->data;free(q);return 1;}三、实验内容1. /*函数link()的功能是将带头结点的单链表l2链接到l1的后面,程序中存在几处错误,请改正并调试运行*/#include "linklist.h"void link(linklist l1,linklist l2){linklist p,q;p=l1;while (p->next)p=q->next;q=l2;p->next=q;free(l2);}void main(){ linklist l1,l2;l1=creat2(); /*生成带头结点的单链表l1*/print(l1); /*输出单链表l1*/l2=creat2(); /*生成带头结点的单链表l2*/print(l2); /*输出单链表l2*/link(l1,l2); /*将单链表l2链接到l1的后面*/print(l1); /*输出单链表l1*/}2./* 编写一个函数perm,将带头结点单链表中的所有值为奇数的结点集中到链表的左边,值为偶数的结点集中到链表的右边*/#include "linklist.h"linklist perm(linklist head){linklist pre,p;pre=head;p=head->next;while (p && p->data%2==1){ pre= p ;p= p->next ;}while (p){ if (p->data%2==1){ pre->next=p->next;p->next=head->next;head->next=p;p=pre->next;}else{ pre=p;p=p->next;}}}/*主函数,请勿改动,请将perm中的函数补充完整*/int main(){ linklist head;head=creat2(); /*尾插法建立单链表*/print(head); /*输出单链表head*/perm(head);print(head);delList(head);return 0;}3.设计程序:/*建立一个带头结点的单链表,然后将该链表进行倒置。

实验四 恶意代码实验之欧阳引擎创编

实验四 恶意代码实验之欧阳引擎创编

实验四恶意代码攻防实验欧阳引擎(2021.01.01)【实验目的】通过本实验初步了解远程控制软件的编写方法,了解黑客利用流行的木马软件进行远程监控和攻击的方法,掌握常见工具的基本应用,包括如下几个方面:✓掌握基于Socket的网络编程。

✓了解缓冲区溢出攻击的基本实现方法。

✓了解恶意脚本攻击的基本实现方法。

✓了解网络病毒的基本特性。

实验过程中,学生需要将实验的结果记录下来,并回答相关思考题,填写到实验报告中。

【实验类型】综合型实验【实验内容】以下实验内容可根据实验室的具体情况和课时安排的变化进行适当的调整,实验内容中的思考题以书面形式解答并附在实验报告的后面。

需要注意的是,学生在实验过程中要严格按实验指导书的操作步骤和要求操作,且小组成员应紧密配合,以保证实验过程能够顺利完成。

本次实验的主要项目包括以下几个方面:☑溢出攻击模拟程序的编写、调试;☑跨站恶意脚本的运用;☑网页脚本攻击。

具体的实验内容和步骤如下:【实验环境】实验设备:Windows XP系统,VMWare系统,Windows 2000/XP虚拟机。

一、缓冲区溢出攻击编写简单的溢出攻击程序,编译后分别在实验主机和虚拟机中运行。

1.简单原理示例VC环境下编译以下代码:#include <stdio.h>#include <string.h>char name[]="abcdefghijklmnopqrstuvwxyz";int main() {char buffer[8];strcpy(buffer,name);return 0;}运行编译后的程序,会出现系统下图警告,点击“调试”按钮,根据返回的偏移值可推断出溢出的部位。

2.溢出攻击模拟示例实验需要使用以下工具:●OllyDB●Uedit首先写一个C++程序2.c,源码:#include "iostream.h"int main ( ){char name[8];cout<<"Please type your name: ";cin>>name;cout<<"Hello, ";cout<< name;cout<<"\n";return 0;}赋值一个名为name的字符类型数组(字符串),其内容空间为8个字节,运行程序时首先提示使用者输入你的名字,当输入后将该值吸入给name,然后以“Hello,你的名字\n”的方式输出。

实验4分支结构程序设计

实验4分支结构程序设计

实验4分支结构程序设计分支结构是程序设计中常用的一种控制结构,通过判断条件的真假来选择不同的执行路径。

在实验4中,我们将学习如何使用分支结构来设计程序。

一、分支结构的基本语法在分支结构中,根据条件的真假执行不同的代码,主要有以下几种语法结构:1. if语句: if语句是最基本的分支结构,用于根据条件执行不同的代码块。

语法如下:if (条件)//条件为真时执行的代码} else//条件为假时执行的代码其中,条件是一个表达式,如果表达式的值为真,则执行if语句块中的代码;否则执行else语句块中的代码。

2. if-else if-else语句:用于根据多个条件选择执行不同的代码。

语法如下:if (条件1)//条件1为真时执行的代码} else if (条件2)//条件1为假,条件2为真时执行的代码} else//条件1和条件2都为假时执行的代码在这种结构中,多个条件会按照顺序依次被检查,一旦一些条件为真,相应的代码块即被执行,后续的条件判断将被略过。

3. switch语句:用于根据不同的表达式值选择执行不同的代码块。

语法如下:switch (表达式)case 值1://表达式的值与值1相等时执行的代码break;case 值2://表达式的值与值2相等时执行的代码break;...default://表达式的值与之前的值都不相等时执行的代码break;在switch语句中,表达式的值将与每个case后的值进行比较,如果相等,相应的代码块将被执行,使用break语句可以使程序跳出switch 语句。

二、分支结构的应用在实验4中,我们可以结合具体问题来设计分支结构程序。

以下是一个示例:问题:根据学生的成绩判断其等级并输出。

解决方法:1.输入学生的成绩。

2. 使用if-else if-else语句判断成绩所属的等级,并输出。

具体实现如下:#include <iostream>int mai//输入学生的成绩int score;std::cout << "请输入学生的成绩:";std::cin >> score;//判断成绩所属等级并输出if (score >= 90)std::cout << "成绩等级为A" << std::endl;} else if (score >= 80)std::cout << "成绩等级为B" << std::endl;} else if (score >= 70)std::cout << "成绩等级为C" << std::endl;} else if (score >= 60)std::cout << "成绩等级为D" << std::endl;} elsestd::cout << "成绩等级为E" << std::endl;}return 0;在上述代码中,我们通过if-else if-else语句根据学生的成绩判断其等级,并输出相应的结果。

实验四 Java语言面向对象基础编程

实验四   Java语言面向对象基础编程

实验四 Java语言面向对象基础编程一、实验目的1.理解Java语言是如何体现面向对象编程基本思想,2.了解类的封装方法,以及如何创建类和对象,3.了解成员变量和成员方法的特性。

二、实验内容1.类的定义、封装和对象创建的使用。

编写一个Java应用程序,该程序中有3个类:Trangle、Leder和Circle,分别用来刻画“三角形”、“梯形”和“圆形”。

具体要求如下:(1)Trangle类具有类型为double的三个边,以及周长、面积属性,Trangle类具有返回周长、面积以及修改三个边的功能。

另外,Trangle类还具有一个boolean 型的属性,该属性用来判断三个属能否构成一个三角形。

(2)Lader类具有类型double的上底、下底、高、面积属性,具有求面积的功能。

(3)Circle类具有类型为double的半径、周长和面积属性,具有求周长、面积的功能。

package exercise;class Trangle{double sideA,sideB,sideC,area,length;boolean boo;//带三个参数的构造函数public Trangle(double a,double b,double c) {sideA=a;//参数a,b,c 分别赋值给sideA,sideB,sideCsideB=b;sideC=c;if(sideA+sideB>sideC&&sideA+sideC>sideB&&sideB+sideC>sideA){//a,b,c 构成三角形的条件表达式boo=true;//给boo 赋值。

}else{boo=false;//给boo 赋值。

}}double getLength(){return sideA+sideB+sideC;//方法体,要求计算出length 的值并返回}//计算三角形的面积publicdouble getArea(){if(boo){double p=(sideA+sideB+sideC)/2.0;area=Math.sqrt(p*(p-sideA)*(p-sideB)*(p-sideC));return area;}else{System.out.println("不是一个三角形,不能计算面积");return 0;}}publicvoid setABC(double a,double b,double c){sideA=a;//参数a,b,c 分别赋值给sideA,sideB,sideCsideB=b;sideC=c;if(sideA+sideB>sideC&&sideA+sideC>sideB&&sideB+sideC>sideA){//a,b ,c 构成三角形的条件表达式boo=true;//给boo 赋值。

微机原理实验四串操作指令

微机原理实验四串操作指令

实验四串操作指令程序实验一、实验目的1. 熟悉五种串操作指令的功能,会编写常用的串操作应用程序。

2. 会使用DEBUG 命令查看串操作运行的结果。

二、实验环境1. 硬件:PC 微机2. 软件:Masm for Windows 汇编集成开发环境三、实验讲义串指连续存放在存储器中的一些数据字节、字或者双字。

串操作允许对程序连续存放的数据块进行操作。

这是唯一一种可以从存储器到存储器的指令。

源串一般存放在数据段,偏移地址由SI 指定;目标串必须在附加段,偏移地址由DI 指定。

在每次进行串操作后,SI 和DI 两个指针会自动修改。

修改的是增量方向还是减量方向由标志位DF 决定,DF=0 为增量操作,DF=1 为减量操作。

CX 中存放的是数据块的长度,可在CX 前加重复前缀标志,对串进行连续操作。

执行串指令之前,一般先进行如下操作:源串首地址(末地址)→ SI目的串首地址(末地址)→ DI串长度→ CX建立方向标志DF1. 重复前缀标志助记符判断条件说明REP CX 0 CX=CX-1,若CX 0 则重复REPE 或REPZ CX 0 且ZF=1 CX=CX-1,若CX 0 且ZF=1 则重复REPNE 或REPNZ CX=0 且ZF=0 EX=CX-1,若CX 0 且ZF=0 则重复2. 方向标志指令方向标志由标志位DF 决定,有CLD 和STD 两种指令。

CLD 将DF 置0,地址为增量操作。

STD 将DF 置1,地址为减量操作。

3. 串传送指令格式: [REP] MOVS DESTS, SRCS[REP] MOVSB/ MOVSW / MOVSD功能:将DS:SI 中的源串数据传送到ES:DI 规定的目的串单元中。

加重复前缀REP 可实现连续存放的数据块的传送。

例1:将源串中前三个字节的数据传送到目的串。

源串在数据段(DATAS)中,存放在SRC 单元中;目的串在附加数据段(EDATAS)中,存放在DEST 单元中。

操作系统原理实验4-进程控制

操作系统原理实验4-进程控制

《操作系统原理》实验报告
实验序号:4 实验项目名称:进程控制
一、实验目的及要求
1. 加深对进程信号量的理解。

2. 理解进程同步与互斥机制。

3. 掌握Linux操作系统下的进程控制编程。

二、实验设备(环境)及要求
1.虚拟机VMware Workstation、Ubuntu操作系统和C语言编程。

2.编写一段程序,使用系统调用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上来的中断信号(即按Ctrl C键),当捕捉到中断信号后,父进程调用kill()向两个子进程发出信号,子进程捕捉到信号后,分别输出下面信息后终止:
child process 1 is killed by parent!
child process 2 is killed by parent!
父进程等待两个子进程终止后,输出以下信息后终止:
parent process is killed!
三、实验内容与步骤
代码:
在终端上进行测试
四、实验结果与数据处理
五、分析与讨论
了解了计算机进程的管理以及signal()函数的作用。

六、教师评语成绩。

汇编语言_实验四_[bx]和loop的使用

汇编语言_实验四_[bx]和loop的使用
mov cx,0040h
s:mov [bx],bl add bx,1 loop s
mov ax,4c00h int 21h code ends end
(2)对源程序t2.asm进行汇编连接,并用debug进行调试,并用g命令查看0:200~0:23F,确认改程序的确将将0~63传送到了此段内存区 域:
3. 实验内容3 (1) 源代码: assume code code segment
mov ax,cs mov ds,ax mov ax,0020h mov es,ax mov bx,0 mov cx,cx s:mov al,[bx] mov es:[bx],al inc bx loop s mov ax,4c00h int 21h code ends
alexanderyang理论上感觉这样似乎好像就可以解决问题了但实际上结合现实生活中实际应用场景仍需稍作处理
四、实验结论
汇编语言 _实验四 _[bx]和 loop的使用
1. 实验内容1 (1)源代码: assume cs:code code segment
mov ax,0b800h mov ds,ax mov bx,07b8h
(2) 对源程序进行调试:
检查后发现确实将 mov ax,4c00h前的指令复制到了内存。 五、总结与体会 喵喵喵喵喵
mov cx,16 s: mov [bx],0403h
add bx,2 loop s
mov ah,4ch int 21h code ends end
(2)修改后运行结果:
2. 实验内容2 (1)源代码: assume cs:code code segment
mov ax,0 mov ds,ax mov bx,0200h

汇编语言(王爽第三版)实验4[bx]和loop的使用

汇编语言(王爽第三版)实验4[bx]和loop的使用

汇编语⾔(王爽第三版)实验4[bx]和loop的使⽤实验4 [bx]和loop的使⽤1.编程:向内存0:200H~0:23fH依次传送数据0~63(3FH)程序分析:【1】内存0:200H~0:23fH空间与0020:0-0020:3f内存空间是⼀样的,(这个不会?oh!My God!,物理地址是唯⼀的,但逻辑地址组合是多种的。

)【2】因为偏移地址是连续内存单元;我们可以把偏移地址做下⽂章。

bx寄存器存储偏移地址(通过偏移地址的间接访问内存单元,这主要是写⼊的内存单元)。

dx寄存器作为存储中间变量的容器(源数据,常量0-63)来向内存写⼊。

汇编代码如下:assume cs:codecode segmentmov ax,0020Hmov ds,ax ;内存单元的段地址写⼊ds寄存器mov bx,0 ;bx寄存器存放偏移地址,初始化为0mov dx,0 ;dx寄存器存储常量数值0~63mov cx,40H ;这⾥40H==64,cx寄存器存放循环次数。

也可以为64;s: mov [bx],dx ;向[bx]内存单元写⼊dx值inc bx ;累加bxinc dx ;累加dxloop smov ax,4c00Hint 21Hcode endsend2. 向内存0:200H~0:23fH依次传送数据0~63(3FH),9条命令的程序的简化版本(不包括伪代码):程序分析:【1】内存0:200H~0:23fH空间与0020:0-0020:3f内存空间是⼀样的,(这个不会?oh!My God!,物理地址是唯⼀的,但逻辑地址组合是多种的。

)为什么这样?数据0-63是64个连续的数字,0-3fH也是连续的64个编号。

我们可以使⽤⼀个bx变量就把偏移地址和数字的递增都搞定了!修改后的汇编代码如下:assume cs:codecode segmentmov ax,0020Hmov ds,ax ;ds指向0020内存段mov bx,0 ;bx寄存器存放偏移地址,初始化为0,也当做源数据:常量数值mov cx,64 ;循环次数64s: mov [bx],bx ; 向[bx]内存单元写⼊bx数值inc bxloop smov ax,4c00Hint 21Hcode endsend实验体会:1. bx寄存器⼀般⽤作偏移地址的存储,[bx]也就代表了段地址与[bx]组合后指向的内存单元。

Java语言实验4 子类与继承

Java语言实验4   子类与继承
System.out.println("a of son is :" +son.a);
System.out.println("a of son's super is :" +son.getA());
son.miner();
System.out.println("a of son is :"+son.a);
System.out.println(“加toString()输出:”+d.toString());
}
}
(2)编译运行程序,观察结果。
(3)实验报告
运行结果:
思考:为什么两次输出都是同样结果。
Demo有父类吗?
答:因为没有指定父类,就默认继承Object类,即默认调用对象的toString()方法。所以两次输出同样的结果。
B(int a,int b)
{
i=a;
k=b;
}
int multiply()/**重写了父类的multiply()方法*/
{
return i*j*k;
}
}
步骤三:创建并运行应用程序。
public class LX
{
public static void main(SFra bibliotekring a[])
{
B subO=new B(6,9);
System.out.println(“姓名:”+stu.getName()+”,年龄:”+stu.getAge()
+”,学校:”+stu.getSchool());
}
}
(2)实验报告
运行结果:

数据结构实验与实训教程第4版程序代码

数据结构实验与实训教程第4版程序代码

目录第一部分预备知识 (1)预备知识 (1)预备知识实验 (2)第二部分基础实验 (4)实验1 线性表的基本操作 (4)实验2 链表的基本操作 (9)实验3 栈的基本操作 (15)实验4 队列的基本操作 (22)实验5 数组的基本操作 (32)实验6 字符串的基本操作 (36)实验7 二叉树的基本操作 (41)实验8 树的遍历和哈夫曼树 (46)实验9 图的基本操作 (53)实验10 排序 (59)实验11 查找 (64)第三部分课程设计实验 (69)实验1 航空客运订票系统 (69)实验2 汉诺塔游戏程序 (75)实验3 全屏幕编辑程序设计 (79)实验4 旅游路线安排模拟系统 (90)实验6 最小生成树kruskal算法 (93)第一部分预备知识预备知识例1.1#include <stdio.h>int sumabc(int a, int b, int c) /* 求三个整数之和*/{ int s;a=b+c;s=a+b+c;return s;}void displayLine(void){ printf(”----------------------\n“);}void main( ){ int x,y, z ,sabc;x=y=z=8;display(); /* 画一条线*/printf(“\n sum=%d”,sumabc(x,y,z)); /* 在输出语句中直接调用函数sumabc( ) */ printf(“\n %6d%6d%6d”,x,y,z);display();/* 画一条线*/x=2; y=4; z=6;sabc =sumabc(x, y, z); /* 在赋值语句中调用函数sumabc( ) */printf(“\n “ sum=%d”, sabc);printf(“\n %6d%6d%6d”,x,y,z);display();/* 画一条线*/}例1.2int sumabc(int *a, int b, int c){int s;*a=b+c;s=*a+b+c;return s;}预备知识实验int main(){ //在main函数中调用上述声明的函数int n; //记录个数STUDENT stu[MAXSIZE;// 顺序存储结构,方法一静态一维数组。

实验4 SHELL脚本的编写(一)

实验4 SHELL脚本的编写(一)

广东技术师范学院实验报告学院:计科院专业:班级:成绩:姓名:学号:组别:组员:实验地点:实验日期:指导教师签名:实验4项目名称:SHELL脚本的编写(一)1、实验目的通过对典型的SHELL脚本进行验证,以及编写具有一定实用程度的SHELL 脚本,理解并掌握SHELL脚本的基本编写方法。

2、实验内容2.1什么是shell脚本要明白什么是shell脚本,首先要理解什么是脚本(script)。

脚本是指一种未经编译而直接解释执行的程序,最典型例子就是javascript程序。

我们知道,程序代码写好后,有两种方式让它执行。

一是通过编译器编译成二进制执行代码后提交给系统执行,而另一种则不经过编译,直接送给解释器解释执行。

shell脚本指的就是一种通过shell来解释并执行的程序。

UNIX中的shell,它既是一个界面程序,又是一个脚本的解释器,同时又能提供一种功能丰富的脚本语言供用户编写脚本程序。

用户只需要通过vi等编辑器将脚本编写好(脚本本身上还是一个文本),通过命令行的形式提交给shell,shell便会对其解释并执行了。

2.2 shell脚本与系统管理Shell脚本在系统管理上占有重要的位置。

原因在于系统管理的日常工作许多都是常规化的,例如日志管理、重要数据备份、账户管理、文件系统清理等工作,一次性地编写一个管理脚本程序,就能避免重复的管理工作。

当然,现在有许多管理工具供管理员使用,不是任何工作都需要编写一个shell脚本。

不过任何一个管理工具都不可能为特定某个应用业务度身定制,针对当前应用业务的需要编写shell脚本属于高级系统管理员应具备的能力。

此外,有一个问题值得讨论,利用其它高级语言也一样可以写管理程序,为什么要用shell脚本语言?这在于shell脚本最终提交给shell解释执行,因此可直接在程序中使用各种shell命令(c程序是不可能这样做的)。

这些shell命令从操作系统管理的角度来看,都涉及到系统资源申请、使用和释放,shell脚本只通过简单的命令即可实现,而高级语言却需要复杂的、大量的系统API函数调用。

20192114《Python程序设计》实验四报告

20192114《Python程序设计》实验四报告

20192114《Python程序设计》实验四报告20192108《Python程序设计》实验四报告课程:《Python程序设计》班级: 1921学号:20192114实验教师:王志强实验⽇期:2020年6⽉13⽇必修/选修:公选课1.实验内容Python综合应⽤:爬⾍、数据处理、可视化、机器学习、神经⽹络、游戏、⽹络安全等。

课代表和各⼩组负责⼈收集作业(源代码、视频、综合实践报告)(1)程序能运⾏,功能丰富。

(需求提交源代码,并建议录制程序运⾏的视频)10分(2)综合实践报告,要体现实验分析、设计、实现过程、结果等信息,格式规范,逻辑清晰,结构合理。

10分。

(3)在实践报告中,需要对全课进⾏总结,并写课程感想体会、意见和建议等。

5分2. 实验过程及结果前⼏天TapTap上2048极速版排⾏榜登顶,我决定⽤python编写⼀个2048⼩游戏实验过程1.先导⼊所需的库curses ⽤来在终端上显⽰图形界⾯random 模块⽤来⽣成随机数collections 提供了⼀个字典的⼦类 defaultdict。

可以指定 key 值不存在时,value 的默认值。

import randomimport cursesimport collections2.定义定义class Move1(object)class Background(object)3.设置上下左右与得分def getScore():def left(self):def right(self):def up(self):def down(self):4.在终端上显⽰图形界⾯ 并不会,寻求百度帮助实验结果完整代码如下"""作者:杜晨⽞⽂件名称:t04时间:2020.6.132048"""import turtleimport randomboundary = turtle.Screen()boundary.setup(430, 630, 500, 10) boundary.bgcolor('gray')boundary.title('2048')boundary.register_shape('2.gif') boundary.register_shape('4.gif') boundary.register_shape('8.gif') boundary.register_shape('16.gif') boundary.register_shape('32.gif') boundary.register_shape('64.gif') boundary.register_shape('128.gif') boundary.register_shape('256.gif') boundary.register_shape('512.gif') boundary.register_shape('1024.gif') boundary.register_shape('2048.gif') boundary.register_shape('4096.gif') boundary.register_shape('8192.gif') boundary.register_shape('bg.gif') boundary.register_shape('title.gif') boundary.register_shape('score.gif') boundary.register_shape('top_score.gif') boundary.tracer(0)class Move1(turtle.Turtle):def __init__(self):super().__init__()self.penup()def grow(self):num = random.choice([2, 2, 2, 2, 4]) self.shape(f'{num}.gif')a = random.choice(allpos)self.goto(a)allpos.remove(a)block_list.append(self)boundary.update()def go_down(self):self.go(-150, -50, 50, 0, -100, True) def go_up(self):self.go(-50, -150, -250, 0, 100, True) def go_left(self):self.go(-50, 50, 150, -100, 0, False) def go_right(self):self.go(50, -50, -150, 100, 0, False) def go(self, b1, b2, b3, px, py, c):global move_time, z_boolmove_time = 0block_1, block_2, block_3 = [], [], [] for i in block_list:if c is True:if i.ycor() == b1:block_1.append(i)elif i.ycor() == b2:block_2.append(i)elif i.ycor() == b3:block_3.append(i)else:if i.xcor() == b1:block_1.append(i)elif i.xcor() == b2:block_2.append(i)elif i.xcor() == b3:block_3.append(i)for j in block_1:j.move(j.xcor()+px, j.ycor()+py) for j in block_2:for k in range(2):j.move(j.xcor()+px, j.ycor()+py) for j in block_3:for k in range(3):j.move(j.xcor()+px, j.ycor()+py)if move_time != 0:block = Block()block.grow()bc_score.show_score(score)bc_top_score.show_top_score(top_score)for k in block_list:if k.shape() == '2048.gif' and z_bool:win_lose.show_text('达成2048,继续请按回车键')z_bool = Falseif judge() is False:win_lose.show_text('游戏结束,重新开始请按空格键')def move(self, gox, goy):global move_time, score, z, top_scoreif (gox, goy) in allpos:allpos.append(self.pos())self.goto(gox, goy)allpos.remove((gox, goy))move_time += 1else:for i in block_list:if i.pos() == (gox, goy) and i.shape() == self.shape():allpos.append(self.pos())self.goto(gox, goy)self.ht()block_list.remove(self)z = int(i.shape()[0:-4])i.shape(f'{z*2}.gif')move_time += 1score = score + zelse:continueif score > top_score:top_score = scoreclass Background(turtle.Turtle):def __init__(self):super().__init__()self.penup()def show_text(self):self.color('white', 'white')self.goto(-215, 120)self.begin_fill()self.pd()self.goto(215, 120)self.goto(215, 110)self.goto(-215, 110)self.end_fill()self.pu()self.shape('title.gif')self.goto(-125, 210)self.stamp()self.shape('score.gif')self.goto(125, 245)self.stamp()self.shape('top_score.gif')self.goto(125, 170)self.stamp()def show_back(self):for i in allpos:self.shape('bg.gif')self.goto(i)self.stamp()def show_score(self, score):self.color('white')self.goto(125, 210)self.clear()self.write(f'{score}', align='center', font=("Arial", 20, "bold"))def show_top_score(self, top_score):self.color('white')self.goto(125, 135)self.clear()self.write(f'{top_score}', align='center', font=("Arial", 20, "bold")) class WinLose(turtle.Turtle):def __init__(self):super().__init__()self.penup()self.ht()self.color('blue')def show_text(self, text):self.write(f'{text}', align='center', font=("⿊体", 20, "bold"))def judge():judge_a = 0if allpos == []:for i in block_list:for j in block_list:if i.shape() == j.shape() and i.distance(j) == 100:judge_a += 1if judge_a == 0:return Falseelse:return Trueelse:return Truedef init():global z, z_bool, score, block_list, allposz = 0z_bool = Truescore = 0allpos = [(-150, 50), (-50, 50), (50, 50), (150, 50),(-150, -50), (-50, -50), (50, -50), (150, -50),(-150, -150), (-50, -150), (50, -150), (150, -150),(-150, -250), (-50, -250), (50, -250), (150, -250)]for i in block_list:i.clear()i.ht()win_lose.clear()block_list = []block = Block()block.grow()z = 0z_bool = Truescore = 0top_score = 0block_list = []allpos = [(-150, 50), (-50, 50), (50, 50), (150, 50),(-150, -50), (-50, -50), (50, -50), (150, -50),(-150, -150), (-50, -150), (50, -150), (150, -150),(-150, -250), (-50, -250), (50, -250), (150, -250)]bc_title = Background()bc_score = Background()bc_top_score = Background()bc_title.show_text()bc_title.show_back()bc_score.ht()bc_top_score.ht()bc_score.show_score(score)bc_top_score.show_top_score(top_score)block = Block()block.grow()move_time = 0win_lose = WinLose()boundary.listen()boundary.onkey(block.go_right, 'Right')boundary.onkey(block.go_left, 'Left')boundary.onkey(block.go_up, 'Up')boundary.onkey(block.go_down, 'Down')boundary.onkey(win_lose.clear, 'Return')boundary.onkey(init, 'space')boundary.mainloop()码云链接如下运⾏结果如图3. 实验过程中遇到的问题和解决过程问题1:windows系统在安装curses库时,使⽤conda或者pip安装,总是失败问题1解决⽅案:百度问题2:运⾏显⽰Redirection is not supported.问题2解决⽅案:百度问题3:图形界⾯不会搞问题3解决⽅案:百度,从github找了⼏个参考其他(感悟、思考等)这学期同时学c和python,⼀开始有点混乱,但是后⾯就好起来了,c语⾔的⽂件操作和python的差不多,很有帮助⽹上有很多python的资源这对于学习python帮助很⼤,⽼师的讲解也⼗分到位、清晰参考资料⽤Python开发你的第⼀款游戏(开源项⽬合集)个⼈博客 。

大学大一c语言程序设计实验室上机题全部代码答案(实验报告)

大学大一c语言程序设计实验室上机题全部代码答案(实验报告)

C语言实验报告实验1-1:hello world程序:源代码:#include<stdio.h>main(){printf("hello world!\n");system("pause");}实验1-2:完成3个数据的输入、求和并输出计算结果的程序:源代码:#include<stdio.h>main(){int i,j,k,sum;scanf("%d%d%d",&i,&j,&k);sum=i+j+k;printf("sum=%d",sum);system("pause");实验1-3:在屏幕上输出如下图形:ABBBCCCCC源代码:#include<stdio.h>main(){printf(" A\n");printf(" BBB\n");printf(" CCCCC\n");system("pause");}实验2-1:计算由键盘输入的任何两个双精度数据的平均值源代码:#include<stdio.h>main(){double a,b;scanf("%lf%lf",&a,&b);printf("%.1lf\n",(a+b)/2);system("pause");}实验2-2:写一个输入7个数据的程序,把输入的数据代入a + b * (c – d ) / e * f – g 表达式进行运算源代码:#include<stdio.h>main(){float a,b,c,d,e,f,g,x;scanf("%f%f%f%f%f%f%f",&a,&b,&c,&d,&e,&f,&g);x=a + b * (c - d ) / e * f - g;printf("x=%f",x);system("pause");}实验2-3:编写一个C语言程序,测试下列各表达式:i, ji + 1 , j + 1i++ , j++++i , ++ji+++++j源代码:#include<stdio.h>main(){int i=1,j=1;printf("%d %d\n",i+1,j+1);printf("%d %d\n",i++,j++);printf("%d %d\n",++i,++j);printf("%d\n",(i++)+(++j));system("pause");}实验2-4:输入存款金额money,存期year和年利率rate,根据下列公式计算存款到期时的利息interest (税前),输出时保留2位小数。

数字图像处理实验报告

数字图像处理实验报告

目录实验一:数字图像的基本处理操作 (2)1。

1:实验目的 (2)1。

2:实验任务和要求 (2)1.3:实验步骤和结果 (2)1。

4:结果分析 (6)实验二:图像的灰度变换和直方图变换 (7)2.1:实验目的 (7)2.2:实验任务和要求 (7)2。

3:实验步骤和结果 (7)2。

4:结果分析 (11)实验三:图像的平滑处理 (12)3.1:实验目的 (12)3。

2:实验任务和要求 (12)3。

3:实验步骤和结果 (12)3。

4:结果分析 (16)实验四:图像的锐化处理 (17)4.1:实验目的 (17)4.2:实验任务和要求 (17)4。

3:实验步骤和结果 (17)4.4:结果分析 (19)实验一:数字图像的基本处理操作1.1:实验目的1、熟悉并掌握MATLAB、PHOTOSHOP等工具的使用;2、实现图像的读取、显示、代数运算和简单变换。

3、熟悉及掌握图像的傅里叶变换原理及性质,实现图像的傅里叶变换。

1。

2:实验任务和要求1.读入一幅RGB图像,变换为灰度图像和二值图像,并在同一个窗口内分成三个子窗口来分别显示RGB图像和灰度图像,注上文字标题。

2.对两幅不同图像执行加、减、乘、除操作,在同一个窗口内分成五个子窗口来分别显示,注上文字标题.3.对一幅图像进行平移,显示原始图像与处理后图像,分别对其进行傅里叶变换,显示变换后结果,分析原图的傅里叶谱与平移后傅里叶频谱的对应关系。

4.对一幅图像进行旋转,显示原始图像与处理后图像,分别对其进行傅里叶变换,显示变换后结果,分析原图的傅里叶谱与旋转后傅里叶频谱的对应关系。

1.3:实验步骤和结果1.对实验任务1的实现代码如下:a=imread(’d:\tp.jpg’);i=rgb2gray(a);I=im2bw(a,0。

5);subplot(1,3,1);imshow(a);title('原图像');subplot(1,3,2);imshow(i);title(’灰度图像’);subplot(1,3,3);imshow(I);title('二值图像’);subplot(1,3,1);imshow(a);title('原图像');结果如图1。

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

include <iostream> using namespace std; #include <stdio.h> #include <st dlib.h> #include <string.h>
int PRI(char op) //设定算符的优先级 {
switch (op) {
case '+': case '-': return 1; case '*': case '/': return 2;
数据结构四则运算表达式求值实验报告
default: return 0; } }
char *houxu(char *infix) // 求后序表达式 {
int length=strlen(infix); char *stack,*buf,*p,flag; char op; int i,top= 0;
if(!(stack=(char *)malloc(sizeof(char)*length))) //作为栈内存空间 { cout<<"内存分配失败!"<<endl; exit(0); }
if(!(buf=(char *)malloc(sizeof(char)*length))) //保存后序表达式字符
串 {
cout<<"内存分配失败!"<<endl; exit(0); }
p=buf;
for(i=0;i<length;i++) {
op=infix[i]; //获取表达式中一个字符 switch(op) //根据字符进行入栈操作 {
case '(': //为左括号
if(top<length) //若栈未满 {
top++; //修改栈顶指针
stack[top]=op; //保存运算符到栈 }
flag=0; break; case '+': case '-': case '*': case '/':
while(PRI(stack[top])>=PRI(op)) //判断栈顶运算符与当前运算符的级别 {
*p++=stack[top]; //将栈中的运算符保存到字符串 top--; //修改栈顶指针 flag=0;
数据结构四则运算表达式求值实验报告
}
if(top<length) //栈未满 {
top++; //修改栈顶指针
stack[top]=op; //保存运算符到栈 if(flag==1)
*p++=' '; //添加一个逗号分隔数字 flag=0; }
break;
case ')': //右括号
while(stack[top]!= '(') //在栈中一直找到左括号 {
*p++=stack[top]; //将栈顶的运算符保存到字符串 top--; //修改栈顶指针 }
flag=0;
top--; //再将修改栈顶指针,将左括号出栈 break;
default: //其他字符(数字、字母等非运算符) *p++=op; flag=1; break; } }
while (top>0) //若栈不为空 {
*p++=stack[top]; //将栈中的运算符出栈 top--; //修改栈顶指针 } free(stack);//释放栈占用的内存 *p='\0';
return (buf); //返回字符串 }
//表达式求值如下:
double calc(double d1, char op, double d2) //计算函数 {
switch (op) //根据运算符进行操作 {
case '+':
return d1 + d2; case '-':
数据结构四则运算表达式求值实验报告
return d1 - d2; case '*':
return d1 * d2; case '/':
return d1 / d2; }
return 0; }
double qiuzhi(char *postfix) //计算表达式的值 {
double *stack,num,k=1.0; //k为系数
int i,length,top=0,dec=0,flag;//dec为0表示整数,为1表示小数,flag=1表示有数据需入栈 char token;
length=strlen(postfix);
if(!(stack=(double *)malloc(sizeof(double)*length))) {
cout<<"内存分配失败!"<<endl; exit(0); }
num=0;
for(i=0;i<length;i++) {
token=postfix[i]; //取出一个字符 switch(token) {
case '+': //若是运算符 case '-': case '*': case '/':
if(top<length && flag==1) //若栈未满 {
top++; //修改栈顶指针
stack[top]=(double)num; //将数字保存到栈中 num=0;
}
stack[top-1]=calc(stack[top-1], token, stack[top]);//取出栈栈前两个元素进行运算,结果保存到栈中
top--; //修改栈顶指针 dec=0;//先设为整数
flag=0;//下一步操作不将数入栈 break;
default: //不为运算符
数据结构四则运算表达式求值实验报告
if(token==' ') //若为空格 {
if(top<length) //若栈未满 {
top++; //修改栈顶指针
stack[top]=(double)num; //将数字保存到栈中 num=0; dec=0;
break; } }
else if(token=='.') {
k=1.0; dec=1; break; }
if(dec==1) //小数部分 {
k=k*0.1;
num=num+(token-'0')*k; } else {
num=num*10+token-'0'; }
flag=1;//有数需要入库 break; } }
return stack[top]; //返回栈顶的结果 }
int main() {
char zhongxu[80]; cout<<"输入表达式:"; cin>>zhongxu;
cout<<"后序表达式:"<<houxu(zhongxu)<<endl;
cout<<"后序表达式求
值:"<<qiuzhi(houxu(zhongxu))<<endl; getchar(); return 0;}。

相关文档
最新文档