这一节来深入理解一下for循环语句的使用

一、for语句的结构

for(初始化;判断条件;调整)

分析代码:

  1. 创建变量i

  1. for循环语句的初始化为i=1,说明i从1开始循环

  1. 判断部分为i10时跳出循环

  1. 调整部分为i++,每循环一次I+1

此代码结果为打印1-10这10个数字

源代码

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

二、for语句中的break

与上节循环语句while中break的作用一样,都是跳出循环

分析代码:

  1. 与第一条代码基本一致

  1. 在printf语句前增加if条件语句为当i==5时跳出循环(break)

此代码的结果为:1 2 3 4(5还没来得及打印)

源代码

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

三、for语句中的continue

与循环语句while中的continue一样,作用为跳过continue之后的语句,重新开始一个循环

分析代码:

  1. 与第一条代码基本一致

  1. 在printf语句前增加if条件语句为当i==5时,跳过continue之后的语句(即不打印5),重新开始循环(此时i==6)

此代码的结果为:1 2 3 4 6 7 8 9 10(跳过5)

源代码

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

四、for语句中的“左闭右开”形式

所谓的“左闭右开”是指初始化是被赋值的确定的数,判断部分是一个开区间

分析代码:

  1. 创建一个元素为10的数组

  1. 创建变量i

  1. for循环的初始化为i=0

  1. 判断为i<10,为开区间,调整为i++

  1. 打印数组

此代码的结果为:10个0

源代码

int main(){int arr[10] = { 0 };int i = 0;for (i = 0; i < 10; i++){printf("%d ", arr[i]);}return 0;}

为什么建议“左闭右开”,而不建议“左闭右闭”?

:如果是“左闭右闭”,判断部分就为i<=9,不好判断循环次数,如果是i<10就知道是循环10次啦

五、一直for循环

来看这一段代码

在for循环的初始化,判断,调整都是空的,只要判断部分是空的,此时的条件就很为真,所以混进入死循环

源代码

int main(){for (;;){printf("hehe\n");}return 0;}

六、for循环嵌套使用

for循环是可以嵌套使用的,可以在for里在使用一个for

你觉得这个执行结果一共是多少个hehe呢?

答案是9个

分析代码:

当i=0进入第一个for循环,j=0,然后来到了第二个循环,在第二个循环中循环3次

在进入第一个循环中,如此也重复3次,所以3*3=9次循环

源代码

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

但是如果初始化省略掉,打印几个hehe呢?

这是因为当初始化省略掉后,第二个for循环3次后再进入第一个循环,然后再准备第二个循环时,j已经=3,而不是0,所以结束循环

源代码

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

七、for循环的变式

for循环还可以被两个变量控制

由变量x,y同时限制for循环的条件,结果为两个hehe

源代码

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

八、小练习

这个for循环会循环几次?

答案是0次

因为在判断部分k=0,是将0赋给k,而不是k==0,所以判断部分为假,不会进入循环

源代码

int main(){int i, k;for (i = 0, k = 0; k = 0; i++, k++){k++;}return 0;}

总结

以上就是本人对于循环语句for的学习与理解