0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

C语言的循环与分支-2

汽车电子技术 来源:微亮笔记 作者: PASSION 2023-02-21 15:35 次阅读

上期我们介绍了分支语句的两种句型:if 语句和 switch case语句。 而在c语言中我们经常会需要重复地进行一些指令,但是不断的编辑重复代码不仅很繁琐,还容易出现bug,因此循环语句的使用就非常有必要。今天要介绍的就是循环语句相关的知识。

本期主要介绍三种循环语句

1) while语句

2) do while语句

  1. for 语句
    
  2. 代码规范化
    
  • while语句

我们已经掌握了 if 语句

if(条件)
          语句;

当条件满足的情况下,if语句后面的语句执行,否则不执行。这个语句只会执行一次。

但我们发现生活中很多实际的例子是:同一件事情我们需要循环执行多次。

那如何去满足上述需求呢?c语言中引入了:while语句,可以实现循环。

while语句的语法结构:

while(表达式)
       循环语句;

还是使用一个代码来解释while循环的执行过程:

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

通过代码可以看到,表达式i<=10在i==1的情况下判断为真,所以循环体中的语句执行,最后打印出1-10,那么我们可以知道,当表达式为真时,while循环才会执行,当表达式为假,循环则不会执行。那么如果表达式是一个非0的数,循环会不会一直执行呢?

#include 
int main()
{
  while (1)
  {
    printf("a");
  }
  return 0;
}

图片

通过运行结果可以看到,当表达式为1时,while循环会一直执行循环体,也就变成了一个死循环。

while循环中的break:

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

通过前面的代码我们知道这个代码是用于打印1-10,那么如果在i==5的时候加入break,会发生什么呢?

图片

可以看到当加入了break之后,当执行到i==5时,后面的循环并没有执行,那么可以理解为break语句的意思是终止循环。

while循环中的continue语句

#include 
int main()
{
  int i = 1;
  while (i<=10)
  {
    if (i == 5)
    {
      continue;
    }
    printf("%d\\n", i);


    i++;
  }
  return 0;
}

图片

上面我们知道了break的作用,那么continue和break有什么区别呢,通过运行结果可以看到,当输出到4时,代码进入了一个死循环,而不是像break一样终止,这是为什么呢?我来解释一下,continue的意思为继续,当代码执行到continue时,会跳过本次循环而继续下一次,从代码中看到,当i==5时,循环跳过,那么i++不会执行,i的值就不会改变,那么i==5回到表达式判断5<10,进入循环,那么这个时候i==5就又会触发continue,然后i++又不能执行,就造成i的值一直为5,一直跳过,就成了一个死循环。

  • do while语句

语法结构:

do {
     循环体语句;
} while(条件判断语句);

执行流程:

①执行初始化语句

②执行循环体语句

③执行条件控制语句

④执行条件判断语句,看其结果是true还是false

如果是false,循环结束

如果是true,循环继续执行

⑤回到②继续

do while语句与while很相似,只不过do while语句是先执行循环体语句后进行条件判断

此循环语句使用的较其他两种较少,一般是在一些小游戏(猜数字,三子棋)中使用

  • for循环

语法结构:

for (表达式1; 表达式2; 表达式3)
{
        语句;
}

首先要强调两点:

  1. 表达式1、表达式2和表达式3之间是用分号“ ;”隔开的,千万不要写成逗号。

  2. for(表达式1;表达式2;表达式3)的后面千万不要加分号,很多新手都会犯这种错误——会情不自禁地在后面加分号。

    因为 for 循环只能控制到其后的一条语句,而在C语言中分号也是一个语句——空语句。所以如果在后面加个分号,那么 for 循环就只能控制到这个分号,下面大括号里面的语句就不属于 for 循环了。

执行流程:

//求解表达式1。
//求解表达式2。若其值为真,则执行 for 语句中指定的内嵌语句,然后执行第3步;若表达式2值为假,则结束循环,转到第5步。
//求解表达式3。
//转回上面第2步继续执行。
//循环结束,执行 for 语句下面的语句。

从这个执行过程中可以看出,“表达式1”只执行一次,循环是在“表达式2”“表达式3”和“内嵌语句”之间进行的。

for循环的最简单形式:

for (循环变量赋初值; 循环条件; 循环变量增值)
{
    语句;
}

下面我们使用for循环写一个简单的代码

例:<求 1+2+3+4+…+100 的总和。>

# include 
int main(void)
{
    int i;
    int sum = 0;  //
    for (i=1; i<=100; ++i)  //++是自加的意思, ++i相当于i = i + 1
    {
        sum = sum + i;  /*等价于sum += i;但是不建议这么写, 因为sum = sum + i看起来更清楚、更舒服*/
    }
    printf("sum = %d\\n", sum);
    return 0;
}

三种循环的区别:

for循环和while循环先判断条件是否成立,然后决定是否执行循环体(先判断后执行)

do…while循环先执行一次循环体,然后判断条件是否成立,是否继续执行循环体(先执行后判断)

  • 代码规范化

1)if、else、for、while、do 都只能控制到其后的一条语句,如果要控制多条语句必须加大括号 {}。但基于代码规范化,if、else、for、while、do 后面的执行语句不论有多少行,就算只有一行也要加 {}

2)像 if、for、while 等关键字之后应留一个空格再跟左括号 (,以突出关键字。

此外上面的程序还有一个知识点要跟大家说一下:从功能上讲, for(i=1; i<=100;++i)完全可以写成 for(i=1; i<101; ++i),而且建议大家尽量使用这种写法。也就是说,循环语句的循环条件尽量写成半开半闭的,不管是 for 循环还是 while 循环。

for(i=1; i<101; ++i)实际上是 1≤i<101,是半开半闭的;而 for(i=1; i<=100; ++i)实际上是 1≤i≤100,是全闭的。那么为什么建议使用半开半闭的呢?因为如果写成 i<=100 的话,那么每次判断的时候都要判断两次,即 i<100 和 i==100,而写成 i<101 的话每次只需要判断一次。

也许有人说:程序在执行 i<=100 的时候不是将它转换成 i<100||i==100 吗?这样由“短路或”的知识可知,如果前面的为真那么后面的不就不会执行了吗?这样不也是判断一次吗?不是这样的,系统是不会将 i<=100 转换成 i<100||i==100 的,每次判断的时候 i<100 和 i==100 都要判断。

但是写成半开半闭也有一个问题,就是会影响对代码的理解。有时候写成全闭的区间理解起来才顺畅,而写成半开半闭反而不易理解,比如 `<=`右边是变量或表达式的时候。这时候要以可读性为第一要素,即哪种好理解就使用哪种。现在 CPU 速度那么快,也不在乎那点效率。所以前面说“尽量”,没有要求一定要那样写。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 指令
    +关注

    关注

    1

    文章

    580

    浏览量

    35380
  • C语言
    +关注

    关注

    180

    文章

    7534

    浏览量

    128910
  • 代码
    +关注

    关注

    30

    文章

    4557

    浏览量

    66827
收藏 人收藏

    评论

    相关推荐

    C语言中for循环的用法和应用 C语言中for循环与while循环的区别

    C语言中的循环结构时,for循环是最常用的一种。它允许重复执行一段代码,直到满足特定条件为止。
    发表于 08-18 16:33 1046次阅读
    C<b class='flag-5'>语言</b>中for<b class='flag-5'>循环</b>的用法和应用 C<b class='flag-5'>语言</b>中for<b class='flag-5'>循环</b>与while<b class='flag-5'>循环</b>的区别

    C语言循环结构的使用方法

    详细介绍了C语言while循环结构、do-while循环结构、for循环结构、循环退出语句的语法和使用方法。
    发表于 11-02 11:26 457次阅读
    C<b class='flag-5'>语言</b><b class='flag-5'>循环</b>结构的使用方法

    入门——C语言:多路分支#C语言

    C语言
    jf_49750429
    发布于 :2022年11月16日 15:34:54

    学习mcu先学习C语言--谭浩强c语言(最经典的c语言学习)

    本帖最后由 星星ARM 于 2012-10-27 12:24 编辑 谭浩强c语言囊括了c语言全部的基础知识! 认真学习打实基础!下边是主要的目录; 1C
    发表于 06-09 21:34

    学习C语言的用途~

    ,9种控制语句,程序书写自由,主要用小写字母表示。它把高级语言的基本结构和语句与低级语言的实用性结合起来。C语言可以象汇编语言一样对位、字节
    发表于 05-03 16:06

    【原创分享】单片机C语言If和for等基本语句结构

    (sequencing),分支/选择(alternation)和循环(iteration)这三种流程结构就足以表达所有程序的本质。C语言作为结构化编程
    发表于 06-21 13:27

    C语言多层循环的方法有哪些

    C语言多层循环的几种方法
    发表于 07-14 08:29

    c语言程序设计案例教程

    据类型和运算符、顺序程序设计、分支程序设计、循环结构、数组等。学习C语言一定要知道它的利器——指针。这正是C
    发表于 07-20 07:25

    c语言for循环经典案例分享

    c语言for循环经典案例#includeint main(int argc,char*argv[]){int i=0;int sum=0;for(i=1;i
    发表于 07-20 06:13

    怎么实现c语言循环链表?

    怎么实现c语言循环链表?
    发表于 10-19 06:07

    C语言的3种循环结构分析

    C语言循环结构有for循环、while循环、do循环和goto循环。本文介绍前3种
    的头像 发表于 05-20 13:43 9978次阅读
    C<b class='flag-5'>语言</b>的3种<b class='flag-5'>循环</b>结构分析

    从零开始跟我学C语言之分支结构(下)

    Hi!这里是渔火。今天我们继续来讲C语言分支结构。在C语言里,可以使用if-else实现分支结构。
    的头像 发表于 02-07 09:27 523次阅读

    C语言循环分支

    我们大家都知道,c语言是一门** 结构化 **的程序设计语言,程序的运行都是以某种结构和顺序为骨架去执行的,那么本期就向大家介绍一下c语言的几种结构。
    的头像 发表于 02-21 15:32 644次阅读
    C<b class='flag-5'>语言</b>的<b class='flag-5'>循环</b>与<b class='flag-5'>分支</b>

    C语言基础篇--选择/顺序/循环结构

    读取更多技术文章,请扫码关注前言在C语言中,按照程序的执行流程不同,分为顺序结构、分支结构和循环结构。多么复杂的逻辑事物都是由这三个结构组成。顺序结构顺序结构是最简单的一种流程结构,它采用自上而下
    的头像 发表于 04-02 11:00 961次阅读
    C<b class='flag-5'>语言</b>基础篇--选择/顺序/<b class='flag-5'>循环</b>结构

    c语言在while中嵌套if循环

    C语言是一种广泛使用的面向过程编程语言,它提供了许多控制结构来帮助程序员实现复杂的逻辑和流程控制。其中,while循环和if语句是非常常见和重要的控制结构。本文将详细介绍C语言中在wh
    的头像 发表于 11-22 10:09 1599次阅读