C语言中的while循环结构
C语言中的while循环结构
C语言提供了3中循环语句,while
就是其中的一种,接下来就介绍一下while
语句。
while
语句的语法结构和if
语句非常相似。
1.1 if和while的对比
if(表达式)
语句;
while(表达式)
语句;//如果循环体想包含更多的语句,可以加上大括号
写代码对比下:
#include <stdio.h>
int main()
{
if(1)
printf("北方\n");//if后面条件满足,打印一次北方
return 0;
}
#include <stdio.h>
int main()
{
while(1)
printf("北方\n");//while后面的条件满足,死循环的打印北方
return 0;
}
这就是他们的区别,while语句是可以实现死循环效果的。
1.2 while语句的执行流程
首先上来就是执行判断表达式,表达式的值为0,循环直接结束;表达式的值不为0,则执行循环语句,语句执行完后再继续判断,是否进行下一次判断。
1.3 while循环的实践
练习:在屏幕上打印1~10的值
参考代码:
#include <stdio.h>
int main()
{
int count = 0;
while (count < 10)
{
count += 1;
printf("%d\n", count);
}
return 0;
}
1.4 练习
输入一个正的正数,逆序打印这个整数的每一位
例如:
输入:1234 输出:4 3 2 1
输入:521 输出 1 2 5
题目解析
- 要想得到n的最低位,可以使用n%10的运算,得到的余数就是最低位,如:1234%10得到4
- 要想去掉n的最低位,找出倒数第二位,则使用n%n/10操作可以去掉最低位的,如:n=1234/10得到123,123相较于1234就去掉了最低位,123%10就得到倒数第二位
- 循环1和2两个步骤,在n变成0之前,就能得到所有的位。
参考代码:
#include <stdio.h>
int main()
{
printf("请输入一个正整数:");
int n = 0;
scanf("%d", &n);
while (n)
{
printf("%d ", n % 10);
n /= 10;
}
return 0;
}
1.5 while循环中的break和continue
在循环执行的过程中,如果某些状况发生的时候,需要提前终止循环,这是非常常见的现象。C语言中提供了break
和continue
两个关键字,就是应该到循环中的。
break
的作用是用于永久的终止循环,只要break
被执行,直接就会跳出循环,继续往后执行。continue
的作用是跳过本次循环continue
后边的代码,在for循环和while
循环中有所差异的。
1.5.1 break举例
#include <stdio.h>
int main()
{
int i = 1;
while (i <= 10)
{
if (i == 5)
{
break;
}
printf("%d ", i);
i += 1;
}
return 0;
}
打印了1 2 3 4后,当i
等于5的时候,循环执行break
的地方终止,不再打印,不再循环。所以break
的作用就是永久的终止循环,只要break
被执行,break
外的第一层循环就被终止了。
那以后我们在循环中,想在某种条件下终止循环,则可以使用break
来完成我们想要的效果。
1.5.2 continue举例
continue
是继续的意思,在循环体中的作用就是跳过本次循环中continue
后边的代码,继续进行下一次循环的判断。
上面的代码,如果把break
换成continue
的结果如下:
#include <stdio.h>
int main()
{
int i = 1;
while (i <= 10)
{
if (i == 5)
{
continue;
//当i==5时,跳出本次循环,进入下次循环,此时不再执行i+=1代码,导致死循环
}
printf("%d ", i);
i += 1;
}
return 0;
}
到这里我们就能分析出来,continue
可以帮助我们跳过某一循环continue
后边的代码,直接到循环的判断部分,进行下一次循环的判断,如果循环的调整是在continue
后边的话,可能会造成死循环。
改造如下,就不会死循环了。
#include <stdio.h>
int main()
{
int i = 0;
while (i <= 10)
{
i += 1;
if (i == 5)
{
continue;
//当i==5时,跳出本次循环,进入下次循环,此时不再执行i+=1代码,导致死循环
}
printf("%d ", i);
}
return 0;
}