在C语言中,存在顺序结构、选择结构和循环结构三种。而循环又分为for、while、do while三类。下面就对三类循环结构进行较为详细的说明。
在此之前,先讲述一下continue与break:
continue
continue只能用在循环体中,其作用为:跳过循环体中剩余的语句直接进行判断,条件为真进入下一次循环。
break
break不止可以用在循环体中,前篇选择结构里的switch里也有使用。在循环体中,其作用为:强制跳出循环体,不进入下一次循环。
for
基本结构
for(初始;判断;调整)
{
循环体;
}
其中初始是赋初始值,一般来说是赋判断变量的初始值。
判断和选择结构里面的表达式类似,表达式成立则为真,否则为假;为真时运行循环体,为假时跳出循环执行循环语句后面的程序。
调整表达式中的变量值(也可以不是),辅助“判断”控制循环次数。
举例:
int main()
{
int i = 0;
for(i = 0;i < 10;i++)
{
printf("%d ",i);
} //此处的花括号{}可以不要,因为此处仅此一句循环体
} //但含有多个循环体时必须加上花括号,否则只会循环紧挨着for的那条语句
此处则输出:0 1 2 3 4 5 6 7 8 9。9输出后,i+1=10,不符合条件,跳出循环。
for运行图解
for的变形
for所含的初始、判断、调整三部分都可以省去。
- 当初始部分省去时,一般是在for之前给变量赋了一个初值,此处不需要另赋初值。例如:
int main()
{
int i = 0,j = 0;
for(;i<3;i++)
{
for(;j<3;j++)
{
printf("emm\n");
}
}
}
此时并不会输出3*3个“emm”,当第一次运行时,j加到3时已输出3个“emm”,而i第一次增加后,j始终是3,直接跳过j的循环,所以该代码只输出3个“emm”。仍不清楚的读者可以复制该代码用调试一步一步运行着看。
- 当判断部分省去后,判断恒为真,形成死循环。例如:
for(;;)
{
}
for(i = 0;;i++)
{
}
该类代码会一直循环循环体,除非执行到代码里面的break才可跳出循环。
- 当调整部分省去后,也容易形成死循环。因为一般来说,都会让循环体先执行一次,要执行一次必然最初就得满足判断的条件,但没有调节的存在,判断就恒为真。所以此处可以在循环体内部加上调节语句。例如:
for(i = 0;i < 10;)
{
printf("%d".i);
i++;
}
//等同于:
for(i = 0;i < 10;i++)
{
printf("%d",i);
}
- for的初始、判断、调整当然也不止限于一个变量,例如:
int x,y;
for(x = 0, y = 0;x<2 && y<5;++x, y++)
{
printf("emm\n");
}
此时则只输出两行"emm"。因为判断的条件是需要同时满足x<2和y<5。
while
基本结构
while(表达式)
{
循环语句;
}
int main()
{
int i = 1; //初始化
while (i <= 10) //判断部分
{
printf("%d ",i);
i++; //调整部分
}
return 0;
}
该循环输出1~10
while运行图解
while的变形
while常用的就死循环:while(1);此为无操作死循环,若是执行有操作的死循环,需要按照其结构加上花括号{}。例如:
int main()
{
while(1)
{
printf("哈哈\n");
}
}
该代码则是不停输出“哈哈”
do while
基本结构
do
{
循环语句;
}while(表达式);
do while循环结构与上述两种不同,do while是先进行一次循环再进行判断,所以该结构至少会执行一次循环体。一般情况下,do while里面不会出现continue函数,因为容易造成死循环。
int main()
{
int i = 1;
do
{
//if(5 == i)
//{
//break; //直接跳出
//continue; //死循环
//}
printf("%d ",i);
i++;
} while (i <= 10);
return 0;
}
该段仍是输出1~10。continue标注的死循环也有破解之法:将作为调整的i++;移至if之前,读者可试着改变该段代码某些地方,兴许会有意想不到的效果。
do while运行图解
循环结构的分享大致就到这,希望能够帮助到大家。同时,有什么疑问、补充、错误或建议望大家在评论区指出。感谢观看!