for、while、do while循环的流程图表示及相应continue、break的流程图表示

本文围绕循环和控制语句展开,介绍了for、while、do while三种循环用流程图表示求1到100和的方法。还阐述了continue语句在不同循环中跳过部分循环体的应用,以及使用时需注意避免死循环。同时说明了break语句可退出当前循环,并给出判断素数时在不同循环中使用break的示例及流程图。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

一、循环

(一)for循环

for循环可以理解为

for( 循环变量初始化 ; 循环判断 ; 循环变量自增 )
{
    循环体
}

注:本文中的"循环判断"跟"循环条件"是一个意思

只不过因为"循环变量初始化"、"循环变量自增"都是动宾结构

为了后续描述统一,采用同样是动宾结构的"循环判断"

  

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

for( i=1; i<=100; i++ )
{
    sum+=i;
}

对应关系

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

for循环用程序流程图表示

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

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

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

画出for循环求和的流程图

(二)while循环

while循环可以理解为

循环变量初始化
while( 循环判断 )
{
    循环体【其中包含循环变量自增】
}

仍然用1到100求和举例

i=1;
while( i<=100 )
{
    sum+=i;
    i++;
}

对应关系

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

sum+=i

i++

while循环用程序流程图表示

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

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

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

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

画出while循环求和的流程图

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

(三)do while循环

do while循环可以理解为

循环变量初始化
do
{
    循环体【其中包含循环变量自增】

}while( 循环判断 );

仍然用1到100求和举例

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语句


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


(一)for循环中的continue

举例:求1到100的偶数和

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

for(i=1; i<=100; i++)
{
    if(i%2==0) sum+=i;
}

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

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循环就错了

错误例:

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 自增即可避免死循环)

i=1;
while( i<=100 )
{
    if(i%2) 
    {
        i++;
        continue;
    }
    sum+=i;
    i++;
}

画出正确例的流程图

(三)do while循环中的continue

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

错误例:

i=1;
do
{
    if(i%2) continue;
    sum+=i;
    i++;

}while( i<=100 );

画出错误例的流程图

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

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

  

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

i=1;
do
{
    if(i%2) 
    {
        i++;
        continue;
    }
    sum+=i;
    i++;

}while( i<=100 );

画出正确例的流程图

  

  

三、break语句


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


(一)for循环中的break

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

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

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循环

i=2;
while( i<n )
{
    if(n%i==0) break;
    i++;
}
if(i==n) 
{
    printf("%d",n);
}

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

  

(三)do while循环中的break

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

i=2;
do
{
    if(n%i==0) break;
    i++;

}while( i<n );

if(i==n) 
{
    printf("%d",n);
}

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

do while循环的程序流程图可以表示为以下形式: ``` ┌───────────┐ │ │ │ 初始化 │ │ 循环变量 │ │ │ └─────┬─────┘ │ ▼ ┌───────────┐ │ │ │ 循环判断 │ │ │ └─────┬─────┘ │ │ ▼ ┌───────────┐ │ │ │ 循环体 │ │ │ └─────┬─────┘ │ │ ▼ ┌───────────┐ │ │ │变量自增 │ │ │ └─────┬─────┘ │ ▼ ┌───────────┐ │ │ │下一次循环 │ │判断 │ └─────┬─────┘ │ │ ▼ ┌───────────┐ │ │ │ 结束 │ │ 循环 │ └───────────┘ ``` 这个流程图描述了do while循环的整个过程。首先,在初始化阶段,循环变量被赋初始值。然后,在循环判断部分,程序会判断循环条件是否满足,如果满足,则执行循环体;如果不满足,则跳出循环。接着,在循环体中,程序执行具体的操作。然后,循环变量会进行自增操作。最后,程序会回到循环判断部分,重复执行上述步骤,直到循环条件不满足为止,循环结束。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [forwhiledo while循环流程图表示相应continuebreak流程图表示](https://blog.youkuaiyun.com/AN_drew/article/details/80800258)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值