• C语言入门 Day_14 for循环


    目录

    1.for循环

    2.循环执行顺序

    3.易错点

    4.思维导图


    前言

    我们定义了一个数组以后,要使用(读取或者修改)数组元素的话,可以一个一个的读取,就前两课学的那样,代码类似这个结构。

    1. int number_list[5]={1,2,3,4,5};
    2. printf("%d\n",number_list[0]);
    3. printf("%d\n",number_list[1]);
    4. printf("%d\n",number_list[2]);
    5. printf("%d\n",number_list[3]);
    6. printf("%d\n",numebr_list[4]);

    假如我们对一个有10000个元素的数组,挨个打印输出他们的元素呢,难不成还要写一万行printf()?

    这显然是不现实的。这种代码太多了,很容易出错,也很难维护。

    这时候我们就要引入一种新的机制——循环,它可以按照我们意愿,反复执行同样的代码,直到满足边界条件

    循环就像是一个没有感情的机器人,我们可以让它执行重复的枯燥的工作,当然这个工作需要步骤清晰。

    比如图中1,打开抽屉;2,取出物品;3,关上抽屉。这三个动作重复但清晰,机器人会重复执行它们,直到取完所有抽屉里面的物品。

    C语言中有多种循环的机制,我们今天学习第一种循环——for循环

    1.for循环

    1.1

    自然界中,一直重复的四季更替,昼夜交替,阴晴圆缺叫做循环

    在程序中,满足条件的情况下,反复执行同一段代码就叫做循环

    下面代码会循环打印变量a的值,一共打印五次:

    1. for(int a=0;a<5;a=a+1)
    2. {
    3. printf(“变量的值是%d\n”,a);
    4. }

    1.for循环的语法格式——循环条件部分   for( int a = 0; a < 5; a = a + 1 )

    2.for循环的代码块   {   printf("变量a的值是%d\n", a);   }

    3.for循环的关键字——for

    1. for(int a=0;a<5;a=a+1)
    2. {
    3. printf(“变量的值是%d\n”,a);
    4. }

    4.for循环中的第一部分,初始定义    int a = 0

    5.for循环中的第二部分,循环判断的条件   a<0

    6.for循环中的第三部分,迭代操作  a=a+1

    1.2

    for(;;)

    for循环的循环条件部分被两个分号分隔成了三个部分,它们分别是:

    初始定义,循环判断条件,迭代操作

    for循环的条件中,第一部分是在第一个分号之前,我们叫做初始定义;

    比如这里定义了变量a,int a = 0 。

    1.3

    我们来填写一个for循环的判断条件中的初始定义int b = 10

    1. for(int b=10;b<20;b++);

    for循环的条件中,第二部分是在第一个分号之后,第二个分号之前,我们叫做循环的判断条件;

    比如这里判断a < 5是否为真,如果为真,就执行循环中的代码块;如果为假就结束循环。

    1.4

    最后一部分是第二个分号之后的部分,是迭代动作,也是决定了要循环几次的地方;

    如果没有变量的迭代动作,可能循环的判断条件永远为真,这就变成了无限循环或者死循环;

    如果一次迭代动作是给变量增加5,那可能循环的判断条件只有第一次为真,迭代一次以后就为了,也就不再执行了。

    填写for循环中的第三部分迭代操作b++

    1. for(int b=10;b<20;b++);

    同样是给变量增加1,我们一次使用了a = a + 1

    一次使用了自增符号b++,两者效果是一样的。

    1.5

    for循环的代码块,和判断一样,for循环的代码块也是被花括号括起来的,只要判断条件符合,就会执行这个代码块。

    我们来填入循环的代码块,打印b的值printf("b的值是%d\n", b);

    1. for(int b = 10; b < 15; b++)
    2. {
    3. printf("b的值是%d\n", b);
    4. }

    打印结果

    1. 10
    2. 11
    3. 12
    4. 13
    5. 14

    1.6

    for循环里面,第一部分是初始定义,定义变量的值;

    第二部分是循环的判断条件,为真就执行代码块,为假就不执行;

    第三部分是迭代动作,用以控制循环的执行次数

    1.7

    有了for循环,我们就可以让代码帮我们做哪些枯燥单调的重复动作了。比如我们就可以告诉机器人:

    1,从第一个格子开始;

    2,格子数小于9之前,都取出格子里的东西;

    3,每次格子数增加1。

    同时就像判断一样,我们也可以看到,循环的代码执行顺序,和顺序执行,条件执行,也是不一样的。

    顺序执行是从上到下

    条件执行是根据判断条件,只执行一部分分支的代码,但只会执行一次

    循环执行则是会反复执行同一部分的代码。

    2.循环执行顺序

    2.1

    计算机是个一板一眼的家伙,我们写出来的代码它都会默认按照从上到下的顺序执行。

    比如这里的顺序执行:

    1. int a=1;
    2. int b=2;
    3. int c=3;
    4. printf("a的值是%d\n",a);
    5. printf("b的值是%d\n",b);
    6. printf("c的值是%d\n",c);

    1.执行第一行  int a = 1;

    2.执行第二行  int b = 2;

    3.执行第三行  int c = 3;

    1. int a=1;
    2. int b=2;
    3. int c=3;
    4. printf("a的值是%d\n",a);
    5. printf("b的值是%d\n",b);
    6. printf("c的值是%d\n",c);

    4.执行第四行  printf("a的值%d\n", a);

    5.执行第五行  printf("b的值%d\n", b);

    6.执行第六行  printf("c的值%d\n", c);

    2.2

    以及if-else判断语句中的选择执行,只执行某一个判断分支。

    这里的判断语句只执行else分支:

    1. int a=5;
    2. if(a>5){
    3. printf("大于五\n");
    4. }
    5. else{
    6. printf("小于等于五\n");
    7. }

    然后我们来看看循环的代码执行顺序:

    循环会反复执行代码块中的代码,直到循环条件不满足。

    1. int number_list[5]={1,2,3,4,5};
    2. for{int count=0;count<5;count++};{
    3. printf("%d\n",int numbrt_list[count])
    4. }

    1.执行的第一行,定义一个整形数组并赋值   int number_list[5] = {1, 2, 3, 4, 5}

    2.for循环开始进行判断,判断为真,执行代码块的代码  for(int count = 0; count < 5; count++)

    3.第一次执行代码块,用count变量直接当做数组下标使用  printf("%d\n", number_list[count]

    4.第二次循环条件的判断  for(int count = 0; count < 5; count++)

    5.第二次执行代码块,数组下标为1  printf("%d\n", number_list[count])

    ……

    12. 第六次判断循环条件,count是5,判断条件count < 5不成立,终止循环

    2.3

    可以看到循环的代码执行特点

    循环判断条件符合的时候,会反复执行代码块中的代码。

    细到for循环里面也有小的执行顺序之分:

    1. int number_list[5]={1,2,3,4,5};
    2. for(int count=0;count<5;count++){
    3. printf("%d\n",number_list[count]);
    4. }

    1.执行到for循环

    2.只有第一次才执行初始定义,也就是这里的定义一个变量  int count = 0

    3.循环开始以后,先执行循环的判断条件  int number_list[5] = {1, 2, 3, 4, 5};

    4.再执行代码块中的代码  printf("%d\n", number_list[count])

    5.最后执行迭代操作的自增 count++

    所以在for循环内部,首先执行初始条件的定义,这只会执行一次;

    然后进行循环条件的判断,判断为真,执行代码块中的代码;

    最后执行迭代操作

    2.4

    对于写代码和阅读代码的人来说,循环执行顺序的难点就已经不是代码的写法了,

    而是循环中的代码块到底要执行几次,在什么条件下终止循环

    我们去看需要执行几次循环中的代码块这件事情,一般都是自己心算一下或者用笔计算一下,有个大致的判断,以保证代码按照我们的需求来正确执行

    同时循环和判断的代码块也是一样的,代码块中的代码作为一个整体,统一顺序执行,不能够分割出来;

    所以也会用到花括号{}来定义代码块。

    同时我们这里也应用了自增运算符,i++,来做迭代操作,这也是自增运算符最重要的应用场景

    2.5

    同时,我们用for循环,对数组中的每个元素进行了一次访问,我们就说完成了一次遍历

    遍历是指对一个数组中的所有元素进行访问的操作。

    3.易错点

     初始变量的定义也可以先在for循环外进行;

    for(;;)会造成程序的死循环(无限循环),永远停不下来的循环。

    4.思维导图

    最后我想说的是:

    在撰写这篇文章时,我参考了《白纸编程》这个app的观点和思想,我要感谢他们对我的启发和帮助。

  • 相关阅读:
    Linux 部署Neo4j 并且创建自定义Service
    【zookeeper】zk的ZAB原子广播协议
    freeswitch之注册用户管理
    UWB室内定位系统全套源码 高精度人员定位系统源码
    Docker学习-Docker镜像概述和分层原理
    02-Sping事务实现之声明式事务基于XML的实现方式
    Hadoop 集群相关知识点
    分布式链路追踪 — Overview
    泰克示波器控制scpi,程序读取波形数据并显示
    解决Jmeter 4.x 请求到elasticsearch 中文乱码的问题
  • 原文地址:https://blog.csdn.net/fantastic_little/article/details/132431328