3循环语句
3.1什么是循环语句:当我们需要重复的执行同一个代码块时,每想执行一次都需要写一遍代码,显然是效率低下的,所以所谓循环语句就是我们用来设定在某种条件下重复执行一定次数的一种语法结构。
3.2while循环
3.2.1while循环基本结构 {初始化变量(比如i) while(判断表达式){循环体}} 当表达式为真时,进入while循环,执行完循环体重新判定表达式真假,直到表达式为假时,终止循环。例:输出1到10中奇数:
int main()
{
int i = 1;
while (i < 10)
{
printf("%d ", i);
i += 2;
}
return 0;
}
输出结果为:
3.2.2while循环中的break:while循环中break作用为永久终止循环,即当循环体中执行到break语:句时,直接跳出循环执行while循环后面的语句。例如下代码:当i == 5时,执行到printf语句时在屏幕打印5,执行下一句i +=2时i为7,if条件满足,执行break跳出循环不在进行while入口(i < 10)的判定:
int main()
{
int i = 1;
while (i < 10)
{
printf("%d ", i);
i += 2;
if(7 == i)
{
break;
}
}
return 0;
}
输出结果为:
3.2.3while循环中的continue: while循环中的continue作用为终止本次循环,即跳过本次循环continue后面的语句,重新返回while语句表达式入口进行判定是否进入下一次循环。下附三段代码帮助大家理解continue作用:
代码一:
int main()
{
int i = 1;
while (i < 10)
{
if(5 == i)
{
continue;
}
printf("%d ", i);
i += 2;
}
return 0;
}
运行结果(由于i == 5时,执行if中的continue,此时会不执行后面的代码,直接返回while表达式i < 10的判断,再次进入while之后依旧会在if处判定执行continue,导致程序进入死循环,如图没有{按任意键继续. . .}说明程序还在执行没有结束):
代码二:
int main()
{
int i = 1;
while (i < 10)
{
printf("%d ", i);
if(5 == i)
{
continue;
}
i += 2;
}
return 0;
}
运行结果(如代码一一样的原理陷入死循环,当i == 5时无限循环while循环到continue之前的代码,打印13555555......):
代码三(一般情况下的continue合理运用,实现打印1到10中除了5以外的所有奇数):
int main()
{
int i = -1;
while (i < 9)
{
i += 2;
if(5 == i)
{
continue;
}
printf("%d ", i);
}
return 0;
}
运行结果:
3.3for循环(重中之重)
3.3.1for循环基本语法结构 {for(初始化变量;判断表达式;调整表达式) {循环体} }。特点:不用在循环外创建变量,循环变量、判断表达式、调整表达式放在开头,利于后期代码的维护修改,所以for循环是现在最常用的循环结构,非常重要。编译器执行for循环时,先初始化变量,然后进行判断表达式判断,结果为真进入for循环执行循环体,执行完后执行调整表达式(例如i++),然后再次进行判断,循环直至某一次判断为假,则停止for循环。例如下代码利用for循环输出1到10中所有奇数:
int main()
{
for (int i = 1; i < 10; i += 2)
{
printf("%d ", i);
}
return 0;
}
运行结果:
3.3.2for循环中的break:for循环中的break与while中的break完全相同,作用为永久终止循环。例如下代码:
int main()
{
for (int i = 1; i < 10; i += 2)
{
if (5 == i)
{
break;
}
printf("%d ", i);
}
return 0;
}
运行结果:
3.3.3for循环中的continue:for循环中continue作用为终止本次循环,即跳过本次循环continue后面的语句,但是由于for循环的特点,调整表达式并不是在循环体内的continue后面,所以跳过代码后依然会跳转到调整表达式并执行,所以就避免了陷入死循环,这也是for循环优于while循环的一个方面。例如下代码:
int main()
{
for (int i = 1; i < 10; i += 2)
{
if (5 == i)
{
continue;
}
printf("%d ", i);
}
return 0;
}
运行结果:
3.3.4注意(建议)1:不要在for循环循环体内修改循环变量(即i),否则容易造成for循环失控,死循环等意外情况,典型就是在for循环内使用{if(i = 5)},即把判断相等写成赋值。
3.3.5注意(建议)2: for循环的循环控制变量尽量写作前闭后开区间,即一般写作{for(i = 0;i < 10;i++)}而不写成{for(i = 0;i <= 9;i++)}。当然这两种写法都是正确的,编译也不会报错,也能实现效果,但是从逻辑思维来讲,第一种写法在编译执行过程中循环了10次,打印了10次,产生了10个不同的i元素值,更贴合逻辑。
3.4do while循环
3.4.1do while循环的基本语法结构:{do {循环体} while(表达式)}。执行时先进入do后的循环体执行代码,然后在进行while中的判断表达式决定是否进入下一次循环,所以特点就是无论如何都会至少执行一次。例如下代码(输出1到10中的奇数):
int main()
{
int i = 1;
do
{
printf("%d ", i);
i += 2;
}
while (i <= 10);
return 0;
}
运行结果:
3.4.2do while循环中的break:do while循环中的break与while中的break完全相同,作用为永久终止循环。例如下代码:
int main()
{
int i = 1;
do
{
if (5 == i)
{
break;
}
printf("%d ", i);
i += 2;
}
while (i <= 10);
return 0;
}
运行结果:
3.4.3do while循环中的continue:do while循环中的continue与while循环中的continue完全相同,作用为终止本次循环,即跳过本次循环continue后面的语句,重新返回while语句表达式入口进行判定是否进入下一次循环。可以参考上面while循环中continue的三段代码以及结果,效果作用是完全相同的,这里就不在重复啦。
4小结
4.1循环语句与分支语句略有不同,分支语句各种之间适用于不同情况,而循环语句理论上只要会一种就可以适用于所有的需要循环的情况。所以强烈建议大家熟练掌握for循环的使用,加深理解,下期的特别篇我也会介绍几种for循环的进阶用法。
4.2C语言的分支语句跟循环语句基础篇就是这些啦,内容都是我在B站看视频之后总结梳理的,加之了一些我个人的总结理解,所以并不具有权威性,内容可能有错误,遗漏等等之类的不足,如果大家有什么问题或者发现什么遗漏,错误,欢迎大家评论,大家一起讨论,一起学习,一起进步。后面会出一期特别篇,讲一下循环语句的一点进阶作用,如果大家发现什么遗漏或者错误,欢迎评论,我也将会把其总结到特别篇中。