【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

目录
相关文章
|
7月前
|
C#
C#拾遗补漏之goto跳转语句
在我们日常工作中常用的C#跳转语句有break、continue、return,但是还有一个C#跳转语句很多同学可能都比较的陌生就是goto,今天大姚带大家一起来认识一下goto语句及其它的优缺点。
分支和循环语句(2)补充goto语句
分支和循环语句(2)补充goto语句
53 1
|
7月前
|
C语言
20.C语言:用continue语句提前终止循环
20.C语言:用continue语句提前终止循环
117 0
|
7月前
|
C语言
19.C语言:用break语句提前终止循环
19.C语言:用break语句提前终止循环
146 0
|
7月前
|
程序员 Go 开发者
Go语言中的跳转控制结构:`goto`、`break` 和 `continue`
【2月更文挑战第3天】在Go语言中,跳转控制结构允许程序员直接控制程序的执行流程,通过`goto`、`break`和`continue`关键字实现代码的跳转、退出循环或跳过循环的某次迭代。本文将深入探讨这些跳转控制结构的使用场景、注意事项以及最佳实践,帮助读者更好地理解和应用Go语言中的跳转控制结构。
|
C语言
选择结构程序设计和循环控制(if语句,switch语句,条件运算符,for循环,while及do while语句,break,continue,goto语句)折半查找法及猜数字游戏带你巩固理解
选择结构程序设计和循环控制(if语句,switch语句,条件运算符,for循环,while及do while语句,break,continue,goto语句)折半查找法及猜数字游戏带你巩固理解
76 0
|
编译器 C语言
C语言循环坑 -- continue的坑
C语言循环坑 -- continue的坑
113 0
C语言循环坑 -- continue的坑
|
JavaScript
for-in循环一看就懂
for-in循环一看就懂
59 0
|
缓存 C语言 数据安全/隐私保护
分支与循环:if和else语句?switch语句?EOF是什么?缓冲区是什么?getchar怎么用?fflush不能用?
分支与循环:if和else语句?switch语句?EOF是什么?缓冲区是什么?getchar怎么用?fflush不能用?
|
C语言
【C语言—零基础第八课】循环结构与break continue
生活总最不缺的就是循环了,地球绕着太阳转、一周7天、一天24小时、一小时60分钟这就是循环。在C语言中也存着循环。如果让你使用C语言答应出100条“我喜欢C语言”,你会选择什么样的方法,我想你一定不想打出100条print(“我喜欢C语言\n”);太累了,又无脑。所以我们学的循环结构就是用来解决这个问题的,循环语句有while、do-while、for。
440 0