良好的程序设计风格主要包括哪些内容。
良好的程序设计风格
全局变量用具有描述意义的名字,局部变量用短名字。函数采用动作性的名字。保持一致性。
缩进形式显示程序结构,使用一致的缩行和加括号风格。使用空行显示模块
充分而合理地使用程序注释 给函数和全局数据加注释。不要注释不好的代码,应该重写。不要与代码矛盾。
友好的程序界面,程序界面的方便性及有效性
不要滥用语言技巧 使用表达式的自然形式。利用括号排除歧义。分解复杂的表达式。当心副作用,像++ 这一类运算符具有副作用。
程序的健壮性:容错
模块化编程
1)应该特别注意程序的书写格式,让它的形式反映出其内在的意义结构。
程序是最复杂的东西(虽然你开始写的程序很简单,但它们会逐渐变得复杂起来),是需要用智力去把握的智力产品。良好的格式能使程序结构一目了然,帮助你和别人理解它,帮助你的思维,也帮助你发现程序中不正常的地方,使程序中的错误更容易被发现。
人们常用的格式形式是:逻辑上属于同一个层次的互相对齐;逻辑上属于内部层次的推到下一个对齐位置。请参考本课程的教科书或《C程序设计语言》(The C Programming Language,Brian W. Kernighan & Dennis M. Rirchie,清华大学出版社,大学计算机教育丛书(影印版,英文),1996。)
利用集成开发环境(IDE)或者其他程序编辑器的功能,可以很方便地维护好程序的良好格式。请注意下面这几个键,在写程序中应该经常用到它们:Enter键(换一行),Tab键(将输入光标移到下一个对齐位置——进入新的一个层次),Backspace键(回到前一个对齐位置——退到外面的一个层次)。
C语言编写规范有哪些?
啊哦
这个很多啊 呵呵
在程序编译方面没有什么约定 ,
在程序的排版方面,可以约定一些标准, 比如:
1 程序块要采用缩进风格编写,缩进的空格数为4个
2 对齐只使用空格键,不使用TAB键。
3 逗号、分号只在后面加空格。
int a, b, c;
4 比较操作符, 赋值操作符”=”、 “+=”,算术操作符”+”、”%”,逻辑操作符”&&”、”&”,位域操作符”<<"、"^"等双目操作符的前后加空格 。
5 “!”、”~”、”++”、”–“、”&”(地址运算符)等单目操作符前后不加空格。
6 “->”、”.”前后不加空格。
p->id = pid; // “->”指针前后不加空格
7 if、for、while、switch等与后面的括号间应加空格,使if等关键字更为突出、明显。
if (a >= b && c > d)
空格多数情况是作为词法分析的分隔,多余的空格一般是无关紧要(字符串除外),在语法分析之前已被删除。
经典的关于空格的例子是:
int a=4;
int* p=&a;
int result=16/ *p; ( 此处必须在*p前加空格,否则在词法分析时被解释为注释开始/* )
结构化程序设计风格具体包括哪些方面呢
结构化程序设计的基本思想是采用"自顶向下,逐步求精"的程序设计方法和"单入口单出口"的控制结构.自顶向下、逐步求精的程序设计方法从问题本身开始,经过逐步细化,将解决问题的步骤分解为由基本程序结构模块组成的结构化程序框图;"单入口单出口"的思想认为一个复杂的程序,如果它仅是由顺序、选择和循环三种基本程序结构通过组合、嵌套构成,那么这个新构造的程序一定是一个单入口单出口的程序.据此就很容易编写出结构良好、易于调试的程序来. ①整体思路清楚,目标明确. ②设计工作中阶段性非常强,有利于系统开发的总体管理和控制. ③在系统分析时可以诊断出原系统中存在的问题和结构上的缺陷.
为了具有良好的程序设计风格,应注意哪些方面的问题?
程序代码要做到下面几点: 正确性:能够正确实现处理要求 易读性:易于阅读和理解,便于调试,修改和扩充 健壮性:当环境发生变化,算法能够适当做出反应或处理,不会产生不需要的运行结果 高效率:达到所需要的时空性能. 软件界面 1.界面整洁; 2.软件运行快,不易出错; 3.功能齐全; 4.操作简单,易入门等等
Verilog 中什么是综合? 综合的常用工具有哪些? 综合和仿真对模块的编写风格的要求有什么不同?
verilog是硬件语言,并且提供了仿真功能 IC设计中常用的综合工具是Design Compiler 综合的时候,会涉及到可合成与否的问题,这在verilog里面有讲(哪些语句是可合成的,哪些是不可合成的;仿真的话,就需要用testbench去灌输激励到design中,看出现的结果是否为我们所期望的 —–> 所以说,综合和仿真对模块的编写风格要求的差异就是“是否可综合”
结构化设计方法及编程语言有何特点?它们有哪几种基本控制结构?
结构化程序的概念首先是从以往编程过程中无限制地使用转移语句而提出的。转移语句可以使程序的控制流程强制性的转向程序的任一处,在传统流程图中,就是用上节我们提到的”很随意”的流程线来描述这种转移功能。如果一个程序中多处出现这种转移情况,将会导致程序流程无序可寻,程序结构杂乱无章,这样的程序是令人难以理解和接受的,并且容易出错。尤其是在实际软件产品的开发中,更多的追求软件的可读性和可修改性,象这种结构和风格的程序是不允许出现的。为此提出了程序的三种基本结构。
在讨论算法时我们列举了程序的顺序、选择和循环三种控制流程,这就是结构化程序设计方法强调使用的三种基本结构。算法的实现过程是由一系列操作组成的,这些操作之间的执行次序就是程序的控制结构。1996年,计算机科学家Bohm和Jacopini证明了这样的事实:任何简单或复杂的算法都可以由顺序结构、选择结构和循环结构这三种基本结构组合而成。所以,这三种结构就被称为程序设计的三种基本结构。也是结构化程序设计必须采用的结构。
1. 顺序结构
顺序结构表示程序中的各操作是按照它们出现的先后顺序执行的,其流程如图1-6所示。图中的s1和s2表示两个处理步骤,这些处理步骤可以是一个非转移操作或多个非转移操作序列,甚至可以是空操作,也可以是三种基本结构中的任一结构。整个顺序结构只有一个入口点a和一个出口点b。这种结构的特点是:程序从入口点a开始,按顺序执行所有操作,直到出口点b处,所以称为顺序结构。上一节图1-2表示的就是一个顺序结构的流程图。事实上,不论程序中包含了什么样的结构,而程序的总流程都是顺序结构的。例如,在图1-3、图1-4和图1-5所表示的流程图中,其总体结构流程都是自上而下顺序执行的。
2.选择结构
选择结构表示程序的处理步骤出现了分支,它需要根据某一特定的条件选择其中的一个分支执行。选择结构有单选择、双选择和多选择三种形式。
双选择是典型的选择结构形式,其流程如图1-8所示,图中的s1和s2与顺序结构中的说明相同。由图中可见,在结构的入口点a处是一个判断框,表示程序流程出现了两个可供选择的分支,如果条件满足执行s1处理,否则执行s2处理。值得注意的是,在这两个分支中只能选择一条且必须选择一条执行,但不论选择了哪一条分支执行,最后流程都一定到达结构的出口点b处。前面的图1-3中就采用了双选择结构流程图。
当s1和s2中的任意一个处理为空时,说明结构中只有一个可供选择的分支,如果条件满足执行s1处理,否则顺序向下到流程出口b处。也就是说,当条件不满足时,什么也没执行,所以称为单选择结构,如图1-7所示。
多选择结构是指程序流程中遇到如图1-9所示的s1、s2、……、sn等多个分支,程序执行方向将根据条件确定。如果满足条件1则执行s1处理,如果满足条件n则执行Sn处理,总之要根据判断条件选择多个分支的其中之一执行。不论选择了哪一条分支,最后流程要到达同一个出口处。如果所有分支的条件都不满足,则直接到达出口。有些程序语言不支持多选择结构,但所有的结构化程序设计语言都是支持的,C语言是面向过程的结构化程序设计语言,它可以非常简便的实现这一功能。本书在第五章将详细介绍各种形式的选择结构应用问题。
3.循环结构
循环结构表示程序反复执行某个或某些操作,直到某条件为假(或为真)时才可终止循环。在循环结构中最主要的是:什么情况下执行循环?哪些操作需要循环执行?循环结构的基本形式有两种:当型循环和直到型循环,其流程如图1-10所示。图中虚线框内的操作称为循环体,是指从循环入口点a到循环出口点b之间的处理步骤,这就是需要循环执行的部分。而什么情况下执行循环则要根据条件判断。
当型结构:表示先判断条件,当满足给定的条件时执行循环体,并且在循环终端处流程自动返回到循环入口;如果条件不满足,则退出循环体直接到达流程出口处。因为是”当条件满足时执行循环”,即先判断后执行,所以称为当型循环。其流程如图1-10(a)所示。
直到型循环:表示从结构入口处直接执行循环体,在循环终端处判断条件,如果条件不满足,返回入口处继续执行循环体,直到条件为真时再退出循环到达流程出口处,是先执行后判断。因为是”直到条件为真时为止”,所以称为直到型循环。其流程如图1-10(b)所示。本章图1-5用迭代法求和的流程图就是一个典型的直到型循环结构。
同样,循环型结构也只有一个入口点a和一个出口点b,循环终止是指流程执行到了循环的出口点。图中所表示的S处理可以是一个或多个操作,也可以是一个完整的结构或一个过程。
整个虚线框中是一个循环结构。
通过三种基本控制结构可以看到,结构化程序中的任意基本结构都具有唯一入口和唯一出口,并且程序不会出现死循环。在程序的静态形式与动态执行流程之间具有良好的对应关系。
1.3.2 N-S流程图
N-S流程图是结构化程序设计方法中用于表示算法的图形工具之一。对于结构化程序设计来说,传统流程图已很难完全适应了。因为传统流程图出现得较早,它更多地反映了机器指令系统设计和传统程序设计方法的需要,难以保证程序的结构良好。另外,结构化程序设计的一些基本结构在传统流程图中没有相应的表达符号。例如,在传统流程图中,循环结构仍采用判断结构符号来表示,这样不易区分到底是哪种结构。特别是传统流程图由于转向的问题而无法保证自顶而下的程序设计方法,使模块之间的调用关系难以表达。为此,两位美国学者Nassi和Shneiderman于1973年就提出了一种新的流程图形式,这就是N-S流程图,它是以两位创作者姓名的首字母取名,也称为Nassi Shneiderman图。
N-S图的基本单元是矩形框,它只有一个入口和一个出口。长方形框内用不同形状的线来分割,可表示顺序结构、选择结构和循环结构。在N-S流程图中,完全去掉了带有方向的流程线,程序的三种基本结构分别用三种矩形框表示,将这种矩形框进行组装就可表示全部算法。这种流程图从表达形式上就排除了随意使用控制转移对程序流程的影响,限制了不良程序结构的产生。
与顺序、选择和循环这三种基本结构相对应的N-S流程图的基本符号如图1-11所示。图1-11(a)和图1-11(b)分别是顺序结构和选择结构的N-S图表示,图1-11(c)和图1-11(d)是循环结构的N-S图表示。由图可见,在N-S图中,流程总是从矩形框的上面开始,一直执行到矩形框的下面,这就是流程的入口和出口,这样的形式是不可能出现无条件的转移情况。下面用N-S流程图表示前面例1-2中求函数值m的算法,其流程如图1-12所示。
值得注意的是,N-S流程图是适合结构化程序设计方法的图形工具,对于非结构化的程序,用N-S流程图是无法表示的。
例如在例1-3中,求任意两个正整数的最大公约数,其算法是非常经典的,图1-5中用传统流程图表示了该算法,但是这个算法却无法直接用N-S流程图表示。因为该算法的关键是执行一个循环结构,但图1-5表示的循环结构既不是当型循环,也不是直到型循环,这样,用N-S流程图就无法表示。如果将例1-3中的算法稍作调整,使流程图采用单选择结构形式,其中的条件改为r≠0,这样就可以用直到型循环的N-S流程图表示这个算法。图1-13是表示例1-3的N-S流程图。
N-S流程图是描述算法的重要图形工具之一,在结构化程序设计中得到了广泛应用。在此仅作简单介绍,旨在抛砖引玉。在实际软件开发中,有兴趣的读者可参阅有关软件工程或软件开发技术等方面的著作。
1.3.3 结构化程序设计方法
结构化程序设计方法是公认的面向过程编程应遵循的基本方法和原则。结构化程序设计方法主要包括:①只采用三种基本的程序控制结构来编制程序,从而使程序具有良好的结构;②程序设计自顶而下;③用结构化程序设计流程图表示算法。
有关结构化程序设计及方法有一整套不断发展和完善的理论和技术,对于初学者来说,完全掌握是比较困难的。但在学习的起步阶段就了解结构化程序设计的方法,学习好的程序设计思想,对今后的实际编程是很有帮助的。
1.结构化程序设计特征
结构化程序设计的特征主要有以下几点:
(1) 以三种基本结构的组合来描述程序;
(2) 整个程序采用模块化结构;
(3) 有限制地使用转移语句,在非用不可的情况下,也要十分谨慎,并且只限于在一个结构内部跳转,不允许从一个结构跳到另一个结构,这样可缩小程序的静态结构与动态执行过程之间的差异,使人们能正确理解程序的功能;
(4) 以控制结构为单位,每个结构只有一个入口,一个出口,各单位之间接口简单,逻辑清晰;
(5) 采用结构化程序设计语言书写程序,并采用一定的书写格式使程序结构清晰,易于阅读;
(6) 注意程序设计风格。
2. 自顶而下的设计方法
结构化程序设计的总体思想是采用模块化结构,自上而下,逐步求精。即首先把一个复杂的大问题分解为若干相对独立的小问题。如果小问题仍较复杂,则可以把这些小问题又继续分解成若干子问题,这样不断地分解,使得小问题或子问题简单到能够直接用程序的三种基本结构表达为止。然后,对应每一个小问题或子问题编写出一个功能上相对独立的程序块来,这种象积木一样的程序块被称为模块。每个模块各个击破,最后再统一组装,这样,对一个复杂问题的解决就变成了对若干个简单问题的求解。这就是自上而下,逐步求精的程序设计方法。
确切地说,模块是程序对象的集合,模块化就是把程序划分成若干个模块,每个模块完成一个确定的子功能,把这些模块集中起来组成一个整体,就可以完成对问题的求解。这种用模块组装起来的程序被称为模块化结构程序。在模块化结构程序设计中,采用自上而下,逐步求精的设计方法便于对问题的分解和模块的划分,所以,它是结构化程序设计的基本原则。
例1-9: 求一元二次方程:
ax2+bx+c=0
的根。
分析:先从最上层考虑,求解问题的算法可以分成三个小问题,即:输入问题、求根问题和输出问题。这三个小问题就是求一元二次方程根的三个功能模块:输入模块M1、计算处理模块M2和输出模块M3。其中M1模块完成输入必要的原始数据,M2模块根据求根算法求解,M3模块完成所得结果的显示或打印。这样的划分,使求一元二次方程根的问题变成了三个相对独立的子问题,其模块结构如图1-14所示。
分解出来的三个模块从总体上是顺序结构。其中M1和 M3模块是完成简单的输入和输出,可以直接设计出程序流程,不需要再分解。而M2模块是完成求根计算,求根则需要首先判断二次项系数a是否为0。当a=0时,方程蜕化成一次方程,求根方法就不同于二次方程。如果a≠0,则要根据b2-4ac的情况求二次方程的根。可见M2模块比较复杂,可以将其再细化成M21和M22两个子模块,分别对应一次方程和二次方程的求根,其模块结构如图1-15所示。
此次分解后,M21子模块的功能是求一次方程的根,其算法简单,可以直接表示。M22是求二次方程的根,用流程图表示算法如图1-16所示,它由简单的顺序结构和一个选择结构组成,这就是M22模块最细的流程表示。然后,按照细化M22模块的方法,分别将M1、M21和M3的算法用流程图表示出来,再分别按图1-15和图1-14的模块结构组装,最终将得到细化后完整的流程图。
可见,编制程序与建大楼一样,首先要考虑大楼的整体结构而忽略一些细节问题,待把整体框架搭起来后,再逐步解决每个房间的细节问题。在程序设计中就是首先考虑问题的顶层设计,然后再逐步细化,完成底层设计。使用自顶向下、逐步细化的设计方法符合人们解决复杂问题的一般规律,是人们习惯接受的方法,可以显著地提高程序设计的效率。在这种自顶而下、分而治之的方法的指导下,实现了先全局后局部,先整体后细节,先抽象后具体的逐步细化过程。这样编写的程序具有结构清晰的特点,提高程序的可读性和可维护性。
3. 程序设计的风格
程序设计风格从一定意义上讲就是一种个人编写程序时的习惯。而风格问题不象方法问题那样涉及一套比较完善的理论和规则,程序设计风格是一种编写程序的经验和教训的提炼,不同程度和不同应用角度的程序设计人员对此问题也各有所见。正因为如此,程序设计风格很容易被人们忽视,尤其是初学者。结构化程序设计强调对程序设计风格的要求。因为,程序设计风格主要影响程序的可读性。一个具有良好风格的程序应当注意以下几点:
(1) 语句形式化。程序语言是形式化语言,需要准确,无二义性。所以,形式呆板、内容活泼是软件行业的风范;
(2) 程序一致性。保持程序中的各部分风格一致,文档格式一致;
(3) 结构规范化。程序结构、数据结构、甚至软件的体系结构要符合结构化程序设计原则;
(4) 适当使用注释。注释是帮助程序员理解程序,提高程序可读性的重要手段,对某段程序或某行程序可适当加上注释;
(5) 标识符贴近实际。程序中数据、变量和函数等的命名原则是:选择有实际意义标识符,以易于识别和理解。要避免使用意义不明确的缩写和标识符。例如:表示电压和电流的变量名尽量使用v和i,而不要用a和b。要避免使用类似aa、bb等无直观意义的变量名。
请问CAM的作用主要是什么?
CAM(Computer Aided Making ,计算机辅助制造)的核心是计算机数值控制(简称数… 采用数控语言编程虽比手工编程简化许多,但仍需要编程人员编写源程序,仍比较费…
非线性编辑系统是什么意思
非线性编辑系统实质上是一个扩展的计算机系统。也就是1台高性能计算机加1块或1套视音频输入/输出卡(俗称非线性卡)和一些辅助卡。再配上一个大容量SCSI硬盘阵列便构成了一个非线性编辑系统的基本硬件。硬件结构配以非线性编辑软件组成一个完美的非线性编辑系统。非线性编辑软件大致可分为专用型和通用型。其中专用型软件大都由非线性编辑系统开发商根据他们所选用的非线性卡的特点而专门开发的,这就形成了硬件基本相同,软件开发各显其能的竞争格局。因为专用型软件是针对硬件的设置而专门开发的,它们可以直接调用非线性卡内设置的硬件特技或专门的特技卡内的硬件特技而形成实时特技或短时间的生成特技,从而加快节目的编辑速度。作为非线性编辑的专用软件,它首先要满足节目编辑的需求。电视节目具体可分为新闻、专题、文艺、电视剧等不同类型,在这些节目的编辑工作中,镜头的硬接,过渡性特性占了绝大多数,故非线性编辑系统的节目制作层数只需两、三层便可满足制作需求,也就是相当于线性编辑中的A/B卷已能完整地制作出上述类型的节目,再加上图文字幕层便构成了一个齐全的A/B卷编辑系统。通用型是许多非线性卡自带的输入/输出软件,它只能完成信号的采集和输出工作,不能进行编辑。编辑工作需要其它软件来完成。在广播电视行业一般不采用此类软件。
现在的非线性已经将视音频采集、压缩与解压缩、视音频回放、部分实时特技全部集成在同一块卡或一套卡上,使得整个系统的硬件结构非常简洁。这些卡实际上是模拟信号与数字信号的分水岭,所有模拟视音频信号在此经过A/D变换后,每一段素材都成为了一个视频文件存放在SCSI硬盘阵列中,供计算机进行数字域的处理。需要输出的视音频数码流经过D/A变换成为可供记录或直播的模拟视音频信号。非线性卡上的模拟信号接口有复合、分量、S-VIDEO,已涵盖现有模拟电视系统的几乎所有接口形式,所以非线性编辑系统与现有的模拟电视系统有良好的兼容性。 压缩与解压缩是非线性卡的核心内容。在数字视频信号不能被有效而高质量地压缩时,非线性编辑都是在昂贵的计算机工作站上实现的。因为庞大的数字视频数据量使苹果机和普通PC机都不堪重负,不能正常处理数码率高达216Mb/s的无压缩数字分量视频信号或者142Mb/s的无压缩数字复合数字视频信号,从而无法胜任无压缩数字视频信号的非线性编辑工作。然而,随着数字图像压缩技术的发展,各种图像压缩算法日臻成熟,使得在苹果机(Power PC 9600)和性能提升后的PC机这些比工作站低一档次的计算机上进行视频非线性编辑成为了现实,这些图像压缩算法是实现相对廉价的视频非线性编辑的关键所在。目前,我国拥有的非线性编辑系统无论是进口的或是国产的,大都是采用M-JPEG算法。这种压缩算法对活动的视频图像通过实行实时帧内编码过程单独地压缩每一帧,可以进行精确到帧的后期编辑。M-JPEG的压缩和解压是对称的,可以由相同的硬件和软件来实现,这对压缩/解压电路实现高度集成化有帮助。由于这种算法不太复杂,可以用很小的压缩比(2:1)进行全帧采集,从而实现广播级指标所要求的无损压缩。 若采用广播级指标进行2∶1压缩,经过压缩的数字视频信号其数码率虽然仍有108Mb/s(分量视频)或71Mb/s(复合视频),但对苹果机(PowerPC9600)和提升了性能的PC机(采用PCI总线、奔腾Ⅱ350以上CPU、Windows NT操作系统)而言,已能应付自如,进行实时操作。数字视频信号进入计算机系统后,为了更有效地对其进行处理,整个计算机硬件平台还可以采取一些措施加强非线性编辑系统的性能:(1)外挂大容量SCSI高速AV硬盘阵列作为视频文件存储器,并配以硬盘加速卡。SCSI高速AV硬盘阵列的容量大小视用户的需求来选取,作为电视台来说,该阵列至少需要18G以上,才能有实际使用意义。(2)除了非线性卡上已赋予的部分实时特技,另外增加特技效果卡。将一些复杂的二、三维特技转换效果做成硬件插卡,使之能够方便调用并缩短生成时间。而且不同公司的特技卡有不同的特点,就会有另外意想不到的效果,还可不断升级。
什么是软件
软件(英文:Software)是一系列按照特定顺序组织的计算机数据和指令的集合。一般来讲软件被划分为编程语言、系统软件、应用软件和介于这两者之间的中间件。其中系统软件为计算机使用提供最基本的功能,但是并不针对某一特定应用领域。而应用软件则恰好相反,不同的应用软件根据用户和所服务的领域提供不同的功能。