我是靠谱客的博主 等待发卡,这篇文章主要介绍for、while、do while循环的流程图表示及相应continue、break的流程图表示提示:为了与文字对应,代码中的变量定义及初值已被省略,现在分享给大家,希望可以做个参考。
提示:为了与文字对应,代码中的变量定义及初值已被省略
for循环可以理解为
复制代码
1
2
3
4for( 循环变量初始化 ; 循环判断 ; 循环变量自增 ) { 循环体 }
先举个例子,for循环求1到100的和
复制代码
1
2
3
4for( 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
6i=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
7i=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
4for(i=1; i<=100; i++) { if(i%2==0) sum+=i; }
非常规做法就是用continue跳过奇数 (i%2!=0)
复制代码
1
2
3
4
5for(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
7i=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
11i=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
8i=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
12i=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
8for(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
10i=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
12i=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内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复