对C语言控制语句的再认识(万字超详细讲解)(三)

简介: 对C语言控制语句的再认识(万字超详细讲解)

 for语句中的break和continue

我们发现在for循环中也可以出现break和continue,他们的意义和在while循环中是一样的。
但是还是有些差异:

 

1. //代码1
2. #include <stdio.h>
3. int main()
4. {
5. int i = 0;
6. for(i=1; i<=10; i++)
7. {
8. if(i == 5)
9. break;
10. printf("%d ",i);
11. }
12. return 0;
13. }
14. //代码2
15. #include <stdio.h>
16. int main()
17. {
18. int i = 0;
19. for(i=1; i<=10; i++)
20. {
21. if(i == 5)
22. continue;
23. printf("%d ",i);
24. }
25. return 0;
26. }

这两个和前面的while相似,只是在用法上略有不同。

for语句的循环控制变量

建议:
1. 不可在for 循环体内修改循环变量,防止 for 循环失去控制。
2. 建议for语句的循环控制变量的取值采用“前闭后开区间”写法

 

1. int i = 0;
2. //前闭后开的写法
3. for(i=0; i<10; i++)
4. {}
5. //两边都是闭区间
6. for(i=0; i<=9; i++)
7. {}

一些for循环的变种

1. #include <stdio.h>
2. int main()
3. {
4. //代码1
5. for(;;)
6. {
7. printf("hehe\n");
8. }
9. //for循环中的初始化部分,判断部分,调整部分是可以省略的,但是不建议初学时省略,容易导致问
10. 题。
11. //代码2
12. int i = 0;
13. int j = 0;
14. //这里打印多少个hehe?
15. for(i=0; i<10; i++)
16. {
17. for(j=0; j<10; j++)
18. {
19. printf("hehe\n");
20. }
21. }
22. //代码3
23. int i = 0;
24. int j = 0;
25. //如果省略掉初始化部分,这里打印多少个hehe?
26. for(; i<10; i++)
27. {
28. for(; j<10; j++)
29. {
30. printf("hehe\n");
31. }
32. }
33. //代码4-使用多余一个变量控制循环
34. int x, y;
35. for (x = 0, y = 0; x<2 && y<5; ++x, y++)
36. {
37. printf("hehe\n");
38. }
39. return 0;
40. }

一道笔试题

1. //请问循环要循环多少次?
2. #include <stdio.h>
3. int main()
4. {
5. int i = 0;
6. int k = 0;
7. for(i =0,k=0; k=0; i++,k++)
8. k++;
9. return 0;
10. }

答案是0次,因为k=0是循环终止,而本身k就为0,所以没有进入循环。

我们也可以用这个程序看看次数是否正确

1. #include <stdio.h>
2. int main()
3. {
4.  int i = 0;
5.  int k = 0;
6.  int c = 0;//用c来计算次数
7.  for (i = 0, k = 0; k = 0; i++, k++)
8.  {
9.    k++;
10.     c++;
11. 
12.   }
13.   printf("%d\n", c);
14.   return 0;
15. }

没错吧!!!

do while循环

do语句的语法

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

执行流程

do语句特点

循环至少执行一次,使用的场景有限,所以不是经常使用。

如:

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

虽然while中条件没有满足,但是依然执行了一次

do while中的break和continue

依然是上面的例子,这里把代码留给大家,就不多做解释了哈!

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

练习(小试牛刀)

1. 计算 n的阶乘。

2. 计算 1!+2!+3!+……+10!

3. 编写代码,演示多个字符从两端移动,向中间汇聚。

4. 编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则

提示登录成,如果三次均输入错误,则退出程序。

参考代码:

前两个比较简单就不多说了,如果有什么问题可以及时和月亮说哈!后面两个提供了参考代码:

1. //代码1
2. //编写代码,演示多个字符从两端移动,向中间汇聚
3. #include <stdio.h>
4. int main()
5. {
6. char arr1[] = "welcome to bit...";
7. char arr2[] = "#################";
8. int left = 0;
9. int right = strlen(arr1)-1;
10. printf("%s\n", arr2);
11. //while循环实现
12. while(left<=right)
13. {
14. Sleep(1000);
15. arr2[left] = arr1[left];
16. arr2[right] = arr1[right];
17. left++;
18. right--;
19. printf("%s\n", arr2);
20. }
21. //for循环实现
22. for (left=0, right=strlen(src)-1;
23. left <= right;
24. left++, right--)
25. {
26. Sleep(1000);
27. arr2[left] = arr1[left];
28. arr2[right] = arr1[right];
29. printf( "%s\n", target);
30. }
31. retutn 0;
32. }
33. //代码2
34. int main()
35. {
36. char psw[10] = "" ;
37. int i = 0;
38. int j = 0;
39. for (i = 0; i < 3 ; ++i)
40. {
41. printf( "please input:");
42. scanf("%s", psw);
43. if (strcmp(psw, "password" ) == 0)
44. break;
45. }
46. if (i == 3)
47. printf("exit\n");
48. else
49. printf( "log in\n");
50. }

goto语句

C语言中提供了可以随意滥用的 goto语句和标记跳转的标号。

从理论上 goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。

但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构

程。

例如:一次跳出两层或多层循环。

多层循环这种情况使用break是达不到目的的。它只能从最内层循环退出到上一层的循环。

goto语言真正适合的场景如下:

1. for(...)
2. for(...)
3. {
4. for(...)
5. {
6. if(disaster
7. goto error;
8. }
9. }
10. …
11. error:
12. if(disaster)
13. // 处理错误情况

下面是使用goto语句的一个例子,然后使用循环的实现方式替换goto语句:

一个关机程序

 

1. #include <stdio.h>
2. int main()
3. {
4. char input[10] = {0};
5. system("shutdown -s -t 60");
6. again:
7. printf("电脑将在1分钟内关机,如果输入:我是猪,就取消关机!\n请输入:>");
8. scanf("%s", input);
9. 
10. if(0 == strcmp(input, "我是猪"))
11. {
12. system("shutdown -a");
13. }
14. else
15. {
16. goto again;
17. }
18. return 0;
19. }

而如果不适用goto语句,则可以使用循环:

1. #include <stdio.h>
2. #include <stdlib.h>
3. int main()
4. {
5. char input[10] = {0};
6. system("shutdown -s -t 60");
7. while(1)
8. {
9. printf("电脑将在1分钟内关机,如果输入:我是猪,就取消关机!\n请输入:>");
10. scanf("%s", input);
11. if(0 == strcmp(input, "我是猪"))
12. {
13. system("shutdown -a");
14. break;
15. }
16. }
17. return 0;
18. }

这两个程序都是等价的!

image.png

今天的学习到这里就要结束了,希望大家可以学到很多东西,也希望大家多多支持和鼓励我!

相关文章
|
6月前
|
程序员 C语言
C语言控制语句详解
C语言控制语句详解
101 0
|
6月前
|
C语言
C语言中的控制语句(1)
C语言中的控制语句(1)
|
C语言
C语言控制语句
C语言控制语句
59 0
|
4月前
|
C语言
C语言7 控制语句
C语言7 控制语句
23 1
|
存储 C语言
C语言入门(2)——数据类型、运算符、类型转换、控制语句
char short int long flout(默认保存小数点后6位,并且可以四舍五入) double 输出int类型的值%d 输出字符用%c 输出long用%ld 输出float用%f 输出double用%lf
137 0
|
6月前
|
C语言
C语言控制语句(2)
C语言控制语句(2)
|
6月前
|
C语言
在C语言中,for语句是一种常用的循环结构控制语句
在C语言中,for语句是一种常用的循环结构控制语句
71 0
|
C语言
C语言—控制语句与函数
本文介绍了C语言中的控制语句和函数。
64 0
|
C语言
认识C语言 Day_5 >控制语句
认识C语言 Day_5 >控制语句
|
C语言
C语言之控制语句的详解
C语言之控制语句的详解
88 0