文档库 最新最全的文档下载
当前位置:文档库 › 用S7-200编写一段程序及程序解析

用S7-200编写一段程序及程序解析

用S7-200编写一段程序及程序解析
用S7-200编写一段程序及程序解析

编程技巧展示:为一求助帖用S7-200编写一段程序及程序解析

求助帖:四个阀门的开关由四个接近开关信号控制,要求是1、同一时刻只能一个阀门开;2、当有两个以上到位信号出现时按优先顺序打开阀门;3、每个阀门只要开通就有一定的工作时间,时间未到不开通其他阀门;4、当有两个以上到位信号在等待上一阀门工作完毕的情况下要求按“先到先开”原则对阀门排序工作。采用的是西门子的S7-200的PLC进行控制。胶状物体通过管路输送,末端分别由四个气动阀控制胶体进入四台双缸装药机,当其中一个缸正对阀门出口时,触发近位开关表示到位

这一求助帖有一定难度,为此花费一定时间,编出如下程序,供大家分析。除此法编程外,还可用填表与FIFO指令,按此编程思路编程,有兴趣的网友可以试试。

一、梯形图:

注:(本程序经上机运行,动作正确,网络17为实验程序而编写的程序,其4个定时器的延时时间皆设定=2秒)

二、程序解析:

1、4个电磁阀对应PLC的输出口为Q0.0、Q0.1、Q0.

2、Q0.3,工作时间分别由定时器T101~T104控制,这4个定时器的定时时间可由触摸屏或上位机设置改变。其4个定时器的时间设置区为:VW10、VW12、VW14、VW16。控制电磁阀打开的到位接近开关的输入地址为I0.0、I0,1、I0.2、I0.3。

2、按题意要求规定:

(1)、如同时有2个以上接近开关同时到位闭合时,只容许一个电磁阀打开,对应定时器延时时间到,该阀门关闭,而另一阀门打开……阀门打开的先后次序是Q0.0优先,Q0.1次之,Q0.2再次之,Q0.3为最后。

(2、)当有两个以上接近开关先后到位时,其IB0变化的输入状态按先后次序依次存入MB13、MB12、MB11、MB10里。动作执行是先从第一次到位的接近开关的(MB13)开始判断,使其对应阀门打开,在阀门打开且尚未结束时,其他到位的阀门则等待。当工作的阀门工作完毕后,等待的阀门应按“先到先开”的次序进行工作(即先为MB12,再为MB11,最后为MB10)。

根据上述二点要求,在程序上进行如下处理:

1、网络2~网络5为4个接近开关到位时令MB0的对应位置1,这里采用置位指令的作用是防止各接近开关动作时产生抖动而引起采集输入状态(MB0、MB3等)的错误。

2、网络6的解析:MB0时时随IB0变化,MB1为MB0为发生变化前的状态

值,当IB0

无输入变化时,其MB0=MB1,网络6不执行其动作。只有当有一个或几个接近开关到位时,其对应输入点=1,都会使MB0>MB1,则网络6立即执行:将MB0与MB1进行异或运算,其运算结果送入对应存储区:如MB3=0(即第一次动作,或前次动作的阀门工作已全部结束),异或结果送入MB13。如MB3=1,即前一次动作阀门尚未结束,将异或结果送入MB12。如MB3=2,即前二次动作阀门尚未结束,将异或结果送入MB11……

异或结果送完后,将MB0->MB1,且进行MB3加1运算,又使M0.7=1。当下一个扫描周期到来时,MB0=MB1,不执行网络6,故使M0.7=0,即M0.7输出为单扫描周期脉冲。

如前次动作阀门尚未结束又有接近开关到位,使MB0>MB1,立即又执行MB0与MB1的异或运算,此时MB3=1,故异或结果->MB12……

MB0与MB1的异或运算是本程序的技巧编程之一:它能将IB0的最新到位的接近开关状态剪接出来,如变化前 IB0=0000_0010,MB0=MB1=0000_0010,如此时第一与第三接近开关同时到位(即I0.0与I0.2皆=1,其IB0=0000_0111),则使MB0立刻=0000_0111,而MB1仍=0000_0010,MB0与MB1的异或运算的结果

=0000_0101,此值恰是最新到位的2个接近开关=1 的状态值,将这运算的结果送入MB12,以备当前一次动作阀门工作结束后,再按本次(MB12)输入状态进行正确操作。

3、网络7的解析:定时器T101~T104的延时时间为4个阀门的工作时间,

在每个阀

门打开的同时,其对应的定时器得电开始延时,当延时时间到,对应定时器输出由0↑1,其前沿使该阀门关闭(即QB0=0)。再判断及操作:

(1)、如此时MB13=0,说明前一次动作的一个或几个阀门已全部工作结束,将MD10右移8位(即将MB12->MB13,MB11->MB12, MB10->MB11,0->MB10),且使MB3减1,M2.0=0,接着再判断移位后的MB13,如MB13≠0,说明仍有等待阀门需要打开,故发出触发脉冲M2.6=1的单周期脉冲,去触发等待的阀门开门。

(2)、如此时MB13≠0,说明本次动作的几个阀门没有全部工作结束,发出触发脉冲M2.1=1的单周期脉冲,去触发等待的阀门开门。

4、网络8~网络11的解析:为触发Q0.0~Q0.3四个阀门开门的程序。使阀

门打开有3

种触发脉冲:(1)M2.0=1的前沿。即:在有接近开关到位使IB0状态发生变化时,产生M2.7=1的单脉冲,如此时刻M2.0=0,则使M2.0由0↑1,产生前沿脉冲。(2)、M2.1=1单脉冲。即:在由2个以上接近开关同时到位,当工作阀门关闭时还有等待阀门没有打开时,产生的单周期触发脉冲。(3)、M2.6=1单脉冲。即:当本次的所有工作阀门动作已结束,但还有尚未执行的等待阀门(即MD10移位前,其MB12≠0)时产生的单周期触发脉冲。

这3个脉冲出现,都会使对应阀门打开:此时的QB0=0,程序是从先判断M13.0开始的,如M13.0=1,使Q0.0=1、使标记M13.0=0,同时使T101得电开始延时。由于Q0.0=1使QB0≠0,故不会使后面的Q0.1~Q0.3同时刻再置1,只有T101

延时时间到,使Q0.0由1↓0,后,当再次产生触发脉冲时,判断还是先从M13.0开始,由于此时QB0=0、而MB13=0,不会再次使Q0.0置1,接着判断M13.1、M13.2、M13.3各位,那位=1就将QB0的对应输出置1……

此段程序也体现出技巧编程:这样处理既解决了同时间开关到位闭合时,阀门打开是按优先循序依次工作,又解决了两个以上接近开关先后到位,其等待的阀门按“先到先开”的次序进行工作的控制作用。

本程序解析到此结束,如有不妥之处,请给予指正,谢谢!

Sequence control relay transition

2020-2021化学 流程图的专项 培优练习题附答案解析

一、中考初中化学流程图 1.硅是一种重要的半导体材料,应用范围广。三氯硅烷(SiHCl3)还原法是当前制备高纯硅的主要方法,生产过程如图所示: (1)硅属于__________(选填“金属”或“非金属”)元素; (2)写出上述流程中一种氧化物的化学式:______________________; (3)上述流程中最后一步反应的化学方程式为______________________________,该反应属于________(填基本反应类型)反应; (4)如果还原SiHCl3过程中混入O2,可能引起的后果是________________________; (5)该流程中可以循环利用的物质的化学式是____________________。 【答案】非金属 SiO2(其他答案合理均可) SiHCl3+H2Si+3HCl 置换爆炸 HCl 【解析】 (1)根据元素的名称分析解答; (2)根据物质的组成分析属于氧化物的物质,写出化学式; (3)分析流程中最后一步发生反应的化学方程式,根据反应特点分析类型; (4)根据氢气和氧气的混合气体点燃时会发生爆炸解答; (5)根据流程分析可循环利用的物质。 解:(1) (1)硅的名称中带有“石”字旁,属于非金属元素; (2)二氧化硅是由硅元素和氧元素组成的,属于氧合物,化学式为:SiO2; (3)上述流程中最后一步反应的化学方程式为:SiHCl3+H2高温 Si+3HCl,该反应是由一种 单质与一种化合物反应生成了另一种单质和另一种化合物,属于置换反应; (4)如果还原SiHCl3过程中混入O2,会形成氢气和氧气的混合体,点燃时易引起爆炸; (5)该流程中可以循环利用的物质的化学式是HCl。 2.下图为工业利用石灰石和食盐水制作漂白粉的流程图。 (1)石灰石高温燃烧得到的两种氧化物,反应的化学方程式为______________。 步骤Ⅰ涉及到的能的转化是__________________________________。 (2)请写出操作A用到的一种玻璃仪器的名称_________________,步骤Ⅲ得到的滤液中的溶质是____________________。 (3)漂白粉的主要成分是Cacl2和Ca(Cl0)2,其中Ca(Cl0)2中氯元素的化学价是

C++链表的创建与操作

C++链表的创建与操作 我们知道,数组式计算机根据事先定义好的数组类型与长度自动为其分配一连续的存储单元,相同数组的位置和距离都是固定的,也就是说,任何一个数组元素的地址都可一个简单的公式计算出来,因此这种结构可以有效的对数组元素进行随机访问。但若对数组元素进行插入和删除操作,则会引起大量数据的移动,从而使简单的数据处理变得非常复杂,低效。 为了能有效地解决这些问题,一种称为“链表”的数据结构得到了广泛应用。 1.链表概述 链表是一种动态数据结构,他的特点是用一组任意的存储单元(可以是连续的,也可以是不连续的)存放数据元素。 链表中每一个元素成为“结点”,每一个结点都是由数据域和指针域组成的,每个结点中的指针域指向下一个结点。Head是“头指针”,表示链表的开始,用来指向第一个结点,而最后一个指针的指针域为NULL(空地址),表示链表的结束。 可以看出链表结构必须利用指针才能实现,即一个结点中必须包含一个指针变量,用来存放下一个结点的地址。 实际上,链表中的每个结点可以用若干个数据和若干个指针。结点中只有一个指针的链表称为单链表,这是最简单的链表结构。 再c++中实现一个单链表结构比较简单。例如,可定义单链表结构的最简单形式如下 struct Node{ int Data; Node *next; }; 这里用到了结构体类型。其中,*next是指针域,用来指向该结点的下一个结点;Data是一个整形变量,用来存放结点中的数据。当然,Data可以是任何数据类型,包括结构体类型或类类型。 在此基础上,我们在定义一个链表类list,其中包含链表结点的插入,删除,输出等功能的成员函数。class list{ Node *head; public: list(){head=NULL;} void insertlist(int aDate,int bDate); //链表结点的插入 void Deletelist(int aDate); //链表结点的删除 void Outputlist(); //链表结点的输出 Node*Gethead(){return head;} }; 2.链表结点的访问 由于链表中的各个结点是由指针链接在一起的,其存储单元文笔是连续的,因此,对其中任意结点的地址无法向数组一样,用一个简单的公式计算出来,进行随机访问。只能从链表的头指针(即head)开始,用一个指针p先指向第一个结点,然后根据结点p找到下一个结点。以此类推,直至找到所要访问的结点或到最后一个结点(指针为空)为止。 下面我们给出上述链表的输出函数; void list::Outputlist(){ Node *current = head; while(current != NULL){ cout << current->Data << " "; current = current->next;

程序框图练习题及答案经典doc

程序框图练习题 一、选择题 1 .(2013年高考北京卷(理))执行如图所示的程序框图,输出的S 值为 ( ) A .1 B . 2 3 C . 1321 D . 610 987 C 框图首先给变量i 和S 赋值0和1. 执行 ,i=0+1=1; 判断1≥2不成立,执行,i=1+1=2; 判断2≥2成立,算法结束,跳出循环,输出S 的值为 . 故选C . 2 .(2013年普通高等学校招生统一考试浙江数学(理)试题(纯WORD 版))某程序框图如 图所示,若该程序运行后输出的值是5 9 ,则 ( ) A .4=a B .5=a C .6=a D . 7=a

A :由已知可得该程序的功能是 计算并输出S=1+ +…+ =1+1﹣ =2﹣ . 若该程序运行后输出的值是,则 2﹣=. ∴a=4, 故选A . 3 .(2013年普通高等学校招生统一考试安徽数学(理)试题(纯WORD 版))如图所示,程序 框图(算法流程图)的输出结果是 ( ) A .1 6 B . 2524 C . 34 D . 1112 D .12 11,1211122366141210=∴=++=+++ =s s ,所以选D (第5题图)

的程序框图,如果输出3s =,那么判断框内应填入的条件是 ( ) A .6k ≤ B .7k ≤ C .8k ≤ D .9k ≤ B 【命题立意】本题考查程序框图的识别和运行。第一次循环,2log 3,3s k ==,此时满足条件,循环;第二次循环,23log 3log 42,4s k =?==,此时满足条件,循环;第三次循环, 234log 3log 4log 5,5s k =??=,此时满足条件,循环;第四次循环,2345log 3log 4log 5log 6,6s k =???=,此时满足条件,循环;第五次循环,23456log 3log 4log 5log 6log 7,7s k =????=,此时满足条件,循环;第六次循环,234567log 3log 4log 5log 6log 7log 83,8s k =?????==,此时不满足条件,输出3s =, 所以判断框内应填入的条件是7k ≤,选B. 5 .(2013年高考江西卷(理))阅读如下程序框图,如果输出5i =,那么在空白矩形框中应 填入的语句为 ( ) A .2*2S i =- B .2*1S i =- C .2*S i = D .2*4S i =+ C 本题考查程序框图的识别和运行。由条件知当3i =时,10S <,当5i =时,10S ≥。当5i =时,A,B 不成立。当3i =时,D 不合适,所以选C.

单链表的创建、插入和删除

单链表的创建、插入和删除 (数据结构) ——SVS #include #include #include typedef int ElemType; typedef int Status; typedef struct LNode { ElemType data; struct LNode *next; }LNode,*LinkList; void InitList_Link(LinkList L) //创建空链表 { L=(LinkList)malloc(sizeof(LNode)); L->next=NULL; } Status InsertList_Link(LinkList L,int i,ElemType e) //插入链表 { LinkList s,p=L; int j=0; while(p&&jnext;j++;} if(!p||j>i-1)return -1; s=(LinkList)malloc(sizeof(LNode)); s->data=e; s->next=p->next; p->next=s; return 1; }

Status DeleteList_Link(LinkList L,int i,ElemType e) //删除链表{ LinkList q,p=L;int j=0; while(p->next&&jnext;j++;} if(!(p->next)||j>i-1)return -1; q=p->next; e=q->data; p->next=q->next; free(q); return 1; } void OutPutList_Link(LinkList L) //输出链表 { printf("表中值为:"); LinkList p=L->next; while(p) { printf("%d ",p->data); p=p->next; } printf("\n"); } void CreateList_Link(LinkList L,int len) //创建链表 { int i; LinkList s,p=L; for(i=0;idata); s->next=NULL; p->next=s; p=s; } } int main() { int len; LinkList L; ElemType e; L=(LinkList)malloc(sizeof(LNode));

C语言链表的建立、插入和删除

数组作为存放同类数据的集合,给我们在程序设计时带来很多的方便,增加了灵活性。但数组也同样存在一些弊病。如数组的大小在定义时要事先规定,不能在程序中进行调整,这样一来,在程序设计中针对不同问题有时需要3 0个大小的数组,有时需要5 0个数组的大小,难于统一。我们只能够根据可能的最大需求来定义数组,常常会造成一定存储空间的浪费。我们希望构造动态的数组,随时可以调整数组的大小,以满足不同问题的需要。链表就是我们需要的动态数组。它是在程序的执行过程中根据需要有数据存储就向系统要求申请存储空间,决不构成对存储区的浪费。 链表是一种复杂的数据结构,其数据之间的相互关系使链表分成三种:单链表、循环链表、双向链表,下面将逐一介绍。 7.4.1 单链表 图7 - 3是单链表的结构。 单链表有一个头节点h e a d,指向链表在内存的首地址。链表中的每一个节点的数据类型为结构体类型,节点有两个成员:整型成员(实际需要保存的数据)和指向下一个结构体类型节点的指针即下一个节点的地址(事实上,此单链表是用于存放整型数据的动态数组)。链表按此结构对各节点的访问需从链表的头找起,后续节点的地址由当前节点给出。无论在表中访问那一个节点,都需要从链表的头开始,顺序向后查找。链表的尾节点由于无后续节点,其指针域为空,写作为N U L L。 图7 - 3还给出这样一层含义,链表中的各节点在内存的存储地址不是连续的,其各节点的地址是在需要时向系统申请分配的,系统根据内存的当前情况,既可以连续分配地址,也可以跳跃式分配地址。 看一下链表节点的数据结构定义: struct node { int num; struct node *p; } ; 在链表节点的定义中,除一个整型的成员外,成员p是指向与节点类型完全相同的指针。在链表节点的数据结构中,非常特殊的一点就是结构体内的指针域的数据类型使用了未定义成功的数据类型。这是在C中唯一规定可以先使用后定义的数据结构。 ?单链表的创建过程有以下几步: 1 ) 定义链表的数据结构。 2 ) 创建一个空表。 3 ) 利用m a l l o c ( )函数向系统申请分配一个节点。 4 ) 将新节点的指针成员赋值为空。若是空表,将新节点连接到表头;若是非空表,将新 节点接到表尾。 5 ) 判断一下是否有后续节点要接入链表,若有转到3 ),否则结束。 ?单链表的输出过程有以下几步 1) 找到表头。

程序框图练习题(学习相关)

2010~2014年高考真题备选题库 第1节 算法与程序框图 1.(2014新课标全国Ⅰ,5分)执行下面的程序框图,若输入的a ,b ,k 分别为1,2,3,则输出的M =( ) A.203 B.72 C.165 D.158 解析:选D 第一次循环:M =32,a =2,b =32,n =2;第二次循环:M =83,a =32 ,b =83,n =3;第三次循环:M =158,a =83,b =158,n =4,则输出M =158 ,选D. 2.(2014新课标全国Ⅱ,5分)执行如图所示的程序框图,如果输入的x ,t 均为2,则输出的S =( ) A .4 B .5

C .6 D .7 解析:选D k =1≤2,执行第一次循环,M =11 ×2=2,S =2+3=5,k =1+1=2;k =2≤2,执行第二次循环,M =22 ×2=2,S =2+5=7,k =2+1=3;k =3>2,终止循环,输出S =7.故选D. 3.(2014安徽,5分)如图所示,程序框图(算法流程图)的输出结果是( ) A .34 B .55 C .78 D .89 解析:选B 执行该程序框图(算法流程图)可得x =1,y =1,z =2;x =1,y =2,z =3;x =2,y =3,z =5;x =3,y =5,z =8;x =5,y =8,z =13;x =8,y =13,z =21;x =13,y =21,z =34;x =21,y =34,z =55,跳出循环. 4.(2014福建,5分)阅读如图所示的程序框图,运行相应的程序,输出的n 的值为 ( ) A .1 B .2 C .3 D .4 解析:选B 当n =1时,21>12成立,当n =2时,22>22不成立,所以输出n =2,故选 B. 5.(2014北京,5分)执行如图所示的程序框图,输出的S 值为( )

链表建立

#include /*这个头文件在动态的建立结点时要用到*/ /* * 这就是表示单链表的一个结点的结构体了, * 简单起见没有使用模板之类的复杂东西。 */ struct Node { /*这个表示结点的值,这里为了简单,就用int型的吧*/ int data; /* * 这是指向结点结构体的一个指针, * 这里用它指向该结点的下一个结点, * 以此使单个的结点形成链表 */ struct Node* next; };/*至此链表的结点就定义完了*/ int main() { /*下面展示如何建立成为一个带头结点的单链表:L={12,13,21,24}*/ struct Node* head = NULL; /*这是链表的头结点*/ struct Node* p = NULL, *q = NULL; /*临时指针,建立链表时会用到*/ /*链表很短,我不用循环,直接建立,可以让你看的更清楚*/ /*建立头结点*/ head = (struct Node*)malloc(sizeof(struct Node)); /*指定结点的值*/ head->data = 12; /*指定下一个结点,现在还没有先给NULL*/ head->next = NULL; /*用q保存刚生成的结点*/ q = head; /*第二个结点,建立的方法和第一个一样*/ p = (struct Node*)malloc(sizeof(struct Node)); p->data = 13; p->next = NULL; /*注意,此时需要调整一下上一个结点的next指针,使各结点可以连接起来*/ q->next = p; q = p; /*第三个结点*/

C语言链表专题复习

链表专题复习 数组作为存放同类数据的集合,给我们在程序设计时带来很多的方便,增加了灵活性。但数组也同样存在一些弊病。如数组的大小在定义时要事先规定,不能在程序中进行调整,这样一来,在程序设计中针对不同问题有时需要3 0个元素大小的数组,有时需要5 0个数组元素的大小,难于统一。我们只能够根据可能的最大需求来定义数组,常常会造成一定存储空间的浪费。 我们希望构造动态的数组,随时可以调整数组的大小,以满足不同问题的需要。链表就是我们需要的动态数组。它是在程序的执行过程中根据需要有数据存储就向系统要求申请存储空间,决不构成对存储区的浪费。 链表是一种复杂的数据结构,其数据之间的相互关系使链表分成三种:单链表、循环链表、双向链表,下面只介绍单向链表。 7.4.1 单链表 图7 - 3是单链表的结构。 单链表有一个头节点h e a d,指向链表在内存的首地址。链表中的每一个节点的数据类型为结构体类型,节点有两个成员:整型成员(实际需要保存的数据)和指向下一个结构体类型节点的指针即下一个节点的地址(事实上,此单链表是用于存放整型数据的动态数组)。链表按此结构对各节点的访问需从链表的头找起,后续节点的地址由当前节点给出。无论在表中访问那一个节点,都需要从链表的头开始,顺序向后查找。链表的尾节点由于无后续节点,其指针域为空,写作为N U L L。 图7 - 3还给出这样一层含义,链表中的各节点在内存的存储地址不是连续的,其各节点的地址是在需要时向系统申请分配的,系统根据内存的当前情况,既可以连续分配地址,也可以跳跃式分配地址。 看一下链表节点的数据结构定义: struct node { int num; struct node *p; } ; 在链表节点的定义中,除一个整型的成员外,成员p是指向与节点类型完全相同的指针。 在链表节点的数据结构中,非常特殊的一点就是结构体内的指针域的数据类型使用了未定义成功的数据类型。这是在C中唯一规定可以先使用后定义的数据结构。 ?单链表的创建过程有以下几步: 1 ) 定义链表的数据结构。 2 ) 创建一个空表。 3 ) 利用m a l l o c ( )函数向系统申请分配一个节点。

程序框图计算训练(含答案详解)

按照给出程序框图计算专题 题目特点: 输入某个数值,按照图中给出的程序计算,若结果符合条件则输出;若结果不符合条件,则把结果重新输入再按照图中给出的程序第二次计算,如此下去,直到符合条件输出为止。 计算方法: 设输入的数值为x ,先把图中给出的计算程序表示成一个算式,然后将给出的数值代入这个算式计算即可。 解此类题目的关键是:理解给出的程序图,并把把图中给出的计算程序表示成算式。 特别注意:程序框图中的运算是由前到后.... 依次进行的,不存在先乘除后加减的问题。 专题练习: 1.如图是一个计算程序,若输入x 的值为5,则输出结果为( ) A .11 B .-9 C .-7 D .21 2.根据输入的数字,按图中程序计算,并把输出的结果填入表内: 输入x -2 输出 -3 + ×

3.根据输入的数字8,按图中程序计算,则输出的结果是()。 A.-0.125 B.-1.125 C.-2.125 D.2.9375 4.按如图的程序计算,若开始输入的值x为正整数,最后输出的结果小于20,则输出结果最多有()种. A.2个B.3个C.4个D.5个 5.根据如图所示的程序进行计算,若输入x的值为-1, 则输出y的值为. (2) ÷- 输入8 -6 2 ( 1.5) +- 1.59 >- 否 输出 是

6.如图,是一个有理数混合运算程序的流程图,请根据这个程序回答问题:当输入的x 为-16时,最后输出的结果y 是多少?(写出计算过程) 7.按下面的程序计算,如输入的数为50,则输出的结果为152,要使输出结果为125,则输入的正整数x 的值的个数最多有( ) A .0个 B .1个 C .2个 D .3个 8.按下面的程序计算,若开始输入的值x 为正数,最后输出的结果为11,则满足条件的x 的不同值分别为 . 结果是否大于-4 YES NO

双向链表的创建

#include #include typedef struct LNode { int data; int length; struct LNode *next; struct LNode *prior; }DuLNode,*DuLinkList; void initlist(DuLNode **p){ *p=(DuLinkList)malloc(sizeof(DuLNode)); (*p)->next=(*p)->prior=NULL; } void create(DuLNode **p,int n){ DuLinkList q; printf("输入%d个双向链表的元素\n",n); for(int i=n;i>0;--i)//创建n个元素的双向链表。 { DuLinkList s; s=(DuLinkList)malloc(sizeof(DuLNode)); scanf("%d",&(s->data)); if(i==n) {*p=s; q=s; s->next=s->prior; s->prior=s->next; } else { q->next=s; s->next=*p; (*p)->prior=s; s->prior=q; q=s; } } (*p)->length=n; }

void Display(DuLinkList L,int n){ int i; for(i=0;inext; } } int main(int argc, char* argv[]) { DuLinkList L; initlist(&L); create(&L,3); Display(L,3); printf("双向链表的长度%d\t",L->length); return 0; }

伪代码和流程图练习题

伪代码流程图练习题 第一大题选择题 1.已知某算法的程序框图,若程序运行时,输入a=2x,b=x2,且已知1

(5题) (6题) A .3 B .7 C .11 D .33 6.阅读如图所示的程序框图,运行相应的程序,则输出A 的值为( ) A.3116 B.1516 C.15 8 D.7 4 7.如果执行如图的程序框图,那么输出的值是( ) (7题) (8题) A .2010 B .-1 C.1 2 D .2 8.如果执行如图的程序框图,那么输出的C =( ) A .3 B .5 C .8 D .13 9.下面程序运行后输出结果是3,则输入的x 值一定是( ) INPUT x IF x >0 THEN y =x ELSE y =-x END IF PRINT y END A .3 B .-3 C .3或-3 D .0

单链表的建立及其基本操作的实现(完整程序)

#include "stdio.h"/*单链表方式的实现*/ #include "malloc.h" typedef char ElemType ; typedef struct LNode/*定义链表结点类型*/ { ElemType data ; struct LNode *next; }LNode,*LinkList;/*注意与前面定义方式的异同*/ /*建立链表,输入元素,头插法建立带头结点的单链表(逆序),输入0结束*/ LinkList CreateList_L(LinkList head) { ElemType temp; LinkList p; printf("请输入结点值(输入0结束)"); fflush(stdin); scanf("%c",&temp); while(temp!='0') { if(('A'<=temp&&temp<='Z')||('a'<=temp&&temp<='z')) { p=(LinkList)malloc(sizeof(LNode));/*生成新的结点*/ p->data=temp; p->next=head->next; head->next=p;/*在链表头部插入结点,即头插法*/ } printf("请输入结点值(输入0结束):"); fflush(stdin); scanf("%c",&temp); } return head; } /*顺序输出链表的内容*/ void ListPint_L(LinkList head) { LinkList p; int i=0; p=head->next; while(p!=NULL) { i++; printf("单链表第%d个元素是:",i);

高中数学算法与程序框图训练题

算法与程序框图训练题1.(2019·湖北八校联考)对任意非零实数a,b,定义a*b的运算原理如图所示,则 22)* ? ? ?? ?1 8 - 2 3=( ) A.1 B.2 C.3 D.4 解析:选A 因为 22=3, ? ? ?? ?1 8 - 2 3=4,3<4,所以输出 4-1 3 =1,故选A. 2.执行如图所示的程序框图,则输出的x,y分别为( ) A.90,86 B.94,82 C.98,78 D.102,74 解析:选C 第一次执行循环体,y=90,s= 86 7 +15,不满足退出循环的条件,故x=90;第二次执行循环体,y=86,s= 90 7 + 43 3 ,不满足退出循环的条件,故x=94;第三次执行循环体,y =82,s= 94 7 + 41 3 ,不满足退出循环的条件,故x=98;第四次执行循环体,y=78,s=27,满足退出循环的条件,故x=98,y=78. 3.(2018·云南民族大学附属中学二模)执行如图所示的程序框图,若输出的k的值为6,则判断框内可填入的条件是( )

A .s >1 2? B .s >710? C .s >3 5 ? D .s >45 ? 解析:选B s =1,k =9,满足条件;s =910,k =8,满足条件;s =4 5,k =7,满足条件;s = 710,k =6,不满足条件.输出的k =6,所以判断框内可填入的条件是“s >7 10 ?”.故选B. 4.(2019·合肥质检)执行如图所示的程序框图,如果输出的k 的值为3,则输入的a 的值可以是( ) A .20 B .21 C .22 D .23 解析:选A 根据程序框图可知,若输出的k =3,则此时程序框图中的循环结构执行了3次,执行第1次时,S =2×0+3=3,执行第2次时,S =2×3+3=9,执行第3次时,S =2×9+3=21,因此符合题意的实数a 的取值范围是9≤a <21,故选A. 5.(2019·重庆质检)执行如图所示的程序框图,如果输入的x =0,y =-1,n =1,则输出x , y 的值满足( )

单链表的建立及插入删除操作-c语言

单链表的基本操作 #include #include typedef char date; typedef struct node { date ch; struct node *next; }list; typedef list *linklist; linklist creat() { date ch; linklist head=(linklist)malloc(sizeof(list)); list *p,*r; r=head; ch=getchar(); while(ch!='\n') { p=(linklist)malloc(sizeof(list)); p->ch=ch; r->next=p; r=p; ch=getchar(); } r->next=NULL; return (head); } void insert(linklist head,int i,char x) { int j=0; linklist r,p; p=head->next; while(p&&jnext; j++; } if(!p||j>i-1) exit(1); r=(linklist)malloc(sizeof(list)); r->ch=x;

r->next=p->next; p->next=r; } void puter(linklist linker) { linklist p; p=linker->next; while(p!=NULL) { printf("%c ",p->ch); p=p->next; } } void delet(linklist head ,int i) { int j=0; linklist r,p; p=head->next; while(p&&jnext; j++; } if(!p||j>i-1) exit(1); r=p->next; p->next=r->next; free(r); } int main() { static int q,k; char w; printf("请输入字符穿,并以ENTER键结束\n"); linklist head,p,linker=creat(); puter(linker); printf("请输入插入位置和插入字母\n"); scanf("%d %c",&q,&w); insert(linker,q,w); puter(linker); printf("\n请输入删除位置的序号:\n"); scanf("%d",&k); delet(linker,k);

程序框图练习题

2010~2014年高考真题备选题库 第1节算法与程序框图 1.(2014新课标全国Ⅰ,5分)执行下面的程序框图,若输入的a,b,k分别为1,2,3,则输出的 M=() 207 B. A. 231516 C. D. 853383,a=2,b=,n=2;第二次循环:M=,a =,b=选解析:D第一次循环:M223281581515=,n=3;第三次循环:M=,a =,b=,n=4,则输出M=,选D. 383882.(2014新课标全国Ⅱ,5分)执行如图所示的程序框图,如果输入的x,t均为2,则输出的S=()

A.4 B.5 7 .D 6 .C. 1解析:选D k=1≤2,执行第一次循环,M=×2=2,S=2+3=5,k=1+1=2;k12=2≤2,执行第二次循环,M=×2=2,S=2+5=7,k=2+1=3;k=3>2,终止循环,2输出S =7.故选D. 3.(2014安徽,5分)如图所示,程序框图(算法流程图)的输出结果是()

A.34 B.55 .78 D.89 C解析:选B执行该程序框图(算法流程图)可得x=1,y=1,z=2;x=1,y=2,z=3;x=2,y=3,z=5;x=3,y=5,z=8;x=5,y=8,z=13;x=8,y=13,z=21;x=13,y=21,z =34;x=21,y=34,z=55,跳出循环. 4.(2014福建,5分)阅读如图所示的程序框图,运行相应的程序,输出的n的值为()

A.1 B.2 C.3 D.4 成立,当n=2时,2不成立,所以输出n=2,故选2122>2>1时,=当B解析:选n12B. ) (值为S执行如图所示的程序框图,输出的)分5,北京(2014.5.

单链表的建立查找插入删除

单链表的建立查找插入删除

数学与计算机学院计算机系实验报告 课程名称:数据结 构 年级:2011 实验成绩: 指导教师:黄襄念姓名: abraham 实验教室:6A-412 实验名称:单链表的建立/查找/插入/删除学号:实验日期: 2012/12/16 实验序号:实验1 实验时间:6:40 —9:50 实验学时:4 撰写说明:填写上面相关栏目,须作相应修改。 仔细阅读:最后“六、提交文档要求”有关说明。 一、实验目的 1.熟悉掌握链表的创建、链表的常用算法:如查找节点,删除节点,插 入节点等等。 二、实验环境 1. 操作系统:Windows XP 2. 开发软件:VC++6.0 三、实验内容 ●程序功能 本程序完成了以下功能: 1.可以逐个添加英文字到链中。 2.可以删除链中的任意一元素而保持其他元素整体不变。 3.可以查找链表中的任意一个元素,只要输入该元素在链表中 的位置,就可以查找到该元素。 4.可以在该链表中插入任意一个元素不改变整体的顺序,输入 你要插入的位置即可。 ●数据结构 本程序中使用的数据结构(若有多个,逐个说明): 1.它的优缺点 1)能将物理地址散乱的链接在一起,更好的利用空间,可

以动态的申请空间,如使用数组未必能申请到连续的空间但是用链表就可以解决这个问题。 2)能快速的删除节点,和增添节点。 2.逻辑结构图 3.存储结构图Head m 开始 创建链插 入 节 删 除 节 查 找 节结束

Num Num 4.存储结构的C/C++ 语言描述 typedef struct node { char data; struct node *next; }link; ●算法描述(结合流程图或伪代码描述算法,若无可略) 本程序中采用的算法(若有多个,逐个说明) 1.算法名称:创建链表 2.算法原理或思想 通过申请一个结构体指针,在用结果体指针申请一个空间,在输入信息后用前一个节点的Next指针将增加的结点与前面的结点链接,如此重复操作,就形成一个链表。 3.算法特点(优缺点,与可选或同类算法作对比) 与数组相比较,是不连续的,它能随意的添加结点你需要多少就添加多少不会浪费多余的空间也不用提前去预测需要多少空间而其他的要考虑通用性,就必须申请较大的空间,而造成空间的浪费。 ●程序说明 1.系统流程图(各个函数或类的调用流程图)

高中数学:算法初步与框图练习

高中数学:算法初步与框图练习 (时间:30分钟) 1.下列结构图中要素之间表示从属关系的是( C ) 解析:推理包括合情推理与演绎推理,故选项C中表示的是从属关系. 2.如图是一个算法的程序框图,已知a 1=1,输出的b=3,则输入的a 2 等于( B ) (A)3 (B)5 (C)7 (D)9 解析:由题意知该算法是计算的值,则=3,解得a 2 =5.故选B. 3.(江西九校联考)下面框图的S的输出值为( A ) (A)5 (B)6 (C)8 (D)13 解析:按程序框图的循环得, 循环次数 1 2 3 4 i=0 i=i+1=1 2 3 4

S=1 P=0 t=S=1 1 2 3 S=S+P=1 2 3 5 P=t=1 1 2 3 4.(湖南永州市一模)执行如图所示的程序框图,输入的x值为2,则输出的x的值为( D ) (A)2 (B)3 (C)4 (D)5 解析:程序执行如下:x=2,i=1?x=2×2-1=3,i=2?x=2×3-1=5,i=3>2?输出x=5.选D. 5.(衡水金卷高三大联考)执行如图所示的程序框图,若输出的S的值为-10,则①中应填( C ) (A)n<19? (B)n≥18? (C)n≥19? (D)n≥20? 解析:由题图,可知S=(-1+2)+(-3+4)+…+(-17+18)-19=9-19=-10.故①中应填n≥19?. 故选C. 6.执行如图所示的程序框图.若输出y=-,则输入角θ等于( D ) (A)(B)-(C)(D)-

解析:由输出y=-<0,排除A,C, 又当θ=-时,输出y=-,故选D. 7.(2017·山东卷)执行如图所示的程序框图,当输入的x的值为4时,输出的y的值为2,则空白判断框中的条件可能为( B ) (A)x>3 (B)x>4 (C)x≤4 (D)x≤5 解析:输入x=4,若满足条件,则y=4+2=6,不符合题意;若不满足条件,则y=log 4=2,符合题意, 2 结合选项可知可填x>4.故选B. 8.按照如图程序运行,则输出k的值是. x=3 k=0 DO x=2*x+1 k=k+1 LOOP UNTIL x>16 PRINT k END 第二次循环,x=15,k=2; 第三次循环,x=31,k=3; 终止循环,输出k的值是3.

创建单链表的几种方法

# include "stdio.h" # include "stdlib.h" # include "malloc.h" # define LEN sizeof(SLNode) typedef int DataType; typedef struct SLNode { DataType data; struct SLNode *next; }SLNode,*NODE; //通过return语句 SLNode *creat1() { SLNode *head,*p,*q; head=(SLNode *)malloc(LEN); q=p=head; scanf("%d",&p->data); while(p->data!=0) { p=(SLNode *)malloc(LEN); scanf("%d",&p->data); q->next=p; q=p; } q->next=NULL; return head; } //通过全局变量 SLNode *head; void creat2() { SLNode *p,*q; head=(SLNode *)malloc(LEN); q=p=head; scanf("%d",&p->data); while(p->data!=0) { p=(SLNode *)malloc(LEN); scanf("%d",&p->data); q->next=p; q=p; } q->next=NULL;

} //通过指针参数 void creat3(SLNode **head) { SLNode *p,*q; *head=(SLNode *)malloc(LEN); q=p=*head; scanf("%d",&p->data); while(p->data!=0) { p=(SLNode *)malloc(LEN); scanf("%d",&p->data); q->next=p; q=p; } q->next=NULL; } //通过引用型参数 void creat4(NODE &head) { SLNode *p,*q; head=(SLNode *)malloc(LEN); q=p=head; scanf("%d",&p->data); while(p->data!=0) { p=(SLNode *)malloc(LEN); scanf("%d",&p->data); q->next=p; q=p; } q->next=NULL; } void print(SLNode *head) { while(head!=NULL) { printf("%4d",head->data); head=head->next; } } void main() { SLNode *h1,*h3,*h4;

算法与程序框图 习题(含答案)

算法与程序框图习题(含答案) 一、单选题 1.执行如图所示的程序框图输出的结果是() A.B.C.D. 2.已知某程序框图如图所示,则执行该程序后输出的结果是 A.B. C.D. 3.下图是把二进制的数化成十进制数的一个程序框图,则判断框内应填入的条件是()

A.>B.C.D.> 4.我国元朝著名数学家朱世杰在《四元玉鉴》中有一首待:“我有一壶酒,携着游春走,遇店添一倍,逢有饮一斗,店友经三处,没有壶中酒,借问此壶中,当原多少酒?”用程序框图表达如图所示,即最终输出的,问一开始输入的() A.B.C.D. 5.中国有个名句“运筹帷幄之中,决胜千里之外”.其中的“筹”原意是指《孙子算经》中记载的算筹,古代是用算筹来进行计算,算筹是将几寸长的小竹棍摆在平面上进行运算,算筹的摆放形式有纵横两种形式,如下表: 表示一个多位数时,像阿拉伯计数一样,把各个数位的数码从左到右排列,但各位数码的筹式需要纵横相间,个位,百位,万位用纵式表示,十位,千位,十万位用横式表示,以此类推,例如2268用算筹表示就是=||丄|||.执行如图所示程序框图,若输人的x=1, y = 2,则输出的S用算筹表示为 A.B.C.D. 6.在中,,,边的四等分点分别为, 靠近,执行下图算法后结果为() A.6 B.7 C.8 D.9 7.宋元时期名著《算学启蒙》中有关于“松竹并生”的问题:松长五尺,竹长五尺,若输入的分别是5,2,则输出的=()

A.B.C.D. 8.如图所示的程序框图,输出的 A.18B.41 C.88D.183 9.执行图1所示的程序框图,则S的值为()

图1 A.16B.32 C.64D.128 二、填空题 10.我国南北朝时期的数学家张丘建是世界数学史上解决不定方程的第一人,他在《张丘建算经》中给出一个解不定方程的百鸡问题,问题如下:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一.百钱买百鸡,问鸡翁母雏各几何?用代数方法表述为:设鸡翁、鸡母、鸡雏的数量分别为,,,则鸡翁、鸡母、鸡雏的数量即为方程组的解.其解题过程可用框图表示如下图所示,则框图中正整数的值为______. 11.运行如图所示的程序,若输入的是,则输出的值是__________.

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