>> [音樂播放]
DAVID馬蘭：大家好。
這是CS50的超部分。
分配的部分將不 開始一個星期。
所以今天，我在這裡with--
>> 瑪麗亞：瑪麗亞。
DAVID馬蘭：--to實際 看看問題
設置之一，課程的 第一週的材料，
讓你用面向CS50 IDE，有點 的Linux，操作系統那的
上IDE中運行，以及 看看一些過渡
從零開始到C領先 長達問題集之一。
>> 因此，事不宜遲， 在問題集中的一個，
你會是 推出CS50 IDE，它
這是基於網絡的節目 我們為了使用環境而定
寫程序。
它的設計看起來非常 讓人聯想到典型的計算機
運行的操作系統 系統稱為Linux。
但是，它在所謂的雲， 這意味著每個人都在類
其實可以有他或她的 自己的帳戶，並使用它，以及。
>> 因此，大多數人可能從未使用過 之前或者Linux環境
甚至一個命令行環境。
和命令行 環境是不同的。
它的所有文字。
它的所有鍵盤命令。
而且它沒有鼠標移動，沒有圖標， 沒有對話窗口，沒有菜單。
這是純粹的文字。
所以剛開始，它種 的感覺就像一個步
向後複雜的條款。
但它最終被很多 功能更強大，當然，
對於計算機科學家，最終。
>> 因此，讓我們一起來看看。
在這裡，我在CS50.io，通過這 您可以登錄到CS50 IDE。
而就像在刮，有 三個主要方面來此屏幕。
等的左手側，我們有 會是怎樣的文件瀏覽器。
還有的這個文件夾中 頂，這是正確的，現在空
因為我擺脫我所有的 超部分之前的文件。
而這也正是我們將 保存我們寫的C文件。
在右上角，我們有一個地方， 我們所有的代碼會得到寫入。
事實上，如果我點擊這個加號，這 是打算讓我選擇新建文件。
在這裡，我可以開始寫C代碼，或者， 確實，任何數量的其他語言。
>> 然後在底部的地方 說jharvard @ ide50--和你的將
說的東西有點 different--什麼這個叫什麼？
終端窗口。
是啊。
因此，終端窗口 所謂的命令行
接口，通過它，你可以進行交互 與底層操作系統。
而現在，我們要 讓很少使用this--的
只是編譯，看看 我們看到錯誤消息，
並運行我們的程序。
但最終，我們將 這樣做的多，以及。
你甚至可以安裝軟件 和管理您的工作空間
CS50在IDE中，也是如此。
但更多的是一些其他的時間。
>> 因此，讓我們繼續前進，寫 一個非常簡單的程序只是
經過一個熱身 hello.c的，這也許就是
我們可以寫出簡單的程序。
我已經打開了一個新的標籤。
我要繼續前進， 說包括標準io.h.
然後，詮釋的主要（無效）。
然後的printf（“你好，世界” 反斜杠N，密切報價，
關閉括號和分號。
>> 好吧。
所以，現在發現我的窗口沒有標題。
所以，我很快會 上去文件，保存。
而且它是非常重要的 我把這種不是“你好”。
所以有一個非常常見的錯誤， 尤其是在問題的設置之一，
是意外只是打電話給你 節目“水”和“貪婪”和“馬里奧”
或“信用”等。
但是，你真的想使 確保您有文件擴展名
因為這是唯一的方式， 編譯器和還代碼編輯器
知道你 實際上編寫C代碼。
因此，讓我繼續前進，然後點擊保存。
>> 現在也一樣，什麼CS50 IDE 已經為我們做的這也是
語法高亮一切。
因此，它是由一切非常豐富多彩。
而整個目的 不能正常工作。
這只是吸引我的目光投向 在概念上不同的部分
這個方案的。
因此，讓我們繼續前進，編譯這個。
我可以編譯此 在幾個方面。
並且在一個星期的 老派的方式，我們做了
這是字面上的 命令line--“鐺hello.c的。”
然後，我敲回車。
而且似乎什麼都沒有發生 在終端窗口。
但沒有改變的IDE？
其中，再次，IDE只是手段 集成開發環境。
它是說一個奇特的方式 這個集成開發
環境，用於開發軟件。
那麼，在UI沒有變化？
你有沒有注意到什麼 這是不同的，瑪麗亞？
>> 瑪麗亞：我發現了一些 在IDE50夾在這裡。
>> DAVID馬蘭：是的。
所以在這裡，不僅 我們是否有“hello.c的。”
我們也有“的a.out”，這是 樣一個程序一個愚蠢的名字。
不過說實在的，這是一個默認的名字 當你只是編譯代碼的程序
不要告訴編譯器 什麼樣的文件輸出。
所以，如果我要運行這個，我 需要告訴compiler--
或者說，我需要 告訴工作區，我
要運行調用的程序“的a.out。”
輸入。
還有的“你好， 世界“。現在的”./“。
其實是很重要的。
雖然通常我們只 寫的命令的名稱，
當它是你已經計劃 寫的，你要說“./”
因為這明確地告訴Linux 要運行一個名為程序
“a.out的”這是在這一點，在那裡點 意味著這個目錄是我目前
中，這恰好是 所謂的工作空間，“a.out的。
因為如果我只是說：“a.out中，”回車， 我要得到“a.out的命令不
找到“因為computer-- 因為我發明了“a.out的;”
它沒有附帶computer-- 不知道去哪裡找它，
即使它是正確的 在我的鼻子，可以這麼說。
好。
所以，我們可以改變這 是“鐺鄰打招呼hello.c的。”
如果我敲回車，什麼程序 這是怎麼回事輸出給我嗎？
什麼是文件的名稱？
是啊，在後面。
那就對了。 “您好。”
因此，“你好”將是 節目的名稱
因為我們使用了所謂的 命令行參數，這僅僅是
改變的行為的一種方式 編譯器實際輸出
特定的文件名。
事實上，如果我放大 並尋找在這裡，
現在我不僅是“的a.out”和 “hello.c的”，而且“你好”，以及。
所以，現在我可以做“./hello，”回車。
還有的“你好，世界”。
但lastly--這 現在將公約
我們在整個使用 學期，typically--
是你也可以只是說“讓你好。”
事實上，它說這完全取決於 迄今為止，因為它已經存在。
讓我繼續前進，撈出，用 rm命令，這兩個“的a.out” -
並說“刪除普通文件a.out的？”
這只是意味著，你 確定要刪除嗎？
我會說是的。
然後，我會刪除 “你好”，而不是“hello.c的。”
我會說“是”明確， 但“y”為足夠，以及。
>> 如果現在通知我 鍵入ls--其中，召回，
意味著列表中 - 它列出了所有 在我的文件夾中的文件。
事實上，如果我放大 出去看左上角，
它證實了什麼 此文件夾中，甚至
雖然它在這裡標註為IDE50 而不是工作空間，它只是“hello.c的。”
所以，現在在這兒，如果我 執行“make你好”，回車，
現在我看到一個更長的命令，但一 那將會更複雜的命令
將在今後數週內有用。
現在我可以說“./hello。”
>> 因此，讓我們快速瀏覽 一些其他的Linux命令。
那麼我們為什麼不採取一步 回來居然看C的具體
一般，從頭開始轉變 到C，然後總結了一下
在第一個問題 在C設置的所有權利。
所以我要繼續前進，只是乾淨 我的工作區控制-L剛
保持屏幕整潔。
但是，沒有功能 影響並非如此。
>> 回想一下，我們已經看到 一些命令了。
因此，我們已經看到了鏗鏘，通常你 不必手動執行了。
我們將改用化妝。
但是，我們也看到了LS，它顯示了 在我的目錄中的文件清單。
現在為什麼那裡 - 有兩家 現在的文件，“你好”和“hello.c的。”
為什麼會出現一個明星或 之後，“你好”星號？
那是什麼表示，基於 對我們在每週一看見？
你怎麼看？
什麼是星意味著什麼？
>> 瑪麗亞：For--節目“你好”？
DAVID馬蘭：“你好*”。
是啊。
哦耶？
哦，可執行。
那就對了。
這樣就意味著 “你好”是可執行的。
因此，我們確實，這就是為什麼 我能做到“./hello。”
好吧。
所以，還有什麼我可以做嗎？
嗯，事實證明，我可以 還創建目錄。
因此，讓我繼續前進，創造， 例如，一個“PSET1”目錄中。
而問題集規範 可以讓你做的正是這一點，
所以你不必今天記住。
但“MKDIR PSET1”似乎 到沒有影響。
但同樣，沒有錯誤信息 通常是一件好事。
所以，如果我輸入“LS”now--啊，現在 我有一個名為可執行文件
“你好，”一個C文件名為“hello.c的。”
然後是斜線，所以 講，意味著這是一個目錄。
>> 因此，我們確實，現在我要打開它。
我不雙擊它像 在圖形用戶界面，圖形環境。
我不是說“CD PSET1。”
輸入。
沒有什麼有趣的似乎有 除非發生了我的小提示
這裡 - 這是提醒Linux的方法 我我在哪裡，所以哪個文件夾打開。
這只是明確地告訴我， 相對於圖形。
如果我鍵入“ls”，為什麼我看到另 立刻提示，你認為，
當我列出PSET1的內容是什麼？
瑪麗亞：你可能不 在有什麼。
DAVID馬蘭：是的。
然後我們還沒有明顯 在那裡創造了什麼
因為我剛剛創建的目錄中。
現在，如果我想創建一個file--為 例如，我可以創建一個新的文件。
然後我會去 保存並保存為，
像“mario.c”如果你正在做 PSET的一個標準版本。
然後，像任何Mac或PC，只 選擇文件夾“PSET1，保存。
而現在的文件是空的。
但是，讓我們再次放大一秒鐘。
讓我們在這裡做的LS。
現在我們看到的“mario.c”。
>> 因此，有一些其他的命令 值得記住了時間 -
清除或控制-L是我所 被擊中; MKDIR我們已經看到了;
RM我們所看到的，還有，這是 去除或刪除文件。
當心你可以also--，如果你看看 在網上的教程，你將RM -rf
是說一個很常見的方式 刪除有東西在它的文件夾。
只要是超級，超級小心。
-rf意味著遞歸 刪除不管它是什麼
你想刪除 並強行將其刪除。
這樣循環的手段，如果它是一個文件夾 與文件夾的文件夾的文件夾，
刪除所有的人。
並強行手段甚至不 問我是或不是，我是肯定？
所以這是一個超級危險方法 刪除很多東西很快。
但beware--往往做一個勇敢的 學生意外刪除，也就是說，PSET
1，例如。
>> 瑪麗亞：如果他們只是 做-r，他們會
問他們的每一個文件。
>> DAVID馬蘭：這是 適度煩人。
>> 瑪麗亞：是的。
>> DAVID馬蘭：所以這就是為什麼 我們這麼多人，自包含，
我在使用-rf的習慣。
但它是危險的。
因此，買家當心。
然後，MV是怎麼樣的 有趣的命名。
因此，這是移動命令， 這感覺有點怪異
因為你的確可以用它來 從一個地方移動到另一個文件。
舉例來說，假設我搞砸了。
假設我創建 一個新的文件處理器集。
我將它保存為“greedy.c。”
但是假設我不小心將它保存 在IDE50--所以在我區本身
而不是在PSET1。
>> 你可以看到盡可能多的左上方。
有“greedy.c。”
還有的幾個解決方案。
所以一個，我可以使用 超級用戶友好的方式
只是拖放。
而這實際上 解決這個問題。
但是今天，我們想看看 更神秘而強大的方式
對這樣做。
因此，讓我走“LS”的PSET1。
而我只看到“mario.c。”
讓我繼續前進，做“CD ..”。
所以CD再次改變目錄。
“”是指什麼有關係嗎？
上次我說：“CD PSET1“進入PSET1。
所以當我說“CD ..”，我在做什麼？
向後。
是啊。
>> 因此，這將所謂的父母。
進入上一層，像 退出了一個文件夾中。
所以輸入。
事實上，看看它的所作所為。
這讓我感動剛剛進入工作區，而不是 成PSET1，這是在工作區中。
而現在，如果我輸入“LS” 有一大堆的東西。
在有“greedy.c”。
所以，現在讓我用MV來字面上 移動“greedy.c”到PSET1。
所以很多Li​​nux命令 工作完全是這樣。
他們沒有參數或者他們需要一 參數或他們採取兩個命令行
參數等等。
在這種情況下，它的 從字面上做什麼
它說，儘管succinctly-- 移動greedy.c到PSET1。
輸入。
好像沒有什麼改變。
但是，如果我再次做了LS，貪走了。
如果我做“CD PSET1”，回車，然後 LS再次，現在是在正確的地方。
順便說一句，如果 一些reason--特別是
如果你有間歇性 網絡連接
或者你走動 校園裡與你的筆記本電腦的蓋子
關閉，然後打開它 再次和您的工作空間
似乎有點不同步，沒有什麼大不了的。
只需重新加載瀏覽器 窗口，它應
重新同步，以使左側 文件瀏覽器看上去完全
如終端窗口。
不用擔心。
如果有疑問，重新載入頁面，所以 只要你已經保存的文件。
好。
因此MV也可用於重命名文件。
讓我們來看看 在這份最後的命令。
所以suppose--並且這是 超級常見的，也很早。
有些學生偶爾創建一個文件 所謂的，讓我們say--什麼別的？
像“WATER.C。”
所以，我就吆喝，為 沒有任何理由，全部大寫。
但是這不是 正確的文件名，
如果僅僅是因為我們的問題集 規範沒有告訴你
將文件保存為全部大寫“WATER.C。”
相反，我們預計 小寫的“water.c”。
而且，事實上，這是 問題的，因為check50，
你要去一個程序 在的問題，以滿足
設置一個自動測試 你的代碼的正確性
是要罵你，如果它不能 發現在所有的小寫字母“water.c”。
>> 所以我需要解決這個問題。
因此，許多不同的方式來 做到這一點，其中第一個
需要控制或右鍵單擊 文件名，只需要改變重命名。
完全好這樣做。
但同樣，今天，讓我們 做一個小票友。
讓我們用MV來改變 “WATER.C”到“water.c”。
所以，你還可以用第一個參數 將其重命名為第二個參數
如果第二個參數是不是在 事實上，文件夾或目錄名。
>> 好吧。
最後，一點點trick--所以我在 此刻我的工作區目錄。
如果我想進入PSET之一， 我當然可以鍵入“cd PSET1。”
但它是如此繁瑣的輸入“PSET1”或 長文件名或目錄名
仍然。
所以，很多時候在Linux中，有什麼 你能做的就是開始輸入“PSE”
和剛剛獲得無聊，打標籤，並讓 計算機數字出來給你。
超級有助於進入這個習慣。
唯一的缺點是，如果你有 啟動多個文件或文件夾
以字母“P”或 “PS”，你可能有
鍵入前幾個 電腦知道該怎麼做。
>> 瑪麗亞：我們喜歡的快捷鍵。
>> DAVID馬蘭：這將 為您節省了很多時間。
而且，正如我們所說的講座，你 可以在歷史上滾動，上下，
找最近執行 命令，以及。
好吧。
所以，現在，讓我們把注意力轉回 以一個簡單的程序，你好世界。
因此，我們完全編譯這一點。
而現在，我們為什麼不拿 看看數據類型
然後從一些過渡 相應的划痕塊C.
瑪麗亞：真棒。
所以，現在你已經開始 C語言編寫程序，
我們將開始討論 有關數據類型和變量。
因此，某些數據類型，你 想知道從現在開始
是那些是 以藍色突出顯示。
因此，我們有INT第一， 它代表的整數。
而持有整數，因為你 可能具有guessed--所以1，2，3，
和任何其它整數 你能想到的。
>> DAVID馬蘭：而且也不利。
>> 瑪麗亞：而且還消極的，是的。
和0。
然後我們有花車，其中 是浮點數。
所以這是所有的實數 有小數點。
所以5.0，5.2，並且甚至更 小數點後的數字，
同時，也是消極的。
然後我們有焦炭這是一個字符。
因此，我認為我們談論 這在今天的講座。
但是，我們有字母，example-- A， 乙，C--可以存儲作為char。
但是，我們有更多的符號 可以存儲為char。
而這些被存儲為ASCII。
>> 然後我們有布爾， 這是布爾值。
而那些評估為True或 假或1和0。
DAVID馬蘭：重溫使 布爾來自CS50庫。
所以，它沒有內置到 C，但它的超級有用
以具有真假的概念。
而且即使你 可能think--有趣的事實。
布爾技術上需要多少位， 確實，表示真與假？
多少位，你認為 你需要，最大限度地？
是啊，只有一個。
所以，事實證明，Ç 不能給你只是一個位。
度量的最小單位 你可以為8。
所以這是一個有點浪費他們你 使用中的整個字節或八個比特，
代表真或假。
但是，這只是它的方式 由CS50庫中實現C語言。
瑪麗亞：然後那些我們 不是要談論的廣泛
右now--雙， 這是更大的浮動。
龍多空 還可用於整數。
DAVID馬蘭：的確。
在PSET一個黑客版， 我們實際使用很長很長。
但對於標準版， 它不應該是必要的。
瑪麗亞：酷。
好。
所以operators--你應該 可能熟悉其中的大多數。
此外，+;減法， - 。
對於乘法，我們有*。
所以不是在X，我們平時使用。
事業部，我們有反斜杠。
和模是我們最後的運算符 我們要談論現在。
這是一個運營商，使我們能夠 拿一個除法的餘數。
因此，如果我們有4％2，4分 由圖2是2用的0剩餘部分。
所以4％2為0。
4％3是1。
4％，5 4，你可能已經猜到了。
請記住，當使用所有這些 經營者利用PEMDAS規則。
>> DAVID馬蘭：所以要清楚，如果你 做4％2，為什麼是0，到底是什麼？
>> 瑪麗亞：因為4除以 圖2是2用的0剩餘部分。
因此，模給我們，剩下的作為 反對分裂的結果。
DAVID馬蘭：事實上， 我們會發現這是很有幫助的
為是，在一些問題 這並不一定是，
如果你想擁有 限制自己的作用
一個數字範圍 像0到的東西，
您可以使用模環繞 早於像2十億
或四十億值 我們已經談到了講座。
>> 瑪麗亞：是的。
即使在“貪婪”我們可能。
DAVID馬蘭：是的，在 問題集之一，也是如此。
瑪麗亞：是的，不錯。
DAVID馬蘭：好的暗示。
瑪麗亞：對不起。
布爾expressions--所以 布爾型的操作，
我們要談的所有 這些是你在這裡看到。
所以現在，我們有兩個 等號列出的平等。
因此，這些都是進行比較。
到目前為止，我們只看過一等號。
這時候，我們分配 一個值的變量。
因此，如果我們已經看到INT N = 5，則 我們給5到變量n。
但是，如果我們想用==進行 相比之下，我們可以檢查如果n == 5。
而如果n == 5，那麼這是真的。
>> 所以布爾運算符 讓我們，基本上，
評估布爾 表達式為真或假。
所以沒有equals--我們有 感嘆號和equals。
因此，我們也可以查看如果n 不等於5--因此n！= 5。
小於，小於或等於， 大於，大於或等於，
然後我們有邏輯 與和邏輯或。
而那些讓我們能夠評估 多個布爾表達式一起
基本上走到一起 一個完整的布爾表達式。
因此，如果我們想找到一個號碼，說： 大於5但小於15
與此同時，我們將​​使用 邏輯AND運算，以查看是否n是
大於5 &&Ñ小於15。
DAVID馬蘭：在這裡， 同樣，它真的很容易
早早就意外 只使用一個單一的符號
或單豎線。
並希望編譯器會 罵你，因為他們實際上
具有非常不同的含義。
對於那些好奇，他們是 用於位運算，
操作上的各個位。
但是，你想對他們在這裡。
和超級重要的是， 第一個，等號，
這是運營商的平等作為 反對賦值運算符。
>> 瑪麗亞：與豎線 位於刪除和收益之間。
DAVID馬蘭：是的。
在一個典型的美式鍵盤。
>> 瑪麗亞：是的。
因此，讓我們直接進入 條件語句。
在刮，你 已經看到，大概，
if語句，讓您 檢查如果事情是真的，那麼
做別的事情。
所以，你可能會想 檢查你的精靈是
接觸一些其他的精靈 或者你的屏幕邊框。
然後你可能會想 結束遊戲或做其他事。
這樣的語法說 是“如果（條件）。”
所以，如果你的精靈是感人的東西， 然後要做的就是花括號內。
>> 然後我們有if-else語句。
否則讓我們做一些事情 如果條件我們
在開始時檢查是不正確的。
因此，如果精靈的觸摸 邊境做到這一點，否則做其他的事情。
因此，否則做別的事情。
然後我們有一個簡單的例子這一點。
因此，如果（military_time <12），我們 想給printf“早上好！”
否則我們將 printf的“晚上好！”
基本的例子。
>> DAVID馬蘭：好。
>> 瑪麗亞：酷。
所以現在我們有switch語句。
交換機一般都能發言 讓我們做了很多同樣的事情
我們剛才講 有關使用if語句。
例如，現在我們有 switch語句的一般形式
這使我們能夠 一個變量調用ñ
並比較了很多 不同的值，在這裡我們
呼籲CONSTANT1，CONSTANT2。
我們可能有更多的。
而那些被稱為案件。
>> 因此，如果我們有一個開關 statement--這個作品
僅用於integers--我們有一個 變量在這種情況下n值。
如果變量n是 等於CONSTANT1，我們
將執行一些代碼段 或者說，我們想要做的事情。
然後我們將打破。
因此，突破意味著， switch語句
將停止，如果執行 n等於CONSTANT1，
然後你的程序將繼續進行。
這將退出的出 switch語句，它會
繼續做別的事情。
>> 然而，如果n不等於 CONSTANT1，然後案例CONSTANT2
將被檢查。
因此，如果n等於CONSTANT2，其他 的代碼段會被執行。
然後它會打破 如果這是等於它。
然後我們就可以有also--不 不一定，though--默認的情況下，
如果n不等於將發生 任何你所列舉的案例。
與在默認的情況下，我們還 不需要休息不一定
因為switch語句就知道了 它需要的默認後結束
情況下，如果是這樣的話。
>> DAVID馬蘭：但在風格上， 我們始終把它放在那裡。
>> 瑪麗亞：是的。
>> DAVID馬蘭：是的。
因此，特別是在開始的時候了， 尤其是在那些較少
舒服，我會親自 只是建議堅持與IFS
和IFS-別人的和的if-else-IF-別人的 等等，如果僅
因為他們是一個小 更直接。
這是一個很好的優化，或者 有時甚至是美學上它
使得代碼更易讀。
而事實上，可能 期中，我們將看到一個問題
設置它只是看起來更好 並且更容易閱讀的人
通過使用switch語句。
不過不要擔心 執著於這個為時尚早。
>> 瑪麗亞：是的。
如果你有if語句很多， 它可能只是不是很可讀。
它可能不是非常快 讓你通過它。
所以，sw​​itch語句可以 是非常有用的，也是如此。
而且，不要remember--不 忘了把休息時間在那裡。
>> DAVID馬蘭：不記得這一點。
>> 瑪麗亞：因為這樣你可能會下降 通過從一個案件到另一個。
所以我們可以說這種情況下CONSTANT1 沒有一個break語句在裡面。
然後，我們可能告吹 裡面的情況CONSTANT2。
同時，我們也不想這樣做，如果 我們已經達到的情況下CONSTANT1
它是等於n。
>> 因此，例如，如果我們有一個可變 n表示包含一個類號，
我們希望看到什麼 如果n等於50級的is--，
我們要打印“CS50是 計算機科學導論一。“
然後，我們要打破。
就是這樣。
然而，如果n等於 51，我們將
打印“CS51是介紹 計算機科學II“。
然後，再次，我們要打破。
但是，如果那麼我們就把124，61，任何 你可能會想其他的號碼，
或程序是不會 認識到這一點。
因此，它會說，“對不起，我 不熟悉的類。“
而這將打破。
DAVID馬蘭：所以你真的可以看到 中頻，否則的話，其他人的想法在這裡。
這只是不同的語法 表達完全相同的想法。
>> 瑪麗亞：沒錯。
現在，我們有我們的三元運營商。
因此，三元運營商 3 parts--的條件，
事做，如果 該條件是真的，
然後事做 如果該條件為假。
所以你看，基本上， 的是，這裡的語法。
我們有問號， 那麼the--我們怎麼叫呢？
DAVID馬蘭：結腸。
瑪麗亞：結腸。
謝謝。
抱歉。
因此，讓我們來看看我們的榜樣 看看我們是否可以this--感
class_num == 50。
所以在這裡，我們看到我們的布爾運算符== 用於比較變量class_num
50。
所以class_num存儲的整數。
如果該整數 等於50，那麼我們
將存儲“大衛·馬蘭” 裡面的字符串教授。
如果班級人數不 等於50，“不是大衛·馬蘭”
將是教授。
>> DAVID馬蘭：謝謝。
因此這似乎相當於 什麼，你會說，乍一看？
>> 瑪麗亞：對我來說，似乎 像if-else語句。
>> DAVID馬蘭：是的。
而事實上，這是一種 一個漂亮的單行的，
可以這麼說，對於實施 究竟邏輯的if-else
但這樣做的一切一步到位。
>> 瑪麗亞：沒錯。
是啊。
所以if-else語句可能 佔用了大量的空間。
他們可能是太長時間 一些簡單不過的了。
因此，這可以是非常 簡潔，非常漂亮。
所以，現在我們正在進入觀察 一次又一次地執行一些東西，
所以檢查的 條件多次
然後繼續做一些事情 而條件為真。
因此，這給我們帶來了 很好地進入while循環。
>> 到左側，我們有 我們的第一個while循環。
因此，雖然事情是真的， 一次又一次地做一些事情。
所以一定要注意，我們的 條件這裡在頂部驗證。
而我們的我們稱之為第二loop-- 這一個做，而loop--我們做一些事情，
然後我們檢查的條件。
如果該條件 仍然是真實的，
我們再回去做的事。
這樣的主要區別是，其中 該條件檢查。
以及碼可能永遠 執行如果條件不
真正的while循環。
而隨做，而 循環，我們有碼
即至少要執行一次。
然後，當條件 仍然是真實的，
我們可以回去裡面再次重複。
那麼，為什麼你認為我們會用 一個do-whil​​e循環在while循環？
對。
因此，如果我們想提示的 用戶對某種類型的輸入，
如果我們要問他們 輸入他們的姓名，
我們希望至少讓他們一次。
如果他們確實進入 這個名字，我們不
又要問他們 因為我們已經知道了。
但是如果它們不進入 他們的姓名，或如果他們
進入東西是 顯然不是一個名字，
我們還是要繼續 要求他們對自己的名字。
>> DAVID馬蘭：而在演講中，我們有一個 像這樣的得到正INT
例如，那裡什麼也沒有到 首先檢查一下，因為你甚至還沒有
得到一個int。
所以我們想要做的this-- 您可以通過user--一個int
然後檢查一下，也許， 一遍又一遍又一遍。
>> 瑪麗亞：沒錯。
對於loops--確定。
For循環可以讓我們做的差不多 同樣的事情，也是如此。
它實際上是完全一樣的東西。
因此，有沒有什麼 您可以為循環做
你將無法 做while循環。
但對於循環可能看起來有點 更多的複雜語法
因為它們具有 三個部分裡面有什麼
是以前只是 條件與while循環。
因此，第一個部分，你的大海， 最左邊的，我們有“INT矮人= 0”。
因此，這是我們 初始化我們的變量。
>> 然後我們有一個分號 和“矮人<7”。
因此，這是出 條件實際上是。
所以，這就是我們將有 把剛剛在同時loop--
“而矮人<7”。
這裡，雲在 中間我們的for循環。
因此，“dwaves <7”。
然後，我們的最後一部分是“矮人++” 這就是我們更新我們的變量。
所以，最重要的事情 要知道的是，這
是要通過這個循環 七次並執行七次。
因此，我們有七個 矮人，和他們都
會說，“我在這裡 幫你，白雪公主“
因為他們已經準備好 幫助白雪公主。
>> 隨著while循環，我們會做 初始化和更新
滿足條件內，再次，但 之前或while循環中
確保we--因為 我們總是需要的部分。
因此，為了確保我們有 他們，我們會一直還增加他們
上，只是沒有在括號內。
>> DAVID馬蘭：所以它看起來like-- 在講座中，例如，
我幾乎總是使用一樣，我和 n和很無聊的變量。
它看起來像您可以使用更多 巧妙地命名變量了。
>> 瑪麗亞：是的，它實際上是非常好的 使用多一點的描述變量
因為特別是如果別人是 讀你的代碼 - 也許你是平地機
或者如果你合作 與somebody--
你要確保他們 了解你在做什麼。
>> 好。
因此，這是一件很funky-- for循環內的for循環。
我不知道，如果我們之前已經看到了這一點。
可能不會。
但是，我們其實可以有this-- 如此循環，而不是循環。
所以想也許走沒有人 我穿過這是怎麼回事嗎？
DAVID馬蘭：我要一刺。
瑪麗亞：酷。
DAVID馬蘭：OK。
因此，spoiler--我們要打印的東西 這是在底部右下角
那裡。
>> 瑪麗亞：對。
是啊。
>> DAVID馬蘭：所以我們剛剛 把該樣品的輸出存在。
因此，我可以從推斷 你是最上面的循環
迭代行 最外層循環，可以這麼說。
而你遍歷 列與最內層的循環。
直觀地，這 應該有希望才有意義
因為性質 每一個我們所看到的節目
之前，printf的，這是 功能我們使用，最終，
有打印的東西的能力 出基本上逐行。
象，一旦你輸 一個新的生產線，有
沒有加倍背部和打印的東西 在屏幕更高，至少
不是用printf這樣。
>> 所以在這方面，它使 某種意義上說，最外層循環
應該是指各行 因為對於每個給定行，
你會想 打印出XXXXX，然後
移動到下一行，XXXXX。
因此，行是第一位的。
然後在每個 行，你打印的列。
如果你想做到這一點 相反，它可能不會
出來，你打算。
>> 瑪麗亞：是的。
我們只是不能回去 上一行用printf的。
>> DAVID馬蘭：這有什麼有趣 按今天的大約範圍聊天，
實際上，是該行是一個int 該公司在最上面的循環聲明。
但是請注意，它仍然是 內部，可以這麼說，
大括號的 緊隨其後，
即使它不是技術上 在這些大括號內。
因此，行範圍為 代碼片段的全部，
兩外循環內 與內循環的內部。
但與此相反，在那裡 是列在範圍？
可變列？
是啊，只有在裡面循環。
這沒關係，因為我們沒有訪問 它的花括號外面。
我們所要做的就是打印出新 線在最後出現。
所以，實際上是確定。
>> 因此，這具有這樣的效果，它看起來像， 的操作的三行和四列。
>> 瑪麗亞：對。
所以首先我們通過我們的第一行。
而就在我們的第一行，我們做的 四列的第一行內。
因此，我們打印出四個X的。
然後我們就可以退出循環，因為 我們已經印了四X的。
我們打印新的生產線。
然後我們經過 同樣的過程兩個行
使一共有三個。
>> DAVID馬蘭：而且值得注意的是 字體的只是一個假象，事實
樣品輸出 似乎如此多高，
好像還有更多 行比列。
但它只是因為X 高度大於寬。
這一切發生的事情有， 加上線之間的空白。
>> 瑪麗亞：對。
涼。
DAVID馬蘭：好的。
因此，快速瀏覽一下問題集之一， 採取任何問題，然後宣布休會？
好吧。
因此，在問題設置一個，還有三個 主要挑戰，大勢所趨。
但首先，你會發現 這個問題集
說明書中，作為與許多 pset時，今年秋天，是要帶你
通過一些熱身練習， 你指出了幾個資源
你可能會或可能 沒見過了。
例如，CS50 擁有一套短褲，
這是短視頻， 沒有什麼不同這一點，但該
很話題specific-- 也許五分鐘，
長度為10分鐘的循環或 上條件或算法
或更高版本的更多 先進的主題，也是如此。
而我們一般嵌入 這些成難題
集使學生 有哪些資源
審查可能具有材料 已經來在演講或部分。
但是，這樣一來它更集中 更在他們的指尖。
>> 我們也往往在問題嵌入 集東西叫做演練。
因此，幾乎所有我做的例子 在講座中，這裡的舞台，我們也
在已經拍攝的攝像頭 推進更慢，
更貼心的演練由我的 我的筆記本電腦的代碼，一行行
因此，在課堂上，我們經常會 脫脂通過某事或某人
將與插 回答的一個問題。
但它並不一定下沉 在每個人的觀眾。
所以，你會發現代碼走查 對於大部分的實施例
我們在這裡做演講，讓你 可以通過它按照自己的節奏走
快退或快進或 完全跳過，如果你願意的話​​。
>> 經常會有一些 熱身問題，這
請你進行排序 強化這種材料
並確保您舒適前 你繼續處理器集的其餘部分。
然後，當然， 有處理器集本身。
和的事情之一 我們很刻意
做CS50是幾乎每一個無趣 或智力無趣
機械的步驟， 你可能需要做的
幾乎總是非常有據可查。
在長期的過程中，我們將 開始提出更多的反問句
像記得如何做這做那？
但通常情況下，你會發現 該習題集給你
通過力學 東西使
有趣的，智力的挑戰 最終都是留給你的學生。
>> 隨著中說，Zamyla，我們向他 不停地談到今天的講座，
是我們長期的工作人員1 成員誰也持有演練
像馬里奧特定PSET問題 和貪婪，雖然不是水這一年。
而且它是在那些 演練，她經常
提供了一些提示和技巧 如何進行，從來沒有告訴你
到底該怎麼做，但 rather--像的狀態下，
如果你will--給你至少一 幾個想法，這樣就看你的，
最終，決定 如何接近他們。
>> 瑪麗亞：有點像一個高層次 邏輯的理解是什麼
我們要求你這樣做。
>> DAVID馬蘭：沒錯。
而且，事實上，Zamyla的 演練旨在
經常回答 在那裡問到的問題
我開始了，特別是當 這些長規格
有點令人生畏給所有的文字 和圖像，他們有他們。
>> 所以water.c，你會發現 你已經完成後，
實際上是相對簡單的。
絕對是一幫 你要一鼓作氣
靠在牆上你的頭試圖 弄清楚為什麼它不編譯
或者為什麼它沒有運行正常。
但是，一旦你完成 它，一旦你
花一些時間與任何摔跤 那你可能有缺陷，
你會發現，它的 在很短的程序。
它可以在短短幾分鐘來完成 行代碼，其中大部分
我們在這裡看到的講座已經，如果 你組裝正確的積木。
>> 正如我們建議 在這裡，它會問
您可以指定多少分鐘 有人走在校園裡洗澡。
我們在這個問題說明 設置流動水的速率
在一樣，低流量的淋浴 頭，很像宋飛夾
我們昨天看到或 相反物。
然後你只需要 做數學了一下，
用C來告訴really--算術 我們知道有多少，大概，瓶裝水
就是相當於，如果我們 採取一個n分鐘的淋浴。
>> 現在，在mario.c，這是去 要稍長程序。
它仍然不會長期是這個。
短短幾行比water.c更長。
但是，這將是機會 重現老同學馬里奧
從超級馬里奧金字塔 兄弟或者一些後續。
它不會看起來更漂亮 或者豐富多彩的作為一個人也沒有。
我們只是用很少的＃標籤 像我們這裡在屏幕上
使用ASCII文本。
但是，這將接近同樣的想法。
而且這將是一個 鍛煉第一眼
似乎只是很simple-- 打印一個簡單的金字塔。
但是，有一對夫婦的特點 在這裡，很有意思。
請注意，最右邊邊緣 金字塔實際上有寬度兩種。
因此，有兩個相等 身高列，這
使得它需要一點點 思想位，使
確保你得到了完全正確的，因為 而不僅僅是一個完美的角度的
線。
所以這是一個有點角落案件 但比賽的實際比賽。
>> 而且，這也是非顯而易見的，在第一 一目了然如何打印空白。
所以，當我看 示例輸出這裡 -
而且它也是在spec--它 那種看起來像一個矩形，
但一個對角線的 矩形已經砍掉了，
它只是空格，可以這麼說。
所以，一個經常被問到的 這裡的問題是一如既往的好，
我怎麼動的＃標籤 到正確的？
或者，我怎麼打印空白？
它實際上更容易 比大多數學生認為。
對？
你可以通過可視化地接近它 按下空格鍵一次或兩次
或三次。
>> 因此，即使與我們的printf幾乎 總是打印出一個字符串或一個int
或者像“你好一句話， 世界“或一系列字的，
你也可以只打印 報價，空間，引文結束。
這實際上給 你一個空格那裡。
所以記住這一點，並 不overthink這一點。
你真的要 決定逐行逐行，
沒有什麼不同的例子 剛才，有多少的
列應該是白色的空間和 有多少人應該是井號標籤。
這將需要一些時間，但它的 各種各樣最終邏輯謎題。
>> 瑪麗亞：是的。
但再逐行邏輯 是要在這裡是非常有用的。
DAVID馬蘭：是的。
我想示例代碼，你gave--甚至 雖然這不是一個完整的程序。
您還需要int和主 和無效的和的#include stdio.h中，
很多從演講的東西。
但積木 似乎是在那裡。
然後最後是什麼 多一點的算法。
所以，事實證明，任何時候你 進入CVS或便利店
有人遞給你的 出納票據或硬幣的變化，
事實證明，他們，人類， 不管他們是否意識到這一點，
可能正在使用什麼 所謂的貪婪算法，
因此，如果你欠，說，$ 21日 在變化，因為出於某種原因
你買東西很便宜 與CVS的一個非常大的法案，
這將是非常煩人，如果 收銀員給你21單曲，更有甚者
然而，一大堆硬幣。
相反，什麼是合理的人 可能要做的是他們要去
搶$ 20，然後$ 1鈔票，和 交給你只有兩個法案在這種情況下。
瑪麗亞：所以他們正在尋求減少 他們給回你的變化。
DAVID馬蘭：沒錯。
而同樣的處理硬幣，以及。
如果你欠，說，$ 0.50， 希望你不想要50便士。
你不是想要兩個 宿舍，例如。
現在，這確實承擔 該出納員具有
足夠的每一個教派的 他或她可能想給你。
但是，我們讓你承擔 盡可能多的問題。
和目標，最終是 在C代碼實現貪心算法。
因此用戶被允許 在鍵入多少
改變他或她是欠與美元 而仙，某種浮點
值可能。
然後你需要做的數學和 弄清楚算法，好了，
有多少硬幣，我可以給 你最少給你
正是這樣的變化量。
但是，將是一個 這裡幾個棘手的部分，對吧？
像有全 不準確的問題。
瑪麗亞：沒錯。
因此，浮點 值具有不精確。
難道我們談論這個講座的今天？
>> DAVID馬蘭：我們做了 最後一次演講。
我們談論的不精確性。
而你不想欺騙用戶 多少變化，他或她是欠。
這樣一來，演練，在 問題設置規範，
想一想，最終以 你如何減輕這些不精確
錯誤，有可能。
這是可以避免的，當然，對於 我們談論的投入。
而且，事實上，pennies-- 也許我們會推遲到Zamyla，
我想，對於花樣那裡。
所以，最後，你會發現一個 問題的進展，本週，
其中第一個是非常小的， 然後介質，然後一點點大。
但是，所有的人都使用的建築 從過去的這個星期塊，
從這個超部分， 問題設置規範
讓你在無數的資源。
但儘管如此，如果在所有掙扎， 尤其是那些不舒服
沒有事先的背景下， 來到辦公時間
在週一和週二和 週三和週四。
進入CS50通過討論 課程的網站，
通過它，你可以聊天 與工作人員和同學們。
>> 但最終，我認為， 最好的建議是剛剛起步早。
它不是那種類的，你 要在週三開始的pset
晚上，或者更糟糕的週四晚上。
>> 瑪麗亞：我最好的建議是 已經開始在星期一。
DAVID馬蘭：週一。
所以，如果你還沒有開始already--沒有。
但是，即使沒有星期一，然後週二。
越早越好。
而這就是原因 當然，有這麼多晚天
給你一個有點 心理壓力
應儘早開始，但仍讓 事情滑，當事情需要更長的時間
比您預期的。
>> 瑪麗亞：你想利用 辦公時間盡量您也可以做到。
>> DAVID馬蘭：有什麼問題？
好吧。
那麼，我們為什麼不這裡休會？