当前位置:文档之家› 应用程序框架设计

应用程序框架设计

应用程序框架设计
应用程序框架设计

应用程序框架设计之前言

要做一个应用程序框架的念头Bigtall在几年前就有了,因为在工作中发觉很多方面非常的

不顺手,几乎每一个环节都存在这样或者那样的问题:

?公司不同项目组做的设计是完全不同的风格,而且设计做不细,导致项目计划越来越流于形式

?各层代码凌乱,从后台的java或者c#到前台的html,天马行空,随心所欲

?数据库结构和文档不匹配,要不是莫名其妙的多、少字段,要不就是些莫名其妙的名字

如果深入到设计方面,就会发现虽然做过很多的项目,但是几乎没有可以参考的成功案例,所有的设计哪怕是同类型项目,也几乎要重头开始;编码方面就更加麻烦了,我最深刻的印象就是从业以来我编制了无数的字符串处理函数,有c/c++版本的,有C#版本,有java版本的,还有delphi和早已忘记的vb,当然,更少不了时下流行的js了(这还是好的呢)。一旦到了项目规模较大的时候,我们甚至会在代码流程中迷路,不知道调用从哪里来,不知道逻辑要往哪里跳。

这么多的问题,是广大的处于CMM 1级的软件企业共同存在的问题,当然也会出现在那些CMM2345实际还是CMM1的软件企业中。加入管理手段(比如真正去实施CMM规范)

可以解决大部分的问题,准确地说是可以解决几乎所有的管理问题并缓解大部分的技术问题,但是解决不了所有的问题。

以前bigtall在的公司曾经出现过这种论调“技术是不重要的,市场和管理才是最重要的”,最后公司走入了低谷,好不容易聚集的人才也散了。别人的教训就是自己的经验,bigtall后来进行深刻的反思,认为这里有一个“度”的问题,我们先看两个极端“只有市场和管理但是没有技术”“只有技术没有市场和管理”的后果,一个是“守不住”,一个是“推不了”。其实两者是相辅相成的,技术可

以把市场的门槛推高,市场和管理可以让技术更顺利地发展。所以一个公司没有“最好”的技术,只有“最适合”的技术。一个公司的技术目标应该也只应该是“不断降低公司的成本”。

最明显的就是项目系统设计的重用问题,无论你是CMM多少级,如果没有一个统一的软件架构,重用就会打折扣甚至根本就无法重用。就像南方人北方人沟通要用普通话,今人和古人沟通就必须用相同的文字(顺便鄙视并可怜一下朝鲜、韩国和越南)一样,前后的项目要能够沟通交流,他们就需要一个相同的结构。所以“程序框架”就是公司项目之间的“普通话”,也是项目内部的“润滑剂”。

这里要明确一下“程序框架(Framework)”和“软件架构(Architecture)”之间的区别,简单地说,程序框架是一个可以实际应用的代码集合,而软件架构可以看作是一种抽象的设计。另外,两者的关注面也不一样,程序框架热衷于解决实际运行过程中的问题,甚至会提供工具包或者辅助模块(比如权限系统、日志系统等),而软件架构则集中精力在各个部分(模块、组件等)之间的关系。两者其实是关于同一个事情的不同层次的东西。

我们可以来看一下如果存在程序框架会让文章开头的几个问题解决多少:

1. 如果有程序框架,因为项目的WBS几乎是一致的,所以上一个项目的项目计划可

以直接拿过来使用,而且经过几个项目之后,这个项目计划的模板会越来越细,越

来越实用。

2. 设计过程中,除了需求之外,概要设计、详细设计的重用性会很高。

3. 因为结构一致,代码混乱性会降低到可以接受的程度,而且可以重用上一个项目的

大部分代码。而且逻辑清晰,使得代码相对较小,不容易在代码中迷失。因为代码

逻辑简单有序,所以测试起来会很容易。

4. 降低管理成本,除了项目计划之外,测试计划,QA计划等等都可以重用,如果用

CMM规范,项目评审的速度和质量都会有提高。

要做一个应用程序框架并不是一件容易的事情,一是这方面发展很快,而且水平相对较高,如果没有独到的解决方案,可能自己的框架一出来就过时了。二是应用程序框架涉及的方面较多,考虑清楚并不是一件容易的事情。三则是开发一个应用程序框架需要耗费大量的时间,也就是意味着公司需要花费(你的工资×开发时间+其他)这么多的金钱。

对于小公司来说,除非有着清醒的认识,否则开发自己的应用程序框架可能是自寻死路。bigtall 建议小公司如果.net开发,则直接用Petshop4的框架,如果java开发,则直接使用appfuse

进行开发,如果想要一个新的语言,则直接用Ruby On Rails开发吧。对于php没有建议,不太熟。

现在如果要开发一个应用程序框架,至少需要满足如下的几个条件:

?分层(废话)

?易于测试

?易于扩展,并跟现有的其他系统进行无缝整合。一般要具有AOP、IOC、DI能力。

?易于部署

?具有权限,用户管理能力

?有组织架构、工作流、规则引擎支持

?有页面流转,状态管理能力

?MOF或者MDA能力

?SOA能力

?界面技术的抽象能力(如WebForm,HTML,Ajax,Xml,Rich Web等)

bigtall的应用程序框架设计系列文章准备从简单开始,一步一步记录并呈现给大家bigtall

开发框架的整个过程。文章列表如下:

1. 多层应用之间的数据传递:分层和层间数据传递(上)、分层和层间数据传递(下)

多层架构已经成为了标准,但是数据在穿越各个层次的时候,它的形态有什么变化和规律呢?

2. 界面层的分析和抽象

界面层承载了应用程序所有的可视部分,究竟里边还有多少我们需要关注但是却忽略了的事实?

3. MOF/MDA的支持和程序的设计规范

如果人在根本上是不可靠的,那么就尽可能不用人去做。但是到达这一步,我们还需要告诉机器一些什么东西?

4. 工具!我的工具!

bigtall设计的小工具

5. 待续

应用程序框架设计之二:分层和层间数据传递(上)

class LoginInfoVO{public String name; public String password; public String password2; public String[] roles;},

然后把以前的LoginInfo拆分成三个类:

class LoginInfoBO{public String name; public String password; public RoleInfo[] roles;} class LoginInfoPO{public int loginInfoID; public String name; public String password;} class RoleInfoPO{public int loginInfoID; public String role;}。

至此,我们顺利地引出了三个概念:View Object(VO)、Business Object(BO)、Persistence Object(PO)。他们分别是三层结构的显示层、业务逻辑层和存储层内部使用的数据结构,它们还有一个统称,叫做数据传输对象Data Object(DO)。我们也可以把VO,BO和PO 看成是DO在不同阶段的不同表示形态。当一个DO从显示层开始穿越整个系统的时候,它的形态和结构就开始变化,从VO转变到BO,最终到PO,但是这个过程不一定是可逆的,这个过程如果反向,从PO->BO->VO,很可能就对应不同的对象了。比如当输入错误的时候,回馈页面可能就需要增加一个错误信息提示。虽然实际使用的时候,我们经常会忽略这种细微的差异性,实际上这个错误信息,只对显示层有意义。

DO的转换规律一般可以总结为如下的几个类型,实际变化则可以是各种类型的组合:?属性内容的减少

属性内容的增减在DO不同形态之间的转变时候经常会发生。比如上例中添加用户LoginInfo 对象的VO转换到BO的时候,就需要丢弃“重复输入密码”的属性。有些VO对象甚至根本不需要转换成BO。在BO转换成PO的时候同样也会有属性内容减少的情况出现,比如“部门”这类树状层次结构对象,因为运行效率的因素,也许会需要BO中有“下级部门列表”,实际存储到数据库的时候,PO只需要一个“上级部门ID”就可以了。

?对象内容的填充或者增加

属性内容同样会有可能增加,但是在系统处理DO转换的时候,属性增加可能就意味着需要进行额外的查询和填充,比如我们使用“用户名”和“密码”进行登录的时候,最终系统需要通过数据库查询得到并且存储“用户ID”,以此来保证用户的唯一性。又比如提交的数据存在校验错误,我们可能需要重新刷新该页面,并且增加新属性“ErrorMessage”,以便把它显示在界面上,提醒用户注意。

?对象的拆分和组合

我们可以看上面最后一个“添加用户”的例子,一个LoginInfo的BO转化为PO的时候被拆分成了2个对象,一个存放基本的用户信息,一个存放对应的Role信息。通常对象拆分的时候,常常需要填充或者补足新对象的内容;而对象合并的时候,常常出现内容减少的情况。

?对象或者属性类型的变化

出现对象属性类型的变化在VO到BO的转换中比较常见,比如把用户输入的生日转化为一个真正的DateTime类型。

?属性名称的变化

属性名称在转换过程中会有变化,一般这种情况应该尽可能不要出现,但是在项目重构的时候出现的概率较大。

除了DO不同形态之间的转换规律之外,不同形态内部还有不同的工作要做:?校验

“不要相信任何用户的输入”,这是设计程序跟用户进行交互操作时候永远需要遵守的一个原则。也就是所有的外部输入都需要进行正确性的校验。校验器是分为两个层次,一个是属性

层次的校验,比如“年龄”只能0到150之间有效。另外一个是对象层次的校验,或者说跨属性层次的校验,比如“年份输入闰年的时候,2月可以有29日”等。

校验并不是一个单纯的问题,几乎所有的业务逻辑校验基本都需要一次完整的贯穿所有层次的调用。代价颇大。这个也是为什么我们在显示层做很多事先校验,而一旦进入业务逻辑层的时候,校验就经常会被“事后校验”代替了,人们会使用抛出异常的方法来代替“事前检查”。突然想起来有一句闲话要讲。这个分析过程其实在一年前就完成了,那个时候正好沸沸扬扬的SOA满天飞,当把这个DO形态分析完毕之后,回头看SOA发现它并不属于表现层,而是属于业务逻辑层,换句话说它使用的DO必须是BO而不是VO。而所谓的SOA也不过就是分布的业务逻辑层而已。

因为以下的部分要花费较多的时间查找,bigtall怕文章搁久馊了,也怕各位看官等得太久,就分两部分发吧。下篇我们着重分析现net平台和java平台的几个架构在DO形态上的对比,还要谈一个实用的问题,是不是需要对象ID的问题。

应用程序框架设计之二:分层和层间数据传递(下)

看了上篇之后大家的留言,好多人觉得DO分这么多形态,给这么多名词,可能在实际中没有用处。其实相比.net而言,java在架构上的功力要深厚许多,要谈架构如果避开java不谈的话,就会肤浅许多。这一点上net可能还要许多年才能赶上(如果不加倍努力,恐怕永远就落后于java了)。至于说VO、BO、PO没有人分那么仔细,恐怕只是大家自己没有意识到自己在使用吧。正好下篇要对流行的架构进行分析,bigtall就斗胆show一下分析结果了。

针对在DO的形态转换问题,bigtall选择了几个流行的架构进行了分析,主要就是想要看看他们是怎么做的,这几个架构分别是Petshop 4.0, Struts, Tapestry, Spring MVC。

首先我们看Petshop4,项目中包含22个子项目,我们按照三层架构的层次分类对这些子项目归类:

显示层:WEB CacheDependencyFactory ICacheDependency TableCacheDependency 业务层:Model BLL IBLLStrategy IMessaging MessagingFactory MSMQMessaging OrderProcessor

存储层:DALFactory IDAL DBUtility OracleDAL SQLServerDAL

权限相关的独立部分:SQLProfileDAL ProfileDALFactory OracleProfileDAL IProfileDAL Membership Profile

大家注意业务层的Model,里边定义了项目中使用到的所有数据对象,典型的BO。因为https://www.doczj.com/doc/ca12667753.html,的组件化设计思想,导致没有明确的VO概念(被分散在诸如textBox1.Text中了)。但是我们看WEB项目中的AddressForm自定义控件代码:

public partial class AddressForm : https://www.doczj.com/doc/ca12667753.html,erControl {

public AddressInfo Address {

get { ....

string firstName = WebUtility.InputText(txtFirstName.Text, 50);

......

return new AddressInfo(firstName, lastName, address1, address2, city, state, zip, country, phone, email);

}

set {

if(value != null) {

...

if(!string.IsNullOrEmpty(value.FirstName))

txtFirstName.Text = value.FirstName;

...

}

}

}

}

分明就是一个典型的VO到BO之间相互映射的代码。同样我们看同一project下的CheckOut.aspx.cs也存在类似的转换代码:从WEB界面控件中提取数据,构建OrderInfo,最终传入SQLServerDAL或者OracleDAL的Order类中,大家可以看到如下的代码:public void Insert(OrderInfo order) {...

orderParms[0].Value = https://www.doczj.com/doc/ca12667753.html,erId;

...

orderParms[19].Value = order.AuthorizationNumber.Value;

...

}

这个同样是一个典型的BO到PO的转换过程,只不过我们用类似Hashtable的结构代替了自定义的PO对象而已。

参考文献:Microsoft .NET Pet Shop 4 架构与技术分析

接下来我们来看Struts。所有的WEB提交数据被放置到所谓的ActionForm对象中,很多

人为了方便,直接自定义了一个类似Hashtable的结构来做通用的ActionForm了。这个ActionForm就是我们所说的VO。然后ActionForm传递给Action进行处理,一般Action

都会把ActionForm内容作一次校验,然后构建BO,传递到Service层进行处理,Service 层进行处理之后,调用DAO对象存储。因为java程序基本都使用了hibernate或者ibatis

等模块,所以BO到PO的转换被封装掉了。

这里很多人使用struts或者其他java框架的时候,经常在Action中添加了过多的业务逻辑代码,把原本属于界面层后端的Action做成了业务层的东西,然后图方便对Service层代

码只是做一个简单的转发调用,类似boolean XXService(XXBO bo) { return dao.save(bo); },实在是大错特错了。

说明:bigtall并不认同参考文献中认为的Action属于业务逻辑层。我认为业务逻辑层判断

的一个标准是不加修改或者加一个简单的wrap,就可以暴露服务作为SOA。Action显然不满足这样的要求。退一步如果非要说Action属于业务逻辑层,那也只能是一个专门针对struts的Service封装接口,不合适包含大量的业务逻辑代码。

Struts返回数据到界面层的方法是通过把BO填入到一个Hashtable结构,由界面jsp直接使用其值,就跟asp用法一样。

参考文献:Struts,MVC 的一种开放源码实现

Tapestry框架是一个和https://www.doczj.com/doc/ca12667753.html,采用了相似设计思想的组件化的web框架。一个web请求提交到服务器的时候,tapestry把请求中的内容填入到页面对应的BasePage派生类对象的属性中,这是一个自动的VO填充过程(类似https://www.doczj.com/doc/ca12667753.html,中把用户输入的内容填充到对应的TextBox对象的Text属性中)。然后这个BasePage派生类对象把自己的属性最终填充成

一个BO,传递到Service层,Service层调用DAO对象通过Hibernate或者ibatis存储到数据库中。

返回数据到界面层使用ognl表达式,基本原理类似把BO或者VO填入Hashtable结构,然后酌情用ognl表达式选取。比asp/jsp用法要利索一些,因为是组件化,所以很整齐。参考文献:了解Tapestry,第 1 部分,了解Tapestry,第 2 部分

Spring作为No.1的AOP框架,灵活性和可扩展性是它最大的优点。在Spring MVC框架中,web请求通过参数HttpServletRequest(类似一个Hashtable结构)存放所有的用户请求数据,传递给Controller处理。如果Controller是从SimpleFormController派生而来,则可以在jsp中使用bind机制自动把提交数据填充到一个指定的对象中(也就是VO了),否则就要手工从HttpServletRequest中获取。在Controller中可以把数据传递给Service层处理了。Service层的处理和其它java框架相同。

返回数据到界面层可以使用很多种方法,看使用不同的ViewResolver而定,可以用jsp,也可以用freemarker脚本或者velocity脚本,也可以自己定义一种新型的界面层描述。

参考文献:一步一步开发Spring Framework MVC 应用程序

从以上简单几个架构的分析,我们可以明显看出VO/BO/PO的相互转换过程。但是都有一个特点,就是对VO转BO有明确的处理和包装,但是对BO转VO忽略掉了,直接使用暴露BO对象,使用ognl或者其他技术直接取值。https://www.doczj.com/doc/ca12667753.html,的WebForm相对复杂一点,但是也同样避开了VO的问题,但是赋值放到了类代码里边,灵活性相对少了一些。而BO转PO的问题,都倾向于用类似ORM的模块来处理。

DO形态之间的转换讲了一大半,但是一个很实际的问题需要我们来面对,就是数据库ID 的暴露问题。根据我们的理论,ID实际是属于PO的东西(以下简称POID),其实VO和BO中并不需要这个POID,另外就是暴露这个POID之后会存在很多的隐患,一旦程序检查不严格,很容易被人假造一个请求去修改不应该的数据。但是我们真的可以抛弃POID不用吗?bigtall同样用一个例子来说明。

bigtall依旧使用上篇的LoginInfo的例子,不过这次的场景是查询特定的LoginInfo并修改之。这个场景包含了如下的几个过程:

1. 输入查询条件LoginInfoQuery到服务层,并返回LoginInfoBO[]对象数组。

2. 展示LoginInfoBO的数据在界面层,并等待修改

3. 保存界面层提交的修改之后的LoginInfoBO到数据库

这里就暴露了一个问题,如何让系统了解第3步和第2步的LoginInfoBO就是同一个对象?同样问题也存在BO和PO的转换中,如何把特定的BO转化为特定的PO?这个也就是我们现在为什么摆脱不掉这个POID的根本原因了。一句话,没有POID,我们无法解决对象映射的问题。

真的我们只能通过POID来实现对象映射吗?不是!我们有很多方法可以解决这个问题,只是不如直接使用POID来的方便。比如我们是不是可以用一个Hashtable来保存VP、BO 和PO映射关系?当然可以,但是我想我们可以用更好的方法,因为这个问题归根到底就是对象唯一标识(以下简称OID)的问题。

要解决这个问题,我们需要两个条件:一是对象有一个唯一的标识序号OID,二是保存VO 和BO、BO和PO对象之间的唯一标识映射关系。直接使用POID可以很容易满足这两个条件,但是带来了极大的程序风险,一旦界面层保存的POID被非法修改的话,程序对这方面的防范很困难,而且很多程序根本就是完全假设界面层POID是可靠的。但是如果程序应用在金融、财务等领域,操作人员就会极有可能有动机去修改这个界面层(尤其是浏览器中)的POID。而且从一般情况下他们会很容易推卸责任(程序bug嘛!要赔偿也是软件开发商赔偿)。所以,可靠的做法就是避免把POID当作通用的OID,而是给每一个对象分配一个OID,同时保证OID之间的简单映射关系。

bigtall给出的OID设计是这样的:所有的DO对象都继承接口IIdentitable,接口IIdentitable 有唯一的属性OID,对象构造的时候,由ClassFactory或者自身的构造函数自动给OID赋

值,赋值的算法是这样的:使用session id的简单转换作为key,把POID加入一个校验位(记得身份证号码最后的X吗?)之后的新POID用DES算法加密,这个加密之后的结果就作为BO的OID,如果需要,同样的步骤可以用作BOID到VOID的转换中。用这个算法可以保证不同用户的不同次登录的session id是完全不一样的,所以无法通过简单复制获得OID。其次要配合检查程序,避免用户查询到不属于自己业务范畴的数据,并尽可能对操作对象进行权限检查。

至此,bigtall把DO的形态变化讲完了,其实还有另外一个重要的概念,DO的设计。这个设计重要吗?答案是很重要!请看bigtall的“应用程序框架设计之三:数据传递对象的类型和设计”。

C语言程序设计第三版习题库答案

C 语言程序设计(第三版)习题库 1、设圆半径r=,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用scanf 输入数据,输出计算结果,输出时要求文字说明,取小数点后两位数字。请编程序。 #include<> main(){ floatr,h,C1,Sa,Sb,Va,Vb; scanf(__”%f ”__,&r); scanf(”%d ”,__&h _);; C1=2**r; Sa=*r*r; Sb=4*Sa; Va=4**r*r*r/3; Vb=Sa*h; printf(___”Cl=%.2fSa=%.2fSb=%.2fVa=%.2fVb=%.2f ”,Cl,Sa,Sb,Va,Vb ); } 2、输入一个华氏温度,要求输出摄氏温度。公式为c=5(F-32)/9 输出要求有文字说明,取位2小数。 #include<> main(){ floatF,c; scanf("%f",&F); ____c=5*(F-32)/9______; printf("c=%.2f",c); } 3、有一函数:?? ???≥-<≤-<=10113101121x x x x x x y 写一程序,输入x 值,输出y 值。 #include<> main(){ intx,y; printf("输入x :"); scanf("%d",&x); if(x<1){/*x<1*/ y=x; printf("x=%3d,y=x=%d\n",x,y);

}elseif(____x<10_______){/*1≤x-10*/ _____y=2*x-1_______; printf("x=%3d,y=2*x-1=%d\n",x,y); }else{/*x≥10*/ y=3*x-11; printf("x=%3d,y=3*x-11=%d\n",x#include"" main() { intx,y; scanf("%d",&x); if(x<1) {y=x;} elseif(x>=1&&x<10) {y=2*x-1;} else {y=3*x-11;} printf("%d",y); }#include"" main() { intx,y; scanf("%d",&x); if(x<1) {y=x;} elseif(x>=1&&x<10) {y=2*x-1;} else {y=3*x-11;} printf("%d\n",y); }#include"" main() { intx,y; scanf("%d",&x); if(x<1) {y=x;} elseif(x>=1&&x<10) {y=2*x-1;} else {y=3*x-11;} printf("%d",y); }scanf("%d",&x);

PLC-顺控程序设计及调试实验

本实验所使用梯形图下载 PLC 顺控程序设计及调试实验 一、实验目的 1.学习和掌握PLC的实际操作方法; 2.学习和掌握PLC顺控程序的设计及调试方法; 二、实验原理 PLC的主要功能之一是逻辑控制和顺序控制,本实验就是通过对三个灯的顺序通断电的控制实验,达到学习和掌握计数器、定时器的使用方法以及逻辑控制的编程和调试方法。 当按下启动按钮后,顺序控制的动作循环如图3.1 所示。 图 3.1 顺序控制动作循环图 由图3.1 可知:除三个灯亮有一定顺序要求外,还有时间和计数要求,即要使用PLC 的内部资源时间器和计数器。 顺序控制的编程方法有常用的经验法和状态转移图两种方法。 经验法就是利用继电器接触器电路的设计方法进行程序设计,这种方法设计的程序往往不够完整,调试工作量大。 状态转移图程序设计方法是一种类似于动作循环图的程序表达方式,使用PLC专用元件——状态元件S,具有逻辑顺序关系清楚,调试方便的特点。 实验电路原理图如图3.2 所示。

图3.2 实验电路原理图 顺序工作的原理为:当按下“启动”按钮时,三个灯按图3.1 动作顺序自动循环三次而停止。在循环的过程中,按下“停止”按钮,循环立即停止,所有灯熄灭。 三、实验步骤 1.在断电的情况下,按图3.3接线(虚线外的连线已接好); 2.经老师检查合格后方接通断路器QF1; 3.运行工具软件FXGP-WIN,输入已编辑好的程序梯形图; 4.执行“工具/转换”将梯形图转换为指令代码; 5.执行“PLC/传送/写出”,将控制程序传给PLC; 6.执行“PLC/运行”,执行控制程序,观察信号灯的亮灭情况; 7.如果信号灯的亮灭情况不正确,须进行程序修改和调试。可借助“梯形图监控”和“元件监控”两种方法对程序进行监控、调试,直至程序正确。

C语言程序设计试题集与答案解析

一.填空 1. 每个C程序都必须有且仅有一个________ 函数。 2. C语言程序开发到执行通常要经过6个阶段即编辑、预处理、________、链接、加载和执行。 3. 软件是程序,以及______、使用和维护所需要的所有文档。 4. 国标中规定:“计算机程序是按照具体要求产生的适合于计算机处理的_________”。 5. 程序设计语言按照书写形式,以及思维方式的不同一般分为低级语言和________两大类。 6. C语言是由________组成的。 7. C语言的函数可分为主函数main、标准库函数和_________。 8. 一个函数是由两部分组成的,即:________和函数体。 9. 编译是将C语言所编写的源程序________成机器代码,也称为建立目标代码程序的过程。 10. 程序是由某种程序设计语言编制出来,体现了编程者的控制思想和对计算机执行操作 的要求。不同的任务功能,就会需求不同的软件程序,如:控制计算机本身软硬件协调工作,并使其设备充分发挥效力,方便用户使用的系统软件程序,称为操作系统;而为办公自动化(OA)、管理信息系统(MIS)、人工智能、电子商务、网络互联等等应用而开发的软件程序,统称为_________。 11. 机器语言是以__________形式表示的机器基本指令的集合,是计算机系统唯一不需要翻译可以直接识别和执行的程序设计语言。 12. 与机器语言相比,使用汇编语言来编写程序可以用_______来表示指令的操作码和操作对 象,也可以用标号和符号来代替地址、常量和变量。

13. 在编译程序之前,凡以____开头的代码行都先由预处理程序预处理。 14. C程序的执行均是由执行_________开始。 15. 函数体即为包含在{}内的部分。它分为________和为完成功能任务由若干个C 语句 组成的执行部分。 16. C语言程序中一条简单语句是以________字符作为结束符的。 17. C语言是结构化、________的程序设计语言。 18. 由于计算机硬件不能直接识别高级语言中的语句,因此,必须经过“_______程序”,将用高级语言编写的程序翻译成计算机硬件所能识别的机器语言程序方可执行。 19. 用高级语言编写的程序需翻译成计算机硬件所能识别的机器语言程序方可执行。所以 说,用高级语言进行程序设计,其编程效率高,方便易用,但_______没有低级语言高。 20.

网页设计-页面布局篇(Css+Div)

网页设计-页面布局篇(Css+Div) >>目录<< 第一步:规划网站,本教程将以图示为例构建网站; 第二步:创建html模板及文件目录等; 第三步:将网站分为五个div,网页基本布局的基础; 第四步:网页布局与div浮动等; 第五步:网页主要框架之外的附加结构的布局与表现; 第六步:页面内的基本文本的样式(css)设置; 第七步:网站头部图标与logo部分的设计; 第八步:页脚信息(版权等)的表现设置; 第九步:导航条的制作(较难); 第十步:解决各种浏览器之间的兼容性(暂不讨论)

第一步:规划网站,本教程将以图示为例构建网站1.规划网站,本教程将以下图为例构建网站。

其基本布局见下图: 主要由五个部分构成: 1.Main Navigation导航条,具有按钮特效。Width: 760px Height: 50px 2.Header网站头部图标,包含网站的logo和站名。 Width: 760px Height: 150px 3.Content网站的主要内容。Width: 480px Height: Changes depending on content 4.Sidebar边框,一些附加信息。Width: 280px Height: Changes depending on 5.Footer网站底栏,包含版权信息等。Width: 760px Height: 66px 第二步:创建html模板及文件目录等 1.创建html模板。代码如下: CompanyName - PageName

PLC程序设计9大要求

P L C程序设计9大要求(总6 页) -CAL-FENGHAI.-(YICAI)-Company One1 -CAL-本页仅作为文档封面,使用请直接删除

PLC程序设计9大要求 一套完整的PLC程序,并不仅仅是使系统能够运行起来这么简单,它也需要完整的注释、精良的架构、良好的可扩展性、完备的报警保护系统、运行前的模拟系统。最好的评价标准是实践。看程序能否达到预期的目的。但这还不够。因为能达到目的的程序还有好与不好之分。到底什么样的程序才算好的程序呢大体有如下几个方面: 一、简短性 使PLC程序尽可能简短,也是应追求 的目标。 简短的程序可以节省用户存储区;多 数情况下也可节省执行时间,提高对输入 的响应速度,还可提高程序的可读性。 程序是否简短,一般可用程序所用的 指令条数衡量,用的条数少,程序自然就 简短。要想程序简短,从大的方面讲, 要优化程序结构,用流程控制指令简化程 序,从小的方面讲还要用功能强的指令取 代功能单一的指令,以及注意指令的安排 顺序等。 二、省时性 程序简短可以节省程序运行时间, 但简短与省时并不完全是一回事。因为 运行程序时间虽与程序所拥有指令条数 有关,而且还与所使用的是什么指令有 关。PLC指令不同,执行的时间也不 同。而且,有的指令,在逻辑条件ON 时执行与在OFF时执行其时间也不同。另外,由于使用了流程控制指令,在程

序中,不是所有指令都要执行等。所以,运行程序的时间计算是较复杂的。但要求其平均时间少,最大时间也不太长是必要的。这样可提高PLC的响应速度。 省时的关键是用好流程控制指令。按情况确定一些必须执行的指令,作必备部分,其余的可依程序进行,有选择地执行,或作些分时工作的设计,避免最大时间太长等。 三、可读性 要求所设计的程序可读性要好。这不仅便于程序 设计者加深对程序的理解,便于调试,而且,还要便 于别人读懂你的程序,便于使用者维护。必要时,也 可使程序推广。 要使程序可读性好,所设计的程序就要尽可能清 晰。要注意层次,实现模块化,以至于用面向对象的方法进行设计。要多用一些标准的设计。 如遇特殊情况下采用语言编程,多数情况下请使用梯形图编程,方便阅读。再就是I/O分配要有规律性,便于记忆与理解。必要时,还要做一些注释工作。内部器件的使用也要讲规律性,不要随便地拿来就用。

网页设计库和模板的应用

52门户网站实训指导(一) 实训目标: 1 掌握门户网站的设计技巧。 2 掌握库项目和模板的制作及使用方法。 实训步骤: 一创建站点。 在Dreamweaver CS3中定义一个本地站点,命名为“52menhu”,存储位置为:D:\sample\52menhu\,并将本项目素材文件夹下的图像文件夹image复制到网站的根文件夹下。然后,选择“窗口”→“资源”命令或者按F11键,打开“资源”面板。如图1。 图1 资源面板图2 新建库项目 二创建库文件。 单击“资源”面板右下角的按钮,新建一个库,然后在列表框中输入库的名称banner并加以确认。使用同样的方法创建名称为foot

的库文件。 二、制作主页的Banner 基本步骤: 1.在“资源”面板中双击打开,找到库文件banner.lbi。 2.插入一个3行1列,宽为760像素的表格。 3.设置表格属性(具体步骤参照书讲解)。 4.插入图片,输入文本。 最终效果如图3所示: 图3 banner效果图 制作页脚 基本步骤: (1)在资源面板中打开库文件foot.lbi; (2)插入一个3行1列,宽为760像素的表格; (3)设置表格属性,参数如图4; 图4 表格属性 (4)输入文本,并保存文件。效果如图5所示。

图5 页脚效果图 ●四、库项目的应用 ●1.插入库文件 新建页面myindex.html,依据前面做的banner.lib和foot.lib 文件充实首页面myindex.html。打开“资源”面板,点击左下角的“插入”按钮,分别将两个库项目分别插入到页面对应位置。 2.编辑库项目 在资源面板中单击“编辑”按钮,可打开库项目进行编辑。编辑的方法同编辑普通页面一样。 任务2 制作女性频道子页 1、使用模板建立子页 操作步骤: (1)将素材中的首页复制到站点中。选择“文件”→“另存为模板”命令,将已有页面另存为模板,命名为moban1。 2、定义可编辑区域 操作步骤: (1)选择“插入”→“常用”命令,单击“可编辑区域”按钮或者选择“插入”→“模板对象”→“可编辑区域”命令,打开“新建可编辑区域”对话框。

c语言程序设计第五版习题答案

习题解析与答案 第1章C语言概述 一.简答题 1.概述C语言的主要特点。 【解答】 (1)语言简洁、紧凑,使用方便、灵活。 (2)数据类型丰富,表达能力强。 (3)运算符多样。C语言中的运算符包含的范围非常广泛。 (4)具有结构化的控制语句。如if…else语句、while语句、do while语句、switch 语句、for语句。 (5)允许直接访问物理地址。C语言中含有的位和指针运算,能够直接对内存地址进行访问操作。 (6)所生成的目标代码质量高,可移植性好。 2.构成C语言程序的基本单位是什么?它由哪几部分组成? 【解答】函数是构成C语言程序的基本单位。一个完整的C程序一般由文件包含、宏定义、函数说明、变量和一个或若干个函数组成。 3.C语言程序的运行一般要经过哪几个步骤? 【解答】(1)编辑;(2)编译;(3)连接,生成EXE文件;(4)执行。 二.运行程序写结果 1.输入下面程序并运行。 main() { int a1,a2,x; a1=100; a2=50; x=a1-a2; printf(″x=%d\n″,x); } 【解答】运行结果为:x=50 2.输入下面程序并运行。 main() { int a1,a2,x; a1=10; a2=20; x=a1*a2; printf(″a1=%d,a2=%d\n″,a1,a2); printf(″x=%d\n″,x); } 【解答】运行结果为:a1=10,a2=20 x=200 3.输入下面程序并运行。

#include main() { printf("******\n"); printf(" *****\n"); printf(" ****\n"); printf(" ***\n"); printf(" **\n"); printf(" *\n"); } 【解答】运行结果为:****** ***** **** *** ** * 思考:可以修改程序,使之输出平行四边形,等腰三角形等图形。 三.编程题 1.参照本章例题,编写一个C程序,用于显示如下信息: ************************* I love C programs! ************************* 【分析与提示】 ①要有文件包含语句#include 。C语言中没有数据的输入、输出等功能,数据的输入、输出都是通过调用系统提供的库函数scanf和printf等来实现的。这些函数的说明都包括在stdio.h文件中。 ②main是主函数的名称。用{}括起来的内容是函数体,函数体由若干条语句组成,这是计算机要执行的部分,每条语句以分号“;”结束。 ③注意显示的信息有三行,所以要用到换行符“\n”。 参考代码: #include main() { printf("************************\n"); printf(" I love C programs! \n"); printf("************************\n"); }

(完整版)C语言程序设计练习及答案

《C语言程序设计》练习及答案 得分评卷人复查人 一、单选题,每小题1分,共60分(将正确答案的序号写在题目的括号中)。 1、结构化程序设计的三种基本控制结构是(D )。 A、主程序、子程序、函数 B、输入、处理、输出 C、调用,返回,转移 D、顺序、选择、循环 2、下列关于C程序变量的叙述, ( D )是错误的。 A、变量名必须由字母或下划线开头。 B、程序中的变量必须在被使用之前定义。 C、不同的基本类型的变量之间可以混合运算。 D、变量的数据类型决定变量的"作用域"。 3、能将C语言编写的源程序转换为目标程序的软件是(C )。 A、编辑程序 B、汇编程序 C、编译程序 D、解释程序 4、以下符号中,合法的用户标识符是( D )。 A、-p B、int C、3ab D、_xt_ 5、以下选项中,与m=n++完全等价的表达式是( C )。 A、m=++n B、m+=n+1 C、m=n, n=n+1 D、n=n+1,m=n 6、若有定义:int aa[8];。则以下表达式中不能代表数组元aa[1]的地址的是(C )。 A、&aa[0]+1 B、&aa[1] C、&aa[0]++ D、aa+1 7、表达式!5&(7+3)&&(4+5)的值是(A)。 A、0 B、1 C、5 D、9 8、以下选项中非法的C语言表达式是(A )。 A、x+1=x+1 B、0<=x<100 C、i=j==0 D、(char)(65+3) 9、在TURBO C中, int类型变量所占字节数是(B )。 A、1 B、2 C、4 D、8 10、C语言中基本的数据类型包括(B)。 A、整型,实型,逻辑型 B、整型,实型,字符型

PLC程序设计常用的方法

PLC程序设计常用的方法 PLC程序设计常用的方法主要有经验设计法、继电器控制电路转换为梯形图法、逻辑设计法、顺序控制设计法等。 1. 经验设计法 经验设计法即在一些典型的控制电路程序的基础上,根据被控制对象的具体要求,进行选择组合,并多次反复调试和修改梯形图,有时需增加一些辅助触点和中间编程环节,才能达到控制要求。这种方法没有规律可遵循,设计所用的时间和设计质量与设计者的经验有很大的关系,所以称为经验设计法。经验设计法用于较简单的梯形图设计。应用经验设计法必须熟记一些典型的控制电路,如起保停电路、脉冲发生电路等 2. 继电器控制电路转换为梯形图法 继电器接触器控制系统经过长期的使用,已有一套能完成系统要求的控制功能并经过验证的控制电路图,而PLC控制的梯形图和继电器接触器控制电路图很相似,因此可以直接将经过验证的继电器接触器控制电路图转换成梯形图。主要步骤如下: (1)熟悉现有的继电器控制线路。 (2)对照PLC的I/O端子接线图,将继电器电路图上的被控器件(如接触器线圈、指示灯、电磁阀等)换成接线图上对应的输出点的编号,将电路图上的输入装置(如传感器、按钮开关、行程开关等)触点都换成对应的输入点的编号。 (3)将继电器电路图中的中间继电器、定时器,用PLC的辅助继电器、定时器来代替。 (4)画出全部梯形图,并予以简化和修改。 这种方法对简单的控制系统是可行的,比较方便,但较复杂的控制电路,就不适用了。 3. 逻辑设计法 逻辑设计法是以布尔代数为理论基础,根据生产过程中各工步之间的各个检测元件(如行程开关、传感器等)状态的变化,列出检测元件的状态表,确定所需的中间记忆元件,再列出各执行元件的工序表,然后写出检测元件、中间记忆元件和执行元件的逻辑表达式,再转换成梯形图。该方法在单一的条件控制系统中,非常好用,相当于组合逻辑电路,但和时间有关的控制系统中,就很复杂。 4. 顺序控制设计法 根据功能流程图,以步为核心,从起始步开始一步一步地设计下去,直至完成。此法的关键是画出功能流程图。首先将被控制对象的工作过程按输出状态的变化分为若干步,并指出工步之间的转换条件和每个工步的控制对象。这种工艺流程图集中了工作的全部信息。在进行程序设计时,可以用中间继电器M来记忆工步,一步一步地顺序进行,也可以用顺序控制指令来实现。 (1)单流程及编程方法

C语言程序设计第二版习题参考答案

C语言程序设计第二版 习题参考答案 Document serial number【LGGKGB-LGG98YT-LGGT8CB-LGUT-

C语言程序设计习题参考答案 习题 1 一、判断题 1.在计算机中,小数点和正负号都有专用部件来保存和表示。 2.二进制是由0和1两个数字组成的进制方式。 3.二进制数的逻辑运算是按位进行的,位与位之间没有进位和借位的关系。 4.在整数的二进制表示方法中,0的原码、反码都有两种形式。 5.有符号数有三种表示法:原码、反码和补码。 6.常用字符的ASCII码值从小到大的排列规律是:空格、阿拉伯数字、大写英文字母、小写英文字母。 解:1.F2.T 3.T 4.T 5.T 6.T 二、单选题 1.在计算机中,最适合进行数值加减运算的数值编码是。 A. 原码 B. 反码 C. 补码 D. 移码 2.已知英文小写字母m的ASCII码为十进制数109,则英文小写字母y的ASCII 码为十进制数。 A. 112 B. 120 C. 121 D. 122 3.关于ASCII码,在计算机中的表示方法准确地描述是。 A. 使用8位二进制数,最右边一位为1 B. 使用8位二进制数,最左边一位为1 C. 使用8位二进制数,最右边一位为0 D. 使用8位二进制数,最左边一位为0 4.设在机器字长4位,X=0111B,Y=1011B,则下列逻辑运算中,正确的是 ___________。 A. X∧Y=1000 B. X∨Y=1111 C. X⊕Y=0011 D. ˉY=1000 5.下列叙述中正确的是()。 A.高级语言就是机器语言 B.汇编语言程序、高级语言程序都是计算机程序,但只有机器语言程序才是计算机可以直接识别并执行的程序 C.C语言因为具有汇编语言的一些特性,所以是汇编语言的一种 D.C源程序经过编译、连接,若正确,执行后就能得到正确的运行结果6.用C语言编写的源程序经过编译后,若没有产生编译错误,则系统将()。 A.生成可执行文件B.生成目标文件 C.输出运行结果D.自动保存源文件 7.下列叙述中不正确的是()。 A.main函数在C程序中必须有且只有一个 B. C程序的执行从main函数开始,所以main函数必须放在程序最前面 C. 函数可以带参数,也可以不带参数。

网页设计的几种布局类型

网页设计的几种布局类型 发表时间:2012-12-17 17:52:4 作者:admin 怎样布局才好。如果内容非常多,就要考虑用“国字型”或拐角型;而如果内容不算太多而一些说明性的东西比较多,则可以考虑标题正文型;那几种框架结构的一个共同特点就是浏览方便,速度快,但结构变化不灵活;而如果是一个企业网站想展示一下企业形象或个人主页想展示个人风采,封面性是首选;Flash 型更灵活一些,好的Flash大大丰富了网页,但是它不能表达过多的文字信息。网页布局大致可分为“国”字型、拐角型、标题正文型、左右框架型、上下框架型、综合框架型、封面型、Flash型、变化型,下面分别论述。 “国”字型:也可以称为“同”字型,是一些大型网站所喜欢的类型,即最上面是网站的标题以及横幅广告条,接下来就是网站的主要内容,左右分列一些两小条内容,中间是主要部分,与左右一起罗列到底,最下面是网站的一些基本信息、联系方式、版权声明等。这种结构是我们在网上见到的差不多最多的一种结构类型。 拐角型:这种结构与上一种其实只是形式上的区别,其实是很相近的,上面是标题及广告横幅,接下来的左侧是一窄列链接等,右列是很宽的正文,下面也是一些网站的辅助信息。在这种类型中,一种很常见的类型是最上面是标题及广告,左侧是导航链接。 标题正文型:这种类型即最上面是标题或类似的一些东西,下面是正文,比如一些文章页面或注册页面等就是这种类。 左右框架型:这是一种左右为分别两页的框架结构,一般左面是导航链接,有时最上面会有一个小的标题或标致,右面是正文。我们见到的大部分的大型论坛都是这种结构的,有一些企业网站也喜欢采用。这种类型结构非常清晰,一目了

C语言程序设计框架.

说明:除了main(函数,其它函数和变量必须改名。 #include "stdio.h" #include "stdlib.h" #include "conio.h" void showmenu( { system("cls"; printf("********************************************************\n"; printf("* 欢迎进入C语言模块化案例系统 *\n"; printf("* *\n"; printf("* 制作人:XXXXXX *\n"; printf("* 日期:2011年5月23日--27日 *\n"; printf("********************************************************\n"; printf("\n"; printf("\t\t*************************\n"; printf("\t\t* C语言模块化案例系统 *\n"; printf("\t\t* 1. 选择结构 *\n"; printf("\t\t* 2. 循环结构 *\n"; printf("\t\t* 0. 退出系统 *\n"; printf("\t\t*************************\n"; printf("请选择相应模块的编号(0-2:"; } main( {

void showmenu(,select(,repeat(,submenu1(,submenu2(; void sel1(,sel2(,sel3(,sel4(,rep1(,rep2(,rep3(,rep4(; int choice; showmenu(; scanf("%d",&choice; while(choice!=0 { switch(choice { case 1: select(;break; case 2: repeat(;break; default:printf("输入数据有误!请重新输入。\n"; } showmenu(; scanf("%d",&choice; } printf("\n谢谢您使用本系统!\n"; } void select( { int ch1; submenu1(; scanf("%d",&ch1; while(ch1!=0 {

网页设计与制作

Web考点 一、判断、单选(20*2’)、填空 1、Window对象表示一个浏览器窗口或一个框架,在JavaScript中,Window对象是全局对 象,所有的表达式都在的那个齐纳的环境中计算。就是说,要引用当前窗口根本不需要特殊的语法,可以把那个窗口的属性作为全局变量来声明。例如,可以只写document 和alert,不必写成window.document和window.alert()。 2、Document对象 每个载入浏览器的HTML文档都会成为Document对象。Document对象使我们可以从脚本中对HTML页面中的所有元素进行访问。 提示:Document对象是Window对象的一部分,可通过window.document属性对其进行访问。又代表了整个HTML文档,可以来访问网页中的页面中的所有元素。 Document.childNodes 包含着document.documentElement 3、JavaScript不可以增加类型(弱类型)。C#是强类型语言,声明变量要指定类型。 4、Html.CSS.DOM标准是由https://www.doczj.com/doc/ca12667753.html,指定的。 JavaScript标准是由Ecma制定的。 C#、https://www.doczj.com/doc/ca12667753.html,由微软制定的。 5、Hypertext transport protocol——HTTP协议。 超文本传送协议,是万维网(world wide web)交换信息的基础。它允许将超文本标记语言(HTML)文档从Web服务器传送到Web浏览器。HTTP允许输入任意类型的数据对象。正在传输的类型由Content-Type加以标记。 6、相对路径(Relative Path) (1)如何表示同级目录的文件 2.html和 3.html在同一个文件下,如果2.html链接到3.html,可以在2.html中这样写:同目录下文件间互相链接; ../代表一级上级目录路(间隔一个目录) ../../代表二级上级目录(间隔两个目录),比如4,html链接到1.html,可以在4,html中这样写:链接到上级目录的上级目录中的文件。 (2)如何表示下级目录文件 2.html和 3.html是1.html的下级目录中的文件,如果在1.html中链接到2.html,可以在1.html中这样写:链接到下级目录(first)中的文件; 如果在 1.html中链接到 4.html,可以在 1.html中这样写:链接到下级目录(first/second)中的文件

网页设计中布局方式之比较

网页设计中布局方式之比较 摘要:在网页设计中,网页布局的效果直接影响到网页设计的质量,本文分析说明了目前常用的三种布局方式:表格方式、框架方式和div+css方式,并对三种方式进行了详细的比较。 关键词:表格 div+css 布局 1 概述 在网页设计过程中,色彩的搭配、文字的变化、图片的处理等,这些都是不可忽略的因素,但除此之外,还有一个非常重要的因素——网页的布局。不同类型的网站采用不同的布局,不但能使网站结构合理化,也可以使访问者一看就明白:这个网站是做什么的。目前网页常见的布局结构类型主要有“国”字形布局、“匡”字形布局、“三”字形布局、“川”字形布局、标题文本型布局、框架型布局和变化型布局等。无论是哪一种布局结构,我们在布局时都应遵循以下三个基本原则:①主题鲜明:视觉设计表达的是一定的意图和要求,这就要求视觉设计不但要单纯、简练、清晰和精确,还要注意通过独特的风格和强烈的视觉冲击力,来鲜明地突出设计主题。②形式与内容统一:内容决定形式,形式反作用于内容,一个优秀的设计必定是形式对内容的完美表现。③强调整体性:注意单个页面形式与内容统一的同时,更不能忽视同一主题下多个分页面组成的整体网页形式与整体内容的统一。 2 常见布局方式 在网页设计中,常见的布局方式一般有三种,第一种是使用表格

(table),第二种是使用框架,另一种是使用div+css。下面我们将具体的对这三种布局方式进行说明与分析。 2.1 表格布局方式 表格是一种简明扼要而内容丰富的组织和显示信息的方式,在文档处理中占有十分重要的位置。使用表格既可以在页面上显示表格式数据,也可以进行文本和图形的布局。由于表格使用简单而且灵活,是最早也是使用最广泛的网页布局技术。通过使用相关的一系列表格标签,如table、th、tr、td、caption、thread、tfoot、tbody、col等,并对表格单元格进行合并或拆分以及在表格中嵌套表格等操作,从而得到需要的布局。 表格布局的优势在于它能对不同对象加以处理,而又不用担心不同对象之间的影响,而且在定位图片和文本时非常方便。但当使用过多表格时,页面下载速度将会受到影响。并且灵活性较差,不易修改和扩展。 2.2 框架布局方式 框架也是网页设计中对页面布局控制的一种重要手段。使用框架可以将一个浏览器窗口划分为多个区域,每个区域可以分别显示不同的网页。访问者浏览站点时,可以使某个区域的内容永远不更改,但可通过导航条的链接更改主要框架的内容。框架结构常被用在具有多个分类导航或多项复杂功能的网页上。框架结构的实现主要是利用标签。 框架布局能有效地实现页面导航,方便用户浏览网页,并在框架

PLC简单程序设计方法

第一节PLC 简单程序设计方法 一、解析法 解析法是借鉴逻辑代数的方法,确定各种输入信号、输出信号的逻辑关系并化简,然后编制控制程序的一种方法。这种方法编程十分简便,逻辑关系一目了然,比较适合初学者。 在继电控制线路中,线路的接通和断开,都是通过控制按钮、继电器元件的触点来实现的,这些触点都只有接通、断开两种状态,和逻辑代数中的“ 1”、“0”两种状态对应。梯形图设计的最基本原则也是“与”、“非”、“或”逻的辑组合,规律完全符合逻辑运算基本规律。按照输入与输出的关系,梯形图电路也可以像逻辑电路一样分为两种:组合逻辑电路和时序逻辑电路。 二、翻译法 所谓翻译法是将继电器的控制逻辑图直接翻译成梯形图。对于传统的工业技术改造常选用翻译法。对于原有的继电器控制系统,其控制逻辑图在长期的运行中,实践已证明该 系统设计合理、运行可靠。在这种情况下可采用翻译法直接把该系统的继电器的控制逻辑 图翻译成PLC 控制的梯形图。其翻译法的具体步骤如下: 1)将检测元件(如行程开关)、按钮等合理安排,且接入输入口。 2)将被控的执行元件(如电磁阀等)接入输出口。 3)将原继电器控制逻辑图中的单向二极管用接点或用增加继电器的办法取消。 4)和继电器系统一一对应选择PLC软件中功能相同的器件。 5)按接点和器件对应关系画梯形图。 6)简化和修改梯形图,使其符合PLC 的特殊规定和要求,在修改中要适当增加器件或接点。 对于熟悉机电控制的人员来说很容易学会翻译法,将继电器的控制逻辑直接翻译成梯形图。 例3 机床工作台往复运动控制,其示意图如图1-4所示。 (1)控制要求有1台机床,它的工作台被三相交流异步电动机拖动,可以实现前进或后退。当按下启动按钮SB1 ,接触器KM1 吸合,工作台前进;当碰到前进限位开关SQ1 时,KM1 释放,工作台停止前进,同时KM2 吸合,工作台后退;当碰到后退限位开关SQ2时,KM2释放,工作台停止后退,同时KM1吸合,工作台前进,……当电动机发生过载或按下停止按钮SB2 时,所有接触器释放,工作台停止运行。

网站设计与Web应用开发技术(第二版)习题答案

附录各章习题参考答案 第1章习题参考答案 1. 答:Internet是一个宽泛的概念,WWW实际上Internet所提供的众多服务中的一项。由于很多人上网主要浏览网站,很多初学者容易混淆这两个概念。 2. 答:统一资源定位符(URL)用于定位某个资源,由于Internent的复杂性,其提供的服务及传输协议有很多种,为了能区分,URL中必须进行说明,此处的http就是为了说明该请求属于超文本传输协议;URL的概念比较宽泛,http只是其中的一种传输协议,也可能出现别的情况,比如ftp等。。而www则是所请求服务器的域名,有些服务器的域名中就不包含www。 3. 答:其实技术是没有好坏之分的,关键在于是否适合你所应用的环境以及你是否能掌握。一味的求新、求好是没有经验的开发者所采取的行动。我们不应该单纯追求技术的先进性,而要追求有效和实用,当你要实现一个方案时,要分析项目的性质及最终用户,然后再寻找能解决问题的最经济、最实用也能满足用户需要的手段。因为用户并不关心你采用多么先进的技术,用户关心的是可靠(Reliable)、快速(Rapid)、方便(Convenient)。 4. 答:可以根据上文提供的基本原则,进行区分。不过有些网站不能截然的划分成其中的某一种。平时上网时多观察,多思考,对于提高自己的能力有很大的帮助。 5. 略 第2章习题参考答案 1.答:主要包括以下几个步骤(1) 建立网站前的市场分析,(2) 建设网站目的及功能定位,(3) 网站的技术解决方案,(4) 网站内容规划,(5) 网页界面设计,(6) 网站测试,(7) 网站发布与推广,(8) 网站维护,(9) 网站建设日程表,(10) 费用明细。详细内容可参考本书 2.2部分。 2.答:可以简单的通过两个方式进行判断: (1) 查看“管理工具”下是否有“Internet信息服务(IIS)管理器”,通过查看可以获知;这个方法可以获知本机是否使用了IIS服务,且仅对Windows操作系统有效。 (2) 直接在浏览器中输入“http://127.0.0.1”,看是否能看到有关信息(若安装的Web 服务器所设置的端口不是默认的80,则此方法无效)。 (3) 在本机执行netstat –a命令,查看是否存在Web服务器。 Web服务器的安装方法请查看本书2.4部分。 3.答:一般来说,这样就可以使用了,不过使用默认的配置可能会在将来出现问题。因此,通常我们需要进一步对网站进行配置。根据实际需要,一般来说,网站的安全性配置和网站的性能配置是需要修改的。

C语言程序设计习题答案

C 语言程序设计习题答案 习题一 C 语言程序设计概述 一、名词解释 (1)程序P1 (2)程序设计P1 (3)机器语言P1 (4)汇编程序P2 (5)高级语言P2 (6)编译程序P3 (7)解释程序P3 (8)算法P4 (9)结构化的程序设计P9 二、简述题 1. 设计程序时应遵循哪些基本原则?P4 答:正确性、可靠性、简明性、有效性、可维护性、可移植性。 2. 算法的要素是什么?算法具有哪些特点? 答:算法的要素是:操作与控制结构;算法的特点有:有穷性、确定性、有效性、有零个或多个输入、有一个或多个输出。 3. 算法的表示形式有哪几种? 答:算法的表示形式有:自然语言、传统流程图、伪代码、结构化的流程图(N_S 流程图,盒图)。 4. 有哪三种基本结构? 答:三种基本结构是:顺序结构、选择结构和循环结构。 5. 传统流程图与N-S 流程图最大的区别是什么? 答:N-S 流程图去掉了在传统流程图中常用的流程线,使得程序的结构显得更加清晰、简单。 三、用传统流程图、N-S 图分别表示求解以下问题的算法。 1. 有3个数a ,b ,c ,要求按由大到小的顺序把它们输出。 2. 依次将10个数输入,求出其中最大的数 和最小的数并输出。 3. 求1+2+3+…+100的值。

5. 求下列分段函数的值。 6. 求100~200之间的所有素数。 7. 求一元二次方程ax 2+bx+c=0的根。分别考虑d=b 2-4ac 大于0、等于0和小于0三种情况。 四、注释下面C 程序的各个组成部分。 main() /*主函数 */ { /*程序开始 */ int a,k,m; /*定义三个用来存放整数的变量 */ a=10; /*将整数10赋值给变量a */ k=2; /*将整数2赋值给变量k */ m=1; /*将整数1赋值给变量1 */ a=(k+m)*k/(k-m); /*先求出算术表达式的值,并将其赋值给变量a */ printf("%d\n",a); /*在屏幕上打印出变量a 的值 */ } /*程序结束 */ 习题二 数据类型、运算符与表达式 一、选择题 1~10:BCDCB DDBCA 11~20: ADDAA DBADC 21~28: DABAD CDD Y= 3X (X<1) 4X-1 (X=1) 5(X-1)+6 (1

PLC简单程序设计方法(20210119130915)

简単程 VAC M) HNGBIAN

第一节PLC简单程序设计方法 一、解析法 解析法是借鉴逻辑代数的方法,确定各种输入信号、输出信号的逻辑关系并化简,然后编制控制程序的一种方法。这种方法编程十分简便,逻辑关系一目了然,比较适合初学者。 在继电控制线路中,线路的接通和断开,都是通过控制按钮、继电器元件的触点来实现的,这些触点都只有接通、断开两种状态,和逻辑代数中的“1”. “0”两种状态对应。梯形图设计的最基本原则也是“与”、“非”、“或”的逻辑组合,规律完全符合逻辑运算基本规律。按照输入与输出的关系,梯形图电路也可以像逻辑电路一样分为两种:组合逻辑电路和时序逻辑电路。 二、翻译法 所谓翻译法是将继电器的控制逻辑图直接翻译成梯形图。对于传统的丄业技术改造常选用翻译法。对于原有的继电器控制系统,其控制逻辑图在长期的运行中,实践已证明该系统设计合理、运行可靠。在这种情况下可采用翻译法直接把该系统的继电器的控制逻辑图翻译成PLC控制的梯形图。其翻译法的具体步骤如下:1)将检测元件(如行程开关)、按钮等合理安排,且接入输入口。 2 )将被控的执行元件(如电磁阀等)接入输出口。 3)将原继电器控制逻辑图中的单向二极管用接点或用增加继电器的办法取消。 4 )和继电器系统一一对应选择PLC软件中功能相同的器件。 5)按接点和器件对应关系画梯形图。 6 )简化和修改梯形图,使其符合PLC的特殊规定和要求,在修改中要适当增加器件或接点。 对于熟悉机电控制的人员来说很容易学会翻译法,将继电器的控制逻辑直接翻译成梯形图。 例3 机床工作台往复运动控制,其示意图如图所示。 (1)控制要求有1台机床,它的工作台被三相交流异步电动机拖动,可以实现前进或后退。当按下启动按钮SB1,接触器KM1吸合,工作台前进;当碰到前进限位开关SQM, KM1释放,工作台停止前进,同时KM2吸合,工作台后退;当碰到后退限位开关SQ2时,KM2释放,工作台停止后退,同时KM1吸合,工作台前进,……当电动机发生过载或按下停止按钮SB2时,所有接触器释放,工作台停止运行。

C语言程序设计第三版谭浩强课后习题答案完整版

C语言程序设计第三版谭浩强 课后习题答案完整版 第一章 1.5请参照本章例题,编写一个C程序,输出以下信息:************************** V ery Good! ************************** 解: mian() {printf(“**************************”); printf(“\n”); printf(“V ery Good!\n”); printf(“\n”); printf(“**************************”); } 1.6 编写一个程序,输入a、b、c三个值,输出其中最大值。解: mian() {int a,b,c,max; printf(“请输入三个数a,b,c:\n”); scanf(“%d,%d,%d”,&a,&b,&c); max=a; if(max main() { char c1=?C?,c2=?h?,c3=?i?,c4=?n?,c5=?a?; c1+=4; c2+=4; c3+=4; c4+=4; c5+=4; printf("密码是%c%c%c%c%c\n",c1,c2,c3,c4,c5); } 运行结果: 密码是Glmre 3.9求下面算术表达式的值。 (1)x+a%3*(int)(x+y)%2/4 设x=2.5,a=7,y=4.7 (2)(float)(a+b)/2+(int)x%(int)y 设a=2,b=3,x=3.5,y=2.5 (1)2.5 (2)3.5 3.10写出程序运行的结果。 main() {int i,j,m,n; i=8; j=10; m=++i; n=j++; printf(“%d,%d,%d,%d”,i,j,m,n); } 解: 9,11,9,10 3.12 写出下面表达式运算后a的值,设原来a=12。设a和n都已定义为整型变量。 (1)a+=a (2)a-=2 (3)a*=2+3 (4)a/=a+a (5)a%=(n%=2),n的值等于5 (6)a+=a-=a*=a 解: (1) 24 (2) 10 (3) 60 (4) 0 (5) 0 (6) 0 第四章 4.4若a=3,b=4,c=5,x=1.2,y=2.4,z=-3.6,u=51274,n=128765,c1=’a’,c2=’b’。想得到以下输出格式和结果,请写出程序(包括定义变量类型和设计输出)。 a=_3_ _b=_4_ _c=_5 x=1.200000,y=2.400000,z=-3.600000 x+y=_3.600_ _y+z=-1.20_ _z+x=-2.40 c1=ˊaˊ_or_97(ASCII)

相关主题
文本预览
相关文档 最新文档