目录
4) do while循环中的 break 和 continue
1. do-while循环
1)do-while语法形式
do
语句;
while(表达式);
while 和for 这两种循环都是先判断,条件如果满足就进入循环,执行循环语句,如果不满足就跳出循环
而 do while 循环则是先直接进入循环体,执行循环语句,然后再执行 while 后的判断表达式,表达式为真,就会进行下一次,表达式为假,则不再继续循环
2) do while循环的执行流程
在 do while 循环中先执行图上的“语句”,执行完语句,在去执行“判断表达式”,判断表达式的结果是!=0,则继续循环,执行循环语句;判断表达式的结果==0,则循环结束。
所以在 do while 语句中循环体是至少执行一次的,这是 do while 循环比较特殊的地方
3) do while循环的实例
#include <stdio.h>
int main() //在屏幕上打印1~10的值
{
int i = 1;
do
{
printf("%d ", i);
i = i + 1;
}while(i<=10);
return 0;
}
4) 练习
输入一个正整数,计算这个整数是几位数?
例如:
输入:1234 输出:4
输入:12 输出:2
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
int cnt = 0;
do
{
cnt++;
n = n / 10;
} while (n);
printf("%d\n", cnt);
return 0;
}
2. break和continue语句
• break 的作用是用于永久的终止循环,只要break 被执行,直接就会跳出循环,继续往后执
行。
• continue 的作用是跳过本次循环continue 后边的代码,在for 循环和while 循环中有所
差异的。
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;
} //1 2 3 4
return 0;
}
2) 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;
}
3) for循环中的break和continue
<1> break举例
#include <stdio.h>
int main()
{
int i = 1;
for(i=1; i<=10; i++)
{
if(i == 5)
break;
printf("%d ", i);
} //1 2 3 4
return 0;
}
<2> continue举例
#include <stdio.h>
int main()
{
int i = 1;
for(i=1; i<=10; i++)
{
if(i == 5)
continue;//这里continue跳过了后边的打印,来到了i++的调整部分
printf("%d ", i);
} //1 2 3 4 6 7 8 9 10
return 0;
}
for 循环中continue 的作用是跳过本次循环中 continue 后的代码,直接去到循环的调整部分。未来当某个条件发生的时候,本次循环无需再执行后续某些操作的时候,就可以使用continue 来实现。
4) 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 ,这三种循环通过嵌套在一起来解决问题
练习
找出100~200之间的素数,并打印在屏幕上。
注:素数又称质数,只能被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;
}
优化:
例如 判断16是否为素数 与% 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ==0
16 == 2 * 8( 4 * 4 )所以除数最大值小于等于被除数的平方开根号 for(j = 2;j<sqrt(i);j++)
包含include <math.h> 头文件
4.goto语句
是 goto 语句和跳转标号, goto 语句可以实现在同一个函数内跳转到设置好的标号处
#include <stdio.h>
int main()
{
printf("hehe\n");
goto next:
printf("haha\n");
next:
printf("跳过了haha的打印\n");
return 0;
}
注意:
1)goto 语句如果使用的不当,就会导致在函数内部随意乱跳转,打乱程序的执行流程
2)在多层循环的代码中,如果想快速跳出使用 goto 就非常方便
for(...)
{
for(...)
{
for(...)
{
if(disaster)
goto error;
}
}
}
error:
//...
本来for 循环想提前退出得使用 break ,一个break 只能跳出一层for 循环,如果3层循环嵌套就得使用3个break 才能跳出循环,所以在这种情况下我们使用 goto 语句就会更加的快捷方便
#include<stdio.h>
int main()
{
int i = 0;
int j = 0;
for(;i<5;i++)
{
for(;j<5;j++)
{
printf("hello") //打印5个hello
}
}
return 0;
}
因为j只初始化一次 所以当i=1时 j 经过++ 已经到 5了 当 i= 2 3 4 时 j 没有初始化 for循环直接为假
谢谢观看