接上一篇 自学C语言——分支和循环(二)
9.break和continue语句
break的作用是用于永久的终止循环,只要break被执行,就会直接跳出循环,继续往后执行。
continue的作用是跳过本次循环中continue后边的代码,在for循环和while循环中有所差异。
while循环中的break和continue
break
int main()
{
int i = 1;
while (i <= 10)
{
if (i == 5)
break;
printf("%d ", i);
i++;
}
return 0;
}
输出1234,结束运行
continue
int main()
{
int i = 1;
while (i <= 10)
{
if (i == 5)
continue;
printf("%d ", i);
i++;
}
return 0;
}
输出1234死循环,不结束运行
for循环中的break和continue
break
int main()
{
int i = 0;
for (i = 1; i <= 10; i++)
{
if (i == 5)
break;
printf("%d ", i);
}
return 0;
}
输出1234结束
continue
int main()
{
int i = 0;
for (i = 1; i <= 10; i++)
{
if (i == 5)
continue;
printf("%d ", i);
}
return 0;
}
输出1234678910结束
do while循环中的break和continue
break
int main()
{
int i = 1;
do
{
if (i == 5)
continue;
printf("%d ", i);
i++;
} while (i<=10);
return 0;
}
输出1234结束
continue
int main()
{
int i = 1;
do
{
if (i == 5)
continue;
printf("%d ", i);
i++;
} while (i<=10);
return 0;
}
输出1234死循环,不结束运行
10.循环的嵌套
例子:
找出100~200之间的素数,并打印在屏幕上(素数也叫质数,就是只能被1和它本身整除的数字)
//生成100-200(for i)
//判断是否为素数
//用2~i-1之间的数除i,如果都不能整除i,那么i是素数,否则就不是
//1 7
//2 3 4 5 6
int main()
{
int i = 0;
for (i = 100; i <= 200; i++)
{
int flag = 1;//假设i是素数
//判断i是否为素数
//产生2~i-1之间的数
int j = 0;
for (j = 2; j <= i - 1; j++)
{
if (i % j == 0)
{
flag = 0;
break;
}
}
if (flag == 1)
printf("%d ", i);
}
return 0;
}
优化:
//如果i是有因子的
//i=a*b,则a和b中至少有一个数字是<=根号i的
#include<math.h>
int main()
{
int i = 0;
for (i = 100; i <= 200; i++)
{
int flag = 1;//假设i是素数
//判断i是否为素数
//产生2~i-1之间的数
int j = 0;
for (j = 2; j <=sqrt(i); j++)//sqrt 库函数,开平方需要<math.h>
{
if (i % j == 0)
{
flag = 0;
break;
}
}
if (flag == 1)
printf("%d ", i);
}
return 0;
}
再优化:
int main()
{
int i = 0;
for (i = 101; i <= 200; i+=2)
{
int flag = 1;//假设i是素数
//判断i是否为素数
//产生2~i-1之间的数
int j = 0;
for (j = 2; j <= sqrt(i); j++)//sqrt 库函数,开平方需要<math.h>
{
if (i % j == 0)
{
flag = 0;
break;
}
}
if (flag == 1)
printf("%d ", i);
}
return 0;
}
输出结果:
101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199
11.goto语句
goto语句,可以实现在同一个函数内跳转到设置好的标号处。
int main()
{
printf("hehe\n");
goto next;
printf("haha\n");
next:
printf("跳过了haha的打印\n");
return 0;
}
输出:(跳过输出haha)
hehe
跳过了haha的打印
不一定要用next,可以用任意标志代替
在多层循环代码中,如果想快速跳出,使用goto就非常方便
int main()
{
for ()
{
for ()
{
for ()
{
if ()
goto error;
}
}
}
error:
return 0;
}
一个break只能跳出一次循环,三层循环只需要一个goto就一个跳出。
goto语句不是必须使用的,有其他的方式可以替代。
//system函数可以执行系统的命令
#include<windows.h>
#include<string.h>
int main()
{
char input[20] = { 0 };
//关机
system("shutdown -s -t 60");//倒计时60s关机
again:
printf("请注意,你的电脑将在一分钟后关机,请输入:123456取消关机\n");
scanf("%s", input);
if (0==strcmp(input, "123456"))//strcmp_比较字符串大小的库函数
{
system("shutdown -a");
}
else
{
goto again;
}
return 0;
}
如果去掉goto
int main()
{
char input[20] = { 0 };
//关机
system("shutdown -s -t 60");//倒计时60s关机
while (1)
{
printf("请注意,你的电脑将在一分钟后关机,请输入:123456取消关机\n");
scanf("%s", input);
if (0 == strcmp(input, "123456"))//strcmp_比较字符串大小的库函数
{
system("shutdown -a");
}
}
return 0;
}