软件评测师-程序流程图

2019年下午真题:

 解析:

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

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

1.len>512?512:buf_len;

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

 表达式有2种情况:

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

2:len<=512时,size_t total_bytes=buf_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<total_bytes呢?

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

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

6→7→8

9→10→11→12

不妨先把想到的画出来:

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

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

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

咦?

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

试一下,当c[i]!="0",节点7会跳转到节点9,10(先看做整体),然后到节点11,此时1<32,就可以躲开break!那么节点11是可以回到节点6的。

画一下吧:

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

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

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

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

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值