N-S图

N-S图:一种高效的程序设计分析工具
本文深入探讨了N-S图作为程序设计分析工具的特性与应用,包括其控制结构、组件组成及优势。文章强调了N-S图在详细设计阶段的使用价值,及其在软件开发过程中的便利性。

N-S图是一种取代传统流程图的描述方式,是我们编程过程中常用的一种分析工具,是由两个老美I.Nassi和B.Schneiderman发明的,他们提出了最初分析问题方法。

N-S图主要的控制结构有四种:


这四种程序控制结构可以包含任何复杂的流程,完全可以满足流程图的需要,举例:

 

在N-S图中,每个处理步骤都是用一个盒子表示的,这也就是N-S图又称为盒图的原因。所谓“处理步骤”可以是语句或是语句序列,需要时盒子中可以嵌套盒子,而且深度不限。

N-S图中只能从上面进入,下面出去,除此之外没有其他的入口和出口,所以这就限制了随意的控制转移,保证了程序的良好结构。

用0N-S图做详细设计时,需要用到两种盒子:数据盒和模块盒(也称为过程盒)(上面的图4.62主要是模块盒),如下:

 

其中数据盒描述有关的数据,包括全局数据、局部数据以及参数等,模块盒主要描述个模块的调用关系,程序的执行过程。

N-S图的优点:

  • 它强制设计人员按SP方法进行思考并描述他的设计方案,因为除了表示几种标准结构的符号之处,它不再提供其他描述手段,这就有效地保证了设计的质量,从而也保证了程序的质量;
  • NS图形象直观,具有良好的可见度。例如循环的范围、条件语句的范围都是一目了然的,所以容易理解设计意图,为编程、复查、选择测试用例、维护都带来了方便;
  • NS图简单、易学易用,可用于软件教育和其他方面;
  • 功能域(即某一个特定控制结构的作用域)有明确的规定,并且可以很直观地从N-S图上看出来;
  • 它的控制转移不能任意规定,必须遵守结构化程序设计的要求;
  • 很容易确定局部数据和全局数据的作用域;
  • 很容易表现嵌套关系,也可以表示模块的层次结构。

N-S图还是有缺点的,那就是手工修改比较麻烦,而且画起来比较占地方,所以使用的不是很广泛。。。

 

转自:http://blog.sina.com.cn/s/blog_817a5eb60100sqku.html

03-28
<think>嗯,用户想了解NS,也就是Nassi-Shneiderman。首先,我需要回忆一下NS的基本概念,它是结构化编程中的一种流程工具,由Nassi和Shneiderman在1973年提出。与传统的流程不同,NS使用矩形框和嵌套结构来表示程序的控制结构,比如顺序、选择和循环,这样避免了箭头和复杂的流程线,使得结构更清晰。 接下来,用户可能需要知道NS的主要特点。比如,NS强调结构化编程,每个结构都是一个矩形块,通过不同的组合方式表示不同的控制结构。例如,顺序结构用上下堆叠的矩形,选择结构用分支的框,循环结构则用包围的框。这些特点使得代码结构一目了然,也便于发现逻辑错误。 然后,用户可能想了解NS的构成元素。我需要详细说明顺序结构、选择结构(如if-else)、多分支选择(如switch-case)、循环结构(如while和for循环)。每个结构对应的形表示方法,比如选择结构中的条件分支如何划分区域,循环结构中的循环条件和循环体如何布局。 另外,用户可能会关心NS的优缺点。优点方面,结构清晰、符合结构化编程思想、易于理解和维护。缺点可能包括不适合复杂逻辑、修改困难、缺乏灵活性等。需要举例说明,比如在处理多层嵌套时,NS可能会显得笨拙,修改时需要调整整个结构,比较麻烦。 还有应用场景,NS适合教学和简单逻辑设计,帮助初学者理解结构化编程。但在实际开发中,可能更倾向于使用其他表工具。需要举一个具体的例子,比如用NS表示计算阶乘的流程,这样用户能更直观地理解。 最后,要确保使用正确的中文表达,避免技术术语使用错误。同时,按照用户的要求,行内公式用$...$,独立公式用$$...$$,比如在举例阶乘时,可以用$$n! = n \times (n-1) \times \cdots \times 1$$来展示。检查是否有遗漏的部分,比如NS的历史背景是否需要更多细节,或者是否有最新的发展需要提及。不过考虑到用户可能只需要基础介绍,保持内容简洁明了即可。</think>NS(Nassi-Shneiderman)是一种用于结构化程序设计的流程工具,由Isaac Nassi和Ben Shneiderman于1973年提出。它通过**矩形框和嵌套结构**表示程序逻辑,摒弃了传统流程的箭头,强调代码的模块化和结构化特性。 --- ### **核心特点** 1. **结构化表示** 所有控制结构(顺序、选择、循环)均以**矩形块**组合,避免交叉线条。 2. **无箭头设计** 通过几何形状和缩进表达逻辑关系,降低复杂度。 3. **适合教学** 直观展示代码层次,帮助理解结构化编程思想。 --- ### **基本构成元素** #### 1. 顺序结构 多个操作按**上下顺序**排列,例如: ``` ┌─────────────┐ │ 输入n │ ├─────────────┤ │ 计算n的平方 │ ├─────────────┤ │ 输出结果 │ └─────────────┘ ``` #### 2. 选择结构(if-else) 用**条件分支**划分区域,例如: ``` ┌───────────┐ │ 条件A成立? │ └─────┬─────┘ 是↓ ↓否 ┌───────┐ ┌───────┐ │ 执行操作1 │ │ 执行操作2 │ └───────┘ └───────┘ ``` #### 3. 多分支选择(switch-case) 通过**横向划分区域**表示多个分支。 #### 4. 循环结构(while/for) 用**包围的矩形框**表示循环条件与循环体,例如: ``` ┌───────────────────┐ │ while 条件成立 │ ├───────────────────┤ │ 循环体操作 │ └───────────────────┘ ``` --- ### **优点与局限** - **优点** - 结构清晰,易于发现逻辑错误 - 强制遵循结构化编程规范 - 适合教学和简单算法设计 - **局限** - 复杂嵌套时难以绘制和修改 - 不适用于非结构化逻辑(如`goto`语句) - 灵活性低于传统流程 --- ### **应用示例** 以计算阶乘$n!$为例: ``` ┌───────────────────┐ │ 输入正整数n │ ├───────────────────┤ │ 初始化result=1 │ ├───────────────────┤ │ for i从1到n: │ │ result *= i │ ├───────────────────┤ │ 输出result │ └───────────────────┘ ``` 对应公式: $$n! = n \times (n-1) \times \cdots \times 1$$ --- ### **总结** NS通过视觉约束简化逻辑设计,是学习结构化编程的有效工具,但在实际开发中逐渐被UML等更灵活的表替代。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值