我是靠谱客的博主 等待发卡,这篇文章主要介绍for、while、do while循环的流程图表示及相应continue、break的流程图表示提示:为了与文字对应,代码中的变量定义及初值已被省略,现在分享给大家,希望可以做个参考。

提示:为了与文字对应,代码中的变量定义及初值已被省略

for循环可以理解为

复制代码
1
2
3
4
for( 循环变量初始化 ; 循环判断 ; 循环变量自增 ) { 循环体 }

先举个例子,for循环求1到100的和

复制代码
1
2
3
4
for( i=1; i<=100; i++ ) { sum+=i; }

对应关系

循环变量初始化i=1
循环判断i<=100
循环变量自增i++
循环体sum+=i

for循环用程序流程图表示

可以看到,图中循环变量初始化只执行了1次

每次循环执行的其实是图中红色箭头指向的部分

循环判断循环体循环变量自增下一次循环判断

画出for循环求和的流程图

while循环可以理解为

复制代码
1
2
3
4
5
循环变量初始化 while( 循环判断 ) { 循环体【其中包含循环变量自增】 }

仍然用1到100求和举例

复制代码
1
2
3
4
5
6
i=1; while( i<=100 ) { sum+=i; i++; }

对应关系

循环变量初始化i=1
循环判断i<=100
循环变量自增i++
循环体

sum+=i

i++

while循环用程序流程图表示

(注意:while循环的 循环体 包含 循环变量自增)

可以看到,图中循环变量初始化只执行了1次

每次循环执行的其实是图中红色箭头指向的部分

循环判断循环体(包含循环变量自增)下一次循环判断

画出while循环求和的流程图

(虚框仅为了表示循环体,真正的流程图不会画这个)

do while循环可以理解为

复制代码
1
2
3
4
5
6
循环变量初始化 do { 循环体【其中包含循环变量自增】 }while( 循环判断 );

仍然用1到100求和举例

复制代码
1
2
3
4
5
6
7
i=1; do { sum+=i; i++; }while( i<=100 );

对应关系

循环变量初始化i=1
循环判断i<=100
循环变量自增i++
循环体

sum+=i

i++

do while循环用程序流程图表示

(注意:do while循环的 循环体 包含 循环变量自增)

可以看到,图中循环变量初始化只执行了1次,而且循环体在循环判断之前

即无论是否满足循环判断,do while的循环体必定会执行一次

每次循环执行的其实是图中红色箭头指向的部分

循环体(包含循环变量自增)下一次循环判断

画出do while循环求和的流程图

(虚框仅为了表示循环体,真正的流程图不会画这个)

============================================

continue语句会跳过在它之后的循环体,跳转到下一次循环判断

for循环中的continue

举例:求1到100的偶数和

常规做法是直接判断偶数(i%2==0)

复制代码
1
2
3
4
for(i=1; i<=100; i++) { if(i%2==0) sum+=i; }

非常规做法就是用continue跳过奇数 (i%2!=0)

复制代码
1
2
3
4
5
for(i=1; i<=100; i++) { if(i%2) continue; sum+=i; }

解释一下,直接写 if(表达式) 等价于 if(表达式 != false) ,对于数值表达式, != false就是 !=0。

所以if(i%2) 等价于 if(i%2 != 0) //判断奇数

if(i%2) continue; //遇到奇数时跳过,遇到偶数时不跳过进行后续的求和,然后进行下一次循环

画出非常规做法使用for循环continue的流程图

可以看到当 i%2 != 0 为真时(蓝色箭头),即奇数,执行continue,直接到i++,跳过了sum+=i

只有当 i%2 != 0 为假,也就是 i%2 == 0时,即偶数,正常执行sum+=i 进行求和

while循环中的continue

如果想当然的按照上面形式将for循环改为while循环就错了

错误例:

复制代码
1
2
3
4
5
6
7
i=1; while( i<=100 ) { if(i%2) continue; sum+=i; i++; }

画出错误例的流程图

因为while循环的循环变量自增 i++是在循环体中

当i%2 != 0为真时(奇数,比如 i==1),执行continue,此时sum+=i 和 i++ 都被跳过

因为i++被跳过,所以i的值不变i==1,继续进入循环,i%2 != 0为真,继续continue

再进入循环,再continue跳过,因为i始终不变,造成死循环

正确例:(在continue之前让 i 自增即可避免死循环)

复制代码
1
2
3
4
5
6
7
8
9
10
11
i=1; while( i<=100 ) { if(i%2) { i++; continue; } sum+=i; i++; }

画出正确例的流程图

do while循环中的continue

do while循环和while循环一样,也是循环变量自增包含在循环体中,直接改同样是错的

错误例:

复制代码
1
2
3
4
5
6
7
8
i=1; do { if(i%2) continue; sum+=i; i++; }while( i<=100 );

画出错误例的流程图

 

 

因为continue会跳转到下一次循环判断,而do while循环的循环判断在循环体之后

所以画出来的continue箭头方向跟for和while循环是不一样的

  

正确例:(在continue之前让 i 自增即可避免死循环)

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
i=1; do { if(i%2) { i++; continue; } sum+=i; i++; }while( i<=100 );

画出正确例的流程图

 

============================================

break语句可以退出当前循环(在多层嵌套循环中仅能退出一层循环)

for循环中的break

举例:判断正整数n是否为素数(质数)

(这是最普通的方法,用sqrt()函数还能更快)

复制代码
1
2
3
4
5
6
7
8
for(i=2; i<n; i++) { if(n%i==0) break; } if(i==n) { printf("%d",n); //以C语言输出为例 }

解释一下,素数是只能被1和本身(变量n)整除的数,循环变量 i 从2到n-1,看n是否能被 i 整除,

如果n%i==0,说明不光有1和本身(变量n),还有 i 能整除n,所以n不是素数而是合数。

因为if(n%i==0)在循环体中,所以肯定满足循环条件i<n。

如果满足if,此时break,退出循环,必定有i<n,n不是素数而是合数

如果循环正常结束,则2到n-1不能整除n,

最后一次循环 i==n-1时,n%i != 0 ,执行i++,此时i==n退出循环,n是素数

画出for循环中的break的流程图

​​​​​​​

 

 

while循环中的break

以前面为基础改写成while循环

复制代码
1
2
3
4
5
6
7
8
9
10
i=2; while( i<n ) { if(n%i==0) break; i++; } if(i==n) { printf("%d",n); }

画出while循环中的break的流程图

do while循环中的break

以前面为基础改写成do while循环

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
i=2; do { if(n%i==0) break; i++; }while( i<n ); if(i==n) { printf("%d",n); }

画出do while循环中的break的流程图

最后

以上就是等待发卡最近收集整理的关于for、while、do while循环的流程图表示及相应continue、break的流程图表示提示:为了与文字对应,代码中的变量定义及初值已被省略的全部内容,更多相关for、while、do内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(67)

评论列表共有 0 条评论

立即
投稿
返回
顶部