1 00:00:00,000 --> 00:00:05,410 2 00:00:05,410 --> 00:00:07,640 >> DOUG LLOYD:好吧,所以 讓我們來談談循環。 3 00:00:07,640 --> 00:00:10,015 因此,循環是一種很酷 因為它們可以讓你的程序 4 00:00:10,015 --> 00:00:12,050 要執行的代碼行 一遍又一遍又一遍。 5 00:00:12,050 --> 00:00:15,600 反复,而不需要複製 和粘貼或以其他方式重複。 6 00:00:15,600 --> 00:00:17,630 有三個主要 種類的循環,你會看到的。 7 00:00:17,630 --> 00:00:21,010 你可能有機會使用 每一個你通過CS50進步。 8 00:00:21,010 --> 00:00:22,940 其中一些循環是相當 熟悉你從頭開始, 9 00:00:22,940 --> 00:00:25,814 如此反复,當我們用條件語句一樣, 我們把他們並排 10 00:00:25,814 --> 00:00:28,930 如果有一個比喻,我們可以借鑒。 11 00:00:28,930 --> 00:00:33,600 >> 首先是永遠的從無到有, 與之相比,而(真)。 12 00:00:33,600 --> 00:00:35,390 這就是我們所說的無限循環。 13 00:00:35,390 --> 00:00:38,560 代碼捲曲之間的界線 牙套,就像拼圖 14 00:00:38,560 --> 00:00:41,190 那放不下的C 永遠阻斷, 15 00:00:41,190 --> 00:00:45,290 將從頂部反复執行 到下,一遍又一遍又一遍, 16 00:00:45,290 --> 00:00:46,085 永遠。 17 00:00:46,085 --> 00:00:48,710 畢竟,如果你還記得我們的 布爾表達式的討論, 18 00:00:48,710 --> 00:00:51,060 真正的總是正確的。 19 00:00:51,060 --> 00:00:53,250 因此,如果我們正在做 東西只要真 20 00:00:53,250 --> 00:00:58,227 是true--似乎有點silly--真 永遠是真實的,所以它會始終運行。 21 00:00:58,227 --> 00:01:00,060 它會永遠運行和 永永遠遠,直到我們 22 00:01:00,060 --> 00:01:02,900 找到一種方法來擺脫它 break語句,這再次, 23 00:01:02,900 --> 00:01:06,350 我們看到前一陣我們 談論開關。 24 00:01:06,350 --> 00:01:08,725 >> 或只是殺死我們 節目,順便說一句, 25 00:01:08,725 --> 00:01:11,110 如果你發現自己在一個 有一個無限循環的情況 26 00:01:11,110 --> 00:01:13,484 你不知道如何停止 你的程序運行。 27 00:01:13,484 --> 00:01:16,527 只要按下控制和C 這會殺了你的計劃,你。 28 00:01:16,527 --> 00:01:18,360 但是,這又是 所謂無限循環。 29 00:01:18,360 --> 00:01:19,818 它是一個將永遠運行一個循環。 30 00:01:19,818 --> 00:01:22,570 31 00:01:22,570 --> 00:01:25,610 現在,while循環不 總是無限的,因為還 32 00:01:25,610 --> 00:01:27,880 我們可以代替布爾 的東西表達 33 00:01:27,880 --> 00:01:29,867 比多一點有用的只是真實的。 34 00:01:29,867 --> 00:01:30,950 因此,這裡是另一個例子。 35 00:01:30,950 --> 00:01:34,600 雖然有些布爾 表達式,然後大括號。 36 00:01:34,600 --> 00:01:38,310 這幾乎是類似的 重複,直到從頭開始。 37 00:01:38,310 --> 00:01:40,700 雖然在第二,我會 解釋這種差異。 38 00:01:40,700 --> 00:01:44,310 >> 因此,在C,如果布爾表達式 while循環內 39 00:01:44,310 --> 00:01:47,980 計算結果為真,行 大括號之間的代碼 40 00:01:47,980 --> 00:01:51,900 會一遍又一遍地重複執行 又一遍,直到布爾表達式 41 00:01:51,900 --> 00:01:55,174 計算結果為false。 42 00:01:55,174 --> 00:01:57,340 因此,例如,你可能 有某種形式的計數器。 43 00:01:57,340 --> 00:02:01,440 所以說,你在開始 這個循環說INT x等於為零。 44 00:02:01,440 --> 00:02:06,370 當x小於100,做一對夫婦 裡面那個大括號的事情, 45 00:02:06,370 --> 00:02:10,570 然後在循環結束時,你說 X加再加,你遞增x。 46 00:02:10,570 --> 00:02:13,360 最終x將得到 100,你會 47 00:02:13,360 --> 00:02:15,760 停止,因為條件 x小於100 48 00:02:15,760 --> 00:02:19,416 將不再是真實的作為 一旦x等於100。 49 00:02:19,416 --> 00:02:21,820 100是不小於100。 50 00:02:21,820 --> 00:02:25,870 >> 現在有點混亂,行為 划痕塊的反轉。 51 00:02:25,870 --> 00:02:29,110 所以要非常小心,如果這是 您的第一個進軍使用循環。 52 00:02:29,110 --> 00:02:33,630 基本上,重複 直到塊划痕 53 00:02:33,630 --> 00:02:35,970 將重複的東西 一遍又一遍又一遍, 54 00:02:35,970 --> 00:02:40,460 直到表達,布爾 在六邊形表達式為true。 55 00:02:40,460 --> 00:02:43,860 因此,它會繼續做 它,直到它是真實的。 56 00:02:43,860 --> 00:02:48,881 同時,while循環 繼續做它,直到它是假的。 57 00:02:48,881 --> 00:02:51,630 所以他們是非常相似的,但 有那麼一點區別只是 58 00:02:51,630 --> 00:02:55,140 要特別為您做出謹慎 你從過渡首次嘗試 59 00:02:55,140 --> 00:02:58,149 刮成C。 60 00:02:58,149 --> 00:03:00,190 接下來的循環方式是 其實很相似。 61 00:03:00,190 --> 00:03:02,860 這就是所謂的do while循環。 62 00:03:02,860 --> 00:03:07,060 這個循環將執行所有的行 曾經的大括號之間的代碼, 63 00:03:07,060 --> 00:03:09,530 然後它會檢查 布爾表達式。 64 00:03:09,530 --> 00:03:11,700 如果布爾表達式 計算結果為true, 65 00:03:11,700 --> 00:03:14,340 它會回去重複 這一過程一遍又一遍 66 00:03:14,340 --> 00:03:17,690 又一遍,直到布爾 表達式的值為false。 67 00:03:17,690 --> 00:03:23,370 所以這個循環,不像while循環,是 保證運行的至少一個時間。 68 00:03:23,370 --> 00:03:26,080 這可能是非常有用的。 69 00:03:26,080 --> 00:03:28,011 >> 最後,我們有一個for循環。 70 00:03:28,011 --> 00:03:30,010 For循環是一種 語法上沒有吸引力 71 00:03:30,010 --> 00:03:32,330 這裡面的很多事情 在這裡,所以我承擔 72 00:03:32,330 --> 00:03:34,640 當我們嘗試和突破這些作品分開。 73 00:03:34,640 --> 00:03:36,810 通常,用例 for循環是你 74 00:03:36,810 --> 00:03:40,136 要重複東西 的時間的特定次數。 75 00:03:40,136 --> 00:03:42,010 在這裡本實施例中, 我有重複塊 76 00:03:42,010 --> 00:03:44,010 從無到有,這是 類似於for循環 77 00:03:44,010 --> 00:03:47,340 在C,重複的東西10倍。 78 00:03:47,340 --> 00:03:49,250 而for循環的 左邊有,這 79 00:03:49,250 --> 00:03:51,410 是一個四循環 會做同樣的事情。 80 00:03:51,410 --> 00:03:52,570 這將去10次。 81 00:03:52,570 --> 00:03:56,720 從零算起,我們 遞增循環的每個通行證。 82 00:03:56,720 --> 00:03:59,220 我們繼續這樣做, 直到i小於10。 83 00:03:59,220 --> 00:04:00,134 >> 所以會發生什麼? 84 00:04:00,134 --> 00:04:01,550 有一大堆的代碼中有。 85 00:04:01,550 --> 00:04:03,424 讓我們打破它 發生了什麼步驟 86 00:04:03,424 --> 00:04:05,684 一步,因為我們通過一個挖掘循環。 87 00:04:05,684 --> 00:04:08,350 發生的第一件事是 計數器變量為中心。 88 00:04:08,350 --> 00:04:11,970 一切到第一左側 分號括號內 89 00:04:11,970 --> 00:04:12,970 被執行。 90 00:04:12,970 --> 00:04:15,180 在這種情況下,我們 他說INT I等於0。 91 00:04:15,180 --> 00:04:18,709 聲明一個叫我新的變量, 該變量是一個整數類型 92 00:04:18,709 --> 00:04:22,570 和我們說裡面的值 該變量將是零。 93 00:04:22,570 --> 00:04:25,480 >> 我們做的第二件事是 我們然後立即評估 94 00:04:25,480 --> 00:04:26,750 布爾表達式。 95 00:04:26,750 --> 00:04:30,100 布爾表達式是在 中間的兩個分號。 96 00:04:30,100 --> 00:04:31,360 餘小於10。 97 00:04:31,360 --> 00:04:32,410 這是真的在這裡,對不對? 98 00:04:32,410 --> 00:04:36,030 我們只是說,我等於 零,所以0小於10, 99 00:04:36,030 --> 00:04:38,040 並使得條件 是真實的,現在我們將 100 00:04:38,040 --> 00:04:40,640 繼續執行該循環體。 101 00:04:40,640 --> 00:04:41,480 如果是假的。 102 00:04:41,480 --> 00:04:46,380 如果,例如,我說,而不是 我等於0那裡,我說我等於15, 103 00:04:46,380 --> 00:04:47,820 INT I等於15。 104 00:04:47,820 --> 00:04:51,450 阱15不小於10,所以我們 會不會進入循環體 105 00:04:51,450 --> 00:04:55,450 因為布爾表達式 將有評價是假的。 106 00:04:55,450 --> 00:04:59,060 >> 之後我們通過自上而下, 我們遇到右大括號, 107 00:04:59,060 --> 00:05:00,830 第三個事情​​發生。 108 00:05:00,830 --> 00:05:03,840 計數器變量 遞增,或者說,該線 109 00:05:03,840 --> 00:05:07,790 的語句代碼之後 的內側第二分號 110 00:05:07,790 --> 00:05:10,500 for循環的括號被執行。 111 00:05:10,500 --> 00:05:13,250 因此,我們開始通過 他說INT I等於0。 112 00:05:13,250 --> 00:05:15,770 然後我們檢查是否不 布爾表達式為true。 113 00:05:15,770 --> 00:05:17,469 0小於10所以這是真的。 114 00:05:17,469 --> 00:05:19,510 因此,我們將繼續 入體循環。 115 00:05:19,510 --> 00:05:22,676 事情會發生在循環裡面, 當我們遇到右大 116 00:05:22,676 --> 00:05:25,660 梅開二度,接下來的事情我們 做的是我們說我加分,加分。 117 00:05:25,660 --> 00:05:28,860 我是零,現在我是其中之一。 118 00:05:28,860 --> 00:05:33,100 然後,我們再檢查的價值 布爾表達式在中間。 119 00:05:33,100 --> 00:05:34,900 一小於10。 120 00:05:34,900 --> 00:05:38,325 因此,我們將通過這種 一次又一次的處理。 121 00:05:38,325 --> 00:05:40,590 我們會得到閉幕 大括號了。 122 00:05:40,590 --> 00:05:44,090 我們會增加我的 1至2,從2至3。 123 00:05:44,090 --> 00:05:48,290 等等等等等等,直到 最後,我的價值變成10。 124 00:05:48,290 --> 00:05:49,950 比10小10? 125 00:05:49,950 --> 00:05:51,200 第 126 00:05:51,200 --> 00:05:53,800 從0開始計數,我們已經走了 經過10次迭代循環。 127 00:05:53,800 --> 00:05:57,204 我們已經重複10次,只是 就像我們在划痕塊。 128 00:05:57,204 --> 00:05:59,370 所以這基本上是 過程中產生的四環路。 129 00:05:59,370 --> 00:06:01,630 >> 現在收走了 實際的代碼,並把它 130 00:06:01,630 --> 00:06:05,120 在短短的一些基本的一般性發言。 131 00:06:05,120 --> 00:06:06,550 這裡會發生什麼。 132 00:06:06,550 --> 00:06:09,290 所有的發言 先開始執行。 133 00:06:09,290 --> 00:06:11,260 你可能有不止一個。 134 00:06:11,260 --> 00:06:13,440 然後,布爾表達式進行檢查。 135 00:06:13,440 --> 00:06:17,850 如果表達式的值為true, 執行主體的循環一次。 136 00:06:17,850 --> 00:06:21,060 如果表達式的計算 為假,我們就大功告成了。 137 00:06:21,060 --> 00:06:23,040 我們不執行 體循環可言。 138 00:06:23,040 --> 00:06:25,530 我們已經執行後, 體循環一次, 139 00:06:25,530 --> 00:06:29,487 然後,我們做的是什麼 增量部分出現。 140 00:06:29,487 --> 00:06:31,820 這通常將是 像我加分,加 141 00:06:31,820 --> 00:06:34,510 或者類似的東西,那 修改計數器變量。 142 00:06:34,510 --> 00:06:37,390 然後,當我們增加,我們 再次檢查表達 143 00:06:37,390 --> 00:06:41,120 並且一遍又一遍地重複這些步驟 又一遍,直到表達式 144 00:06:41,120 --> 00:06:42,890 不再是真實的。 145 00:06:42,890 --> 00:06:44,469 >> 那麼,什麼是用例為一個循環? 146 00:06:44,469 --> 00:06:46,760 使用您使用whil​​e循環時, 你想有一個循環重複 147 00:06:46,760 --> 00:06:51,200 一個未知的次數,但 它可能可能無法運行所有。 148 00:06:51,200 --> 00:06:53,940 一個真正常見的例子 正在使用,而循環 149 00:06:53,940 --> 00:06:56,480 是運行一個遊戲的控制流程。 150 00:06:56,480 --> 00:06:59,040 你可能不知道多久 用戶將被播放, 151 00:06:59,040 --> 00:07:01,440 但你要保持 做同樣的事情。 152 00:07:01,440 --> 00:07:04,970 更新的位置 各種精靈在黑板上。 153 00:07:04,970 --> 00:07:07,490 你要保持事物 在任何時候移動, 154 00:07:07,490 --> 00:07:09,110 但你不知道什麼時候 用戶要停止播放 155 00:07:09,110 --> 00:07:10,450 或者當他們要去 用完的生命。 156 00:07:10,450 --> 00:07:12,741 因此,while循環是真的 良好的類似的東西。 157 00:07:12,741 --> 00:07:14,130 這是一個很好的用例。 158 00:07:14,130 --> 00:07:16,230 >> 對於一個do while循環, 這是非常相似的。 159 00:07:16,230 --> 00:07:19,746 你想要一個循環重複未知 次數,但至少一次。 160 00:07:19,746 --> 00:07:22,370 您可以使用它來遊戲 太多,但一個真正的常見用例 161 00:07:22,370 --> 00:07:24,420 是提示用戶輸入。 162 00:07:24,420 --> 00:07:28,609 通常情況下,你可能會說些什麼 喜歡,給我一個正整數, 163 00:07:28,609 --> 00:07:30,650 你可能把那個 裡面的do while循環。 164 00:07:30,650 --> 00:07:33,900 因此,它總是會問他們在 至少一次為一個正整數。 165 00:07:33,900 --> 00:07:36,850 如果他們給你一個正整數, 你可能會打破循環。 166 00:07:36,850 --> 00:07:37,599 你可能會做。 167 00:07:37,599 --> 00:07:39,900 布爾表達式 在做,而可能是假的。 168 00:07:39,900 --> 00:07:41,137 >> 你會不會再問問他們。 169 00:07:41,137 --> 00:07:44,470 如果他們給你一個負數,其中 他們鍵入一些文字或東西是 170 00:07:44,470 --> 00:07:46,630 不是真的有用 你,你可能會使用 171 00:07:46,630 --> 00:07:49,770 do while循環回去做 一遍又一遍。 172 00:07:49,770 --> 00:07:52,410 你肯定要問 他們給你一個數字一次, 173 00:07:52,410 --> 00:07:56,350 但你不知道多少倍 在那之後他們可能是害蟲。 174 00:07:56,350 --> 00:08:00,540 所以,一個做,而這是一個偉大的使用 情況下,用於提示用戶輸入。 175 00:08:00,540 --> 00:08:03,060 而一個for循環使用 通常情況是,當 176 00:08:03,060 --> 00:08:06,230 要重複循環 離散的次數, 177 00:08:06,230 --> 00:08:08,230 雖然你可能不 知道的次數 178 00:08:08,230 --> 00:08:10,040 此刻程序編譯。 179 00:08:10,040 --> 00:08:15,510 >> 因此,例如,也許你有一個程序 在那裡你提示輸入數字的用戶。 180 00:08:15,510 --> 00:08:17,660 他們進入100。 181 00:08:17,660 --> 00:08:20,510 然後,你的循環將 在這種情況下,運行100次。 182 00:08:20,510 --> 00:08:22,480 或者,也許他們進入 1000在你的程序 183 00:08:22,480 --> 00:08:24,570 然後運行循環1000次。 184 00:08:24,570 --> 00:08:26,987 它的特定次數。 185 00:08:26,987 --> 00:08:28,820 他們不一定 知道這是什麼號碼 186 00:08:28,820 --> 00:08:31,010 是編譯時刻程序。 187 00:08:31,010 --> 00:08:35,010 它不象while循環 它可能是無限的。 188 00:08:35,010 --> 00:08:37,127 這是相當一些 你只是不知道。 189 00:08:37,127 --> 00:08:39,210 現在,即使我 列出所有這些用例, 190 00:08:39,210 --> 00:08:41,501 你應該知道,在相當 每很多情況下, 191 00:08:41,501 --> 00:08:44,110 你可以交換所有 這三個循環。 192 00:08:44,110 --> 00:08:46,890 您可以使用一個for循環,你 否則將使用whil​​e循環。 193 00:08:46,890 --> 00:08:49,860 您可以使用一個for循環的地方 你會使用一個do while循環等。 194 00:08:49,860 --> 00:08:53,680 它可以是一個有點棘手,有時, 所以一般這是一個很好的做法 195 00:08:53,680 --> 00:08:55,140 堅持一個典型的用例。 196 00:08:55,140 --> 00:08:57,599 使用do while循環,如果你 想要的東西一次,至少。 197 00:08:57,599 --> 00:09:00,514 如果你想要做的使用for循環 東西的特定次數。 198 00:09:00,514 --> 00:09:03,730 畢竟,這就是為什麼有 三種不同類型的循環。 199 00:09:03,730 --> 00:09:06,172 >> 因此,他們可以使用 在正確的範圍內。 200 00:09:06,172 --> 00:09:07,880 但是你可以互換 他們,如果你想要的。 201 00:09:07,880 --> 00:09:10,790 如果你覺得舒服,而循環 而你總是想使用whil​​e循環。 202 00:09:10,790 --> 00:09:12,623 這是一些 你可以這樣做,但它 203 00:09:12,623 --> 00:09:15,590 可能有點語法 棘手的,其中一個for循環 204 00:09:15,590 --> 00:09:17,850 將是一個簡單得多。 205 00:09:17,850 --> 00:09:21,100 >> 我的名字是道格·勞埃德,這是CS50。 206 00:09:21,100 --> 00:09:22,688