这篇文章是关于c语言3大结构中的第3个结构,也就是循环结构。我将会用两篇文章讲完循环结构,这是两篇中的第一篇。
目录
1. while循环
C语⾔提供了3种循环语句, while 就是其中⼀种,接下来我来介绍⼀下 while 语句。
1.1 语法形式
while (表达式)
语句;
1.2 while循环的流程图
⾸先上来就是执⾏判断表达式,表达式的值为0,循环直接结束;表达式的值不为0,则执⾏循环语 句,语句执⾏完后再继续判断,是否进⾏下⼀次判断。
1.3 金典习题:数字逆序
题目:输⼊⼀个正的整数,逆序打印这个整数的每⼀位
例如:
输⼊:1234,输出:4321
输⼊:521,输出:125
题⽬解析:
1. 要想得到n的最低位,可以使⽤n%10的运算,得到的余数就是最低位,如:1234%10得到4
2. 要想去掉n的最低位,找出倒数第⼆位,则使⽤ n=n/10 操作就可以去掉最低位的,如: n=1234/10得到123,123相较于1234就去掉了最低位,123%10就得到倒数第⼆位3。
3. 循环1和2两个步骤,在n变成0之前,就能到所有的位。
参考代码:
int main()
{
int n = 0;
scanf("%d", &n);
while (n)
{
int d = n % 10; //d是个位(最小位数)
n /= 10; //去掉个位(最小位数)
printf("%d", d);
}
return 0;
}
2. do while循环
在循环语句中 do while 语句的使⽤比较少,它的语法如下:
2.1 语法形式
do
语句;
while(表达式) ;
注意:“while(表达式)” 的后面是有一个分号 ; 的。
2.2 do while循环的流程图
在 do while 循环中先执⾏图上的“语句”,执⾏完语句,在去执⾏“判断表达式”,判断表达式的 结果是!=0,则继续循环,执⾏循环语句;判断表达式的结果==0,则循环结束。
2.3 金典习题:计算数字位数
题目:输⼊⼀个正整数,计算这个整数是⼏位数
例如:
输⼊:1234 输出:4
输⼊:12 输出:2
参考代码:
int main()
{
int n = 0;
scanf("%d", &n);
int cnt = 0;
do
{
cnt++;
n = n / 10;
} while (n);
printf("%d\n", cnt);
return 0;
}
do while会先执行一次再判断, 所以程序必定会让cnt加加一次,而整数至少会有1位,所以cnt的起始值是0。如果用while循环来实现,cnt的初始值就是1了。
3. for 循环
for 循环是三种循环中使⽤最多的, for 循环的语法形式如下:
3.1 语法形式
for(表达式1; 表达式2; 表达式3)
语句;
表达式1:⽤于循环变量的初始化; 表达式2 :⽤于循环结束条件的判断 ;表达式3 ⽤于循环变量的调整。
3.2 for循环的流程图
⾸先执⾏ 表达式1 初始化循环变量,接下来就是执行表达式2 的判断部分, 表达式2 的结果如果 ==0,则循环结束; 表达式2 的结果如果!=0则执行循环语句,循环语句执行完后,再去执⾏表 达式 3 ,调整循环变量,然后再去 表达式2 的地方执行判断, 表达式2 的结果是否为0,决定循环是否继续。
整个循环的过程中,表达式1初始化部分只被执行1次,剩下的就是表达式2、循环语句、表达式3在循环。
3.3 for语句的循环次数问题
初学者经常会没有认清楚自己写的for循环到底循环了多少次? 自己的循环变量到最后值会变成多少?这里我列出下面这几种情况的循环次数。
tips:如果要循环n次,我比较推荐使用第一个,这与数组下标的排列方式有关。
如果要更保险的方式计算循环次数,而不是靠死记的话,我教你们一个方法。
步骤:
1. 从循环变量的初始值开始记录,(中间太多可省略) ,写到条件n值时,再在后面写上n+1的值就结束。(假如6是n值,则要写到7:0 1 2……6 7)
2. 在初始值、n值、n+1处的下面标注它们“是否执行循环语句”。( i超过条件范围就不会执行)
3. 算出数字的个数cnt:设初始值为i ,则数字个数 cnt = (n + 1) - i + 1 = n - i + 2 。
4. 设不执行的个数为t 。因为不执行就不算进循环次数里面,所以循环次数sum = cnt - t。
比如我们要计算for(i = 8; i < 100; i++)的循环次数?
这样就能清楚地观察 初始值、有哪几次会执行、i 的最终值 以及执行次数了。
4.循环的嵌套
循环之中还有循环,这就是循环的嵌套
while(...)
{
for(...)
{
...
for(...)
{
...
}
}
...
}
需要注意的是:外层循环是不能使用内层循环才开始创建的变量的。
因为在内层循环才创建的变量,它的生命周期和作用域都只在该内层循环中。离开内层循环后,该变量会被销毁。
5. 三种循环的异同
5.1 最少执行次数:
do while循环是先执行再判断,所以它至少执行1次。
while循环 和 for循环 都是先判断再执行,所以它们的至少执行0次。
5. 2 循环语句和分支语句的相似之处
循环语句 和 分支语句一样,都是默认只控制一条语句。如果要控制多条语句,需要加上{ }。
补充:如果do while之间有多条语句,且没有用{ }括起来,那么程序会报错且不能运行。