当前位置:   article > 正文

【C语言】分支与循环(下)

【C语言】分支与循环(下)

本期博客,接着给大家讲讲,循环语句中的while, for, do while用法

一、while循环

C语言提供了3种循环语句, while 就是其中⼀种,接下来就介绍⼀下 while 语句。

while 语句的语法结构和 if 语句非常相似。

1. if 和 while的对比

  1. if(表达式)
  2. 语句;
  3. while(表达式)
  4. 语句;//如果循环体想包含更多的语句,可以加上⼤括号

通过代码,也能直观地看出来 

  1. //代码1
  2. #include <stdio.h>
  3. int main()
  4. {
  5. if(1)
  6. printf("hehe\n"); //if后边条件满⾜,打印⼀次hehe
  7. return 0;
  8. }
  1. //代码2
  2. #include <stdio.h>
  3. int main()
  4. {
  5. while(1)
  6. printf("hehe\n"); //while后边的条件满⾜,死循环的打印hehe
  7. return 0;
  8. }

所以,while语句是可以实现循环效果的。


2. while语句的执行流程

⾸先上来就是执行判断表达式,表达式的值为0,循环直接结束;表达式的值不为0,则执行循环语句,语句执行完后再继续判断,是否进行下⼀次判断。

3. while循环的实践

练习:在屏幕上打印1~10的值
 

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int i = 1;
  5. while (i <= 10)
  6. {
  7. printf("%d ", i);
  8. i++;
  9. }
  10. return 0;
  11. }

我们就实现出来了 

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之前,就能到所有的位。

根据以上的思路,我们就可以写出这样的代码 

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int n = 0;
  5. scanf("%d", &n);
  6. while (n)
  7. {
  8. printf("%d ", n % 10);
  9. n /= 10;
  10. }
  11. return 0;
  12. }

二、for循环

1. 语法形式:

for 循环是三种循环中使⽤最多的, for 循环的语法形式如下:

  1. for (表达式1; 表达式2; 表达式3)
  2. 语句;//如果循环体想包含更多的语句,可以加上⼤括号

表达式1 ⽤于循环变量的初始化

表达式2 ⽤于循环结束条件的判断

表达式3 ⽤于循环变量的调整

2. for循环的执行流程
 

⾸先执行 表达式1 初始化循环变量,接下来就是执行表达式2 的判断部分,表达式2 的结果如果为假,则循环结束; 表达式2 的结果如果为真则执行循环语句,循环语句执行完后,再去执行表达式3,调整循环变量,然后再去 表达式2 的地⽅执行判断, 表达式2 的结果是否为假,决定循环是否继续。

整个循环的过程中,表达式1初始化部分只被执行1次,剩下的就是表达式2、循环语句、表达式3在循环。

3. for循环的实践

练习:在屏幕上打印1~10的值

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int i = 0;
  5. for (i = 1; i <= 10; i++)
  6. {
  7. printf("%d ", i);
  8. }
  9. return 0;
  10. }

运行结果:


 

4. while循环和for循环的对比

for 和 while 在实现循环的过程中都有初始化、判断、调整这三个部分,

但是 for 循环的三个部分⾮常集中,便于代码的维护,

⽽如果代码较多的时候 while 循环的三个部分就⽐较分散,

所以从形式上 for 循环要更优⼀些。

5. 练习

练习1:计算1~100之间3的倍数的数字之和

我们可以这样实现代码:

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int i = 0;
  5. int sum = 0;
  6. for(i=1; i<=100; i++)
  7. {
  8. if(i % 3 == 0)//判断3的倍数
  9. sum += i;
  10. }
  11. printf("%d\n", sum);
  12. return 0;
  13. }

三、do-while循环

1、 语法形式

在循环语句中 do while 语句的使⽤最少,它的语法如下:

  1. do
  2. 语句;
  3. while(表达式);

while 和 for 这两种循环都是先判断,条件如果满⾜就进⼊循环,执⾏循环语句,如果不满⾜就跳出循环

而 do while 循环则是先直接进⼊循环体,执⾏循环语句,然后再执⾏ while 后的判断表达式,表达式为真,就会进⾏下⼀次,表达式为假,则不再继续循环

2、do while循环的执行流程
 

在 do while 循环中先执行图上的“语句”,执⾏完语句,再去执行“判断表达式”,

判断表达式的结果为真,则继续循环,执⾏循环语句;判断表达式的结果为假,则循环结束。

所以在 do while 语句中循环体是⾄少执⾏⼀次的。

3、 do while循环的实践

练习:在屏幕上打印1~10的值

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int i = 1;
  5. do
  6. {
  7. printf("%d ", i);
  8. i++;
  9. } while (i <= 10);
  10. return 0;
  11. }

4. 练习

输⼊⼀个正整数,计算这个整数是⼏位数?

例如:

输⼊:1234 输出:4

输⼊:12 输出:2

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int n = 0;
  5. scanf("%d", &n);
  6. int count = 0;
  7. do
  8. {
  9. count++;
  10. n = n / 10;
  11. } while (n);
  12. printf("%d\n", count);
  13. return 0;
  14. }

四、break和continue语句

在循环执⾏的过程中,如果某些状况发⽣的时候,需要提前终⽌循环,这是⾮常常⻅的现象。

C语⾔中提供了 break continue 两个关键字,就是应该到循环中的。

• break 的作⽤是⽤于永久的终⽌循环,只要 break 被执⾏,直接就会跳出循环,继续往后执

⾏。

• continue 的作⽤是跳过本次循环 continue 后边的代码,在 for 循环和 while 循环中有所

差异的。

1、 while循环中的break和continue

(1) break举例

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int i = 1;
  5. while (i <= 10)
  6. {
  7. if (i == 5)
  8. break;//当i等于5后,就执⾏break,循环就终⽌了
  9. printf("%d ", i);
  10. i = i + 1;
  11. }
  12. return 0;
  13. }

打印了1,2,3,4后,当i等于5的时候,循环遇到 break 的地⽅终⽌,不再打印,不再循环。

所以 break 的作⽤就是永久的终⽌循环,只要 break 被执⾏, break 外的第⼀层循环就终⽌了。那以后我们在循环中,想在某种条件下终⽌循环,则可以使⽤ break 来完成我们想要的效果。

(2) continue举例
 

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int i = 1;
  5. while (i <= 10)
  6. {
  7. if (i == 5)
  8. continue;
  9. printf("%d ", i);
  10. i++;
  11. }
  12. return 0;
  13. }

我们运行一看,发现打出1 2 3 4 后面光标一直闪烁 说明当前的程序死循环了

这是为什么呢?

是因为 当i==5后,就执⾏continue,直接跳过continue的代码,去循环的判断的地⽅
因为这⾥跳过了i++,所以i⼀直为5,判断条件恒为真,程序陷⼊死循环。

所以,continue 可以帮助我们跳过某⼀次循环后边的代码,直接到循环的判断部分,进⾏下⼀次循环的判断,如果循环的调整是在 continue 后边的话,可能会造成死循环。

2. for循环中的break和continue

 (1)break举例

其实和 while 循环中的 break ⼀样, for 循环中的 break 也是⽤于终⽌循环的,不管循环还需要循环多少次,只要执⾏到了 break ,循环就彻底终⽌。

我们看一个代码

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int i = 1;
  5. for (i = 1; i <= 10; i++)
  6. {
  7. if (i == 5)
  8. break;
  9. printf("%d ", i);
  10. }
  11. return 0;
  12. }

运⾏结果:

故,break 的作⽤是永久的终⽌循环

(2)continue举例

如果上⾯的代码 换成 continue 又是什么结果呢?

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int i = 1;
  5. for (i = 1; i <= 10; i++)
  6. {
  7. if (i == 5)
  8. continue;
  9. printf("%d ", i);
  10. }
  11. return 0;
  12. }

我们发现,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 后的代码,直接去到循环的调

整部分。

(3)do while循环中的break和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是素数。

那我们的代码就可以实现为:

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int i = 0;
  5. //循环产⽣100~200的数字
  6. for (i = 100; i <= 200; i++)
  7. {
  8. //判断i是否为素数
  9. //循环产⽣2~i-1之间的数字
  10. int j = 0;
  11. int flag = 1;//假设i是素数
  12. for (j = 2; j < i; j++)
  13. {
  14. if (i % j == 0)
  15. {
  16. flag = 0;
  17. break;
  18. }
  19. }
  20. if (flag == 1)
  21. printf("%d ", i);
  22. }
  23. return 0;
  24. }

那么,以上就是所有循环的用法了,至此,分支和循环语句这个知识点都讲解完了。

希望对大家的C语言学习有帮助~

——————————————————

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/一键难忘520/article/detail/904049
推荐阅读
相关标签
  

闽ICP备14008679号