结构化程序转换:IF-THEN-ELSE与DO-WHILE的互换

需积分: 0 0 下载量 61 浏览量 更新于2024-08-04 收藏 1.81MB DOCX 举报
"这篇文档是关于软件工程第六章的内容,主要讨论了如何使用不同的控制结构来实现等效的逻辑操作,以及如何将非结构化程序转换为结构化程序。" 在编程中,控制结构是程序流程的基础,它们决定了代码的执行顺序。在描述的问题中,提到了两种基本的控制结构:SEQUENCE(顺序执行)和DO-WHILE循环。通过这些基础结构,可以实现更复杂的逻辑操作,比如IF-THEN-ELSE。 1. 将IF-THEN-ELSE转换为DO-WHILE操作: 提供的解答通过设置一个标志变量K来实现。首先执行一个DO-WHILE循环,当满足条件时执行程序块1,然后更新K。接着进入第二个DO-WHILE循环,这次在不满足条件时执行程序块2,同样更新K。这样的设计确保了至少会执行一次程序块1或程序块2,与IF-THEN-ELSE的行为一致。 2. 反过来,将DO-WHILE转换为SEQUENCE和IF-THEN-ELSE: 使用一个标签和GOTO语句来模拟DO-WHILE循环。在IF-THEN-ELSE结构中,如果条件满足则执行程序块并跳转回标签,否则执行ELSE部分的程序块。 3. 流程图和盒图绘制: 提供的伪代码包含了一个IF-THEN-ELSE结构,其中根据条件p选择执行WHILE循环或直接执行BLOCK内的g和n。流程图和盒图的绘制需要可视化表示这段代码的流程,流程图通常使用箭头表示控制流,盒图则使用矩形框表示程序块。 4. 非结构化程序的分析与转换: 非结构化程序通常包含多入口或多出口的代码块,这违反了结构化编程的原则。图6.18的程序因其循环结构有两个出口而被认为是非结构化的。要将其转换为结构化程序,可以通过添加标识变量(如flag)来控制流程,或者重新设计控制结构,避免多重出口。 - 不使用flag的转换可能涉及嵌套的IF-THEN-ELSE结构,确保每次循环只有一条退出路径。 - 使用flag的转换则是在循环内部设置一个变量,当满足特定条件时改变flag,从而决定是否继续循环或跳出。 5. Ashcroft_Manna技术: 这是一种将非结构化程序转化为结构化程序的方法,主要通过引入新的控制结构(如CASE或UNTIL)以及辅助变量。在给定的例子中,非结构化的IF嵌套被转换为DO-CASE结构,辅助变量I用于跟踪执行路径。 总结来说,本章内容探讨了控制结构的灵活性和转换,以及如何通过结构化编程原则提高代码的可读性和维护性。无论是通过巧妙地使用现有结构,还是引入新的结构,目标都是为了使程序更加清晰和易于理解。