概述
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。
应该聪明的同学看到这里就明白了,不明白的就把这个当作业吧,咳咳,下课!
最后
以上就是柔弱咖啡为你收集整理的软件评测师-程序流程图的全部内容,希望文章能够帮你解决软件评测师-程序流程图所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复