1.do-while循环
1.1语法形式
在循环语句中do-while语句的使用很少,它的语法如下:
do
语句;
while(表达式);
while和for这两个循环都是先判断,条件满足就进入循环,执行循环语句,如果不满足就跳出循环;
而do-while循环则是直接进入循环体,执行循环语句,然后再执行while后面的判断表达式,表达式为真,就会进行下一次,表达式为假,则不再继续循环。
1.2 do-while执行流程
在do-while循环中先执行图上的“语句”,执行完语句,在去执行“判断表达式”,判断表达式的结果是!=0,则继续循环,执行循环语句;判断表达式的结果==0,则循环结束。
所以在do-while语句中循环体式至少执行一次的,只是do-while循环比较特别的地方。
2.3 do-while循环实例
在屏幕上打印1~10的值
#include <stdio.h>
int main()
{
int i = 1;
do
{
printf("%d ", i);
i = i + 1;
}
while(i<=10);
return 0;
}
2.break和continue语句
在循环的过程中,如果某些情况发生的时候需要提前终止循环,这是非常常见的现象。C语言中提供了break和continue这两个关键字,这就是应用到循环中的。
1 break的作用是用于永久的循环,只要break被执行,直接就会跳出循环,继续往后执行。
2 continue的作用是跳过本次循环 continue后面的代码,在for循环中和while循环中有差异的。
2.1 while循环中的break和continue
2.1.1 break举例
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
if(i == 5)
break;//当i等于5后,就执⾏break,循环就终⽌了
printf("%d ", i);
i = i+1;
}
return 0;
}
1
执行结果:
打印了1,2,3,4后 ,当i等于5的时候,循环在break的地方终止了,不在打印,不再循环。所以break的作用就是永久的终止循环,只要break被执行,break外的一层循环就终止了。那以后我们在循环中,想在某个条件下终止循环,则可以使用break来完成我们想要的效果。
2.1.2 continue举例
continue是继续的意思,在循环中的作用就是跳过本次循环中continue后面的代码,继续进行下一次循环的判断。
上面的代码,如果break换成continue会是什么?
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
if(i == 5)
continue;
//当i等于5后,就执⾏continue,直接跳过continue的代码,去循环的判断的地⽅
//因为这⾥跳过了i = i+1,所以i⼀直为5,程序陷⼊和死循环
printf("%d ", i);
i = i+1;
}
return 0;
}
1
那道这里我们就能分析出来,continue可以帮助我们跳过某一次循环continue后面的代码,直接到循环的判断部分,进行下一次循环的判断,如果循环的调整是在continue后面的话,可能会造成死循环。
2.2 for循环中的break和continue
2.2.1 break举例
其实和while循环中的break一样,for循环中的break也是用于终止循环的,不管循环还需要循环多少次,只要执行到break,循环就彻底终止。
#include <stdio.h>
int main()
{
int i = 1;
for(i=1; i<=10; i++)
{
if(i == 5)
break;
printf("%d ", i);
}
return 0;
}
break的作用是永久的终止循环,未来我们在某一个条件发生的时候,不想再继续循环的时候,就可以使用break来完成。
2.2.2 continue举例
上面的代码,如果把break换成continue会是什么结果呢?
#include <stdio.h>
int main()
{
int i = 1;
for(i=1; i<=10; i++)
{
if(i == 5)
continue;//这⾥continue跳过了后边的打印,来到了i++的调整部分
printf("%d ", i);
}
return 0;
}
所以在for循环中continue的作用是跳过本次循环中continue后的代码,直接去到循环的调整部分。未来当某个条件发生的时候,本次循环无需再执行后续操作的时候就可以使用continue来实现。
2.3 do-while循环中的break和continue
do-while语句中的break和continue的作用和while循环中几乎一模一样,大家下来可以自行测试体会。
#include <stdio.h>
int main()
{
int i = 1;
do
{
if(i == 5)
break;
printf("%d ", i);
i = i + 1;
}
while(i<=10);
return 0;
}
#include <stdio.h>
int main()
{
int i = 1;
do
{
if(i == 5)
continue;
printf("%d ", i);
i = i + 1;
}while(i<=10);
return 0;
}
3. 循环的嵌套
前面学习了三种循环while,do-while,for,这三种循环往往会嵌套在一起才能更好的解决问题,就是所说的:循环的嵌套,这里我们就看一个例子。
3.1 练习
1.找出100~~200之间的素数,首先要有100~~200之间的数,这里可以使用循环解决。
2.假设要判断i是否为素数,需要拿2~i-1之间的数字去试除i,要产生2~i-1之间的数字,也可以使用循环解决。
3.如果2~i-1之间有数字能整除i,则i不是素数,如果都不能被整除,则i是素数。
#include <stdio.h>
int main()
{
int i = 0;
//循环产⽣100~200的数字
for(i=100; i<=200; i++)
{
//判断i是否为素数
//循环产⽣2~i-1之间的数字
int j = 0;
int flag = 1;//假设i是素数
for(j=2; j<i; j++)
{
if(i % j == 0)
{
flag = 0;
break;
}
}
if(flag == 1)
printf("%d ", i);
}
return 0;
}
4. goto语句
C语言提供了一种非常特别的语法,就是goto语句和跳转标号,goto语句可以实现在同一函数内跳转到设置好的标记处。
#include <stdio.h>
int main()
{
printf("hehe\n");
goto next:
printf("haha\n");
next:
printf("跳过了haha的打印\n");
return 0;
}
goto语句如果使用的不当,就会导致在函数内部随意乱转,打乱程序流程,所以建议是尽量不使用;但goto 不是一无是处,在多层循环的代码中,如果想快速跳出。
for(...)
{
for(...)
{
for(...)
{
if(disaster)
goto error;
}
}
}
error:
//...
本来for循环想提前跳出得使用break,一个break只能跳出一层for循环,如果3层循环嵌套就得使用3个break才能跳出循环,所以在这种情况下使用goto语句就会更加的快捷。