软件评测师-程序流程图

2019年下午真题:

 解析:

 有点眼花缭乱,别急,先来杯82年的乌龙茶,放平心态。

我们一个节点一个节点分析。

1.len>5122:buf_len;

人家都标好1,2,3了,说明就是3个圆圈。先看看逻辑。

 表达式有2种情况:

1:len>512时,size_t total_bytes=512;

2:len

画出流程图:

 接着,程序跳转到第一个if:

 看清楚最上面的这2个红色的框框,可以知道第一个if,当buf_len==0时,直接return_code = 0;然后跳转到节点13(return return_code).当buf_len!=0时,则跳转到第1个for循环中,开始执行第2个红色框框的内容。

把我们知道的先画出来:

 这条路径是很清晰的,难就难在打马赛克的部分!不慌,再吃块21年的巧克力补充一下能量。

知己知彼,先来分析一波那一坨东西。

 很乱是不是,简单点~做题的思路简单点~咳咳,不小心唱出来了,我们只看一个for循环。

 可以看到3个小小的红框框,如果执行到

6:i>=total_bytes

8:break

12:break

都会直接跳转到节点13。

把我们想到的先画出来吧:

 问题来了,如果当6:i

这个时候程序要执行的,就是以下内容了:

 我们可以看到会有2条路径走向break。

6→7→8

9→10→11→12

不妨先把想到的画出来:

 好,那么我们的节点全部用上了,那么怎么连接他们p>

首先你要知道for循环中至少是要有1个节点给他绕回去的,但是节点6的for循环好像没有绕回去的线啊!我们来重点关注for循环吧。

 怎么办!里面有2个break,碰到它们就回不了节点6了(直接到节点13)!

咦p>

 有了!只要里面2个小框框的if,都取相反条件(不满足if的条件),好像就可以跳转到节点6。

试一下,当c[i]!=”0″,节点7会跳转到节点9,10(先看做整体),然后到节点11,此时1

画一下吧:

 9和10也是一坨东西啊!看不懂!

别慌,啥都吃完了,吃手手吧。

重点关注节点9和节点10。

 应该聪明的同学看到这里就明白了,不明白的就把这个当作业吧,咳咳,下课!

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年9月22日
下一篇 2021年9月22日

相关推荐