C语言——循环结构

news/2024/11/16 10:50:24/

C语言提供了whiledo...whilefor三种语句构成循环结构。循环语句是程序中的一个基本语句,在编程中,如果我们需要对某些操作对象进行相同的操作,那么,使用循环语句,就能让计算机反复执行,从而减少我们编程时写的语句。接下来,我主要讲解一下主要的三种循环语句whiledo...whilefor)和我们在循环中常用到的转移语句(goto,continue,break

一,循环语句

(1)while 循环语句

while是当型循环(先判断后执行

格式:

while(表达式)      //说明: ① 表达式可以是任意类型的; ② 语句中必须有能改变(表达式)值的语句,否则可以会是死循环

{

     循环体语句;

}

执行过程:当(表达式)的值为时,执行{}里的循环体,循环体执行完后,再判断(表达式)是否为真,如果是真就继续执行{}里的循环体,如果是,就结束循环

如果第一次表达式就为假,那一次也不执行。

流程图:

(2)do...while循环

do...while循环是直到型循环(先执行后判断)

格式:

do

{

      循环体语句;

}while(表达式);       //注意:while(表达式); 的   “ ;”  不能漏掉         //说明① 表达式可以是任何类型;② 语句中必须有能改变(表达式)值的语句,否则可以会是死循环

执行过程:

先执行{}里面的循环体一次,再计算while中的(表达式),如果(表达式)为真,就执行循环,直到表达式的值为假,才结束循环。

不管条件是否满足,循环体总会执行一次。

流程图:

(3)for循环

for循环是当型循环(先判断后执行)

格式:

for(表达式1;表达式2;表达式3)  

{

       循环体语句;

}

一般我们可以理解为:表达式1是初始化赋值;  表达式2是判断;  表达式3是循环后的再赋值

执行过程:

①先计算表达式1(初始化赋值);②然后计算表达式2的值,进行判断:如果表达式2的值是真,则执行一次{}里的循环语句,如果为假则结束循环;③当为真且执行完语句后,计算表达式3,然后再重复过程②

整个循环过程中,表达式1只被执行一次

流程图:

关于表达式省略的运用:

1,表达式1 一般为赋值表达式,给控制变量赋初始值。如果省略表达式1(需要for语句前有进行定义变量),省略后格式如下:

for(;表达式2;表达式3)

{

      循环语句;

}

2,表达式2 一般为判断语句,即:控制循环是否执行的条件判断。如果省略则默认表达式2恒为真。循环语句中必须有结束循环的语句,否则就会变成死循环。省略表达式2,的格式如下:

for(表达式1;;表达式3)

{

        循环语句;

}

3,表达式3 一般为一次循环后再赋值,用来实现变量的自增或者自减。一般我们将表达式3所省略的内容放在循环体中,格式如下:

for(表达式1;表达式2;)

{

         循环语句;

         表达式3

}

//  注意:若循环体中没有能改变表达式2的值,则也可能造成死循环,如:

for(i = 0;i<100)

{

       循环语句;(若循环语句不能使表达式2变为假,则变成死循环)

}

 4,当表达式1,2,3都省略时,此时与无限的while语句等价,格式:

for(;;)

(4)循环语句的嵌套

与分支语句类似,我们可以根据实际需求,将循环语句嵌套,实现多重循环,一般的形式有:

1,while()

        { ···

                    while()

                        { ···     

                         }

          ···

        }

2,do()

        { ···

                    do()

                        { ···     

                         }while();

          ···

        }while();

3,while()

        { ···

                    do()

                        { ···     

                         }while();

          ···

        }

4,

1,for(;;)

        { ···

                    do()

                        { ···     

                         }while();

          ···

                    while()

                        { ···

                         } 

          ···

        }

循环流程:外层循环执行一层,内层循环要执行完

说明:

1,三种循环可以互相嵌套,层数不限

2,外层循环可包含两个以上的内存循环,但是这两个内存循环不能相互交叉

3,①嵌套循环的跳转:只能跳出本层循环;②禁止从外层跳入内层;禁止跳入同层的另一循环和向上跳转

二,转移语句

(1)break语句

使用范围:break语句只能用于switch或循环结构中

用法:

switch语句中,break的作用是:结束switch结构

循环语句中,break的作用是结束本层循环

流程图:

(2)continue语句

使用范围:只能用于循环结构

用法:

当遇到continue语句时,程序会跳过位于 continue 后面的代码直接回到判断的部分,进行下一轮的循环判断

流程图:

(3)goto语句

goto是无条件转移语句(便于运用在:从多层循环结构代码中快速跳出

用法:

同一个函数内,设置好标号后,goto可以无条件的把程序转移到语句标号所在的位置开始执行(可以跨层)

举例:

#include<stdio.h>

int main()

{

       printf("hehe\n");

       goto next:

       printf("haha\n");

  next:

       return 0;

}

因为当程序遇到  goto next,程序就会跳转到下面的next,然后执行下面的  return0;的语句,所以这串代码打印出的结果应该是:hehe  

注意:如果goto语句使用不当,比如标号位置不得当,就会导致在函数内部随意乱跳转,打乱程序的执行流程。(所以建议初学者不要使用)


🌈我的分享就到此结束啦🌈
要是我的分享也能对你的学习起到帮助,那简直是太酷啦!
若有不足,还请大家多多指正,我们一起学习交流!

最后,☺祝愿大家每天都能向阳而生呀!!!


http://www.ppmy.cn/news/1201918.html

相关文章

047_第三代软件开发-日志分离

第三代软件开发-日志分离 文章目录 第三代软件开发-日志分离项目介绍日志分离用法 关键字&#xff1a; Qt、 Qml、 log、 日志、 分离 项目介绍 欢迎来到我们的 QML & C 项目&#xff01;这个项目结合了 QML&#xff08;Qt Meta-Object Language&#xff09;和 C 的强…

YB506A是一款锂电池充、放电管理专用芯片,集成锂电池充电管理和降压DCDC电路

YB506A 锂电转可充电AA/AAA电池专用SOC芯片 概述&#xff1a; YB506A是一款锂电池充、放电管理专用芯片&#xff0c;集成锂电池充电管理和降压DCDC电路。充电过程满足锂电池三段式滑流/恒流/恒压充电规范&#xff0c;YB506A内部的线性充电电路采用了恒流可配置模式&#xff0…

输电线路AR可视化巡检降低作业风险

随着现代工业的快速发展&#xff0c;各行业的一线技术工人要处理的问题越来越复杂&#xff0c;一些工作中棘手的问题迫切需要远端专家的协同处理。但远端专家赶来现场往往面临着专家差旅成本高、设备停机损失大、专业支持滞后、突发故障无法立即解决等痛点。传统的远程协助似乎…

【23真题】Easy!速成120两个月够了!

今天分享的是23年广西科技809的信号与系统试题及解析。 本套试卷难度分析&#xff1a;本套试题内容难度中等偏下&#xff0c;题量不大&#xff0c;考察的知识点很基础。所有的知识点都出现在它应该出现的地方&#xff0c;无任何偏难怪&#xff0c;非常常规的试卷&#xff01;个…

什么是vue的生命周期?

Vue 的生命周期指的是组件实例从创建到销毁的整个过程中&#xff0c;会触发的一系列钩子函数。这些钩子函数允许开发者在不同的阶段插入自定义代码&#xff0c;以便在组件的不同生命周期阶段执行特定的逻辑。 Vue 2.x 的生命周期包括以下钩子函数&#xff1a; beforeCreate&a…

自制圆形时钟⏰

如果想着做一个类似的家里的圆形时钟的样式的钟表&#xff0c;可以使用这样的方法&#xff1a; #import "ViewController.h" interface ViewController () property (nonatomic,weak)CALayer *second; property (nonatomic ,weak)CALayer *minute; property (nona…

Linux内核分析(七)--RAID磁盘阵列与磁盘高速缓存

目录 一、引言 二、RAID 磁盘阵列 ------>2.1、RAID级别 ------------>2.1、RAID0 ------------>2.1、RAID1 ------------>2.1、RAID5 ------------>2.1、RAID6 ------------>2.1、RAID10 ------------>2.1、RAID50 ------------>2.1、总结 …

随笔--解决ubuntu虚拟环境的依赖问题

文章目录 问题一&#xff1a;在conda虚拟环境中报错ImportError: libcupti.so.11.7:cannot open shared object file: No such file or directory解决步骤问题二&#xff1a; RuntimeError: CUDA error: CUBLAS_STATUS_INVALID_VALUE when calling cublasSgemmStridedBatched( …