C语言循环之while、do while 循环
书接上回,今天继续复习一下学习到的C语言中的循环,while循环和do while循环,以及break,continue 的用法!篇幅较长,请耐心观看!纯个人理解,若有错误请指正!(doge)
C语言循环
1.while循环
1.1while循环格式
while(表达式)
语句;//如果循环体想包含更多的语句,可以加上⼤括号
while循环格式 与 if语句格式相类似,但while循环是若表达式满足条件可循环重复执行语句,if则是执行一次语句。
if(表达式)
语句;//if 可实现嵌套
1.2while循环逻辑流程
⾸先上来就是执⾏判断表达式,表达式的值为0,循环直接结束;表达式的值不为0(非0),则执⾏循环语句,语句执⾏完后再继续判断,是否进⾏下⼀次循环。
注:图中的break、continue 是C语言的关键字(后面介绍) 这两个关键字不仅能用于循环中,也能用于选择分支语句中(switch case语句 ,if 嵌套,多分支语句)
1.3while循环示例练习
#include <stdio.h>
int main()
{
int i = 0;//初始化部分
while (i <10)//判断部分
{
printf("%d ", i);//执行语句
i = i + 1;//调整部分
}
return 0;
}
//和for语句对比
int main()
{
int i = 0;
for (i = 0; i < 10; i++)//初始化、判断、调整
{
printf("%d ", i);//执行语句
}
return 0;
}
总结:for 和 while 在实现循环的过程中都有初始化、判断、调整这三个部分,但是 for 循环的三个部分⾮常集中,便于代码的维护,⽽如果代码较多的时候 while 循环的三个部分就⽐较分散,所以从形式上 for 循环要更优⼀些。
1.4while(1)死循环的应用
1.4.1 while(1)重复循环的用法:
#include <stdio.h>
int main()
{
int i = 1;
while (1)//恒满足判断条件(非0)
{
printf("%d ", i);//重复循环执行打印 i 的值,不会停止,除非强行中断。
}
return 0;
}
while(1) 这种写法在写程序中会经常用到,表示死循环,重复执行while循环下的语句。while(1) 常量 1 恒满足while 判断条件(非0),所以一直重复执行语句。
1.4.2 while(1)停留、死等的用法:
#include <stdio.h>
int main()
{
int i = 1;
printf("%d ", i);//打印 i 的值
while (1);//程序一直停留在这里不会自己结束,除非强行中断。
printf("hehe");//hehe 的值不会打印
}
上述代码中的while (1)用于程序停留 死等,顺序执行完后,执行到while语句一直停留,死等,不会继续往下执行,所以printf(“hehe”);不会打印。
下面给出几个嵌入式中的示例(仅供参考):
int main(void)
{
LedDrvInit();
KeyDrvInit();
while(1);//死等
}
int main(void)
{
/*使能GPIOA时钟*/
rcu_periph_clock_enable(RCU_GPIOA);
/*配置GPIO GPIOA 推挽输出 速度2MHZ 第八脚*/
gpio_init(GPIOA,GPIO_MODE_OUT_PP,GPIO_OSPEED_2MHZ,GPIO_PIN_8);
while(1)//重复执行下面的语句
{
while(gpio_input_bit_get(GPIOA,GPIO_PIN_0) == RESET)
{
gpio_bit_write(GPIOA,GPIO_PIN_8,SET);
}
gpio_bit_write(GPIOA,GPIO_PIN_8,RESET);
}
}
2.do while循环
2.1 do while 格式
do
{
语句;
}while(表达式);
与while 循环很像 但执行逻辑流程不同。下面介绍 do while() 循环逻辑流程。
2.2 do while 循环逻辑流程
在 do while 循环中先执⾏图上的“语句”,执⾏完语句,再去执⾏“判断表达式”,判断表达式的结果是!=0,则继续循环,执⾏循环语句;判断表达式的结果==0,则循环结束。所以在 do while 语句中循环体是⾄少执⾏⼀次的,这是 do while 循环⽐较特殊的地⽅。
2.3 do while 循环示例练习
#include <stdio.h>
int main()
{
int i = 1;//初始化部分
do
{
printf("%d ", i);//打印 i 的值
i = i + 1;//调整部分
}while(i<=10);//判断部分
return 0;
}
上述代码逻辑:先打印一遍 i 的值,然后 i 再加1,最后再判断 i (i=1) 是否小于等于10,满足条件继续执行,再次先打印 i (i=2)的值,以此循环直到i>10,不满足条件。跳出循环 结束程序执行流程。
⼀般 do while 使⽤在循环体⾄少被执⾏⼀次的场景下,所以使用较少⼀些,这里不过多介绍了,后续更新嵌入式编程中会用到。
3.break continue 语句
3.1 break continue 作用
在循环执⾏的过程中,如果某些状况发⽣的时候,需要提前终⽌循环,这是⾮常常⻅的现象。C语⾔中
提供了 break 和 continue 两个关键字,就是应⽤到循环中的。
• break 的作⽤是⽤于永久的终⽌循环,只要 break 被执⾏,直接就会跳出循环,继续往后执
⾏。
• continue 的作⽤是跳过本次循环 continue 后边的代码,在 for 循环和 while 循环中有所
差异的。
3.2 break continue 代码示例
- break
int main()
{
int i = 1;
while (i <= 10)
{
if (i == 5)
break;//当i等于5后,就执⾏break,循环就终⽌了
printf("%d ", i);//打印 i 的值 只打印到4
i = i + 1;
}
return 0;
}
打印了1,2,3,4后,当i等于5的时候,循环在 break 的地⽅终⽌,不再打印,不再循环。所以 break 的作⽤就是永久的终⽌循环,只要 break 被执⾏, break 外的第⼀层循环就终⽌了。那以后我们在循环中,想在某种条件下终⽌循环,则可以使⽤break 来完成我们想要的效果。
- continue
int main()
{
int i = 1;
for (i = 1;i < 10;i++)
{
if(i==5)//这⾥continue跳过了后边的打印,来到了i++的调整部分
continue;
printf("%d ", i);//i = 5 跳过该语句
}
return 0;
}
i = 5时跳过continue 后面的语句,所以最终打印结果为 1 2 3 4 6 7 8 9
所以continue 的作⽤是跳过本次循环中 continue 后的代码,直接去到循环的调整部分。未来当某个条件发⽣的时候,本次循环⽆需再执⾏后续某些操作的时候,就可以使⽤continue 来实现。
3.3 continue在 while 循环 for循环中的差异
- continue 在while循环中
int main()
{
int i = 1;
while (i <= 10)
{
if (i == 5)//当i等于5后,就执⾏continue,直接跳过continue的代码,去循环的判断的地⽅
continue;//因为这⾥跳过了i = i+1,所以i⼀直为5,程序陷⼊和死循环
printf("%d ", i);
i = i + 1;
}
return 0;
}
运行结果如下,程序不会结束 陷入死循环 (使用Ctrl + C 可以终止程序)
- continue 在for循环中
int main()
{
int i = 1;
for (i = 1;i < 10;i++)
{
if(i==5)//这⾥continue跳过了后边的打印,来到了i++的调整部分
continue;
printf("%d ", i);//i = 5 跳过该语句
}
return 0;
}
运行结果如下:
两种情况对比
总结:
在while循环中 continue 可以帮助我们跳过某⼀次循环 continue 后边的代码,直接到循环的判断部分,进⾏下⼀次循环的判断,如果循环的调整是在 continue 后边的话,可能会造成死循环。
而在for循环中 continue 的作⽤是跳过本次循环中 continue 后的代码,直接去到循环的调整部分。未来当某个条件发⽣的时候,本次循环⽆需再执⾏后续某些操作的时候,就可以使⽤continue 来实现。
至于break 语句 在for循环和while循环中没有什么差异,作用都一样 以及 break continue 在do while 中的作用 也一样,这里就不过多介绍了。