




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、一般來(lái)說(shuō),在進(jìn)入循環(huán)體之后,需要先執(zhí)行完循環(huán)體的所有內(nèi)容,才會(huì)進(jìn)行下次循環(huán)的判斷。在有些時(shí)候,可能希望可以中途退出循環(huán),或跳過(guò)一些語(yǔ)句。這一節(jié)課就來(lái)講解兩個(gè)循環(huán)的輔助語(yǔ)句,它們是循環(huán)的左膀右臂,沒(méi)有了它們,循環(huán)照樣可以執(zhí)行,只是沒(méi)那么靈活罷了。break 語(yǔ)句咱這第一個(gè)要講的就是 break 語(yǔ)句,我希望你還沒(méi)有忘記,因?yàn)榍安沤榻B過(guò)它。在哪里呀?沒(méi)錯(cuò),在講解 switch 語(yǔ)句的時(shí)候嘛,說(shuō) switch 語(yǔ)句比較低能,噢,不,因?yàn)樗鼒?zhí)行完匹配的 case 語(yǔ)句后,并不會(huì)自動(dòng)結(jié)束,而是一直往下執(zhí)行,所以就需要使用 break 語(yǔ)句讓它實(shí)現(xiàn)跳出。那么在循環(huán)體中,如果想要讓程序在中途跳出循環(huán),那么同
2、樣可以使用break 語(yǔ)句來(lái)實(shí)現(xiàn)。執(zhí)行 break 語(yǔ)句,直接跳出循環(huán)體。舉個(gè)例子,上節(jié)課講了求素?cái)?shù)的方法。/ /FishC/s1e14/test2.c#include main()i, num;_Bool flag = 1;prf(請(qǐng)輸入一個(gè)整數(shù):);scanf(%d, &num);for (i = 2; i num / 2; i+)if (num % i = 0)flag = 0;if (flag)prf(%d 是一個(gè)素?cái)?shù)!n, num);elseprf(%d 不是一個(gè)素?cái)?shù)!n, num);return 0;我問(wèn)一下大家,如果用于輸入的這個(gè) num 是 10,那么需要執(zhí)行多少次循環(huán)?10
3、/2 = 5,也就是 i 小于 5 的情況下都會(huì)執(zhí)行循環(huán)體的內(nèi)容,那么初始化 i = 2,然后每執(zhí)行一次循環(huán) i 加 1,所以 i 依次為 2、3、4 的時(shí)候執(zhí)行循環(huán)體的內(nèi)容,所以總共執(zhí)行了 3 次。那如果 num 是 10 萬(wàn)呢?應(yīng)該就要執(zhí)行 49998 次循環(huán),如果是 1 億呢?那就要 99999998 次循環(huán)。但是,連小孩子都知道 1 億是肯定能被 2 整除的,所以后邊的 99999997 次循環(huán)還有沒(méi)有意義?完全沒(méi)有意義嘛!因?yàn)橐粋€(gè)數(shù)只要能夠被除了 1 和本身外任何數(shù)整除,那它就一定不是素?cái)?shù)。在這種情況下,只需要添加一個(gè) break 語(yǔ)句,就可以使得程序的效率提高很多。因?yàn)榇龝?huì)兒測(cè)試的
4、數(shù)據(jù)會(huì)比較大(1 個(gè)億),所以這里變量的用 long long 類型,對(duì)應(yīng)的 scanf()和 prf()函數(shù)要將格式化占位符改為%lld。/ /FishC/s1e15/test1.c#include main()long long i, num;_Bool flag = 1;prf(請(qǐng)輸入一個(gè)整數(shù):);scanf(%lld, &num);for (i = 2; i num / 2; i+)if(num % i = 0)flag = 0;break;if (flag)f(%lld 是一個(gè)素?cái)?shù)n,prnum);elsef(%lld 不是一個(gè)素?cái)?shù)n, num);prreturn 0;誒,很多魚(yú)油估
5、計(jì)跟我一樣,看不出啥差別。反正就是咯噔一下,結(jié)果就出來(lái)了。那是因?yàn)楝F(xiàn)在的計(jì)算機(jī) CPU 的速度太快了,咱肉眼無(wú)法分辨。為了證明小甲魚(yú)沒(méi)有坑大家可以在程序的最后打印出變量 i 的值,就能看出效率的區(qū)別了:prf(i = %lldn, i);最后有一點(diǎn)需要注意的是,對(duì)于嵌套循環(huán)來(lái)說(shuō),break 語(yǔ)句只負(fù)責(zé)跳出所在的那一層循環(huán),要跳出外層循環(huán)則需要再布置一個(gè) break 語(yǔ)句才行。舉個(gè)例子:/ /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 這個(gè)條件的時(shí)候,立刻退出整個(gè)循環(huán)體,那么就需要在外層布置多一個(gè) break 語(yǔ)句:for (i = 0; i 10; i+)for (j = 0; j 10; j+)if (j = 3)break;if (j = 3)break;continue 語(yǔ)句還有一種情況是,當(dāng)滿足某個(gè)條件的時(shí)候,跳過(guò)本輪循環(huán)的內(nèi)容,直接開(kāi)始下一輪循環(huán)。這時(shí)候應(yīng)該使用 continue 語(yǔ)句。當(dāng)執(zhí)行到 continu
7、e 語(yǔ)句的時(shí)候,循環(huán)體的剩余部分將被忽略,直接進(jìn)入下一輪循環(huán)。舉個(gè)例子吧:/ /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 存放的值是大寫(xiě)字母 C 的 ASCII 碼時(shí),程序當(dāng)作啥也沒(méi)看到,直接給忽略了另外,對(duì)于嵌套循環(huán)來(lái)說(shuō),continue 語(yǔ)句跟 break 語(yǔ)句是一樣的:它們都只能作
8、用于一層循環(huán)體。看吧,C 語(yǔ)言的語(yǔ)法就是這么簡(jiǎn)單、樸素,但你千萬(wàn)不要因?yàn)樗?jiǎn)單,就小瞧他。正是因?yàn)楹?jiǎn)單,它的靈活性才能被無(wú)限的利用和放大。當(dāng)然也因?yàn)楹?jiǎn)單,很多潛伏的陷阱會(huì)讓初學(xué)者手足無(wú)措。舉個(gè)例子,很多朋友認(rèn)為 for 語(yǔ)句和 while 語(yǔ)句是完全等價(jià),隨時(shí)都可以互換的。事實(shí)上只要你稍不留神,問(wèn)題就出現(xiàn)了。看下邊代碼:/ /FishC/s1e15/test4.c #include main()i;for (i = 0; i 100; i+)if (i % 2)continue;return 0;現(xiàn)在如果要將 for 語(yǔ)句改成 while 語(yǔ)句的表示形式,你應(yīng)該怎么做?我知道很多朋友會(huì)這么改:/ /FishC/s1e15/test5.c #include main()i;i = 0;while (i 100)if (i % 2)continue; i+;return 0;完全是教科書(shū)式的改法,看起來(lái)沒(méi)有問(wèn)題。但程序執(zhí)行起來(lái)呢,沒(méi)錯(cuò),死循環(huán),電腦進(jìn)入 BBQ 模式怎么回事呢?這是因?yàn)?/p>
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 吊裝工程合同范例
- 吊船租賃合同范本
- 包工頭內(nèi)部合同范本
- 合伙開(kāi)車行合同范本
- 商鋪門(mén)面租借合同范本
- 農(nóng)村土布收購(gòu)合同范本
- 衛(wèi)浴安裝承攬合同范本
- 名氣大承攬合同范本
- 代理加工合同范本
- 加油站職業(yè)經(jīng)理人合同范本
- 2024-2025年美的集團(tuán)財(cái)務(wù)報(bào)表分析
- 小學(xué)語(yǔ)文期末質(zhì)量分析報(bào)告
- 小學(xué)科學(xué)質(zhì)量分析報(bào)告
- 2023年大學(xué)日語(yǔ)四級(jí)考試試題答案
- 髖關(guān)節(jié)滑膜炎護(hù)理課件
- 人工智能技術(shù)的應(yīng)用前景與發(fā)展趨勢(shì)
- 箱包生產(chǎn)車間管理制度
- 胃息肉患者的護(hù)理查房
- 2023年鋼結(jié)構(gòu)深化設(shè)計(jì)年度總結(jié)及年后展望
- 成人住院患者跌倒評(píng)估與預(yù)防(團(tuán)體標(biāo)準(zhǔn))解讀
- 石膏固定的護(hù)理教學(xué)查房
評(píng)論
0/150
提交評(píng)論