循环语句
循环语句分类:
- while
- for
- do while
1.0 while循环
上文了解过 if 语句,if 语句是当条件满足的时候,执行语句执行一次。
有些事情是同一件事情要完成很多次,这时便需要while语句。C语言中使用while语句可以实现循环。
while 语句的语法结构:
//语法结构
while (表达式)
循环语句;
我们使用代码来具体理解一下while 语句:
打印1~100之间的数。
#include <stido.h>
int main()
{
int i = 0;
while (i < 101)
{
printf("%d",i);
i++;
}
return 0;
}
1.1.1 while 语句中的 break 和 continue
①break
看以下代码
#include <stdio.h>
int main()
{
int i = 0;
while (i <= 10)
{
if (i ==5 )
break;
printf("%d",i);
i++;
}
return 0;
}
这个代码块的结果是多少?
0 1 2 3 4
可以发现在 i==5 以后没有数值输出了,也就是循环不再继续。
也就是说,在循环中遇到 break 则停止后期所有循环,直接终止循环。
所以 while 中的break是用于永久的终止循环的。
②continue 介绍
代码
#include <stdio.h>
int main()
{
int i = 0;
while (i <= 10)
{
if (i ==5 )
continue;
printf("%d ",i);
i++;
}
return 0;
}
结果也是
0 1 2 3 4
但是打印出以上结果后程序并没有结束。
#include <stdio.h>
int main()
{
int i = 0;
while (i <= 10)
{
i++;
if (i ==5 )
continue;
printf("%d ",i);
}
return 0;
}
再看这个代码,结果是
1 2 3 4 6 7 8 9 10 11
总结一下:continue 在 while 循环中的作用是终止本次循环,也就是本次循环中的 continue 后边的代码不再执行,而是跳到 while 语句的判断部分。进行下一次的循环入口判断。
为什么第一个代码会输出 0 1 2 3 4 ?
因为在 i==5 后 continue,continue后的 i++的代码没有运行所以导致 i 一直都是 5 每次判断后又 continue 导致是一个死循环。
//代码1
#include <stdio.h>
int main()
{
int ch = 0;
while ((ch = getchar()) !=EOF)
putchar(ch);
return 0;
}
//代码解释:getchar()和putchar()是输入、输出函数,每次只读取/输出一个字符,getchar()返回的是字符的 ASCII码值,读取异常时返回 -1 。
//同时理解 一个概念 键盘缓冲区 。
//代码二
#include <stdio.h>
int main()
{
int ch =0;
while ((ch = getchar()) != EOF )
{
if (ch < "0" && ch > "9")
continue;
putchar(ch);
}
return 0;
}
//这个代码的作用是:只打印数字的字符,跳过其他的字符
2.0 for循环
2.1.1 for循环的语法结构
for (表达式1;表达式2;表达式3)
循环语句;
解释:
- 表达式1:为初始化部分,用于初始化循环变量;
- 表达式2:条件判断部分,用于判断循环语句是否执行;
- 表达式3:调整部分,用于循环条件的调整。
下面看代码具体了解:
#include <stdio.h>
int main()
{
int i = 0;
for (i=0;i<=10;i++)
{
printf("%d\n",i);
}
return 0;
}
对比 while 循环和 for 循环
int i = 0;
//实现相同的功能,使用while
i=1;//初始化部分
while(i<=10)//判断部分
{
printf("hehe\n");
i = i+1;//调整部分
}
//实现相同的功能,使用while
for(i=1; i<=10; i++)
{
printf("hehe\n");
}
for循环的执行过程:表达式1—>表达式2—>(循环语句)—>表达式3—>表达式2— …
2.2.2 for循环中的 break 和continue
在 for 循环中的 break 和 continue 的作用与在 while 循环是一样的。
具体看代码:
//代码1
#include <stdio.h>
int main()
{
int i = 0;
for (i=0;i<=10;i++)
{
if (i == 5)
break;
printf("%d\n",i);
}
return 0;
}
//0 1 2 3 4
//代码2
#include <stdio.h>
int main()
{
int i = 0;
for (i=0;i<=10;i++)
{
if (i==5)
continue;
printf("%d\n",i);
}
return 0;
}
//0 1 2 3 4 6 7 8 9 10
此外,尽量不要在循环体内修改循环体!!!可以使用过,但不要进行赋值或运算等操作。
2.2.3for 循环的一些变化操作
#include <stdio.h>
int main()
{
for (;;)
printf("I AM HAPPY")
return 0;
}
//for 循环的表达式条件都可以省略,但是省略判断表达式则恒为真。
//代码2
#include <stdio.h>
int main()
{
int i=0;
int j=0;
int num=0;
for (i=0;i<10;i++)
{
for (j=0;j<10;j++)
{
printf("am\n");
num++;
}
}
printf("\n%d\n",num);
return 0;
}
//输出 100 个 am
//代码2
#include <stdio.h>
int main()
{
int i = 0;
int j = 0;
int num = 0;
for (; i < 10; i++)
{
for (; j < 10; j++)
{
printf("am\n");
num++;
}
}
printf("\n%d\n", num);
return 0;
}
//省略初始化,打印10个,原因:i=0 第一次循环后 j=10 而后面的循环,并没有对进行初始化,所以不会循环。
//代码4
#include <stdio.h>
{
//代码4-使用多余一个变量控制循环
int x, y;
for (x = 0, y = 0; x<2 && y<5; ++x, y++)
{
printf("hehe\n");
}
return 0;
}
//使用两个变量控制循环。
3.0 do while 循环
do while 语句比较简单
//结构
do
{
循环语句;
}
while (表达式);
由于do 在前,所以do while 循环一定会执行一次。
#include <stdio.h>
int main()
{
int i = 1;
do
{
printf("%d\n",i);
i++;
}
while (i<11);
return 0;
}
do while 循环并不经常使用。
3.1.1 do while 中的 break 与 continue
作用与for循环和while循环一样,这里不多赘述。