【C】循环(一看就懂)——while、for、do while、goto

简介: 【C】循环(一看就懂)——while、for、do while、goto

💻前言

🍁总结while循环、for循环、do while循环以及break和continue在循环语句中的作用

🍁循环语句以及break、continue语句都属于属于C语言当中的控制语句大类,break和continue属于转向语句

🍁生活中的很多事情都需要我们日复一日的反复去做,这就是循环;而在C语言当中要实现循环就需要用到这些循环结构的语句

💻.1 while循环

语法结构

while(表达式)

{

循环语句;

}

当表达式部分为真时循环体内的循环语句执行,新学时有一个容易混淆点的:while(表达式);注意这里是不可以加分号的,分号代表一条语句的结束,如果加上分号,后面的循环语句便不会执行;后面介绍的for循环同样的也是不可以用加分号这种写法的。

73d8c9be8b2a4960a39693770de0ac9a.png

1.1 实现while循环的三个部分

要实现一个循环是需要三个部分的,初始化部分,判断部分,调整部分。

看这段代码理解这三个部分

//在屏幕上打印1-10的数字。
#include <stdio.h>
int main()
{
  int i = 1;//初始化部分
  while (i <= 10)//判断部分
  {
    printf("%d ", i);
    i++;//调整部分
  }
  return 0;
}

while循环的缺陷是当我们随着能力的提升,如果我们写了很长的一个代码在循环中,这三个部分就会因为相距太远而导致代码不好维护和修改,有些时候就会不方便使用,而后面介绍的for循环就可以解决这种顾虑。

1.2 while语句中的break和continue

不管是哪种结构的循环中只要遇到break,就停止后期的所有的循环,直接终止循环。

所以:while中的break是用于永久终止循环的。

#include<stdio.h>
int main()
{
  int i = 1;
  while (i <= 10)
  {
    if (5 == i)
      break;
    printf("%d ", i);
    i++;
  }
  return 0;
}

73d8c9be8b2a4960a39693770de0ac9a.png

continue在while循环中的作用就是:

continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,

而是直接跳转到while语句的判断部分。进行下一次循环的入口判断。

#include<stdio.h>
int main()
{
  int i = 1;
  while (i <= 10)
  {
    i++;
    if (5 == i)
      continue;
    printf("%d ", i);
  }
  return 0;
}

73d8c9be8b2a4960a39693770de0ac9a.png

💻.2 for循环

语法结构

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

{

循环语句;

}

表达式1

表达式1为初始化部分,用于初始化循环变量的。

表达式2

表达式2为条件判断部分,用于判断循环什么时候终止。

表达式3

表达式3为调整部分,用于循环条件的调整。

73d8c9be8b2a4960a39693770de0ac9a.png

2.1 for循环中的break和continue

不管在哪种循环中,break和continue的作用都是一样的,但因为不同的循环结构上有所差异,会有一些效果上的不同,在下面对俩种循环的代码进行对比。

2.2 for循环和while循环的对比

用while循环写出这个代码,当使用了continue跳过了调整部分,i的值由于不能进行调整,i会一直等于5导入这个程序陷入死循环当中

#include<stdio.h>
int main()
{
  int i = 1;//初始化
  while (i<=10)//判断
  {
    if (i == 5)
      continue;
    printf("%d ", i);
    i++;//调整
  }
  return 0;
}

73d8c9be8b2a4960a39693770de0ac9a.png

那么用for循环写这个代码,由于调整部分不在循环体内就不会导致上面死循环的结果

#include <stdio.h>
int main()
{
  int i = 0;
  for (i = 1; i <= 10; i++)
  {
    if (i == 5)
      continue;
    printf("%d ", i);
  }
  return 0;
}

73d8c9be8b2a4960a39693770de0ac9a.png

这里对比while循环和for循环的三个调整部分,while由于风格的问题使得三个部分很可能偏离较远,查找修改就不够集中和方便,但一样效果使用for循环也可以实现,所以,for循环的风格更胜一筹;for循环使用的频率也最高。

2.3 for语句的循环控制变量

1. 不可在for 循环体内修改循环变量,防止 for 循环失去控制。

如果在循环体内修改循环变量可能会使程序局部出现问题而影响整个程序的运行

#include <stdio.h>
int main()
{
  int i = 0;
  for (i = 1; i <= 10; i++)
  {
      i = 20;//错误示范,不可以采取这种做法,会出现问题
    printf("%d ", i);
  }
  return 0;
}

2. 建议for语句的循环控制变量的取值采用“前闭后开区间”写法。

看下面的俩种代码风格,要知道我们写代码要尽可能的保证代码的可读性,而采用前闭后开的写法这里判断部分的10就有了一些象征意义,它是循环10次,更方便理解阅读代码。

int i = 0;
//前闭后开的写法
for(i=0; i<10; i++)
{}
//两边都是闭区间
for(i=0; i<=9; i++)
{}

2.4 一些for循环的变种

for循环中的初始化部分,判断部分,调整部分是可以省略的,但是不建议初学时省略,容易导致问题。

#include<stdio.h>
int main()
{
  int i = 0;
  for (;;)//for循环的判断部分省略意味这判断会恒成立,会导致死循环
  {
    printf("hehe\n");
  }
  return 0;
}

for循环嵌套循环

#include<stdio.h>
int main()//代码1
{
  int i = 0;
  int j = 0;
  for (i = 0; i < 10; i++)
  {
    for (j = 0; j < 10; j++)
    {
      printf("hehe\n");
    }
  }
  return 0;
}
#include<stdio.h>
int main()//代码2
{         //俩个代码的效果是一样的
  int i = 0;
  int j = 0;
  for (; i < 10; i++)//省略初始化部分
  {
    for (j = 0; j < 10; j++)
    {
      printf("hehe\n");
    }
  }
  return 0;
}

可以使用多个变量控制循环

#include<stdio.h>
int main()
{
  int x, y;
  for (x = 0, y = 0; x < 2 && y < 5; x++, y++)
  {
    printf("hehe\n");
  }
  return 0;
}

💻.3 do while循环

语法结构

do

{

循环语句;

}while(表达式);

表达式为条件判断部分,用于判断循环什么时候终止。

这里注意与for循环与while循环区分,这里因为判断部分在循环语句的最后,所以必须加分号来结束循环语句。

do语句的特点:

循环至少执行一次,使用的场景有限,所以不是经常使用。

73d8c9be8b2a4960a39693770de0ac9a.png

#include <stdio.h>
int main()//代码1:打印1到10
{
    int i = 1;
    do
    {
        printf("%d\n", i);
    } while (i <= 10);
    return 0;
}
#include <stdio.h>
int main()//代码2:使用continue的效果
{
    int i = 1;
    do
    {
        if (5 == i)
            break;
        printf("%d\n", i);
    } while (i <= 10);
    return 0;
}
#include <stdio.h>
int main()//代码3:使用break的效果
{
    int i = 1;
    do
    {
        if (5 == i)
            continue;
        printf("%d\n", i);
    } while (i <= 10);
    return 0;
}

💻.4 goto语句

C语言中提供了可以随意滥用的 goto语句和标记跳转的标号。

语法结构

73d8c9be8b2a4960a39693770de0ac9a.png

从理论上 goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过程。

例如:一次跳出两层或多层循环。

多层循环这种情况使用break是达不到目的的。它只能从最内层循环退出到上一层的循环。

在任何编程语言中,都不建议使用 goto 语句。因为它使得程序的控制流难以跟踪,使程序难以理解和难以修改.

goto语言真正适合的场景如下:

for(...)
    for(...)
   {
        for(...)
       {
            if(disaster)
                goto error;
       }
   }
error:
 if(disaster)
         // 处理错误情况

💻结语

各位小伙伴,看到这里就是缘分嘛,希望我的这些内容可以给你带来那么一丝丝帮助,可以的话三连支持一下呗(关注✌️点赞✌️评论✌️)!!!
感谢每一位走到这里的小伙伴,我们可以一起学习交流,一起进步!!!加油!!!

image.png

目录
相关文章
|
传感器 数据采集 数据格式
RS485和Modbus通信协议,让工业自动化更高效!
RS485和Modbus通信协议,让工业自动化更高效!
|
9月前
|
安全 Linux 网络安全
Metasploit Framework 6.4.88 (macOS, Linux, Windows) - 开源渗透测试框架
Metasploit Framework 6.4.88 (macOS, Linux, Windows) - 开源渗透测试框架
675 0
|
存储 人工智能 分布式计算
云栖实录 | 阿里云 OpenLake 解决方案重磅发布:多模态数据统一纳管、引擎平权联合计算、数据共享统一读写
阿里云 OpenLake 解决方案重磅发布,构建大数据、搜索、AI 一体化的能力体系,实现多模态数据统一纳管、多种计算引擎平权计算、大数据 AI 一体化开发,助力企业基于数据资产构筑竞争力。
1803 10
云栖实录 | 阿里云 OpenLake 解决方案重磅发布:多模态数据统一纳管、引擎平权联合计算、数据共享统一读写
|
监控 网络协议 Nacos
Nacos:构建微服务架构的基石
Nacos:构建微服务架构的基石
988 3
|
8月前
|
数据可视化 大数据 关系型数据库
基于python大数据技术的医疗数据分析与研究
在数字化时代,医疗数据呈爆炸式增长,涵盖患者信息、检查指标、生活方式等。大数据技术助力疾病预测、资源优化与智慧医疗发展,结合Python、MySQL与B/S架构,推动医疗系统高效实现。
|
数据可视化 JavaScript 架构师
D3.js实战:数据可视化高级技巧实例应用
本文介绍了D3.js入门,包括创建HTML文件引入库、绘制简单线图、柱状图和饼图。示例展示了数据绑定、交互性和动画效果,如柱状图的悬停效果和线图的数据平滑过渡。此外,还提及力导向图和地图可视化的实现,以及使用Enter, Update, Exit模式进行动态更新。最后提到了复杂图表和高级技巧,如使用组件库、动画、交互性和性能优化。
809 0
如何在 Arduino 中使用 PWM
PWM(脉冲宽度调制)是 Arduino 中常用的技术,用于控制电机速度、LED 亮度等。通过设置数字引脚的 `analogWrite()` 函数,可以生成不同占空比的 PWM 信号,实现精确控制。
2663 2
|
存储 SQL 大数据
大数据 - ClickHouse
大数据 - ClickHouse
424 0
大数据 - ClickHouse
|
存储 安全 程序员
老程序员分享:List、Map、Set之间的联系与区别:
老程序员分享:List、Map、Set之间的联系与区别:
|
传感器 存储 机器学习/深度学习
Python树莓派开发
Python树莓派开发
1592 0
Python树莓派开发

热门文章

最新文章