首页 理论教育 多循环程序设计

多循环程序设计

时间:2022-02-28 理论教育 版权反馈
【摘要】:循环程序中最简单最常用的是二重循环。从图4-13中还可以看出,多重循环都是由单重循环结构嵌套而成的,所以只要掌握好单重循环程序的设计方法,便可完成多重循环程序的设计。下面仍通过举例来说明多重循环结构的程序设计方法。分析 这是一个循环次数不定的循环结构,显然应该用判断字符是否为“9”作为循环控制条件。

4.4.3 多循环程序设计

所谓多重循环就是在循环程序的循环体中又包含着循环结构。循环程序中最简单最常用的是二重循环(由于是两层循环嵌套所以称为二重循环)。在二重循环中,外面一层循环称外层循环,里面一层循环称内层循环。注意在二重循环中内层循环可以有多个,但它们之间的关系只能是并列,不能是嵌套的。

如果二重循环中内层循环的循环体中又含有一重循环则称为三重循环,依此可推出四重循环、五重循环等多重循环。图4-13表示了多重循环的结构示意图

img85

图4-13 多重循环结构示意图

图4-13(a)表示在二重循环结构中,由内层置初值部分、内层循环体部分和内层循环控制部分构成了一个完整的内层循环。而内层循环又与外层程序段1、外层程序段2一起作为外层循环的循环体,与外层置初值部分、外层循环控制部分一起又构成了外层循环程序。图4-13(b)是一个四重循环结构示意图,最外层循环程序A中有一内层循环B,在B循环中又构造了并列的两个循环结构C1和C2,而在C2循环中又内嵌一个循环程序D,从而构成一个合理的四重循环嵌套结构。

从图4-13中还可以看出,多重循环都是由单重循环结构嵌套而成的,所以只要掌握好单重循环程序的设计方法,便可完成多重循环程序的设计。需要注意的是,在内层、外层循环的工作参数或控制参数有关系的情况下,在考虑外层循环的初值时要兼顾内层循环的要求;而修改内层循环参数时,也要注意对外层循环参数的影响。如果内、外层工作参数和控制参数是完全独立的,相互间没有牵连,则可以按照单重循环结构各自设计。下面仍通过举例来说明多重循环结构的程序设计方法。

【例4-12】 已知数组A包含15个互不相等的整数,数组B包含20个互不相等的整数,试编一程序将既在A数组中出现又在B数组中出现的数放在C数组中去。

程序流程图如图4-14所示。

img86

图4-14 例4-12程序流程图

程序如下:

DATA SEGMENT

A DW a1,a2,a3,…

B DW b1,b2,b3,…

C DW 15 DUP(?)

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START:MOV AX,DATA

MOV DS,AX

LEA SI,A

LEA BX,C;设置A、C数组的指针

MOV CH,15;设置外循环次数

LP3:MOV CL,20;设置内循环次数

LEA DI,B;设置B数组指针

MOV AH,[SI]

LP2:CMP AH,[DI];两数比较

JE LP;相等,则送C数组

ADD DI,2;不相等,继续与B数组中的数比较

JMP LP1

LP:MOV[BX],AH

ADD DI,2

ADD BX,2

LP1:DEC CL

JNE LP2;判断内循环是否结束

ADD SI,2;修改A为数组指针

DEC CH

JNE LP3;判断外循环次数

MOV AH,4CH;返回DOS

INT 21H

CODE ENDS

END START

【例4-13】 现有一个以“9”结尾的字符串,要求删除其中的空格字符。

分析 这是一个循环次数不定的循环结构,显然应该用判断字符是否为“9”作为循环控制条件。循环体判断每个字符,如果不是空格,不予处理,继续循环;是空格,则进行删除,也就是将后续字符前移一个字符位置,将空格覆盖,这又需要一个循环,循环结束条件仍然用字符是否为9进行判断。可见,这是一个双重循环的程序结构。

程序流程图如图4-15所示。

程序如下:

DATA SEGMENT

STRING DB′IBMPC ASSEMBLY LANGUAG E′,′9′;假设一个字符串

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START:MOV AX,DATA

MOV DS,AX

MOV DI,OFFSET STRING

OUTLP:CMP BYTE PTR[DI],′9′;外循环,先判断后循环

JZ DONE;为0结束

CMP BYTE PTR[DI],′′;检测是不是空格

JNZ NEXT;不是空格继续循环

MOV SI,DI;是空格,进入删除空格分支。该分;支是循环程序

INLP:INC SI

MOV AH,[SI];前移一个位置

MOV[SI-1],AH

CMP BYTE PTR[SI],′9′;内循环,先循环后判断

JNZ INLP

JMP OUTLP

NEXT:INC DI;继续对后续字符进行判断处理

JMP OUTLP

DONE:MOV AH,4CH;返回DOS

INT 21H

CODE ENDS

END START

img87

图4-15 例4-13程序流程图

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈