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. }
这两个程序都是等价的!
今天的学习到这里就要结束了,希望大家可以学到很多东西,也希望大家多多支持和鼓励我!