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++一样,但是他们实现的意义是不一样的,相关的区别,本文就部表达了,大家可以去知乎或者在博客搜索,都会有大神作出清晰的回答。
如有不对的地方,评论下方请多多指点,祝大家能够在技术上更进一步。