




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、一般来说,在进入循环体之后,需要先执行完循环体的所有内容,才会进行下次循环的判断。在有些时候,可能希望可以中途退出循环,或跳过一些语句。这一节课就来讲解两个循环的辅助语句,它们是循环的左膀右臂,没有了它们,循环照样可以执行,只是没那么灵活罢了。break 语句咱这第一个要讲的就是 break 语句,我希望你还没有忘记,因为前才介绍过它。在哪里呀?没错,在讲解 switch 语句的时候嘛,说 switch 语句比较低能,噢,不,因为它执行完匹配的 case 语句后,并不会自动结束,而是一直往下执行,所以就需要使用 break 语句让它实现跳出。那么在循环体中,如果想要让程序在中途跳出循环,那么同
2、样可以使用break 语句来实现。执行 break 语句,直接跳出循环体。举个例子,上节课讲了求素数的方法。/ /FishC/s1e14/test2.c#include main()i, num;_Bool flag = 1;prf(请输入一个整数:);scanf(%d, &num);for (i = 2; i num / 2; i+)if (num % i = 0)flag = 0;if (flag)prf(%d 是一个素数!n, num);elseprf(%d 不是一个素数!n, num);return 0;我问一下大家,如果用于输入的这个 num 是 10,那么需要执行多少次循环?10
3、/2 = 5,也就是 i 小于 5 的情况下都会执行循环体的内容,那么初始化 i = 2,然后每执行一次循环 i 加 1,所以 i 依次为 2、3、4 的时候执行循环体的内容,所以总共执行了 3 次。那如果 num 是 10 万呢?应该就要执行 49998 次循环,如果是 1 亿呢?那就要 99999998 次循环。但是,连小孩子都知道 1 亿是肯定能被 2 整除的,所以后边的 99999997 次循环还有没有意义?完全没有意义嘛!因为一个数只要能够被除了 1 和本身外任何数整除,那它就一定不是素数。在这种情况下,只需要添加一个 break 语句,就可以使得程序的效率提高很多。因为待会儿测试的
4、数据会比较大(1 个亿),所以这里变量的用 long long 类型,对应的 scanf()和 prf()函数要将格式化占位符改为%lld。/ /FishC/s1e15/test1.c#include main()long long i, num;_Bool flag = 1;prf(请输入一个整数:);scanf(%lld, &num);for (i = 2; i num / 2; i+)if(num % i = 0)flag = 0;break;if (flag)f(%lld 是一个素数n,prnum);elsef(%lld 不是一个素数n, num);prreturn 0;诶,很多鱼油估
5、计跟我一样,看不出啥差别。反正就是咯噔一下,结果就出来了。那是因为现在的计算机 CPU 的速度太快了,咱肉眼无法分辨。为了证明小甲鱼没有坑大家可以在程序的最后打印出变量 i 的值,就能看出效率的区别了:prf(i = %lldn, i);最后有一点需要注意的是,对于嵌套循环来说,break 语句只负责跳出所在的那一层循环,要跳出外层循环则需要再布置一个 break 语句才行。举个例子:/ /FishC/s1e15/test2.c #include main()i, j;for (i = 0; i 10; i+)for (j = 0; j 10; j+)if (j = 3)break;prf(i
6、 = %d, j = %dn, i, j);return 0;fishclocalhost s1e15$ gcc test2.c & ./a.outi = 10, j = 3如果要让程序在符合 j = 3 这个条件的时候,立刻退出整个循环体,那么就需要在外层布置多一个 break 语句:for (i = 0; i 10; i+)for (j = 0; j 10; j+)if (j = 3)break;if (j = 3)break;continue 语句还有一种情况是,当满足某个条件的时候,跳过本轮循环的内容,直接开始下一轮循环。这时候应该使用 continue 语句。当执行到 continu
7、e 语句的时候,循环体的剩余部分将被忽略,直接进入下一轮循环。举个例子吧:/ /FishC/s1e15/test3.c #include main()ch;while (ch = getchar() != n)if (ch = C)continue;phar(ch);phar(n);return 0;fishclocalhost s1e15$ gcc test3.c & ./a.outI loveI love!你看,检查到 ch 存放的值是大写字母 C 的 ASCII 码时,程序当作啥也没看到,直接给忽略了另外,对于嵌套循环来说,continue 语句跟 break 语句是一样的:它们都只能作
8、用于一层循环体。看吧,C 语言的语法就是这么简单、朴素,但你千万不要因为它简单,就小瞧他。正是因为简单,它的灵活性才能被无限的利用和放大。当然也因为简单,很多潜伏的陷阱会让初学者手足无措。举个例子,很多朋友认为 for 语句和 while 语句是完全等价,随时都可以互换的。事实上只要你稍不留神,问题就出现了。看下边代码:/ /FishC/s1e15/test4.c #include main()i;for (i = 0; i 100; i+)if (i % 2)continue;return 0;现在如果要将 for 语句改成 while 语句的表示形式,你应该怎么做?我知道很多朋友会这么改:/ /FishC/s1e15/test5.c #include main()i;i = 0;while (i 100)if (i % 2)continue; i+;return 0;完全是教科书式的改法,看起来没有问题。但程序执行起来呢,没错,死循环,电脑进入 BBQ 模式怎么回事呢?这是因为
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 材料科学应用考核试卷
- 出口合同标准文本 电汇
- 个人应聘合同标准文本
- 公家铺面转让合同标准文本
- 共同装修协议合同标准文本
- 人事助理聘用合同范例
- 仓库订单合同范例
- 中介购房服务合同标准文本
- 住宅商业施工合同标准文本
- 2025年华电煤业集团有限公司校园招聘笔试参考题库附带答案详解
- 老年人能力评估标准解读(讲义)课件
- 小便利店规划方案
- 脑梗塞健康宣教的内容
- 铝粉储存过程中发生火灾爆炸的原因分析
- 产业经济学课件第一章:导论
- 驾照体检表完整版本
- 大数据管理与应用概论 课件 3.5 大数据时代的管理决策变革
- 母婴护理员(月嫂)培训完整课件
- 妇幼保健院关于创建三级妇幼保健院调整四大部业务科室设置的通知
- 防诈骗银行知识讲座
- 物业员工消防知识培训
评论
0/150
提交评论