1.结构对应
1.1 for循环
A;
for(int i = 0;i < n;i++){
B;
C;
}
D;
1.2 while循环
A;
while(p){
B
}
C;
循环回到判断菱形的端点,和菱形上方的线效果相同。
1.3 do while 循环
A;
do{
B
}while(p);
C;
2. 实际例题分析
本题的原始流程图,过程分析如下:
- 执行flag = True
- 一个循环结构,循环继续的条件是 p && flag
- 执行g
- 进行q条件判断
- q成立,则啥也不干
- q不成立,则让flag = false
对应这个逻辑,是一个while循环的结构:
接下来要将它改成没有flag的版本。首先分析,flag在什么时候会被改变。
可以看到flag只有在q不成立的时候,被赋值为false,赋值为false之后,由于判断循环跳出的条件中有q,因此循环最后跳出,不再执行。也就是说,如果q为false,就跳出循环。因此可以将q放进循环判断的条件:
但这和原来的流程又有些不同,第一次判断时候,原先判断的内容是:
由于flag是true,即要只先判断一次p。也就是说,流程为:
- 判断p
- 执行g
- 判断p && q
- 执行g
- 判断p && q
- 执行g
- ……
直到循环结束。
如果直接使用刚刚我们修改的流程图代替,效果是:
- 判断p && q
- 执行g
- 判断p && q
- 执行g
- ……
这样出现的一个差异的情况:当一开始q是false,p是true的时候:
- 原始流程图只判断一次p,执行一次g,后再跳出循环
- 新流程图一开始就判断p && q,直接结束程序,不执行g
这样就少执行了一次g,和原先的图意思不符合。
因此我们要对流程图进行修改,单独来判断一次p,后再让循环来判断p && q