一、循环语句概况
1.设置循环语句的原因
在生活中,我们一件事情可能要多次进行,而顺序结构和分支结构每一段代码只能执行一次,多次执行需要重复书写代码,让代码显得冗杂,这时,循环语句能充分简化代码,实现更多的功能
2.循环语句分类
while
for
do while
3.循环语句的展示
二、while语句
1.语法结构
while (/*表达式*/)
{
//循环语句
}
2.实现1-10的打印
#include<stdio.h>
int main()
{
int i = 1;
while (i <= 10)
{
printf("%d ",i);
i++;
}
return 0;
}
2.1对代码块的分析
1.循环语句都由三部分:所需变量的初始化,判断,调整变量大小
2.虽然在该程序中,初始化部分,判断部分,和调整部分一目了然,但是,当while循环的循环体部分过于庞大时,三部分会相隔甚远,会造成一定的不便,所以,有了for循环来解决这个问题
三、for循环
1.语法结构
for (初始化; 判断; 调整)
{
//循环语句
}
2.执行流程
for循环执行过程中,只会初始化一次,然后判断,循环语句,调整依次执行,直到判断条件为假后终止
3.注:
尽量不要在循环过程中改变循环变量,减少死循环的发生
4、for循环的变种
4.1.省略条件
#include <stdio.h>
int main()
{
for (;;)
{
printf("hehe\n");
}
}
for循环中的初始化部分,判断部分,调整部分是可以省略的,但是不建议初学时省略,容易导致问题。
4.2省略初始化条件
#include <stdio.h>
int main()
{
int i = 0;
int j = 0;
for (; i < 10; i++)
{
for (; j < 10; j++)
{
printf("hehe\n");
}
}
}
省略初始化条件导致 j 的值在第一次循环结束后就变为了11, 后面进入循环时 j 都为11,无法进入第二层循环
4.2.使用多余一个变量控制循环
#include <stdio.h>
int main()
{
int x, y;
for (x = 0, y = 0; x < 2 && y < 5; ++x, y++)
{
printf("hehe\n");
}
return 0;
}
四、do while 循环
1.do while 循环的特点
与for循环和while循环不同,do while 循环会先执行一遍循环语句,再判断需不需要接着进行循环
2.语法结构
do
{
//循环语句
} while (判断条件);
五、循环中的break
1.break的作用
在循环中一旦执行到break,程序就会终止并跳出它所在的一层循环
#include <stdio.h>
int main()
{
int i = 0;
for (i = 1; i <= 10; i++)
{
if (i == 5)
break;
printf("%d ", i);
}
return 0;
}
#include <stdio.h>
int main()
{
int i = 1;
while (i <= 10)
{
if (i == 5)
break;
printf("%d ", i);
i = i + 1;
}
return 0;
}
#include <stdio.h>
int main()
{
int i = 1;
do
{
if (5 == i)
break;
printf("%d ", i);
i = i + 1;
} while (i <= 10);
return 0;
}
六、循环中的continue
1.continue的作用
continue可以跳过本次循环中 continue 之后的所有代码。(不包括 do while 循环的判断部分)
2.for循环中的continue
#include <stdio.h>
int main()
{
int i = 0;
for (i = 1; i <= 10; i++)
{
if (i == 5)
continue;
printf("%d ", i);
}
return 0;
}
对于for循环来说,continue仅仅跳过本次循环,不影响后续循环的正常运行
2.while循环,do while循环中的continue
#include <stdio.h>
int main()
{
int i = 1;
while (i <= 10)
{
if (i == 5)
continue;
printf("%d ", i);
i = i + 1;
}
return 0;
}
#include <stdio.h>
int main()
{
int i = 1;
do
{
if (5 == i)
continue;
printf("%d ", i);
i = i + 1;
} while (i <= 10);
return 0;
}
这两种情况的输出结果都为死循环
出现这种情况的原因:continue跳过后续代码的同时,调整部分也一并跳过,导致条件还按照上一次的条件判断和继续执行continue,导致了代码的死循环。