C语言基础篇(四)——循环结构
一.for语句
1.模板
for(表达式1;表达式二;表达式3)
{
语句块
}
为了能大家能充分理解for循环语句的执行顺序,我们编写一段代码尝试下:
#include<stdio.h>
int main()
{
int i;
for (i = 0,printf("表达式1\n");printf("表达式2\n"), i < 3; i++,printf("表达式3\n"))
{
printf("语句块\n");
}
return 0;
}
从运行结果来看,表达式1只执行一次,类似于初始化,表达式2是判断语句,语句块是若表达式2为真,则执行,否则跳出循环,表达式3是在语句块执行后执行。
注:a.表达式1,2,3都可以省略
for (;;)
{
printf("单身狗\n");
}
由于没有判断表达式,所以进入了死循环。
b.关于for循环效率的问题:
对于多重for循环,把最长的循环放到最内层,最短的循环放到最外层,这样可减少CPU跨切循环层的次数,提高循环效率。
二.while循环
1.模板
while(表达式)
{
语句块
}
话不多说,上代码:
int i=0;
while (printf("表达式\n"),i < 2)
{
printf("i=%d\n", i);
i++;
}
while后的表达式是判断式,为真则进入循环体,执行循环体,为假则跳出循环。
注:while后的表达式不可省略;若要使表达式恒为真,则可填入1;使表达式恒为假则填入0.
三.do…while语句
1.模板
do
{
语句块
}
while(表达式);
测试代码:
int i = 3;
do
{
printf("i=%d\n", i);
i--;
} while (printf("表达式\n"), i);
从结果可以看出do…while语句是先执行了一次循环体,再进行判断的。那么倘若初始条件不满足循环条件时,会不会执行循环体呢?上代码:
int i = 1;
do
{
printf("i=%d\n", i);
} while (i>2);
明显可以看出不满足循环条件,就执行了循环体,所以再一般情况不建议使用do…while语句。
注:
a.do…while的表达式也不能省略。
b.do…while()后有分号,不可省略。
四.扩充内容
1.continue&break
continue:跳过本次循环。
break:跳出跳出循环体,结束循环。
int i;
for (i = 1; i < 5; i++)
{
if (i == 2)continue;
printf("i=%d\n", i);
}
可以看出来,循环结构跳过了i==2。
int i;
for (i = 1; i < 5; i++)
{
if (i == 2)break;
printf("i=%d\n", i);
}
我只将continue改为break,发现循环体执行到i==2时就直接跳出了循环结构。
2.三种循环语句的区别
a.for语句可以省略()内的所有表达式,while和do…while不可以省略。
b.for语句和while语句都是先判断是否满足条件,再执行循环体,do…while语句是先执行一边循环体,再判断是否满足条件。
c.for语句功能最强大,甚至可以将循环体中所有语句写入写入表达式3中。
d.for语句的循环变量初始化可以在表达式1中,而while和do…while的循环变量初始化只能在循环语句之前。
e.倘若知道循环次数,一般使用for语句,不知道循环什么时候停止(例单链表的建立),一般使用while.