【循环语句之三大分类】

简介: 【循环语句之三大分类】

一、什么是循环?

一组被重复执行的语句称之为循环体,能否继续重复,决定循环的终止条件。循环结构是在一定条件下反复执行某段程序的流程结构,被反复执行的程序被称为循环体。循环语句是由循环体及循环的终止条件两部分组成的。

二、循环语句的分类

1.while 循环

1.1 while语句与if语句的区别

while 循环和if 语句非常相似

if (条件)
      语句;
//while 语法结构
while (表达式)
      循环语句;

请看下面的if语句:

为什么打印呢?

1为真,成功进来打印,但if语句条件成立只执行一次

可是我们生活中有很多例子是:同一件事我们需要完成很多次,那我们怎么做呢?

C语言中给我们引入了:while语句,可以实现循环。

while循环语句如下面所示:

while会一直打印hehe,为什么呢?

原因很简单:

while(1)判断为真,打印hehe,又返回while(1)判断,为真,再打印,再判断,再打印······hehe一直被打印,当然这个例子有点极端,死循环了。

1.2 while语句怎么用

举一个例子:

如何在屏幕上打印1~10

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

打印结果如下

执行过程如下:

n=1,判断1<10,满足条件,进{}里打印1,n++,

n=2,回到while,2<10,满足条件,进{}里打印2,n++

n=3,回到while,3<10,满足条件,{}里打印3,n++

n=4·····

n=11,回到while,11>10,不满足,停止执行

最后总结一下while语句执行的流程

1.3 break在while循环的作用

如果在语句中遇到break是怎么回事呢?

举一个小栗子:

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

运行结果如下:

为什么只打印1,2,3,4呢

运行思路如下:

当n=1,判断1<10,进入while循环,n!=5,所以打印n的值1,n++→n=2

当n=2,又回到判断,2<10,进入while循环,n!=5,break不执行,打印n的值2,n++→n=3

当n=3,又回到判断,3<10,进入while循环,n!=5,break不执行,打印n的值3,n++→n=4

当n=4,又回到判断,4<10,进入while循环n!=5,break不执行,打印n的值4,n++→n=5

当n=5,又回到判断,5<10,进入while循环,n=5,break执行,循环终止

所以,5以及后面的数都不会再进入while循环了

总结:break的作用是(跳出)终止循环,可能后面还有几个循环,但我们不执行了,就此打住

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

1.4 continue在while循环的作用

把break换成continue我们可以看到,运行的结果依然是1,2,3,4,但区别的是4后面的光标依然在闪烁,我们知道正常程序结束,后面会出现什么按任意键关闭此窗口,但这里只有四个数字,这说明什么,说明代码没有结束,死循环了,它一直再跑。

举例1:

思路如下:

当n=1,2,3,4的时候,都不满足if(n==5)这个条件,所以跳过了continu,到下一步打印,n++,加到n=5时,满足条件,continue执行,后面的步骤不执行了,又回到了if判断,结果判断n=5,又执行continue,略过了打印和n++,又回到判断,代码就这样死循环了

举例2:

如果把n++放到if前面,结果又是什么呢?

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

思路如下:

n=1→n++→n=2,n!=5,continue不执行,打印2,

n=2→n++→n=3,n!=5,continue不执行,打印3,

n=3→n++→n=4,n!=5,continue不执行,打印4,

n=4→n++→n=5,n=5,continue执行,跳过

后面的代码,回到if判断

n=5→n++→n=6,continue不执行,打印6

······

n=10→n++→n=11,continue不执行,打印11

n=11→不符合判断条件,结束判断

总结:continue的作用是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,而是直接跳转到while语句的判断部分。进行下一次循环的入口判断。

2.for 循环

2.1 for 循环的语法

2.2 for循环和while循环的区别

有人会疑惑,while循环已经能解决问题了,为什么还要用for循环呢?这跟while循环有什么区别呢?

举一个例子来说明答案

在屏幕上打印1~10,我们来看while循环和for循环各自是怎么打印的

while循环

int main()
{
  int i = 1;//1.初始化
  while (i <= 10)//2.判断
  {
    printf("%d ", i);
      i++;//3.调整
  }
  return 0;
}

for循环

int main()
{
  int i = 0;
  for (i = 1; i <= 10; i++)//(初始化;判断;调整)
  {
    printf("%d ", i);
  }
  return 0;
}

很明显,两者之间有非常相像的地方

但区别就在于while循环中的初始化,判断,调整是分开的,而在for循环中都整合在了一起,如果要修改某一部分代码的时候,for循环是不是要比while循环更好找呢,而且形式也更加好一些,更加简洁,这就大大提高我们写代码的效率了。

2.3 for循环要注意的地方

当我们这样写,会不会打印一个数字,打印一个hehe呢

int main()
{
  int i = 0;
  for (i = 1; i <= 10; i++)
    printf("%d ", i);
        printf("hehe\n");
  return 0;
}

结果是不会

我们要注意的是:循环体默认只能控制一条语句,如果想控制多条语句的话,要加上大括号

如下所示:

int main()
{
  int i = 0;
  for (i = 1; i <= 10; i++)
  {
    printf("%d ", i);
    printf("hehe\n");
  }
  return 0;
}

**另一个需要注意的是:**这两个代码代表的意思是一样的,但第二个代码是在c99标准里才支持的写法,不保证所有编译器都支持第二种写法

代码1

//任何一个编译器都会支持的
int main()
{
    for (int i = 0; i < 4; i++)
    {
        printf("hehe\n");
    }
    return 0;
}

代码2

//c99支持的
int main()
{
    int i = 0;
    for (i = 0; i < 4; i++)
    {
        printf("hehe\n");
    }
    return 0;
}

2.4 for语句的循环控制变量的建议

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

举例子:

int main()
{
  int i = 0;
  for (i = 1; i <= 10; i++)
  {
    if(i==5)
    continue;
    printf("%d ", i);
    i = 5;//在循环体内改变i的值
  }
  return 0;
}

像这个代码得出的结果是无限地打印6,感兴趣的同学可以去试着敲一下。

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

2.5 一些for循环的变种

变种1

下面举例子说明:

例子1

int main()
{
  int i = 0;
  int j = 0;
  for (i=0; i < 4; i++)
  {
    for (j=0; j < 4; j++)
    {
      printf("hehe\n");
    }
  }
  return 0;
}

例子2

int main()
{
  int i = 0;
  int j = 0;
  for (; i < 4; i++)
  {
    for (; j < 4; j++)
    {
      printf("hehe\n");
    }
  }
  return 0;
}

可见省略与不省略的结果的差异是非常大的,还是强调不要随便乱省略。

变种2

使用多余一个变量控制循环

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

3.do…while() 循环

3.1 do 循环的语法

我们依然使用do while循环打印1~10

int main()
{
  int i = 1;
  do
  {
    printf("%d ", i);
    i++;
  } while (i <= 10);
  return 0;
}

由此我们可知,用while循环,for循环,do while循环打印1~10都是可以的

3.2 break和continue在do while循环的作用

break

int main()
{
  int i = 1;
    do
    {
      if (i == 5)
        break;
      printf("%d ", i);
      i++;
    } while (i <= 10);
  return 0;
}

可以看到,依旧是打印了1,2,3,4

continue

int main()
{
  int i = 1;
    do
    {
      if (i == 5)
        continue;
      printf("%d ", i);
      i++;
    } while (i <= 10);
  return 0;
}

continue打印出来依旧是死循环

以上就是我对循环语句的理解与说明,如有不足的地方,请您指正!您的点赞,评论和收藏都是对我最大的鼓励,感谢!

相关文章
|
Ubuntu Linux 应用服务中间件
在Linux中,如何管理服务的自启动?
在Linux中,如何管理服务的自启动?
|
7月前
|
机器学习/深度学习 人工智能 自然语言处理
企业级API集成方案:基于阿里云函数计算调用DeepSeek全解析
DeepSeek R1 是一款先进的大规模深度学习模型,专为自然语言处理等复杂任务设计。它具备高效的架构、强大的泛化能力和优化的参数管理,适用于文本生成、智能问答、代码生成和数据分析等领域。阿里云平台提供了高性能计算资源、合规与数据安全、低延迟覆盖和成本效益等优势,支持用户便捷部署和调用 DeepSeek R1 模型,确保快速响应和稳定服务。通过阿里云百炼模型服务,用户可以轻松体验满血版 DeepSeek R1,并享受免费试用和灵活的API调用方式。
476 12
|
11月前
|
前端开发 JavaScript 算法
使用 JavaScript 数组方法实现排序与去重
【10月更文挑战第21天】通过灵活运用 `sort()` 方法和 `filter()` 方法,我们可以方便地实现数组的排序和去重。同时,深入理解排序和去重的原理,以及根据实际需求进行适当的优化,能够更好地应对不同的情况。可以通过实际的项目实践来进一步掌握这些技巧,并探索更多的应用可能性。
284 59
|
12月前
|
机器学习/深度学习 算法
概率分布深度解析:PMF、PDF和CDF的技术指南
本文将深入探讨概率分布,详细阐述概率质量函数(PMF)、概率密度函数(PDF)和累积分布函数(CDF)这些核心概念,并通过实际示例进行说明。
972 15
概率分布深度解析:PMF、PDF和CDF的技术指南
|
存储 NoSQL Java
Redis性能优化:理解与使用Redis Pipeline
当我们谈论Redis数据处理和存储的优化方法时, Redis Pipeline 无疑是一个不能忽视的重要技术。
1075 0
Redis性能优化:理解与使用Redis Pipeline
|
算法 Ubuntu Linux
实现一个进程管理子系统-Linux课程设计1
实现一个进程管理子系统-Linux课程设计
289 1
|
11月前
|
数据采集 安全 测试技术
Burpsuite Scanner被动扫描生成安全评估报告
Burpsuite Scanner被动扫描生成安全评估报告
|
Ubuntu Linux 编译器
当自身需要使用的 gcc版本 和Linux 默认版本 存在大版本差异时怎样处理
当自身需要使用的 gcc版本 和Linux 默认版本 存在大版本差异时怎样处理
416 2
|
JavaScript Java 关系型数据库
高校学科竞赛平台|基于springboot高校学科竞赛平台设计与实现(源码+数据库+文档)
高校学科竞赛平台|基于springboot高校学科竞赛平台设计与实现(源码+数据库+文档)
214 0
|
算法 搜索推荐 安全
C# | 上位机开发新手指南(八)加密算法——AES
AES——这是在加密算法中相当重要的一种加密方式! 虽然这个世界上已经存在了非对称加密算法(比如RSA、ECC等),但是在对称加密算法中,AES的地位依然相当重要。与非对称加密算法不同,对称加密算法使用的是相同的密钥对数据进行加密和解密,因此其加密和解密速度更快,而且更加高效。而在对称加密算法中,AES是目前最安全、最可靠的加密算法之一,其加密强度和运行效率都非常高。因此,无论是在个人计算机、移动设备,还是在服务器和云计算等领域,AES都被广泛应用于数据的加密和解密过程中。
587 0
C# | 上位机开发新手指南(八)加密算法——AES