实验2:基于visio的系统HIPO图和程序流程图

2019-04-02 09:15

实验2:基于VISIO的系统HIPO图和程序流程图

目的:

1)掌握HIPO画法

2)掌握数据流程图画法

内容:

1)本文附录图3-25、教材P66图4.3 2)本文附录图3-44、图3-45、图3-47

销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销销

图3-25 销售管理系统的HIPO图

例题1(1994年软件设计师试题)

阅读下列说明和流程图,如图3-44所示,回答问题1和问题2,把解答写在答案的对应栏里。 【说明】

流程图3-45用来将数组A中的n(n?2)个数经变换后存储到数组B中。变换规则如下: (1)若A中有连续t个相同的元素(t>1),则在B存入t和该元素的值。 (2)若A中有连续t个元素(t?1),其中每个元素都与相邻的元素不相同,则在B中存入t和这t个元素的值。

例如:

A={3,3,3,3,5,5,7,6,3,6,2,2,2,2,1,2} 则变换后

B={4,3,2,5,-4,7,6,3,6,4,2,-2,1,2}

流程图中,逻辑变量C用来区分正在进行连续相同元素的计数还是连续不等元素的计数,Ki用来记录数组B存放t或-t的元素的下标。 【问题1】

填充流程图中的①至⑤,使之成为完整的流程图。 【问题2】

如果删除流程图中的判断框t:1,那么,当数组A={5,5,4,4}时,经改变后的流程图的变换,数组B将会有什么样的元素值?

start=<>true销CA(1):A(2)1销K1A(1)销B(2)2销K销2销ii:n<=false销C>truet销B(K1)Cfalse销start=CA(i-1):A(i)falseT:1 >销销B(K1)K销K1K+1销K<>Cfalset+1销tK+1销KA(i)销B(K)truet+1销ttruet销B(K1)K+1销K1A(i)销B(K+2)K+2销K1销t销A(i-1)销B(K)销2销ti+1销i图3-44 例题1流程图

分析:首先应仔细地阅读说明部分,了解程序实现什么样的功能。程序实际上是完成一个数组的变换。 例如:

A={3,3,3,3,5,5,7,6,3,6,2,2,2,1,2} 则变换后;

B={4,3,2,5,-4,7,6,3,6,4,2,-2,1,2} 也就是说,A中有4个“3”,所以在B中写入“3”的个数t(即4),再写入该元素值 (即3),A中接下来是两个“5”,所以在B中添加数据“2,5”;再下来是4个相邻但不同的数“7,6,3,6”,所以在B中写入-t(即-4),再写入t个元素值(即7,6,3,6),后面的依次类推。

通过上面的分析,我们已经了解了程序要实现的功能,现在开始分析程序流程。

从整体上看,此程序的分支比较多,用到的变量也比较多。这种情况下,最好是自己手动地把数据代到程序中去,手动地模拟程序运行。这样,能让你最快地了解到程序的算法结构。题目中其实已近为考生提供了相当便利的条件,有一个实例,可以就用提供的实例来手动运算。所以,A(1)=A(2)=3 C=’true’ K1=1 B(2)=A(1),这一句是把A(1)赋值给B(2),当A的前t个元素相等时,B(1)保存t的值,B(2)保存该元素,元素值为A(1),当A中连续t(t?1)个元素都与其相邻的元素不相同时,则在B(1)中存入-t,B(2)保存这t个元素中的第1个元素即A(1)。所以不管什么情况,B(2)都应该等于A(1)。接着看下一步,2→K,暂时不管空①,继续往下看,2→i,因为i?n,所以,A(i-1)=A(i)(C值为’true’),再接着执行t=t +1,i=i+1??

当i=5时,A(i-1)<>A(i),又因为C值为’true’,所以t→B(K1)。因为K1=1,B(K1)是存储连续相同数字的个数的,按我们的实例,现在的t应等于4,再往前推算,可以知道t应有初值1,所以空①应填1→t。再往下走,K1= K+1,此时的K1=3,为下一次记录t或是-t做准备,A(i)→ B(K1+1)。与前面的B(2)=A(1)类似,为下一轮的解析做准备。K=K+2t=1,到此,空④其实不用去搞复杂的分析和推敲,细心一点儿就能一下写出来。因为这里必须填’true’→C,如果不填这句,程序的两大分支将永远不能执行。同理可得空③应填’false’→C。空②所在的分支是当有n个连续不等数后接有相同的两个数时才执行的分支。前面已经说过B(K1)是用来存储t或-t的,但这里应该注意一点,t是否符合题目的要求。当判断A(i-1)=A(i)成立时,t计数到了第i-1个元素,但按题目的要求,A(i-1)不能计入n个不同的数中,所以空②应填1-t。

空⑤是直接从i:n的判断分支出去的一部分,如果i>n则执行那一部分分支。其实可以不看底下的大段程序,只要n=1(当然,这个题出题时考虑不够周全,没有考虑到n=1时会产生数组溢出,正确的做法应是把这种情况归到A(1)<>A(2)这个分支,但我们做题时可以这么考虑),又因为当C为’true’时B(K1)=t,所以C为’false’时应填:B(K1)=-t。

问题2,前面已经把所有的空都填好了,所以此题只需把数组,代入到删除了的程序中手动运行即可得到答案:B={2,5,0,2,4}。 参考答案 【问题1】

①1->t ②1-t ③'true'->c ④'false'->c ⑤-t->B(K1) 【问题2】

B={2,5,0,2,4}

例题2(1993年软件设计师试题)

阅读下列说明和流程图,如图3-45所示,回答问题1至问题3,把解答写在答卷的对应栏内。

startSN(1)销LN2销II销JI:NW<=销stopLN1:80<=80-LN销N[N/(I-J-1)]销LNWMOD(N,I-J-1)销LNBabcd销L销销销销1销kJ:I销销>>t销B(K1)销S(SL(J):SL(J)-1)销L(K:K+SN(J)-1)efg<=hi销->k销销 LNB:0>K+1销kLNB-1销LNBJ+1销J

图3-45 例题2流程图

销I+1销I【说明】

本流程图的功能是对预处理后的正文文件进行排版输出。

假定预处理后的正文文件存放在字符串S中,S由连续的单词组成,单词由连续的英文字母组成。在预处理过程已产生以下信息:变量NW存放正文中单词的个数,数组元素SL(I)存

放正文中第I个单词在S中的字符位置,SL(1)存放正文中第1个单词的长度。规定S中的字符位置从1开始计数,每个字符占一个位置。字符串S中的某个单词可用如下的子串形式来存取:

S(单词起始位置:单词终止位置)

并规定在对字符串(或子串)赋值时,赋值号两端的字符串(或子串)长度必须相等。 排版输出的要求如下: (1) 每行输出80个字符;

(2) 一个单词不能输出在两行中;

(3) 除最后一行外,所有输出行既要左对齐又要右对齐。即每行的第一个字符必须是某个单词的第一个字母,最后一个字符必须是某个单词的最后一个字母; (4) 单词之间必须有一个或一个以上的空格;

(5) 最后一行只须左对齐,且单词之间均只有一个空格;

(6) 使空格尽可能地均匀分布在单词之间,即同一行中相邻的单词的空格数量最多相差1。 假定正文中至少有两个以上的单词,每个单词的长度均小于40。此外,流程图中省略了数据的输入部分。图中[W]表示不超过W的最大整数。 【问题1】

填充流程图中的①至⑥,使之成为完整的流程图。 【问题2】

图3-45中的“输出末行”框未经细化,如果将如图3-45所示的虚线部分复制到“打出末行”框上,那么复制部分应做怎样的修改?可用图中所示的 a,b,...,j来回答,例如a改成1→i,删除b。 【问题3】

如将图3-45中开始部分的 SN(1)→LN,改成2→i改成1→i,则修改后的流程图是否正确。 分析:其实做过一些流程图试题的读者已经能在解题过程中总结出一些经验了,其中的一条就是找程序中没有赋初值的变量,这些变量一定是要在你要填的空里赋初值的。这样能够缩小目标,加快解题速度。而且想像程序流程图题,一旦前一两空填出来了,你对程序结构的了解就能很快的更进一步,后面就势如破竹了。

此题正好可以运用这一点,在 第二个判断框中有LN1:80,但在 前面没有对LN1赋初值,所以我们可以马上就可以知道空①已经给LN1赋初值。那么具体应该赋什么值呢?

我们可以看到,当LN1小于等于80时,程序执行到②→i=i+1再到比较条件i:NW->①。结合题目中的“每行舒服80个字符”、“SN(1)存放正文中第1个单词的长度”,我们很容易能分析出LN1应是当前行的长度,能分析出出LN1应是当前行的长度,这个长度应该包括单词的长度和中间的空格,又因为前面又SN(1)→LN,所以空①应填LN+SN(1)→LN1,1是空格的长度,LN原来行的长度,S(I)是当前单词的长度。接下来的空②很明显搜LN1->LN,这是为下一轮的运算做准备。

现在我们开始分析主循环体内的语句:80-LN->N,算出一行结尾还有多少个空格,因为题目要求不能吧空格全放在行的结尾,要散布在单词中间。[N/(I-L-1)]→LNW这个操作是把多余空格除以本行的单词的间隔数再取整。MOD(N,I-J-1)→LNB,这个操作是把多余空格除以本行单词的间隔数在取余。也就是说,如果一行有5个单词第五个单词后还有7个空格,但无法放下第六个单词了,我们吧数据代入到式子里得:[7/(6-1-1)]→LNW,此时的 LNW=1,LNB=3,也就是说这7个空格应这样来分配,5个单词有4个间隔,首先每个空格加LNW个空格(即一个空格),再把前LNB个间隔处加1个空格。接下来1→K,J:I。

S(SL(J):SL(J)+SN(J)-I)→L(K:K+SN(J)-1)把单词插入到输出行的标准位置,⑤->K,通过上面的 分析再结合下面的 几条语句,我们可以发现LNW还未被使用,LNW应是加在每个间隔处的空格数,且K正好是确定输出行当前位置的变量(这一点可以从L(K:K+SN(J)-1)看


实验2:基于visio的系统HIPO图和程序流程图.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:两位数乘两位数计算练习题100道A4格式(一)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: