【C语言初阶】循环语句 —— for语句
文章目录
3 for
语句
for
语句也能实现循环结构,是比较常用的一种循环语句。
3.1 for
- 流程图
3.2 语法结构
for(表达式1;表达式2;表达式3)
循环语句;
解释说明:
1 while
语句执行流程
1.程序流执行到 for
语句时,首先并且只会执行一次表达式1;
2.接着对表达式2进行判断,如果表达式2不为0,则执行循环体语句,否则跳过循环体,程序流执行 for
后面的语句;
3.当循环语句执行完后,会执行表达式3;
4.接着对表达式2进行判断,为真就进入循环,否则就退出 while
循环,接着执行后续语句。
2 表达式1:预先处理(初始化部分)
表达式1仅在循环执行之前执行一次。当程序无需预先处理的时候,该表达式可以省略。
3 表达式2:控制表达式(条件判断部分)
表达式2是用来判定循环操作是否继续执行的表达式。如果该表达式的判断结果不为0,则执行循环体。
4 表达式3:收尾处理(调整部分)
表达式3作为“收尾处理“或”下一个循环的准备处理“,会在循环体执行后被判断、执行。如果没有需要执行的内容,则该表达式可以省略。
3.3 简单示例
使用
for
循环,在屏幕上打印1-10的数字。
代码示例:
#include<stdio.h>
int main()
{
//使用for打印1~10的数字
int i = 0;
for (i = 1; i <= 10; i++)
{
printf("%d ", i);
}
return 0;
}
解释说明:
1 当程序流执行到 for
语句的时候,先执行 i=1
;接着进行表达式的判断 i<=10
,表达式不为0则进入循环体;
进入循环体执行打印操作;接着执行 i++
;
然后接着进行表达式的判断 i<=10
,直到最终判断为假结束循环。
2 第1步为表达式1,第2步为表达式2,第3步为循环体,第4步为表达式3;
循环会重复执行 2->3->4 这三步,直至不满足进入循环的条件。
3.4 for
中的 break
和 continue
语句
3.4.1 break
语句
break
在for
中的使用
代码示例:
#include<stdio.h>
int main()
{
//for中的break
int i = 0;
for (i = 1; i <= 10; i++)
{
if (5 == i)
break;
printf("%d ", i);//1 2 3 4
}
return 0;
}
解释说明:
1 程序执行到 for
循环语句,当循环控制变量 i
增加到5时,就执行 break
语句,结束整个 for
循环。
3.4.2 continue
语句
continue
在for
中的使用
代码示例:
#include<stdio.h>
int main()
{
//for中的continue
int i = 0;
for (i = 1; i <= 10; i++)
{
if (5 == i)
continue;
printf("%d ", i);//1 2 3 4 6 7 8 9 10
}
return 0;
}
解释说明:
1 程序执行到 for
循环语句,当循环控制变量 i
增加到5的时候,就会执行 continue
语句;
程序流跳转到 i++
表达式3的地方,接着进行循环判断(表达式2),最终继续执行循环体。
程序实现的结果是打印1-10,但是会不打印5。
2 与 while
语句中情况不同的是,for
语句的循环控制变量的改变在表达式3这个地方,无论如何每次循环体执行完后都会执行表达式3,然后再执行循环的条件表达式(表达式2)。
3.5 while
与 for
的比较
3.5.1 对比 while
与 for
A.等价写法
如下示例的代码是
for
语句和while
语句的对比。两者是等价的。
语法示例:
//for语句
for(exp1;exp2;exp3)
statement;
//while语句
exp1;
while(exp2)
{
statement;
exp3;
}
说明:
1 for
语句与 while
语句可以相互置换。
B.示例:无限循环
如下是
while
语句的无限循环和for
语句的无限循环的执行示例。
代码示例:
/* while 语句的无限循环 */
while(1)
{
语句
}
/* for 语句的无限循环 */
for( ; ; )
语句
说明:
1 for( ; ; )
如果省略for 循环的循环判断部分,那么就意味着判断恒为真,容易导致死循环。
3.5.2 对比同一功能的实现
代码示例:
#include<stdio.h>
int main()
{
int i = 0;
//实现相同功能,使用while语句
printf("while实现:>\n");
i = 1;//初始化部分
while (i <= 10)//循环条件判断部分
{
printf("hehe\n");
i++;//调整部分
}
//实现相同功能,使用for语句
printf("\nfor实现:>\n");
for (i = 1; i <= 10; i++)
{
printf("hehe\n");
}
return 0;
}
说明:
1 while
语句可以置换成 for
语句,但是由于风格问题,这三个部分很可能偏离较远,对它们的查找和修改就不够集中和方便。
2 相比起来,for
语句的风格更胜一筹,使用频率也最高。
3.6 for
语句的循环控制变量
3.6.1 循环控制变量的使用建议
- 不可以在
for
循环体内修改循环控制变量,以免for
循环失去控制。 - 一般
for
语句的循环控制变量的取值采用“前闭后开”区间的写法。
示例:
int i = 0;
//前闭后开的写法
for(i=0; i<10; i++) {}
//两边都是闭区间
for(i=0; i<=9; i++) {}
注意:当然,遇到具体问题需要具体分析;写 for
循环时,根据具体实现要求可以采取不同的写法。
3.7 一些 for
循环的变种
3.7.1 示例1
死循环打印
代码示例:
#include<stdio.h>
int main()
{
//代码1
for (;;)
{
printf("hehe\n");//死循环打印hehe
}
return 0;
}
解释说明:
1 for
循环中的初始化部分、条件判断部分、调整部分都是可以省略的,但是在现阶段,还是不要随意省略为好。
3.7.2 示例2
嵌套循环
代码示例:
#include<stdio.h>
int main()
{
//代码2
int i = 0;
int j = 0;
for (i = 0; i < 10; i++)
{
for (j = 0; j < 10; j++)
{
printf("hehe\n");//10*10=100,打印100个hehe
}
}
return 0;
}
解释说明:
1 外层 for
循环会执行10次,每一次外部 for
循环会执行10次内部 for
循环。
3.7.3 示例3
代码示例:
#include<stdio.h>
int main()
{
//代码3
int i = 0;
int j = 0;
for (; i < 10; i++)
{
for (; j < 10; j++)
{
printf("hehe\n");//只打印10次hehe
}
}
return 0;
}
解释说明:
1 每一次进入外层 for
循环,内层 for
循环都没有初始化部分;
就导致了第一次内层循环执行后,其循环控制变量 j
就固定在了10;
以后的每一次内层循环判断时,循环变量都没有被初始化,一直是10,就不会进入内层循环。
2 也就是说,当外层循环控制变量 i
变为1~9后的每一次内层的 for
循环都不会进入。
3.7.4 示例4
使用多个循环控制变量
代码示例:
#include<stdio.h>
int main()
{
//代码4
//使用多个循环控制变量
int x, y;
for (x = 0, y = 0; x < 2 && y < 5; ++x, y++)
{
printf("hehe\n");//只打印两次hehe
}
return 0;
}
解释说明:
1 使用多个循环控制变量,x = 0, y = 0
两个表达式被逗号隔开,构成了逗号表达式。
2 x < 2 && y < 5
:只有同时满足 &&
两边表达式为真才能进入循环体。
3.8 笔试题
请问循环要执行多少次?
代码示例:
#include<stdio.h>
int main()
{
int i = 0;
int k = 0;
for (i = 0, k = 0; k = 0; k++)
{
k++;//一次都没执行
}
return 0;
}
解释说明:
1 循环体一次都没执行。
表达式2是 k = 0
,这是一个赋值表达式,表达式的结果是赋值后 k
的结果:0;
也就是说对该表达式进行判断的结果为0,那么就不会进入循环体。
总结:
本节介绍了循环结构中的 for
语句,并给出了它的语法结构;同时又讲解了使用 break
和 continue
语句会对 for
循环造成的影响;最后给出了 while
语句和 for
语句的比较以及一些 for
循环的变种。
感谢您的阅读!如有任何错误,欢迎您的批评指正!