赞
踩
本期博客,接着给大家讲讲,循环语句中的while, for, do while用法
C语言提供了3种循环语句, while 就是其中⼀种,接下来就介绍⼀下 while 语句。
while 语句的语法结构和 if 语句非常相似。
- if(表达式)
- 语句;
- while(表达式)
- 语句;//如果循环体想包含更多的语句,可以加上⼤括号
通过代码,也能直观地看出来
- //代码1
- #include <stdio.h>
-
- int main()
- {
- if(1)
- printf("hehe\n"); //if后边条件满⾜,打印⼀次hehe
- return 0;
- }
- //代码2
- #include <stdio.h>
-
- int main()
- {
- while(1)
- printf("hehe\n"); //while后边的条件满⾜,死循环的打印hehe
- return 0;
- }
所以,while语句是可以实现循环效果的。
⾸先上来就是执行判断表达式,表达式的值为0,循环直接结束;表达式的值不为0,则执行循环语句,语句执行完后再继续判断,是否进行下⼀次判断。
练习:在屏幕上打印1~10的值
- #include <stdio.h>
- int main()
- {
- int i = 1;
- while (i <= 10)
- {
- printf("%d ", i);
- i++;
- }
- return 0;
- }
我们就实现出来了
4. 练习
输⼊⼀个正的整数,逆序打印这个整数的每⼀位。
例如:
输⼊:1234,输出:4 3 2 1
输⼊:521,输出:1 2 5
✅分析:
1. 首先输入一个数字n
2. 要想得到n的最低位,可以使⽤n%10的运算,得到的余数就是最低位,如:1234%10得到4
3. 要想去掉n的最低位,找出倒数第⼆位,则使⽤ n=n/10 操作就可以去掉最低位的,
如:n=1234/10得到123,123相较于1234就去掉了最低位,123%10就得到倒数第⼆位3。
4. 循环1和2两个步骤,在n变成0之前,就能到所有的位。
根据以上的思路,我们就可以写出这样的代码
- #include <stdio.h>
- int main()
- {
- int n = 0;
- scanf("%d", &n);
- while (n)
- {
- printf("%d ", n % 10);
- n /= 10;
- }
- return 0;
- }
for 循环是三种循环中使⽤最多的, for 循环的语法形式如下:
- for (表达式1; 表达式2; 表达式3)
- 语句;//如果循环体想包含更多的语句,可以加上⼤括号
表达式1 ⽤于循环变量的初始化
表达式2 ⽤于循环结束条件的判断
表达式3 ⽤于循环变量的调整
⾸先执行 表达式1 初始化循环变量,接下来就是执行表达式2 的判断部分,表达式2 的结果如果为假,则循环结束; 表达式2 的结果如果为真则执行循环语句,循环语句执行完后,再去执行表达式3,调整循环变量,然后再去 表达式2 的地⽅执行判断, 表达式2 的结果是否为假,决定循环是否继续。
整个循环的过程中,表达式1初始化部分只被执行1次,剩下的就是表达式2、循环语句、表达式3在循环。
练习:在屏幕上打印1~10的值
- #include <stdio.h>
-
- int main()
- {
- int i = 0;
- for (i = 1; i <= 10; i++)
- {
- printf("%d ", i);
- }
- return 0;
- }
运行结果:
for 和 while 在实现循环的过程中都有初始化、判断、调整这三个部分,
但是 for 循环的三个部分⾮常集中,便于代码的维护,
⽽如果代码较多的时候 while 循环的三个部分就⽐较分散,
所以从形式上 for 循环要更优⼀些。
练习1:计算1~100之间3的倍数的数字之和
我们可以这样实现代码:
- #include <stdio.h>
-
- int main()
- {
- int i = 0;
- int sum = 0;
- for(i=1; i<=100; i++)
- {
- if(i % 3 == 0)//判断3的倍数
- sum += i;
- }
- printf("%d\n", sum);
- return 0;
- }
在循环语句中 do while 语句的使⽤最少,它的语法如下:
- do
- 语句;
- while(表达式);
while 和 for 这两种循环都是先判断,条件如果满⾜就进⼊循环,执⾏循环语句,如果不满⾜就跳出循环;
而 do while 循环则是先直接进⼊循环体,执⾏循环语句,然后再执⾏ while 后的判断表达式,表达式为真,就会进⾏下⼀次,表达式为假,则不再继续循环。
在 do while 循环中先执行图上的“语句”,执⾏完语句,再去执行“判断表达式”,
判断表达式的结果为真,则继续循环,执⾏循环语句;判断表达式的结果为假,则循环结束。
所以在 do while 语句中循环体是⾄少执⾏⼀次的。
练习:在屏幕上打印1~10的值
- #include <stdio.h>
- int main()
- {
- int i = 1;
- do
- {
- printf("%d ", i);
- i++;
- } while (i <= 10);
- return 0;
- }
输⼊⼀个正整数,计算这个整数是⼏位数?
例如:
输⼊:1234 输出:4
输⼊:12 输出:2
- #include <stdio.h>
- int main()
- {
- int n = 0;
- scanf("%d", &n);
- int count = 0;
- do
- {
- count++;
- n = n / 10;
- } while (n);
- printf("%d\n", count);
- return 0;
- }
在循环执⾏的过程中,如果某些状况发⽣的时候,需要提前终⽌循环,这是⾮常常⻅的现象。
C语⾔中提供了 break 和 continue 两个关键字,就是应该到循环中的。
• break 的作⽤是⽤于永久的终⽌循环,只要 break 被执⾏,直接就会跳出循环,继续往后执
⾏。
• continue 的作⽤是跳过本次循环 continue 后边的代码,在 for 循环和 while 循环中有所
差异的。
- #include <stdio.h>
- int main()
- {
- int i = 1;
- while (i <= 10)
- {
- if (i == 5)
- break;//当i等于5后,就执⾏break,循环就终⽌了
- printf("%d ", i);
- i = i + 1;
- }
- return 0;
- }
打印了1,2,3,4后,当i等于5的时候,循环遇到 break 的地⽅终⽌,不再打印,不再循环。
所以 break 的作⽤就是永久的终⽌循环,只要 break 被执⾏, break 外的第⼀层循环就终⽌了。那以后我们在循环中,想在某种条件下终⽌循环,则可以使⽤ break 来完成我们想要的效果。
- #include <stdio.h>
- int main()
- {
- int i = 1;
- while (i <= 10)
- {
- if (i == 5)
- continue;
- printf("%d ", i);
- i++;
- }
- return 0;
- }
我们运行一看,发现打出1 2 3 4 后面光标一直闪烁 说明当前的程序死循环了
这是为什么呢?
是因为 当i==5后,就执⾏continue,直接跳过continue的代码,去循环的判断的地⽅
因为这⾥跳过了i++,所以i⼀直为5,判断条件恒为真,程序陷⼊死循环。
所以,continue 可以帮助我们跳过某⼀次循环后边的代码,直接到循环的判断部分,进⾏下⼀次循环的判断,如果循环的调整是在 continue 后边的话,可能会造成死循环。
其实和 while 循环中的 break ⼀样, for 循环中的 break 也是⽤于终⽌循环的,不管循环还需要循环多少次,只要执⾏到了 break ,循环就彻底终⽌。
我们看一个代码
- #include <stdio.h>
- int main()
- {
- int i = 1;
- for (i = 1; i <= 10; i++)
- {
- if (i == 5)
- break;
- printf("%d ", i);
- }
- return 0;
- }
运⾏结果:
故,break 的作⽤是永久的终⽌循环。
如果上⾯的代码 换成 continue 又是什么结果呢?
- #include <stdio.h>
- int main()
- {
- int i = 1;
- for (i = 1; i <= 10; i++)
- {
- if (i == 5)
- continue;
- printf("%d ", i);
- }
- return 0;
- }
我们发现,i==1, 2, 3, 4, !=5,直接打印,当i==5,遇到continue,跳过了后边的打印,来到了i++的调整部分,i++ 变为6,!=5, 继续打印 6, 以此类推打印7,8,9,10 程序结束。
所以屏幕上打印 1 2 3 4 6 7 8 9 10
所以在 for 循环中 continue 的作⽤是跳过本次循环中 continue 后的代码,直接去到循环的调
整部分。
do while 语句中的 break 和 continue 的作⽤和 while 循环中⼏乎⼀模⼀样,
同学们可以自行测试体会一下。
我们已经学习了三种循环 while , do while , for ,这三种循环往往会嵌套在⼀起才能更好的解决
问题,也就是:循环嵌套,
这⾥我们看⼀个例⼦。
练习:找出100~200之间的素数,并打印在屏幕上。
这里我们要知道什么是素数
素数,也叫做质数,即只能被1和本⾝整除的数字。
我们怎么想这个问题呢?
1. 要从100~200之间找出素数,⾸先得有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;
- }
那么,以上就是所有循环的用法了,至此,分支和循环语句这个知识点都讲解完了。
希望对大家的C语言学习有帮助~
——————————————————
完
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。