「猴子」关于for循环逐步解析

for循环是初学编程语言会遇到的一个知识点也是日后经常用到的,就C语言举例给大家解析一下for循环。

for的循环次数

for其实在我们读的时候可以把他理解为从哪里到哪里

 for(i=0;i<=10;i++)
for(i=0;i<10;i++)

实际上,等号是值得我们注意到的一个地方,我们可以写一个程序输出i的范围。`

#include <stdio.h>
int main()
{
    int i;
    for(i=0;i<=10;i++)
    {printf("%d\n",i);}
}
/*这个编译结果为 0 1 2 3 4 5 6 7 8 9 10
说明这个循环内部是从0到10,共循环了十次。*/

#include <stdio.h>
int main()
{
    int i;
    for(i=0;i<10;i++)
    {printf("%d\n",i);}
}
/*这个的编译结果为 0 1 2 3 4 5 6 7 8 9
说明这个循环内部是从0到9,共循环了九次。*/

所以有等号和无等号的循环次数是不一样的
那么

for(i=0;i<10;i++)
for(i=0;i<=9;i++)
//这两个for循环的次数和编译结果一样

for循环的循环嵌套

众所周知,循环之间是可以嵌套的,我们可以利用for循环的嵌套来执行一些问题。
for与for之间的嵌套:

#include <stdio.h>
int main()
{
    int a[4];
    int i,j,t;
    for(i=0;i<4;i++){
        scanf("%d",&a[i]);
    }
    for(int i=0;i<4-1;i++){
        for(j=0;j<3-i;j++){
            if(a[j]<a[j+1]){
                t=a[j];
                 a[j]=a[j+1];
                a[j+1]=t;
            }
        }
    }
    for(int i=0;i<4;i++){
        printf("%d\n",a[i]);
    }
    return  0;
}

以上就是冒泡排序,它可以使用for循环的嵌套来实现彼此两个挨着的数之间的排序,我们单独把中间的嵌套拿出来讲。

    for(int i=0;i<4-1;i++){
        for(j=0;j<3-i;j++){
            
        }
    }

先说for循环之间的关系,首先我们得考虑for循环里循环变量的范围,同一变量,内部循环的范围不能大于外部循环的范围,不然出现溢出的情况不能编译。具体内部的循环范围是多少再根据要求。

这个循环先执行外面的for,再执行内部的for,内部的for循环完,外部的for循环加一,继续重新执行内部循环,就这样一直循环下去,直到外部循环完成,跳出循环,做后面的操作。

for(j=0;j<3-i;j++){
            if(a[j]<a[j+1]){
                t=a[j];
                 a[j]=a[j+1];
                a[j+1]=t;
            }
        }

再看这个for和if的循环,与for和for之间的循环类似,也是得先把内部的if循环完,外部的for循环加一,继续内部的循环,直至外部的for循环结束跳出循环。
值得一题的是,当我们的for-if嵌套与break、continue一起的时候嵌套是如何运行。我们在嵌套外输出i值,来看循环是怎么走的。

#include <stdio.h>
int main()
{
    int i;
    for(i=0;i<=1;i++)
    {
        if(i==0)
            printf("hello");
      
    }
    printf("%d",i);
}
//结果是 hello 2

第一步i=0,就输出hello,循环继续,第二步i=1,else为空if循环啥也不做,然后i++,i=2,不满足for循环的条件了,跳出循环,i最终为2。

#include <stdio.h>
int main()
{
    int i;
    for(i=0;i<=1;i++)
    {
        if(i==0)
            printf("hello");
      break;
    }
    printf("%d",i);
}
//结果是 hello 0

第一步i=0,输出hello,if条件满足,遇到break直接跳出循环,最终i=0

#include <stdio.h>
int main()
{
    int i;
    for(i=0;i<=1;i++)
    {
        if(i==0)
            printf("hello");
      continue;
    }
    printf("%d",i);
}
//结果是 hello 2

第一步i=0,就输出hello,遇到continue循环继续,第二步i=1,else为空if循环啥也不做,然后i++,i=2,不满足for循环的条件了,跳出循环,i最终为2。

i++的最终值

之前我们的for循环都是以i++来举例的,当i++时我们最终的i是要比条件大一的.

#include <stdio.h>
int main()
{
    int i;
    for(i=0;i<=2;i++)
    {
        printf("%d\n",i);
    }
    printf("%d",i);
}
//结果为 0 1 2 3

在循环内部,i是从0到2,到i等于2时,依然满足for循环的条件,再i++等于3,不满足条件了,无法在内部输出3,但最终外部的i是等于3的

整个循环等价于:

#include <stdio.h>
int main()
{
    int i;
    for(i=0;i<=2;)
    {
        printf("%d\n",i);
        i++}
    printf("%d",i);
}
//结果为 0 1 2 3

当然,for循环里也可以有++i。

#include <stdio.h>
int main()
{
    int i;
    for(i=0;i<=2;++i)
    {
        printf("%d\n",i);
    }
    printf("%d",i);
}
//结果为 0 1 2 3

结果和i++一样,但是他们实现的意义是不一样的,相关的区别,本文就部表达了,大家可以去知乎或者在博客搜索,都会有大神作出清晰的回答。

如有不对的地方,评论下方请多多指点,祝大家能够在技术上更进一步。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值