>> [音樂播放]
>> 大衛·馬蘭：所有的權利， 歡迎回到CS50。
這是兩個星期的開始。
從我們的一個字 朋友們在校園 -
如果你有興趣，可能的話，無論是 現在或將來的某個長期
甚至，一旦更舒適，教學 初中學生一點點
計算機科學的東西， 做頭到該網址。
他們現在特別需要 教師，特別是如果你有
有一些接觸計算機科學。
>> 所以記得，最後一次，我們引入 有一些數據類型在C中，
您可能已經開始讓你的 這些迄今的手臟
設置問題之一。
我們有一個字符。
因此，在有些技術方面， 你今天所知道的是一個char？
>> 所以這是一個字符，但我們的 現在更精確。
字符是什麼意思 或個別字符？
非數字字符 -
不一定。
事實證明，即使是數字，甚至 標點符號和字母
與此數據表示 類型稱為一個char。
所以它不一定是按字母順序排列。
是嗎？
>> 所以這是一個ASCII字符。
所以，如果你想返回到零週，當 我們有我們的志願者字節
要么上來，握住他們的手 不是全部，他們所代表的位。
但合八為一組， 他們代表一個字節。
我們介紹了概念ASCII 在這次演講中，這簡直是一個
數字和字母之間的映射。
和ASCII用途，因為這些人 暗示，八位
來表示一個字符。
>> 因此，如果8位 每次取兩個值之一 -
零次或一次 -
這意味著有兩種可能性 這個人 -
零次或一次 -
這個人，這兩個 人，為這一個兩個。
因此，兩次共兩次 兩次兩兩三次 -
所以兩個總第八。
所以這是一個總的字符數 256種可能，你可以
代表與8位。
>> 現在，那些你們誰講亞洲 語言可能知道，有更多的
不僅僅是在世界上的字符 AS和BS和CS和DS。
事實上，ASCII不足夠 很多世界的語言。
但另一個時間。
現在，知道如果你想在C 代表一個字母，一塊
標點符號，或只是一些字符 在自然界中，我們使用一個字符。
它是一個字節或8位。
>> 一個int怎麼樣？
嗯，一個int是一個整數。
多少位，如果你還記得， 通常是一個整數嗎？
任何人都召回？
因此，它是典型的32。
實際上，它取決於在計算機上 你使用。
但在家電，並在很多 計算機，它是32位或4個
字節 - 八倍四個。
和整數只是用於存儲 數字，要么是負，
陽性，或零。
>> 如果你只得到了32位，你 關心正數，
有人看球多少可能 整數，是一台計算機可以表示從
零，就到了嗎？
因此這將是2到32，這 大約40億。
因此，這些權力的兩個將要 在計算機科學中反复出現的主題。
正如我們所看到的，他們很方便 即使是不太
容易做數學題，在一個人的頭上。
>> 所以我們會說大約40億。
現在，很長很長 -
你可以猜測的那種。
它長於一個int。
多少位？
因此，64位或8個字節。
這只是意味著你甚至可以代表 更大的數字，更大的積極或
較大的負數。
>> 又有怎樣的浮動？
這是一個浮點 32位的值。
這僅僅是一個實數，東西 小數點。
但是，如果你的地方，而不是需要更多的 小數點後或者你想
一些代表一個更大的數目 分數後，你可以使用一個
雙，這是64位。
>> 但有一個有趣的 這裡的外賣。
是有限的32位，所以，如果整數 64即使是有限的長期多頭
位，那種引出了一個問題， 如果你真的要算
高於4億元為int？
嗯，你只是用很長很長。
但是，如果你要算高 超過兩至第64個，給予或採取？
>> 現在，這是一個龐大的數字。
但最終，你實際上可能 關心這些類型的值，
尤其是如果你正在使用的數據庫 並開始收集很多很多
和大量數據，並且分配唯一的 編號，每一塊的數據。
因此，我們有一個問題。
同樣，浮點運算 價值 - 花車或雙打 -
如果你只得到了有限數量的 位，你總共有多少個數字
可能代表什麼呢？
>> 嗯，這是不太清楚，當你 涉及小數點。
但它肯定是有限的。
如果你有一個有限的比特數， 有限數量的人類，一個有限的
燈泡的數目，你一定可以 只能表示有限數量的
浮點值。
但究竟有多少真正的數字 是他們在世界上？
有一個無限。
所以這是樣的一個問題，因為我們 不具有無限長的
我們的電腦內的內存或RAM。
所以一些具有挑戰性的事情都可能發生。
>> 所以，讓我們繼續前進，並嘗試 這裡表達。
讓我去進取，不斷開拓gedit的。
我要繼續前進，並保存文件 被稱為“floats0.c”剛需
一致的，例如，即 可在網上，如果你想。
而且我要繼續前進， 它定義如下 -
我要繼續前進，並說，詮釋 主要無效的，因為我們經常做的。
>> 然後在這個方案中，我要 申報自己的持股量，所以32位
變量稱為F，任意。
然後我要存儲在 我不知道，十分之一，所以0.1。
所以我要表達的是作為一個 除以10，這是完全
C.合法
>> 然後在第二行，我只是 要打印出它的值。
所以，記得，我們​​可以使用 熟悉的printf。
我們不希望使用％i的類型為int。
我們要使用一個浮點數％F。
然後我要做的反斜杠n， 引號，逗號，F，分號。
>> 因此，這裡是我的計劃。
已經有一個錯誤。
是否有人對他們來說，這點擊 早就想點滿
一個bug，我呢？
是嗎？
嗯。
我忘了“＃” 頂，他們的症狀，如果我嘗試
編譯這是怎麼回事， 編譯器會罵我，
說未定義的象徵或 東西的效果。
它不明白的東西 printf的喜歡。
>> 所以我打算做“＃ “，保存該文件。
現在它在更好的形狀。
但我也要去點 出一個新的細節。
除了指定的地方 ％F％％s的持有人一樣，你可以
有時會影響行為 這個佔位符。
例如，在一個浮動的情況下 點值，如果我只想
顯示一個小數位後 期間，我其實可以做0.1F。
因此，換句話說，分開f和 0.1，剛百分號
告訴printf的，你可能有一個整體 一串數字的小數點後
指向我。
但我只想看其中之一。
>> 所以，我要繼續前進並保存 這個程序，進入我的終端
窗口，我要繼續前進 和類型浮法0，回車。
我看到有些神秘的線， 因為我們將開始使更多的意義
逗它除了本週和下週。
現在，我要繼續前進 運行浮法零。
而且，該死的。
>> 因此，有另一個錯誤 這裡的一些原因。
我敢肯定，有十分之一，或 除以10，是不是0.0。
也許我只是不找 足夠的位數。
所以我為什麼不說兩個.2看到兩個 小數位，而不只是一個。
讓我回到我的終端窗口 這裡打了幾次
看看我的歷史。
不要使再次零漂浮， 然後再度上升。
現在進入。
>> 現在，我敢肯定，這是錯誤的。
我可以做三和四，而我 可能會看到零。
那麼，是錯誤嗎？
除以10應為0.1。
有人要採取刺在什麼 根本的問題是什麼？
是嗎？
他們倆都是整數。
還等什麼？
因此，除以10，這是 我做算術。
我得到0.1。
>> 嗯。
所以這的確是這個問題。
當你在一台電腦一個整數 它除以另一個整數，
計算機默認情況下，是怎麼回事 假設您想要一個整數。
的問題，雖然，當然是 是0.1，不是一個整數。
這是一個實數。
還等什麼計算機未通過 默認情況下，它只是扔掉
小數點後的一切。
它不向下舍入或本身。
它只是拋出了一切 小數點後。
現在是有道理的。
因為現在我們清楚 留下了零。
>> 但是且慢。
我沒有看到一個int零。
實際上，我看到0.00。
所以，我怎麼調和嗎？
如果除以10是零，但我 看到0.00，它從哪兒得到
轉換回一個實數嗎？
嗯。
沒錯。
>> 所以在這裡5行，當我真正 存儲是0.1，然後
截斷為零，裡面的浮動， 實際上相當於
存儲為int，但是， 的確，作為一個浮動。
此外，我再使用的printf 明確兩個打印該號碼
小數位，即使有 可能實際上沒有任何秘密協議。
>> 所以這種很爛，對不對？
顯然，你不能做數學， 至少在這個級別的
精度，在一台計算機。
但是肯定有一個解決方案。
我們也許可以簡單的解決辦法是什麼 做，甚至只是憑直覺在這裡
解決這個問題？
是嗎？
打開整數 -
是的。
即使我不太知道什麼是 真的會在這裡，如果它
這些都從根本上做 是整數，好，為什麼不是我
10.0，使得這個 1.0，重新保存該文件。
讓我去回落到 底部並重新編譯。
現在讓我重新運行。
還有 -
現在，我已經得到了我的十分之一 表示為0.10。
>> 好的。
所以這是不壞。
並讓我指出另一種方式 我們已經解決了這個。
實際上，讓我及時回滾 當我們作為一個
前十片刻。
並讓我繼續前進，重新保存這個文件 作為一個不同的文件名，只是為了
有一點點的檢查點。
所以這是版本之一。
現在讓我繼續前進， 做一個多個版本。
我們稱這個版本 兩個零的索引。
>> 我要去，而不是做 - 你知道嗎？
添加點零，在這種情況下工作。
但是，假設一個人的變量。
10應該是一個變量。
換句話說，假設我做不到 只是很難在最後的代碼.0
此算術表達式。
好吧，我可以做一些實際的 括號中稱為鑄造。
我可以投一個浮點數，整數10， 我可以投，整一至
浮動，以及。
然後做數學 有效1.0除以10.0，
的結果，其中去 在f前。
所以，如果我重新編譯這使花車 2，現在浮2，我得到同樣的
回答，以及。
>> 因此，這是一個相當做作的例子， 解決這個問題的
通過引進鑄造。
但在一般情況下，鑄造將是 一個強大的東西，特別是對於
問題設置兩個在一個星期的時間，當 你要轉換的一種數據類型
另一種是在一天結束時 以同樣的方式來表示。
在一天結束時，每一單 迄今為止，我們已經談到的事情是
只是整數引擎蓋下。
或者，如果太低級 你，他們只是數字
引擎蓋下。
再次，即使字符記得 週為零，是數字
引擎蓋下。
>> 這是說，我們之間可以轉換 如果不同種類的數字
他們只是位。
我們之間可以轉換數字 和字母，如果他們只是
位，反之亦然。
以這種方式和鑄造是一種機制 在編程中，可以讓你強行
改變一個數據類型到另一個。
不幸的是，這是不 簡單，因為我可能會喜歡。
>> 我要回去花車 如圖1所示，這是更簡單，更
直截了當的與 .0到每個。
而只是作為一個快速複習， 讓我繼續前進，重新編譯
這一點，使花車2 -
對不起，這是彩車1。
現在讓我們運行彩車1。
而在底部，請注意 我確實得到0.1。
所以，問題就解決了。
>> 但不是現在。
現在，我會得到一點點好奇， 我要回去到我的
printf語句和 說，你知道是什麼嗎？
我想證實這 真的是十分之一。
我希望看到這個 ，比方說，小數點後五位。
這不是一個問題。
我改變了兩到五年， 使我重新編譯。
我重新運行它漂浮1。
展望相當不錯的。
我的理智檢查可能結束，但 我得到多一點冒險精神。
我要改變0.5至0.10。
我希望看到10位後 小數位。
>> 而且我要繼續前進，並重新編譯 並重新運行漂浮1。
我有點遺憾經測試此 進一步，因為我的數學也不是那麼
糾正了，它似乎。
但是，等待一分鐘，也許 這只是一個偶然。
也許計算機充當 有點怪。
讓我繼續前進，做20個小數點 安慰自己，我知道
如何做數學。
我知道如何編程。
彩車1，重新編譯，該死的。
這是真的，真的越來越 遠處的標記。
>> 那麼，這是怎麼回事？
直觀地說，根據我們的假設 早期的數據類型的大小，
什麼是必須發生在這裡 引擎蓋下？
是嗎？
沒錯。
如果你要這麼多的精度， 這是一個了不起的很多精密 -
20小數點後的數字。
你不可能代表 除非你有一個任意數量
任意的比特數。
但我們不這樣做。
對於浮動，我們只有32位。
>> 因此，如果32位只能在置換 的方式 - 就像我們人類，舞台
向上或向下的手 - 在有限數量的 方式中，只有數量有限
實數可以代表 這些位。
因此，計算機最終 將不得不
開始偷工減料。
計算機可以隱藏這些細節 從我們一點點的時間。
但是，如果我們開始戳的數字 並期待在越走越遠
後數字的整數， 然後，我們開始看到它的
實際上接近 十分之一的想法。
>> 所以事實證明，可悲的是，有 無限數量的數字
我們不能代表正是在 計算機，至少在一個有限的
的比特數，一個有限的 RAM的數量。
不幸的是，現在這有時 具有現實世界的後果。
如果人們不很明白這一點 或那種想當然的事實
他們的計算機只是做 他們告訴它做不
了解這些基礎 代表性的細節 -
坦率地說，在有些語言 對用戶隱藏的，不像在C -
一些不好的事情都可能發生。
>> 什麼，我想我們會做 是退後一步。
這是關於 八分鐘的錄像片。
它宣揚了幾年前，它給 其實是可以去的洞察
錯了，當你欣賞這些 各種細節都非常太
真實的世界。
如果我們可以把燈光調暗 了幾分鐘。
>> 揚聲器1：現在我們回到工程
災​​害對現代奇蹟。
>> 電腦 -
我們都將接受 往往是令人沮喪的問題
，和他們一起去。
錯誤，病毒，軟件故障 小的價格支付
方便。
但是，在高科技和高速 軍事和航天計劃
應用中，最小的問題 可以放大成災難。
>> 1996年6月4日，科學家準備 發射無人駕駛的阿麗亞娜5型火箭。
它攜帶的科學衛星 正是如何建立
地球磁場的相互作用 太陽風。
火箭始建歐洲 航天局和其升空
在海岸設施 法屬圭亞那。
>> JACK GANSSLE：在約37秒 飛行中，他們首先注意到
東西是錯誤的。
噴嘴旋轉 一種方式，他們真的不應該。
進入飛行約40秒， 明確了車輛遇到了麻煩。
這就是當他們做了一個 決定銷毀它。
範圍內的安全人員， 巨大的膽量，按下按鈕，
炸毀了火箭之前，它可以 成為危害公眾安全。
>> 揚聲器1：這是首航 阿麗亞娜5型火箭，它的破壞
因為嵌入一個缺陷發生 在火箭的軟件。
>> JACK GANSSLE：阿麗亞娜問題 的是，有一個數字
，需要64位來表示。
他們想轉換 一個16位的數字。
他們假設的數量從來沒有 將是非常大的，最
那些在64位的位數 數量是零。
但他們錯了。
>> 揚聲器1：一個軟件無法 程序接受的那種
數所產生的另一個 在根目錄的失敗。
軟件開發已經成為一個非常 昂貴的新技術。
阿麗亞娜4型火箭一直非常 成功的，那麼多的軟件
為它創建的也是 用於在阿麗亞娜5型火箭。
>> 菲科伊爾：最根本的問題是 阿麗亞娜5速度更快，
更快地加速。
軟件 佔該。
>> 揚聲器1：破壞火箭 是一個巨大的金融災難，
由於軟件錯誤一分鐘。
但是，這是不是第一次數據 轉換問題一直困擾現代
火箭技術。
>> JACK GANSSLE：開始於1991年， 第一次海灣戰爭中，“愛國者”
導彈經歷了類似 數轉換的問題。
其結果是，28名美國士兵 死亡，約100人受傷
當愛國者，這是應該 以防止傳入飛毛腿，
沒有發射導彈。
>> 揚聲器1：當伊拉克入侵科威特和 美國發動“沙漠風暴”
1991年初，愛國者導彈 被部署到保護沙特
以色列從伊拉克飛毛腿 導彈攻擊。
愛國者是美國的中程 表面空氣系統製造
雷神公司。
>> THEODORE波斯托爾：愛國者的大小 攔截器本身大約是
20英尺長。
它重約2000磅。
它攜帶的彈頭約 -
我認為這是大約150磅。
和彈頭本身是一個 高爆
它周圍的碎片。
彈頭的殼體設計 像巴克肖特。
>> 導彈進行了四個揚聲器1： 容器和運輸
半拖車。
>> 菲科伊爾：愛國者反導彈 系統可以追溯到
至少有20年了。
它最初被設計為 防空導彈
擊落敵方飛機。
在第一次海灣戰爭，那場戰爭時， 走過來，陸軍想使用它
擊落“飛毛腿”導彈，而不是飛機。
伊拉克空軍沒有 這麼多的問題。
但陸軍擔心飛毛腿導彈。
因此，他們試圖升級 愛國者。
>> 揚聲器1：攔截敵方導彈 在5馬赫
將要足夠的挑戰性。
但是，當愛國者衝進 服務，陸軍不知道的
伊拉克的修改，使他們 打飛毛腿導彈幾乎是不可能的。
>> 西奧多·波斯托爾：發生了什麼事 飛毛腿
進來的是不穩定的。
他們搖晃。
這樣做的原因是伊拉克人， 為了獲得600公里的
300公里的遠程導彈，把 出前彈頭重量。
他們使彈頭打火機。
所以，現在愛國者的嘗試 來的飛毛腿。
而大部分時間，鋪天蓋地的 大部分時間裡，它只是
飛毛腿飛。
>> 揚聲器1：一旦愛國者導彈系統 運營商意識到錯過的愛國者
它的目標，他們引爆了愛國者 彈頭，以避免可能
如果它被允許傷亡 倒在地上。
>> THEODORE波斯托爾：這是最 人們看到大火球在天空中
作為攔截和誤解 飛毛腿彈頭。
>> 揚聲器1：雖然在夜空 愛國者似乎是成功
摧毀“飛毛腿”導彈，在達蘭有 關於它的可能是沒有錯
性能。
有愛國者的雷達系統失去 跟踪傳入飛毛腿從未
由於軟件缺陷而推出。
>> 這是以色列首次發現 的時間越長系統
是，更大的時間差 成為由於時鐘
嵌入式系統的計算機。
>> JACK GANSSLE：大約兩個星期前 在達蘭，以色列人的悲劇
國防部報告 該系統是失去的時間。
經過約8個小時的運行， 他們注意到，該系統是
越來越明顯不準確的。
國防部回應 告訴所有的愛國者電池
不能離開系統 很長一段時間。
他們從來不說，很長一段時間。
8個小時？
10小時？
千小時？
沒有人知道。
>> 揚聲器1：愛國者進駐 在宰赫蘭兵營
一直有問題的內部時鐘 對超過100小時的夜
2月25日。
>> JACK GANSSLE：跟踪時間到 的大約十分之一秒的精度。
現在，十分之一秒為 有趣的數字，因為它不能
以二進制表示完全相同，表示 它不能被精確地表示在
任何現代數字計算機。
這很難相信，但 用這個作為一個例子。
讓拿多少三分之一。
三分之一也無法表達 在小數正是。
三分之一0.333 無窮。
有沒有辦法做到這一點 絕對精度在小數。
這也正是同樣的問題 ，在愛國者發生。
系統運行的時間越長， 最壞的時間誤差就成了。
>> 揚聲器1：運行100小時後， 只有時間錯誤
大約三分之一的第二個。
但無論在目標導彈 在5馬赫，它導致
超過600米的跟踪誤差。
這將是一個致命的錯誤 在宰赫蘭的士兵。
>> 西奧多·波斯托爾：發生了什麼事是一個 飛毛腿發射早期檢測
預警衛星。
他們知道，飛毛腿 在他們的大方向。
他們不知道它在哪裡來。
>> 揚聲器1：現在是雷達 “愛國者”系統的組成部分
衛冕達蘭定位，並保持 跟踪來襲的敵方導彈。
>> JACK GANSSLE：雷達 是非常聰明的。
它實際上跟踪的位置 飛毛腿，然後預測
可能會是今後一段時間 雷達發出一個脈衝。
這被稱為距離門。
>> THEODORE波斯托爾：然後，一旦愛國者 決定有足夠的時間已經過去了去
備份和檢查的下一個位置 此檢測對象，它可以追溯到。
因此，當它回到了錯 地方，然後看到沒有對象。
而它決定，沒有任何對象， 這是一個虛假的檢測，並
下降的軌道。
>> 揚聲器1：傳入飛毛腿消失 從雷達屏幕上，
秒鐘後，它抨擊 走進軍營。
飛毛腿殺害28是最後一個 第一次海灣戰爭期間發射。
可悲的是，更新後的軟件到達 在宰赫蘭的第二天。
軟件漏洞已被固定， 關閉一章的困擾
歷史的“愛國者”導彈。
>> 愛國者實際上是一個縮寫 相控陣跟踪
攔截的目標。
>> DAVID J MALAN：所有的權利，所以 發人深省的例子，可以肯定的。
幸運的是，這些較低水平 錯誤是沒有的東西，我們會
通常有升值，當然 不是與我們的一些
最早的方案。
相反，大多數的錯誤，你會 將所遇到的邏輯性，
語法性質，據此， 代碼只是不工作的權利。
而且你知道它相當快的。
>> 但是，尤其是當我們得到的 學期結束時，它會
的可能性變得越來越 真的好好想想的設計
您的程序和底層 表示
有太多的數據。
舉例來說，我們將介紹MySQL中， 這是一個受歡迎的數據庫引擎
您可以使用網站 數據存儲在後端。
你就得開始決定 學期結束的不僅是
沿著這些線路的類型的數據，使用 但究竟有多少位使用，
您是否想存儲日期 隨著時代的日期和時間，也
之類的東西你要多大的 是唯一的ID，也就是說，用戶
在數據庫中。
>> 事實上，如果你有一些有 Facebook的佔了相當長的一段時間，
你知道如何獲得 您的用戶ID -
這有時會顯示在你的 除非你選擇了一個配置文件的URL
綽號的URL，或者如果你已經 常用的Facebook的圖形API，
公開可用的API，通過它 可以要求Facebook的原始數據 -
你可以看到你的數字ID是什麼。
若干年前，Facebook的本質 不得不改變使用
使用長整型相當於 長，因為隨著​​時間的推移，用戶前來
去創建大量的賬戶， 假帳戶，即使他們很容易
能用盡的東西就像一個4 十億可能像一個int值。
>> 所以這些類型的問題 在路上，以及。
所有權利，使被鑄造。
這是不精確的。
一對夫婦迅速公佈。
所以部分正式開始 週日，週一，週二。
你會聽到在本週晚些時候通過電子郵件 為您的部分分配。
你怎麼在這一點也在這裡 改變你的部分，如果你
時間表現在已經改變或 舒適程度現在已經改變。
同時，P-集合一個黑客之一 本週四到期的選項
延長該期限每 規格至週五
在一個典型的方式。
>> 實現的問題，其中包括 集規格說明
如何使用的CS50家電， 以及一些CS50具體工具
50般的風格，可以為您提供 動態與反饋
你的代碼風格和質量也 檢查50個，可為您提供
動態反饋到您的 代碼的正確性。
請原諒，我們仍然熨燙 出幾個扭結支票50。
有幾個你的同學們開始 四點左右，上週五晚上，當
規範上升從那時起已經注意到 一些錯誤，我們正在努力
通過和道歉的人誰 經歷了不必要的挫折。
該故障是我的。
但是我們會跟進CS50 討論何時得到解決。
>> 所以一個字的分數本身。
因此，這將是一兩個星期之前， 開始得到反饋問題集
因為你還沒有 教學研究員。
即使到那時，我們將​​開始評估 C問題之前，我們設置
回去從頭如此評價 你得到更多的有關
更快速的反饋。
但在一般每教學大綱，CS50 習題集一起評估
以下四個軸 -
範圍，正確性，設計和風格。
>> 範圍將是一個數字通常 0至5，
捕獲多少 一塊咬下。
通常情況下，你想這是五。
至少你嘗試了一切。
並注意到這是一個乘數因子 所以，這樣做只是部分的
問題集是不是最好的策略。
>> 同時，更明顯的是 正確性的重要性 -
僅僅是你的程序正確 尊重規範？
這是故意加權 重比其他兩個軸由一個
三個因素，因為我們認識 通常你會花
更多的時間追了一些bug， 讓你的代碼工作，那麼你
縮進它並選擇 適當的變量名和
等，這是在另一端 的頻譜風格。
>> 這並不是說風格是不是 重要的，我們會傳過來
講座和部分時間。
式是指美學 你的代碼。
你有選擇的命名變量 很短，但有些
的描述嗎？
你的代碼縮進你見過 講座和一致的方式
風格50？
>> 最後是設計權 還有在中間。
放一個更難的設計 手指上，因為它更
主觀的。
但它也許是最重要的 三個軸在教學方面的
價值隨著時間的推移，這將是 教學研究員的機會
為您提供定性反饋。
事實上，在CS50，即使我們確實有 這些公式和成績，在年底
的一天，這些都是很刻意 非常小水桶 - 點值
0和3之間 零和五​​。
我們不要嘗試畫很粗的線條 之間的問題集之間或
學生而是盡可能集中 我們可以定性，普通的
反饋，無論是打字或口頭 您的特定的教學研究員，
你會得到相當不錯知道。
>> 但在一般情況下，這些權重 各軸。
同時，太，這是值得保持 介意你不應該假設，
五分之三是60％ 因此，大致失敗。
三是故意為了 中間的道路好樣的。
如果你在得到三分 從本學期開始，這是
的確意味著是一個很好的 開始的地方。
如果你有三三兩兩，展銷會， 一定工作付出一點
更多的關注，以充分利用 段和辦公時間。
>> 如果你得到四肢 五，偉大的。
不過說真的，我們希望看到的軌跡 學生之間 -
每名學生的個性化，但啟動 本學期，在這裡排序
兩到三個範圍內，但結束 這裡在四到五的範圍內。
這就是我們真正需要的。
同時，我們也牢記三角洲 週之間的零和週展出
12時，我做的成績。
不要緊，我們絕對怎麼樣 你公平的開始，如果您的
的確軌跡 向上和堅強。
>> 學術誠信 - 所以讓我把我的 更嚴重的只是一瞬間的聲音。
因此，這當然有區別 派遣更多的學生比其他任何
在歷史上的廣告板，我相信。
我們有點記不清 點如何經常發生這種情況。
而這還不是因為學生在50 任何比自己更不誠實
其他地方的同學。
但要意識到，那就是，我們都非常好 在檢測這樣的事情。
>> 而這就是的優點是 計算機科學類，因為我們
可以和我們比較所有學生 問題設置成對對每
，不僅今年 但往年。
我們有能力，像學生 類，谷歌和找到代碼
像GitHub和網站上 討論論壇。
CS50的是絕對有解決方案 P-集合漂浮在那裡。
但是，如果你能找到他們， 我們可以找到他們。
而所有這一切都是非常自動化 和容易和悲傷的為我們找到。
>> 但我想強調的是，也 課程的學術誠信政策
非常意味著是非常 相反的這種精神。
事實上，這一年中，我們改寫的東西 在教學大綱，點
點點，更多的細節 在教學大綱。
但過程中的最重要的主題 真的是要合理。
我們認識到，有一個顯著的 教學量
值在協作，在一定程度上 與同學，讓你
兩個或三個或更多 站在白板
白板，所以 說，你的想法 -
寫出來的偽代碼的圖片， 圖表馬里奧應該是，如果
你先寫 在偽代碼。
應該採取什麼貪心算法 -
應該如何表現每 問題設置一個？
>> 等意識到行為 我們鼓勵非常
沿著這些線路大部分。
在教學大綱中，你會看到一個 下一大堆子彈
合理的類別和一個不太合理 類別有助於我們幫助
您所在位置周圍包裹你的心靈 我們畫出這條線。
而在一般情況下，一個體面的經驗法則 是，如果你正在努力解決
一些bug和您的朋友或同學 坐在你旁邊，
合理的為你顯示他或她 你的代碼和說，哎，你能不能幫
我弄清楚發生了什麼事情錯在這裡？
>> 我們通常不擁抱 的相反側。
它不是一個正確的響應為您的 朋友或同學在這裡說，哦，
只要看看礦山和圖 它從。
這是一種不合理。
但有別人，另一個大腦， 另一雙眼睛看
您的屏幕或看看你的代碼 說，你確定你想要的
這裡有一個循環？
或者是你確定要 ，分號這裡？
哦，該錯誤消息意味著這一點。
這些都是非常合理的， 鼓勵的行為。
>> 的情況下，我被影射 早期歸結為當學生
深夜判斷力差 決策和收發電子郵件代碼
或者只是別人說， 在這裡，它是在Dropbox或
谷歌搜索在深夜。
所以我會鼓勵，求求你了， 如果你有那些不可避免
緊張的時刻，你撞了 對最後期限，你有沒有後期
一天，因為它已經在星期五 點，發送電子郵件的過程的元首或
自己直接。
說，聽著，我在我的 突破點在這裡。
我們有一個談話 和看著辦吧。
訴諸於網絡或其他一些不 合理的行為從來都不是
解決方案，太多你 同學這裡就不再
校園裡，因為那可憐的判斷。
但它很容易裙子線。
>> 這裡是一個小的圖片來捧場 你從書籤交易，因此現在
一切都會好的。
>> 因此，快速回顧一下，然後， 我們離開的地方。
於是在上週，還記得我們介紹 的條件下，而不是在Scratch
但在C這個時候。
有一些新的語法，但 真的沒有新的想法本身。
我們有布爾表達式，我們可以 或連同兩個垂直
條或連同兩 ＆符號，他說，無論是左
和正確的必須是真實的 為這來執行。
然後我們有開關，我們看了 簡單地說，但我建議是真的
只是為實現不同的語法 相同樣的目標，如果你知道在
推進你的案件 將要。
>> 我們著眼於循環。
for循環是可能是最常見的， 或至少​​一個人
通常達到本能。
即使它看起來有點神秘， 你會看到很多很多這樣的例子
過不了多久，你有 已經在上週晚些時候。
While循環同樣可以 達到同樣的事情。
但是，如果你想要做的任何增量 或更新
變量的值，你必須 它比手動
for循環之前允許。
再有就是do-whil​​e循環， 這使我們能夠做點什麼
至少一次，而一些 別人是真實的。
這是特別好 程序或遊戲，你想在哪裡
提示用戶的東西 至少一次。
然後，如果他或她不配合， 你可能會想這樣做
一遍又一遍。
>> 有了變量，同時，我們不得不線 像這樣的代碼，這可能
是兩行。
你可以聲明一個int叫 計數器，分號。
或者，你可以聲明和 定義它，可以這麼說。
給它一個價值在同一時間。
>> 然後最後，我們談到 有關功能。
這是一個很好的例子 某種意義上說，它說明
兩種類型的函數。
一個是的GetString的（），再次 得到了來自用戶的字符串。
但是GetString的（）是一種有趣的， 到目前為止，我們已經用它，
因為我們一直用它 上的東西的左手側的
等號。
也就是說，GetString的（） 返回一個值。
當然，它返回一個字符串。
然後在左側，我們 簡單地保存該字符串裡面的
叫name的變量。
>> 這一點是不同的，在某種意義上說，從 因為printf printf的，至少在我們的
這裡使用，不返回任何東西。
順便說一句，它返回的東西。
我們只是不關心它是什麼。
但它確實有什麼 所謂的一個副作用。
那是什麼副作用，在每 情況下，我們迄今見過嗎？
printf的是什麼？
它打印的東西在屏幕上， 顯示文字或數字或東西
在屏幕上。
認為這只是一個副作用 因為它不是真正交給
還給我。
這裡面不是一個答案 一個黑盒子，然後我就可以
伸入搶。
它只是在做對自己，多 像科爾頓插入此
黑匣子的最後一周，他不知何故 奇蹟般地在黑板上畫
我沒有實際參與。
這將是一個副作用。
但是，如果我真的必須達到回 在這裡，說，哦，這裡是字符串
來自用戶的，會 是一個返回值。
>> 並且到目前為止，我們只使用的功能 其他人都寫了。
但實際上，我們可以做這些 自己種的東西。
所以我要進入 CS50再次電器。
讓我關閉該標籤， 打開了剛才。
讓我繼續前進， 創建一個新的文件。
而且我要繼續前進， 調用這個positive.c。
所以，我想要做的事 這裡正數。
所以，我要繼續前進，做詮釋 -
對不起 -
＃。
讓我們不要讓同一 像以前那樣的錯誤。
詮釋的主要（無效），開放式捲髮 撐，封閉大括號。
>> 現在我要做到以下幾點。
我想編寫一個程序， 堅持用戶提供
我的一個正整數。
因此，有沒有GetPositiveInt功能 在CS50庫。
有只調用getInt（）。
不過沒關係，因為我有 我可以並處的結構
小該值約束。
我可以做這樣的事情。
>> 所以INT N -
如果你敲字，只是實現 我要回去
改變一些東西在一瞬間 -
所以整數n等於調用getInt（）。
這就是要放 一個int n的內部。
讓我成為一個更具描述。
讓我說，像我要求的東西 你給我一個正整數。
>> 好的。
因此，只是一點點的指令。
現在我能做些什麼呢？
好吧，我已經知道我的簡單 條件或分支機構，就像我
有划痕，我能說些什麼 等，當n是小於或等於
零的話，我想要做的事 喜歡，那不積極。
然後，我可以做的 -
OK，但我真的很想得到詮釋。
所以我可以去這裡，我可以種 複製和縮進。
，然後“確定”。
因此，如果n是小於或 等於零做到這一點。
>> 現在，如果用戶 不配合？
好吧，那麼我要 借用在這裡。
然後我在這裡 這裡和這裡。
因此，這顯然是不 的解決方案，對不對？
因為有沒有結束的跡象。
如果我想要求用戶提供 我一個正整數，我可以
實際上得到的int。
然後我就可以檢查這個int。
但後​​來我想再次檢查和 再次檢查，並重新進行檢查。
所以，很顯然，什麼是更好的 建造在這裡使用？
所有的權利，所以某種循環。
>> 所以，我要擺脫 幾乎所有這一切。
我想要得到這個 int類型至少一次。
所以我說的去做 -
我會回來的 而在短短的時刻 -
現在做什麼呢？
我打算做INT N獲取調用getInt（）。
確定。
所以這是相當不錯的。
現在怎麼經常做 我想這樣做嗎？
>> 讓我把裡面的printf循環 這樣我就可以要求一遍又一遍，
如果需要的話。
什麼我想這 while條件怎麼辦？
我想繼續這樣做 而事件是什麼？
嗯。
N是小於或等於零。
的話，我們已經顯著 清理這個代碼。
我們借了一個非常簡單的構建 - do-whil​​e循環。
我剛剛被盜重要的行 我開始複製和代碼
粘貼，這是不明智的。
所以現在我要以實際粘貼 在這裡，只是做一次。
>> 現在做什麼我想要做的 這個程序結束？
我就簡單的說一下 喜歡，感謝 -
我會盡我為int％ -
反斜杠N，逗號，然後 插頭N，分號。
>> 好的。
因此，讓我們看看會發生什麼現在 當我運行這個程序。
我要繼續前進， 做積極的。
該死的。
有幾個錯誤。
因此，讓我向後滾動到第一。
不要通過他們的工作倒退。
通過他們的工作從上而下 免得他們級聯和
有一件事是錯誤的。
隱式聲明 函數調用getInt（）。
嗯。
因此，它是不夠的。
我有點犯同樣的錯誤，但 這次有點不同。
我不僅要包括stdio.h中，但 也cs50.h，其中包括
所謂的聲明int時，其 教設備，或教
C有什麼調用getInt（）。
>> 因此，讓我重新保存。
我要忽略其他錯誤 因為我希望他們
主題相關的錯誤 我已經固定。
因此，讓我繼續前進，重新編譯 與作出積極，回車。
該死的。
誤區三，仍然。
讓我向上滾動到第一。
未使用的變量n。
我們從來沒見過此之前。
而這，也同樣是一個有點神秘。
這是編譯器的輸出。
什麼，強調線 - positive.c :9:13 -
是說，它的上線九說 positive.c，在第13個字符，
13列，你犯了這個錯誤。
>> ，特別是，它告訴 我未使用的變量n。
因此，讓我們來看看 -
九號線。
我在這個意義上使用n 我給它一個值。
但編譯不喜歡的是 我不是看似使用它。
但是且慢，我使用它。
在第11行，我在這裡使用。
但是，如果我繼續向下滾動 於:11 positive.c -
因此在第11行，12字符的 編譯器告訴我，使用
未聲明的標識符N。
>> 因此，未申報的手段，我有 不指定它作為一個
變量的數據類型。
但是且慢。
我確實做到了，在九號線。
所以有人在這裡真的很困惑。
這是我或者編譯器，因為 九號線，再次，我聲明
INT N，和我分配的 調用getInt（）的返回值。
然後，我使用的變量n行 11和檢查，如果其值小於
大於或等於零。
但是，這顯然是 壞破為什麼？
再說一遍嗎？
>> 啊，我要申報前N 進入循環。
但是為什麼呢？
我的意思是，我們只是提出了一點前， 聲明變量，它的罰款
在一個行，然後 他們分配一定的價值。
全局變量 - 讓我們回來 那只是一瞬間的想法。
你為什麼要我把 它的循環之外？
它是。
沒錯。
>> 所以，雖然有點違反直覺， 讓我總結一下。
當你聲明Ñ裡面 ，do塊的 -
具體的內部 那些花括號 -
該變量n有什麼 所謂的範圍 -
我們的評分系統在無關 當然 - 但有一個範圍
限於那些大括號。
換句話說，通常如果你聲明 一組內的變量
大括號，即變量只存在 那些大括號內。
所以，儘管這個邏輯單 我宣布n在九號線，
基本上消失，從範圍， 從內存中消失，可以這麼說，
的時候，我打了11行。
因為不幸的是，11號線， 外面那些大括號。
>> 所以，我遺憾的是不能修復這個 回去我做了什麼之前。
起初，你可能做到這一點。
但什麼是你現在不 循環做？
顯然，你沒有得到 的INT週期性。
因此，我們可以離開調用getInt（），我們 應該離開調用getInt（）裡面的
循環，因為這就是我們要 一次又一次纏著用戶。
但它確實足以去 上升到線，比方說6。
INT N，分號。
不要給它的值，但由於 你不需要只是還沒有。
>> 但是現在這裡，請注意 - 將是一個非常容易犯的錯誤。
我不想影子我以前 n的聲明。
我想使用n 確實存在。
所以現在10號線， 我給你N個值。
但是，六行，我宣布N。
所以我或我不能 使用它現在在第12行嗎？
我行，因為它們之間捲髮 括號是n現在宣布呢？
一起來這裡第五行。
到這裡的人在第14行。
所以，如果我現在縮小，保存此文件，請 備份和運行做出積極的，它
編譯這個時候。
因此，這已經進步。
斜線。 /積極，回車。
>> 我要求你給我 一個正整數。
負1。
負2。
負3。
為零。
一。
感謝一個 現在印。
>> 讓我試試別的， 出於好奇。
我被告知要輸入一個整數。
但是，如果我，而不是鍵入羊肉？
所以，你現在可以看到一個不同的提示 -
試。
但無處在我的代碼 我寫重試。
所以，據推測，這是重試 來自提示，你會說嗎？
是啊，從調用getInt（）本身。
所以CS50的員工做的事情之一 適合你，至少在這些最初的幾個
週，我們已經寫了一些量 錯誤檢查，以確保，如果
你叫調用getInt（），你會至少 從用戶得到一個int。
你不會得到一個字符串。
你不會得到一個字符。
你不會得到的東西 否則乾脆。
你會得到一個int。
>> 現在，它可能不會是積極的。
它可能不會是負數。
解決這一問題，我們不作任何保證。
但我們會糾纏使用者重試， 重試，重試，直到他或她居然
合作。
同樣，如果我做1.23， 這是不是一個int。
但是，如果我不輸入，也就是說，50， 給我的價值，我想。
>> 好的。
所以不壞。
上的任何問題，我們剛剛做了什麼？
關鍵的外賣，是明確的，而不是 這麼多的循環，這是我們見過的
即使之前，我們還沒有真正 使用它，但是範圍的問題，其中
變量只能只能使用 一些指定的範圍內。
>> 好吧，讓我解決的建議 你所說，一個
全局變量。
順便說一句，事實證明，另一 解決這個問題的，但
通常是一個不正確的解決方案或 設計不佳的解決方案，
什麼宣告變數 所謂的一個全局變量。
現在，我有點違反我的定義 的範圍，因為有
在最高層沒有大括號 最底部的文件。
但含意， 是，現在第四行，
n是一個全局變量。
顧名思義，這是 只是到處訪問。
>> 划痕實際上有這些。
如果你使用一個變量，您可能還記得 你不得不選擇，如果它是為
這個精靈或所有精靈。
那麼，所有的精靈只是更清晰 說全球。
是嗎？
啊，非常好的問題。
>> 所以記得，在第一次版本 我的代碼，當我不正確
聲明和定義的n行九 -
我宣布它作為一個變量 我給它一個價值
賦值運算符 -
這給了我兩個錯誤。
其中，事實是n不使用 和兩個，即在第11行
它只是沒有宣布。
因此，第一個我沒有 地址的時間。
它不是嚴格意義上的錯誤申報 一個變量，但不能使用它。
但其中的事情，我們已經做了 CS50設備，故意
教學，是我們已經拍成了 預期的編譯器
確保你正在做的事情不只是 正確的，但真正正確的。
>> 因為如果你聲明一個變量 如n和從來沒有使用它，或使用
正確的話，那麼什麼 它是做什麼呢？
它真正沒有目的。
而且它很容易隨著時間的推移，如果你 不配置您自己的電腦
這樣一來，只是有代碼 這裡一點殘存，殘存有。
然後，幾個月後你回頭看， 你像，這是為什麼行
有代碼嗎？
如果沒有很好的理由， 不利於你或你的同事
在路上有 然後絆倒。
>> 順便說一句，哪裡是 來自？
嗯，記得我們每次編譯 計劃，所有這東西
正在打印。
所以，我們會回來的。
但同樣，是一種實用工具， 自動編譯的過程中，由
實際運行的編譯器 鐺。
這件事情，我們最終會看到，有 做一個特殊的調試
程序調用調試器。
這具有與優化 代碼 - 未來。
STD = C99 -
這也就意味著使用1999年版 C. C'S左右甚至更長的時間比
，但他們提出了一些不錯的 變化10多年以前。
>> 這裡是相關的。
我們說做任何事情， 以前本來是一個警告
防止學生的錯誤 從編譯。
掛壁方式，對於一個 一大堆的東西，而不是
只是涉及到的變量。
然後讓我滾動 此行的末尾。
這也，我們最終會 回來。
這是很明顯的名稱 我編譯的文件。
這回顧的文件的名稱 我輸出作為名稱的
我的可運行程序。
這只是意味著lcs50使用CS50 庫，以及任何的零和那些
工作人員寫了先前編譯 今年，整合
他們到我的程序。
>> 有誰知道-LM是什麼？
這是數學庫，這是 就在那裡，即使你
沒有做任何數學。
這只是自動提供 我們做。
>> 好吧，讓我做一個其他的例子 在這裡開闢一個新的文件。
讓我保存這個string.c。
事實證明，作為我們談論的數據 類型的今天，甚至還有更多
引擎蓋下 比我們迄今為止見過。
因此，讓我很快做一個快速的程序。
包括stdio.h中。
我來救。
而且你知道，讓我不能使 一次又一次地犯同樣的錯誤。
包括cs50.h.
讓我現在繼續 做詮釋的主要（無效）。
>> 現在我只想做一個程序 這 - ​​聲明一個字符串
s和得到一個字符串 從用戶。
讓我做一個小小的 這裡說明 -
請給我一個字符串 - 用戶知道該怎麼做。
這裡再向下低於此， 我要做到以下幾點 -
INT I會變為零。
同樣，計算機科學家通常 開始計數為零，但我們可以
使那一個，如果我們真的想。
現在我要做的i小於 比字符串s的長度。
所以strlen的 -
S-T-R-L-E-Ñ -
再次，它的簡潔，因為它更容易 打字，即使它是一個
有點神秘。
>> 這是一個我們還沒有使用的功能 但字面上 -
我返回一個數字，表示 字符串的長度
用戶鍵入。
如果他們中鍵入“你好”，它會返回 五，因為有五
字母打招呼。
然後，在每一次迭代中 這個循環中，i再加加。
如此反复，即使一個標準的構建 你不太舒服或太
熟悉它。
>> 但是，現在在此循環中的每一次迭代， 注意什麼，我要做的事情。
我想去和打印 出單個字符 -
所以％C反斜杠n在一個新行。
然後，你知道我想要做什麼？
無論字的用戶類型 ，像你好，我想打印
H-E-L-L-O，每行一個字符。
換句話說，我希望得到的 單個字符串中的字符，
據此，到現在為止字符串 是一個字符序列。
>> 事實證明，我可以做，支架， ，密切支架，關閉
括號，分號。
我必須做的一件事。
這是在一個名為string.h中 ，strlen的宣布。
所以，如果我想使用該功能， 我需要告訴編譯器，
希望使用它。
現在讓我繼續前進，使 字符串調用的程序。
點，斜線，字符串。
>> 請給我一個字符串。
我會繼續前進，鍵入它。
你好，在全部大寫，回車。
現在發現我已經印 後一個字符。
因此，新的細節在這裡是一個字符串， 在一天結束時，可
其個別方式訪問 字符引入廣場
支架符號。
那是因為一個字符串下方 引擎蓋的確是一個序列
字符。
但什麼是整齊的是 在您的計算機的RAM -
的Mac，PC，不管它是什麼 - 他們 從字面上回背靠背 -
H-E-L-L-O -
個人，相鄰 在內存中的字節。
>> 所以，如果你想獲得等在第八屆 字節，它在這個循環中，將很
零支架，支架，支架兩個， 三支架，支架四 -
零索引，直到五 -
將打印出H-E-L-L-ø 在自己的行。
>> 現在，作為一個傳情，讓我告訴你 各種各樣的事情，你會最終
能夠理解，至少 與一些密切尋找。
為一體，包括在今天的 的例子，如果你願意，實際上是
第一越獄 為iPhone。
越獄是指破解手機 所以實際上，你可以用它在一個
不同的運營商或安裝 自己的軟件。
你會發現這看起來完全 神秘，最有可能的。
但是看看這個。
iPhone顯然破獲 一個for循環，如果條件，其他
條件下，一組函數 我們從來沒見過的。
>> 再次，你不會在 乍一看可能
明白這是怎麼工作的。
但是我們採取的一切 授予在我們的現代生活
實際上趨於減少，甚至一些 這些基本面，我們已經
看著。
讓我繼續前進，打開一個 其他程序，holloway.c。
，也因此，這是你 真的不應該知道。
甚至沒有工作人員或者我可以 大概弄清楚了這一點，通過觀察
，因為這是別人的代碼 提交什麼
歷史上被稱為一個模糊處理C 比賽，在那裡你寫一個程序
編譯和運行，但這麼該死的 神秘的無人能明白什麼
它這樣做，直到 他們實際上運行它。
>> 因此，我們確實，如果你看一下 代碼中，我看到一個開關。
我看到主。
我看到這些方括號暗示 某種類型的一個數組。
有誰不想去猜測什麼 實際上這個程序
如果我跑霍洛威？
是。
確定。
幹得好。
因此，只有工作人員和我想不通 出這些東西做什麼。
>> 最後，讓我繼續 並開拓其他程序。
這一次 -
再次，我們就會使源代碼 可在網上 - 這就是
樣靚來看待。
他們所做的一切被擊中 空格鍵頗有幾分。
但是，這是真正的代碼。
所以，如果你認為那是相當，如果我們 實際運行此提示，
最終你將看到我們如何 可能做這樣的事情。
>> 因此，我們將離開你，說明 看到你在週三。
>> [音樂播放]
>> 揚聲器2：在接下來的CS50， TFS上演一場兵變。
>> 揚聲器3：在那裡，他是。
抓住他！
>> [音樂播放]