[Powered by Google Translate] DAVID MALAN：這是CS50，這是第1週的開始。
我們認為今天我們做的是採取回頭看
東西你們中許多人可能走過去對一些
現在的時間，並可能看起來有點熟悉。
這件事情在這裡，當然，這是在 -
觀眾：科學。
DAVID馬蘭：科學中心。
因此，這其實是最早的計算機之一
從20世紀40年代備份。
這是第一機電計算機
這是特別長的，
自我維持的計算，其實我們看到的
科學中心是唯一的一小片這件事情。
我們認為我們會怎麼辦呢，拿回來一看，在視頻
這是前一段時間，推出這
事情到世界各地。
你會看到從音樂和聲音確實是
非常快樂的時光。
>> [視頻回放]
-A勝利的數學和機械技能，這是
偉大的新的自動計算器在哈佛大學。
通過複雜的數學問題，把
機在磁帶上的編碼形式，準確地解決在
對人體所需要的時間的分鐘的餾分
計算。
加快各種形式的數學和科學
研究，巨型機械的大腦會為聯合國工作
美國海軍直到戰爭結束。
>> DAVID馬蘭：那麼，你可能不知道的是，這是在
此相同的設備，一個術語，我們現在都需要相當多
理所當然的被創造出來，是一個錯誤。
所以在這台電腦上工作的工程師
從字面上發現了一個小蛾的機器
在一些不正確的計算。
而作為故事的結局，飛蛾貼在該日誌
雜誌在這裡，從9月9日，在1940年的東西，
從而誕生了世界的“錯誤”。
所以，從今以後，我們認為錯誤是任何形式的錯誤
方案，無論是人為或，在這種情況下，昆蟲。
>> 因此，一些公告，為我們繼續進行。
因此，CS50有一個傳統，提供各種各樣的午餐
在本學期，在這裡我們需要30至最星期五
40名學生在廣場上的火與冰的休閒
閒聊，談談計算機科學，
談論未來。
我們邀請校友和朋友聊了起來，從行業
的學生。
什麼是一個相當大的類真正走向結束
更親密，至少一次，而對於
學生的子集。
所以，如果你想加入我們這個星期五​​，下午1:15，去
CS50.net/lunch RSVP。
我們將做到這一點recurringly，所以不用擔心，如果你不
首批30分左右本週。
>> 因此，文士票據。
一個字的資源，現在開始提供
學生在課堂上。
所以，你的頭不需要在課堂
塗鴉了一​​切，我說等等，我們做什麼
取而代之的是從教學人員提供一個
標準集的音符。
所以我們有一個我們的教學研究員，安德魯Sellergren，
他坐了下來，每星期，回顧了視頻，然後
寫下我們認為這是一個相當
一套權威的音符。
和安德魯的喜愛，同時，把表露無疑腳註
底部。
所以，你希望享受這些作為參考用書
的樂趣，同時還來測驗時間，以此為契機檢討
發生了什麼事，個人講座。
因此，這些鏈接上的講課頁。
>> 習題集，同時，在0。
的資源提供給您 -
演練。
上週五，米洛率領第一。
它拍下來，放到網上，星期六。
因此，實現，如果你真的不知道從哪裡開始，
或未來的P-，總是先對
演練或視頻其。
切片過程中，在cs50.net/section是您
提交您的喜好，如果你還沒有
已經通過。
由於部分將開始今年星期日，星期一，
和星期二。
我們做節這三天，每星期的
在大多數情況下學期。
同時我們也介紹一下，再次，不同的軌跡。
所以，你會被要求在此切片的形式，如果你
還沒有看到它了，如果你是在那些少
舒適，更舒適，或介於兩者之間。
如果你是排序的圍欄上，一般的地方
介於兩者之間的是大多數學生最終的檢查。
辦公時間今晚開始。
>> 因此，從頭開始相當低調，即使它是很自然的
遇到的各種錯誤，或不確定如何
實現的東西。
因此，我們將開始辦公時間本週。
他們將在週一，週二，週三，在安嫩伯格
週四，8:00 PM至11:00 PM在大腦休息。
高年級學生可以進去，如果你有麻煩
在門口，因為他們將可以刷卡，只是說說自己的方式
並解釋你是CS50。
通常是20到30，我們的工作人員將在那裡幫助
你一對一。
>> 抵達後的想法是這樣的：你可以將你的筆記本電腦，
你有你的充電器，我們將有額外的電源線，
特別是沿南壁安嫩伯格
有大量的電源插座。
辦公時間Q＆A的主入口點是去
cs50.net/discuss和發布
你的問題。
並標記的pset 0或PSet 1，凡一周
可能發生的事情是。
然後我們要做的是有一個表，教學研究員
和課程的助理，一般為8或10個左右的我們，
經歷，在黑板上，並保持警覺的眼睛
採摘問題真的以最快的速度，我們可以，
如果你還沒有發現，那些轉介你到相關的帖子
你們，網上參考（如適用）。
然後，如果有問題，因為不可避免地
會，或只是更有意義坐下來一對一，
通過與他人的問題。
>> 或者你只是辦公時間真的
需要這種心態。
你不想去，你通過電子形式
真的想與某人見面。
溝通，對我們來說，會發生什麼事是，當你
問題一直被視為一名工作人員，我們
確定了，嗯，這應該是派出的20或
30團隊成員在本地，你會看到在左上方
小輸入隊列“按鈕開始閃爍cs50.net /
討論。
這是告訴你，你現在已經被邀請，所以
可以說，進入隊列。
通過點擊該按鈕，你的名字將出現在
一個iPad，CS50課程的負責人之一，迎賓員，
持有入口附近的安嫩伯格，誰就會
看到這裡所描述的，有疑問的學生誰
左，工作人員是在正確的。
的點擊左，右，您的Web瀏覽器將
盡快開始閃爍，例如，教授McGonnagal
準備好見你在一個特定的表中安嫩伯格。
>> 所以，我們做了一些過去的一年中。
我們已經重新啟動辦公時間，
重新實現的軟件。
因此，認識到這將是本週熱身。
但也實現過，在過去的幾年中，你可能聽說過
朋友，辦公時間確實是50至
150名學生在一次。
它根本就不是我們能夠處理的
有效地，一個一個，整個晚上。
所以我們真的要嘗試這樣做是
利用的事實，很多問題是
常見的，經常可以更好的回答
異步的。
所以，你可以認為通過排序​​員工的響應，
我們可以認為通過你的代碼，而不加熱
壓力一定掙扎
通過它並排。
因此，我們估計，大約有三分之一或一半的問題
被派遣的人，我們會盡力把她的
多達一半或更多電子，
在辦公時間內。
我們將繼續使用討論
整個星期。
>> 最後，要認識到這當然可以通過/失敗。
所以，如果你正在觀望，或者只是認為你真的
不知道這是你的世界，這是真的
相當陌生的，認識到這是一個美妙的方式
步入獲得一些信心
類，像我一樣坦率地說，幾年前。
然後有五週的時間進行排序圖
如果你自己想留的通過/失敗，切換到信
級，或等。
通常通過/失敗呢，我認為，對學生的
，10小時，20小時，不管它，如果你把
可能在一些問題，你撞你的頭
靠在牆上，
，你真的不能追些東西，和你
有許多其他的事情，你需要做的，說實話，我
想通過/失敗的是，它的邊緣
這樣的情況下。
如果您已經採取了事情的方式的90％。
你知道，這是不是很完美。
但你有很多的，不過。
因此，考慮給你，通過/失敗
心智模式，也許。
>> 好了，所以上週我們一頭扎進從頭開始，我們
談到相當高的圖形編程。
今天，我們過渡到一種語言
C，低層次的編程語言之上
許多現代語言，現已建成，包括一些
那些我們會向學期的結束。
和語法，它們看起來像什麼
是頗為相似。
因此，讓我們開始使這一過渡。
所以這是一個計劃的最後一周，是最簡單的
的Hello World程序。
它只是簡單地打印到屏幕上的Hello World，用
言語不多泡出來的貓。
那麼，如果我們現在就開始翻譯到另一個
語言，實現的想法今天（星期三）和
是相同的，但的語法開始改變。
而在上週，我們有綠色標誌，當點擊時，說
你好世界。
今天我們有int，主要的，無效的，輸出，
回報，在那裡，以及一些其他語法。
的大括號，括號，引號，和諸如此類的東西。
但認識到，這裡的想法的核心是印刷，
最終的事實，主要是現在
代名詞一個程序的開始。
主要將是其中的綠色標誌踢東西了。
>> 所以，現在讓我們梳理出一些的積木
之前，我們深入到一些具體的例子。
所以我們叫一份聲明中上週，它只是
的指令。
做到這一點 - 在這種情況下，說Hello World“。
以及在C，如果我們看一下在該行，這是我們如何
要開始表達特定的一塊拼圖：
printf的（“世界你好”）;
現在，我們除了恥笑這些越來越多隨著時間的推移，
但要意識到這裡有一個模式。
所以，我們有這個東西叫做printf，它是
基本上是類似的字說。
這是它會做什麼。
printf的，且f在這裡的意思是“格式化”。
因此，它只是意味著你可以插入
不同的美學細節。
因此，報價引文結束的開始，我們將
開始調用一個字符串。
一個詞，一個短語，一個句子。
一種編程語言中的字符串是一系列的零
個或多個字符。
因此，H-E-L-L-O，逗號，等等，
報價引文結束的一根弦。
現在反斜杠N，一點點語法奇，但我們
已經定義了，上週，這意味著什麼呢？
這只是一個新的生產線。
這只是一個方式傳送到計算機，您希望
相當於打的輸入有，但你不知道
要按下回車鍵，因此惹了所有的
格式化您的實際程序。
現在括號括起來的字符串，打開括號和
關閉括號，裡面的是我們的字符串。
因為，這是因為在C和其他編程
語言，事情像printf帶參數，或採取
參數。
>> 所以，現在開始思考這紫色的言論塊作為
功能，作為一種方法，作為一種程序。
你真的可以調用任何你想要的現在，但
這是的一個縮影程序，不僅
的事情，在一個單一的線，毫不遜色。
printf是什麼，我們要開始調用
在這種情況下，功能和功能做一些事情 -
打印到屏幕上一個格式化字符串 -
但功能參數或參數。
通過參數或參數，謝謝你，我們的意思
他們的行為可能會受到你傳遞
括號內。
因此，在這種情況下，printf的需求被告知要打印什麼，和我們
只是傳遞，在雙引號的字符串，我們
其實要進行打印。
上線的最末端，這僅僅是一個分號
歷史滋擾，在大多數的代碼行，
你把一個分號，使超清晰的電腦
這行代碼在這裡結束。
現在，這是一件好事，因為正如我們將看到的節目獲得更多的
複雜，分號超清楚地告訴我們人類，
計算機，其中行的代碼的開始和結束。
要認識到，某些語言別有一番
這些相同的信息。
而事實上，在JavaScript中，你並不總是需要的東西
像分號。
但更多的來。
>> 所以循環。
我們有這樣的事情，非常直觀，明顯，做
東西了一遍又一遍。
喜歡把襪子，或者打個招呼，在這種情況下。
好了，從今天開始在C中，我們可以表達這種划痕
阻止而（真）輸出（“世界你好”）。
因此，注意到我們開始建立字面上的難題
從之前片。
我們有相同的紫色塊，但它在這裡面，
括號內永遠的塊，最好的方式來翻譯，
C是如下。
有沒有永遠關鍵字。
你不能只鍵入F-O-R-E-V-E-R在C
因此，最接近的模擬時間。
>> 現在，而（真）似乎有點愚蠢，因為值
真正的不斷變化？
大概沒有。
這就像當一個人說，同時，而真實。
這是同樣的事情，實在是總是如此。
因此，這個循環實際上是誘導什麼樣的循環？
只是一個無限循環的權利。
永遠的循環，我們稱之為上週，
只是一個無限循環。
所以有時這是不好的。
有時，這是一個錯誤，有時，這就是為什麼你
紡紗沙灘球或沙漏或類似。
但是，在這種情況下，我們故意的，不管什麼
因此，想要打印同樣的事情再次
一遍又一遍。
或者像手錶一樣的情況下，你想做的事
東西了一遍又一遍。
如此無限循環，可能是有意義的。
這是如何在C中，我們可能永遠翻譯代碼。
>> 所以，現在這個更具體一點。
我們已經重複了10次以下聲明。
所以，當（真）不相當在那裡工作，因為真正的
總是如此。
因此，如果我們在C版本，而不是看，現在的語法得到了
多一點神秘。
但說實話，一旦你開始看到這一點，一切都會變得
迅速非常熟悉。
因此，這就是被稱為一個for循環。
一個for循環是要告訴計算機做一些事情
一而再，再而只要再次
這些東西都是真實的。
現在是什麼意思？
嗯，有三個部分，一個for循環中，我們要
回來在上下文中的實際
在某一時刻的例子。
所以，不要擔心，如果它不完全沉淪在一次全部。
但遇到了int i = 0，長話短說，說給我一個
整數類型的變量，所以給我一個號
叫我，並把它初始化為0。
這是給我像的代數變量x和
它初始化為0。
但是，在這種情況下，我們把它叫做我。
然後在中間，它說，i是小於10。
這是告訴計算機做下面的東西，所以長
因為我是少於10個。
很顯然，它啟動小於10，因為
它從0開始。
最後，你也許可以猜我+ +。
這是一點點的語法，它只是意味著增加i。
所以加1，我，再，再而三。
>> 所以我們會看到這個循環，這個語法，而是實現
坦率地說，正是同樣的事情，在暫存只是這樣
更容易表達。
重複10，你就大功告成了。
C，和大多數編程語言中，我們必須是一個
多一點啟發性的計算機，實際上
指定這樣的事情。
但我們會回來，這和其他語法。
>> 什麼變量？
在Scratch中，我們有這樣的橙色塊的東西，
在這裡我可以聲明一個變量。
讓我們隨意調用計數器。
讓我們把它初始化為0，然後
讓我們永遠做一些事情。
在這種情況下，在Scratch我說的計數器，所以
貓有一點點說話的語音泡沫
在這個變量的數字。
然後我們有改變計數器減1。
因此，所有這一切都被包裝在一個永遠的鎖。
因此，我們現在已經有在C積木
翻譯這一點。
>> 我們能做到這一點的方法之一是這樣的。
給我一個整數，它稱為計數器。
它初始化為0
在第一行中出現。
而（真），所以我偷這個想法只是一瞬間
前，繼續執行以下操作。
打印出來的計數器，然後遞增計數器，
再次，一次又一次地。
再或者，+ +只是意味著添加的東西。
但是，這裡有一個新的語法一塊。
什麼不跳出在我們前面的例子嗎？
是的，這為％d。
所以，你也許可以推斷出這是什麼做的，坦率地說，根據
什麼樣的擦除塊在做什麼。
但也是在C中，我們只需要多一點特別
當它來表達自己。
>> 因此我們知道printf（“％d \ n”）。
以及大部分的，我們可以扔掉的熟悉。
報價僅僅意味著它是一個字符串，反斜線Ň
僅僅是一個新的生產線。
因此，唯一的新東西是％d。
是一個佔位符。
％d是要表示一個十進制數。
和％D指計算機，把一個十進制數。
好了，你要什麼號碼放在那裡呢？
那麼，你或許可以推斷，逗號後的我們說
計數器，這是一個變量的名稱，我們宣布或
創建幾行。
因此，這只是C的方式插入到一個變量
字符串動態。
因為相比之下，如果是我，而不是做了一些事情，如
這一點，printf（“請反”），這是
程序，而不是做的，大概是嗎？
它會從字面上打印“反擊”。
這是不是我想要的效果。
我需要替換一些數字值。
因此，我們可以看到，其功能，如printf，可以採取不
只是單一的參數，就像
“你好世界”。
他們可以把報價引文結束逗號，然後一些變量
將插入，我們會看到前面的字符串
通過這些％符號的佔位符。
>> 那麼布爾表達式呢？
布爾表達式的值，true或false。
“是”或“否。
1或0。
“開”或“關”。
因此，在從頭開始，他們看起來像這樣，並注意
其實，這裡是底塊的結合
兩個更小的塊。
所以，我種拖放3個拼圖
在一起，使較長的一塊拼圖，讓我
可傳達的想法，我想將x小於y，
將y小於z。
這樣我就可以翻譯如下兩條線。
頂一個很平凡轉換到C，
只有X <Y。
也許一些括號的好措施。
然後在C，你不寫，並表示
結合的東西。
您來寫&&。
而我們最終會看到，發生在一個單一的符號
意味著不同的東西。
因此&&表示的想法。
>> 所以，再一次，儘管這開始看起來相當複雜，
引入划痕的目的之一，除了
只是有樣的，你可以做一個有趣的匝道
這是非常圖形和動畫，
可共享的和等，也傳達的想法
所有的想法今天起，我們開始深入
已體現在即使是簡單的
接口從第一天開始。
這一個在這裡怎麼樣呢？
>> 所以條件。
因此，擦除塊的左邊有看起來
一個稍微複雜一些。
但它只是一些拖動和
下降熟悉的作品。
如果x小於y，這麼說。
否則，如果x是大於y，這麼說。
否則，我們可以合理地假設它的推斷，
他們必須是平等的。
所以說，他們是平等的。
現在在C上的權利，同樣的事情。
並注意花括號將是一個
C和其他語言，這樣做排序的功能，
封裝。
就像塊，如果這是黃色的東西的排序
抓住它裡面的紫色塊。
同樣是這些大括號 -
這些花括號 -
為了變出的，擁抱一個或多個同樣的想法
行代碼的縮進內的。
因此，在這裡的右手側，如果x小於y，輸出
（“x是小於y”）。
否則，如果x是大於y，打印出來的一樣。
否則打印出來，他們是平等的。
>> 因此，在短，有相當直接的映射或翻譯
的語言，我們迄今為止見過的，包括一些
更複雜的功能。
所以，你可能不會被使用為您的項目，也可能不會
為您的項目使用這個這個星期。
但是，我們這些東西叫做數組在C划痕，
他們是所謂的名單。
我們看到這些的Fruitcraft RPG的最後一周。
藍色的小傢伙，走來走去，拿起
櫻桃，橘子，等。
那麼在從頭開始，實施這種橙色
塊，其中包含的話，在這種情況下，我們從字面上
加入“橙色”的
變量稱為庫存。
因此，在C，此語法要多了幾分神秘。
我們會回來這個下週和做多
密碼學與它在世界上的有趣的事情。
但是，在這裡的底部，這兩條線基本上
翻譯，以我們正在做的一個臨時擋住了。
但更多的來。
>> 因此，把它在一起，這裡是一個程序，在C因此，讓我們的
迅速梳理出一些語法在這裡的碎片，但
那麼，讓我們開始編寫一些代碼，熟悉
你的工具，我們將使用，看看我們
現在可以建立這些基本構建塊
上週，現在在語法C.所以在這裡的頂部，
也許是其中一個最無聊的節目，您可以
寫在幾乎任何編程語言。
但它的排序具有特殊的意義，因為它是
規範程序，任何一台計算機科學家寫
教人一種編程語言 -
一個Hello World程序。
>> 因此，在最高層，我們看到這個概念的＃include
然後，在尖括號，stdio.h中。
我們要回來，但真的是什麼
意思是，在這個世界上有一個文件叫做標準
I / O，標準輸入輸出點H，而這只是一個文本文件，
有人寫了幾年前。
該文本文件裡面是一大堆的
函數或方法，程序，其他人
寫，我們是受益者，因為我們
現在可以使用該人士的代碼。
的功能，他或她寫道。
在這種情況下，printf是不是我寫的，這是
沒有CS50寫的東西。
這件事情，有人寫了幾年前，放在一個
文件名為stdio.h中，然後，順便說一句，把
在另一個文件中的功能的另一部分。
但是，我們一定會成功的。
>> 因此，＃包括僅僅是我們的一種說法，在
C，給我訪問別人寫的功能。
在這種情況下，我不在乎，因為我想輸出。
現在，我們要詮釋的主要（無效）。
所以這是一個這些事情，坦率地說，在第0天，
幾乎我已經帶出來的一種，因為它只是
不感興趣
在智力上，一些語法。
但現在知道的功能，也被稱為
過程或方法，一般會產生一定的價值。
他們做了。
他們想出一個答案。
它們產生的輸出。
所以int下主要是說我們的速記方式
此功能時，此過程中，最終將
給你一個數字。
這是為什麼，我們會回來的。
主要是默認的世界標準的默認
功能，在C程序中得到執行時
你運行它。
虛空只是意味著這件事情，主要概不
的參數，在這種情況下。
所以，我超明確。
在那裡有沒有，有沒有逗號。
空隙率是指不帶參數的主。
>> 最後，現在幸運的是，最後兩行是熟悉的。
在大括號中，我們有一個printf
我們有回報。
返回的是一種不幸的是，我們必須
把它放在那裡，因為在這種情況下，它沒有做這一切
更多的興趣。
但是，在計算機程序中，當一個函數返回0，
這意味著一切都很好。
沒有發生任何錯誤。
與此相反，如果一個函數返回1，或負1，或
負1,337，或一些隨機的，這樣的數字，
一般意味著，實際上已發生一個錯誤。
所以，如果你在你的Mac或PC機，如果你曾經看到
一些惱人的消息，因為您的計算機崩潰或
凍結，並有一個模糊的錯誤消息，
然後一些代碼，如系統代碼
1,2,3,4，一些數字，
通常是不必要的細節告訴
我們大多數的人，但是這是一些功能或一些
程序實際返回一個非零值。
這樣做的好處是0表示以及
然後，你基本上有無限多的東西，
可以去錯了。
這就是為什麼他們選擇了0好一個非零值
糟糕，因為我們很快就會看到。
>> 因此，讓我們繼續前進，寫這篇文章。
所以，記得有一天，我用我的Mac上打開了一個
終端窗口，然後我打開了文本程序，如
文字編輯，我開始寫一些代碼。
這是罰款。
但是，你的經驗是要在Mac上是不同的，或
在Solaris計算機上，Linux計算機上，無論操作
系統你碰巧使用。
因此，在使用過程中，是我們，而不是使用的是什麼
稱為CS50電器。
因此，CS50電器是一個可下載的軟件
允許你運行一個稱為Linux操作系統，
特別是Fedora Linux中，你自己的Mac或PC上。
你這樣做，下載名為hypervisor的東西。
因此，所有這一切都將被記錄在問題設置1。
你會引向你所需要的下載。
但最終的結果，無論你擁有一台Mac或PC，是你
下載一些免費的軟件。
然後，您可以下載CS50設備，然後你告訴
免費軟件 - 管理程序 -
CS50電器在一個窗口，在您的計算機上運行。
會發生什麼事是這樣的。
>> 現在，我已經注意到，這似乎是一個桌面
環境。
讓我真正縮小這個窗口。
因此，這是我的Mac上，一個小窗口，在這裡，和內
此窗口發生是一個完全
不同的操作系統。
事實上，這個開始菜單，在這裡，讓人想起
Windows上，有一大堆的子菜單，包括
CS50手動升降梭箱，像一個鏈接。
而現在這樣的環境是一個標準的環境
現在，我們所有的人都可以使用，所以，不管你是什麼
電腦是什麼，你已經安裝了就可以了，什麼版本
你正在運行的Mac OS或Windows的，我們現在有
相同的環境。
而現在，在這樣的環境中，我們可以開始編寫一些代碼。
>> 所以我要繼續前進，並打開了一個名為gedit的。
這相當於把notepad.exe，或
上的Mac TEXTEDIT。
而這僅僅是一個超級簡單的文本編輯程序
第一眼看起來是這樣的。
在最高層，我有一個白色的調色板，在底部我
這件黑色的窗口，上面寫著jharvard @器具。
這是因為該用戶帳戶，我們預先創建
每個人都被稱為約翰·哈佛。
他有他的所有文件的文件夾要去，
在這裡，我們可以開始編寫一些代碼。
因此，讓我繼續在這裡，只是有點放大，和我
怎麼辦＃包括的，詮釋的主要（無效），並
然後我會做printf的（“世界你好”）
;返回0。
現在，這是很黑的，白的。
>> 讓我繼續前進，做一件事教我的gedit的
其實這樣做。
讓我去“另存為”。
我會選擇在這裡的左邊jharvard。
所以，再一次，即使你從來沒有使用過Linux之前，坦率地說
這些天，所有的人都被下放本質上是
同一類型的接口 -
的Mac OS，Windows和Linux操作系統。
因此，，我選擇jharvard的主文件夾。
我將這個文件保存為hello.c的。
因此，在最高層，我輸入hello.c中，命名為C
C擴展程序
什麼是常見的做法。
和我打保存。
現在有什麼好，我已經有效地教gedit中，
這是一個C程序。
請注意，我的黑色和白色文字顏色編碼，或
語法高亮顯示，這只是吸引了我的注意
不同的語義的程序部分。
在頂部，離開了那裡，我的程序變得越來越複雜，我
要所有的事情，我已經寫了一個總結。
所以這是它在那裡。
所以，現在讓我放大，並深入到這個終端窗口。
>> 因此，這也許是很多人。
如果你從來沒有使用過命令行環境，你從來沒
使用DOS，或者你從來沒有使用過Linux，或者你從來沒有打開
您的Mac OS終端窗口中，有很多的事情，你
可以做的圖形用戶界面，如定位及點擊，
拖動，和滴，等，但一般 -
當然，在世界計算機科學 -
使用命令行，在那裡你沒有你的鼠標
一般來說，你有你的鍵盤，實際上是很多
更強大的接口，一旦你適應了
各種命令。
而你自己的需要點和點擊
在一切。
因此，在gedit中，我們將有兩全其美排序。
我們可以拖放文本，我們可以看到它
漂亮的顏色編碼。
但是，當它的時間來運行我們的程序，我們有時會
這裡只是用這個小窗口。
>> 所以我要繼續前進，並做到這一點。
在底部的黑色和白色的窗口，我要繼續前進
並寫鐺。
而鐺是一個編譯器的名稱。
這是一個程序，它把我的源代碼
成，所以，對象代碼。
0和1，我們上週看到的。
回想一下從上週開始，我們承諾，我們要
從這樣的事情 - 我們需要
這樣的事情 -
這當然不是一個人的
做手工。
所以，我們要使用一個程序，該程序在
這種情況被稱為“鏗鏘。
我的程序的名稱是hello.c的。
因此，為了從源代碼編譯hello.c的
目標代碼，或“0”和“1，它應該足以做
這並按下回車鍵。
>> 好，似乎什麼都沒有發生。
但現在我知道，從上週開始，默認的名稱，
一個程序，C語言編寫的，是愚蠢的，叫做a.out。
最無趣的名字，你能來。
A是第一個字母是什麼
輸出，但就這樣吧。
這是我的計劃，現在點斜線，正如我們看到的，是
其實只是一種安全功能，因為
a.out是我寫的程序。
它沒有來，這是我的電腦
在Program Files。
這不是在Mac OS的應用程序文件夾。
我需要超級計算機明確的，並說
這個程序，a.out格式，是當前文件夾中，
當前目錄。
的方式在這樣的環境中你代表這
點代表文件夾，無論你目前所在
因此，/只是意味著運行a.out
在當前文件夾中。
我運行與輸入，瞧，我的第一個程序。
>> 現在，讓我退後一步。
這個窗口是小了點，實現底部
離開這裡的設備是另一個圖標。
一個是Chrome瀏覽器，這應該是相當熟悉的，只是一個Web
組件內的瀏覽器。
而這黑色和白色圖標只是一個
更大的終端窗口。
因此，如果它變得有點討厭排序的
這個小片的一個窗口互動
的程序，而我們可以做到這一點。
現在讓我先鍵入幾個很快
熟悉的命令。
LS。
因此，ls是上市的命令。
所以，在Mac OS或Windows，你一般會仔細單擊
文件夾，然後，瞧，你可以看到所有的各種文件
和文件夾。
在命令行環境下，你只能輸入
命令或文本，LS是等效的。
告訴我什麼是在這個目錄中。
>> 現在有一堆東西在這裡都有點
熟悉又有點陌生的。
但是請注意，就像Windows和Mac OS，jharvard
有一個桌面文件夾中。
所以是我的桌面上的任何圖標，
在該文件夾中。
有一個下載文件夾的東西，
Chrome瀏覽器可能會放在那裡。
Dropbox的。
因此，設備都帶有內置的支持Dropbox的
因此，在這學期，你可以與你的Dropbox同步
帳戶，以使所有的程序進行備份。
他們訪問其他計算機上。
如果有什麼出錯的設備，你可以
很容易從Dropbox的恢復。
因此，該文件夾中有。
有兩個文件，我 - hello.c的
和a.out。
然後在右邊有一些其他的文件夾，我們將
得到的學期即將結束，與網絡
編程。
所以，當我這樣做。/ a.out格式，輸入，這是說去
在我的目錄，當前目錄，並運行
程序名為a.out在那裡。
>> 好了，所以這是好和好，但不是所有的
引人注目的寫一個程序，稱為幫助的a.out。
因此，我們可以真正做到這一點有點不同。
因此，而不是僅僅運行鐺，hello.c的，讓我們添加
什麼所謂的命令行參數。
因此，一個命令行參數，或一個開關，在這種情況下，只是
另一個詞或短語，在提示符下鍵入
你想運行的程序。
因此，在這種情況下，鐺是我想要運行的程序，-O
裝置的輸出不再是一個文件，該文件名為a.out。
輸出文件名為hello，這樣做編譯
最後一個字就行了，hello.c的。
因此，在短，這是一個非常微小的改善，據此，
而不是有這個愚蠢的名為a.out文件，
我現在可以做鐺-O招呼，然後hello.c的，和
然後按Enter鍵。
似乎沒有發生，但再多想用0 -
似乎什麼都沒有發生，這意味著什麼錯誤的發生 -
讓我們現在做LS，輸入，而事實上我現在
有一個hello計劃。
所以，如果我現在鍵入Hello，命令沒有找到。
OK，。/。
所以完全正確的。
所以我寫的，因為這個程序，並沒有配備
電腦，/你好，輸入，這意味著
我現在運行打招呼。
>> 所以這是它在那裡。
現在，我們最終會得到越來越多的命令行
參數，使我們能夠做更多的，只是那些
其中，這可能是舊帽子，讓我真正進入一個
目錄在這裡，怎麼回事，我們只是給你一個傳情
可以去實施的Hello World。
讓我在這裡贅述了，我要打開它。
因此，實際上，我將解釋我在做什麼，所以
這是非常有用的。
讓我回來了。
>> 所以，我一直在這樣做了很長一段時間。
所以注意在右邊有一對夫婦的
目錄名字古怪的source1m和source1w的。
這僅僅是愚蠢的約定，我們使用。
來源只是意味著源代碼，意味著這是本週一，
m表示這是星期一，w表示它是星期三。
所以沒有什麼神秘的存在。
這只是速記符號。
這些藍色的文件夾的東西，否則被稱為
目錄。
我想進入該文件夾，並在一個正常的電腦
我可以雙擊單擊一個文件夾圖標
我的所有文件。
但在命令行環境中，我也不能完全做到
，所以不是，我必須手動更改目錄。
所以，如果我鍵入cd，然後source1m，輸入，請注意，
我的提示，在左邊的白色的東西，只是改變了。
確實，當它剛才說的括號，然後
小波浪線，波浪線符號，那只是意味著我
在約翰·哈佛的主目錄，我的文檔，
他的個人檔案。
但現在在括號中說，〜/ source1m。
這也就意味著我在一個文件夾，名為source1m
這是約翰·哈佛的主目錄中。
所以，如果我現在要列出的文件，在此文件夾中，方便
的問題，我只輸入LS。
現在我看到的所有文件，我今天的預先創建
演講，所有這一切，其中大部分發生
結束於。c。
>> 因此，讓我繼續和運行gedit中的一個程序，稱為
holloway.c，寫的是一些隨機的黑客
在互聯網上，它看起來有點像這樣。
我們是不會去任何通過這個
詳細地說，但對於那些更舒適，尤其是，如果
你想以此來猜測這是什麼程序在這裡所做的。
放心吧，無論是你還是舒服多了，
我們甚至沒有得到這樣的事情在年底
這個學期。
這是什麼是一個例子的模糊C大賽，
裝置寫最神秘的程序，你可能
可以超越其他聰明的人，也同樣
嘗試寫的東西，炫耀，他們可以寫
更神秘的東西比你多。
所以這不是一個例子，一個精心編寫的程序從
風格的角度來看，這是一個例子的一個程序
人們試圖贏得一場比賽，
模糊和抽象的。
>> 因此，如果我們運行這個事情，讓我去到我的終端窗口中，
可以這麼說。
因此，這黑與白的環境被稱為
一般終端窗口。
讓我繼續前進，並編譯它。
我不打算使用鐺，因為這個程序是一個
有點神秘，它需要一個不同的
一個叫GCC編譯器，。
但是，做同樣的事情。
源代碼，目標代碼​​。
現在，如果我運行a.out，該程序
剛看到這樣做。
所以那傢伙贏得了那場比賽。
總之，我們不打算在那個方向，本身。
>> 因此，讓我們真正嘗試到現在取笑除了我們能做些什麼
這些基本構建塊，使越來越多的
有趣的節目。
因此，我們已經寫了一個程序，我們運行程序。
現在，我們實際上可以簡化，不再寫
字鏗鏘的提示。
事實證明，我們的計劃變得更加神秘的，我們可以，或
更複雜的，而實際上，我們可以運行此命令。
因此，讓我回到我的家目錄，可以這麼說，讓我
刪除 - rm是remove命令 - 我要刪除
名為a.out的文件，並招呼。
而現在注意到，在命令行環境中，就像在
一個圖形用戶界面，你會得到提示。我無法點擊一個按鈕，但我
鍵入y（是），Y（是）。
現在，如果我輸入ls再次，那些綠色的通知
節目 - a.out的招呼 -
已經一去不復返了。
當心室。
它可以做不好的事情，就像你可以通過拖動
事情到您的垃圾。
>> 所以，現在讓我們繼續 - 我能做到這一點 - 鐺-O
你好，你好 -
我已經厭倦鍵入該命令。
即使我輸入的有點快。
因此，我們可以，而不是做您好。
所以，做的是不是一個編譯器。
這只是一個友好的Linux自帶的程序，在此
的情況 - 操作系統 -
它可以自動編譯程序的過程中。
因此，而不是記住鐺-o文件名和
再等等，尤其是當這些線路越來越長，
時間越長，我​​可以只寫。
這是怎麼回事吐出了一大堆的東西，
我們最終會看到這個學期。
但是請注意，現在如果我輸入ls，hello是在我的目錄。
事實上，我可以運行。/打招呼。
所以只是自動運行的過程中，什麼是，
在這種情況下，一個更長的，更複雜的命令。
因此，我們將開始使用品牌，只是因為它是一個很大
更加人性化。
>> 但現在讓我們做一個更有趣的程序
不只是打個招呼。
因此，在程序中，我們已經寫了迄今為止的主。
這僅僅是默認的事情，踢一切。
但也有其他的功能在那裡，
stdio.h中的事情，我們看到，在我們的最高
文件之前，這是什麼作為標準庫。
的標準庫裡面是一大堆的功能
別人寫，我們就可以開始使用這些
函數來編寫更
有趣的節目我們自己。
>> 因此，讓我回去的設備。
我要關閉這個終端窗口。
我要關閉的事情，我們之前寫的，只是去
到hello.c的，請注意，現在我可以做以下。
你好世界是不是所有的有趣，我想
此程序為自己個性化。
因此，不是說世界，我要
繼續說 -
我可以輸入大衛 - 但是這真的是一種
基本上是相同的。
但是，讓我們來試試這個佔位符的想法。
回想一下，在C，而在printf，我們有這些
佔位符，並有更多的不僅僅是％d的。
因此，％d的快速完整性檢查。
好吧，十進制數，就是這樣。
十進位數字，僅此而已。
因此，％C，我們也會遇到，將是一個字符。
在這裡放一個字符，一個字母A到Z，
或標點符號的象徵。
單個字符，％F，任何人都知道，從其他語言呢？
因此，一個浮點值。
實數。
因此，沒有一個十進制數 - 這其實是一個實數，
一個小數點，和一些數字的小數點左邊
和右邊的。
％s的字符串。
我們經常會看到。
再次，僅僅是一個字符串，一個詞，一個短語，一個序列
單個字符。
最後，LLD？
因此，這是一個角落的情況。
長，長的十進制數。
所以，如果你想不只是一個數字，這個大的，你
希望有一個更大的數字，你要必須指定
計算機，它具有特定大小。
>> 因此，我們修改這一點點。
而不是硬編碼在大衛，讓我略
動態％S說。
所以在這裡放一個％，這是一個佔位符的字符串。
然後讓我做逗號，然後在這裡的“國寶”。
現在，這是不是所有的智力有趣的，
因為我現在所做的一切是真的創造更多的工作
計算機。
而不是告訴計算機做這一次，我現在
說做到這一點，最終在這裡插入一個字符串，逗號，
這裡是字符串。
因此，這是不是一個更好的改善，但它至少
一步步走向一個更有趣的程序。
因為現在，讓我繼續前進，使這個窗口一點點
大，讓我繼續運行使招呼。
而現在，。/ a.out的不工作，為什麼呢？
好了，現在，它被稱為打招呼。
所以，再一次，也鐺帶-o，改名為
程序更有趣的東西。
瞧，現在它說你好大衛。
>> 所有的權利，仍然是一個愚蠢的計劃。
現在讓我們回去，在這裡介紹的概念
一個變量。
那豈不是很好，如果我可以聲明一個變量
其類型為字符串？
變量的值實際上是從用戶
他或她自己。
所以，隨意，我現在就打電話給我的變量s，這是
只是一個普通的慣例，當你有一個變量稱為
的字符串。
我該怎麼辦等號，然後我就打電話給一個
函數調用GetString的。
因此，GetString的是不是內建C.這是
一個函數，它的CS50的工作人員寫的，真的只是
這些最初幾週，簡化的過程中，
獲取用戶輸入並獲得用戶輸入的形式
字符串或數字，而這樣的。
因此，GetString的是，但很明顯，而不是像printf
打印，它會做它的名字一樣，得到一個字符串。
但是，使用GetString時，我們將​​不得不做出改變
這裡，超出此。
所以，這個方案直觀地，希望會以某種方式
得到來自用戶的字符串，然後又是怎樣的做
以該字符串，稱為s？
這只是要打印的它，對不對呢？
還不是，因為它會刺激計劃
做的是插入該值，其中％s
說，它應該去。
>> 因此，讓我們至少看到這個動作。
讓我保存和縮小。
現在，在我的終端窗口，在這裡，一小片，
讓我再次做你好。
好了，啊，該死的，我得到了一大堆的錯誤。
讓我向上卷動，我們看到我們的第一個 -
讓我們真正做到這一點在一個更大的窗口，所以你
可以看到如何厲害，我搞砸了 -
所以一定要打招呼。
好吧，這是一場災難，對不對？
我已經寫了三行代碼，
它給了我12個錯誤。
所以，這是為什麼？
幸運的是，通常情況下，當你看到很多很多的錯誤
隨地吐痰一次，它真的只是因為你
混淆了計算機。
它仍然困惑的時候，它得到了。
所以剛開始跳閘的腳步，和
隨地吐痰更可怕的東西，而不是實際應用。
因此，在一般情況下，總是從最上方的一個。
>> 因此，很紅色的，最上面的實例
這是錯誤消息。
使用未聲明的標識符字符串，我
意思是標準的呢？
我不知道。
我的意思是字符串，但是這是因為，太多的字串
我一直在使用口頭其實
在C要么不存在。
這件事情，我們將使用的第一個星期或兩個
在這裡，但它存在於一個名為cs50.h.
因此，現在知道有這個其他圖書館，
工作人員寫的，所以它最近被寫入
stdio.h中。
但裡面的cs50.h是一個定義的代名詞
排序，創建此字串。
>> 所以，現在讓我回到我的終端窗口。
我要清除這個全亂了，按Ctrl-L。我們只是
消滅一切乾淨，我要繼續前進，並
大家好，回車。
所以現在發生了什麼事？
現在，所有的這些錯誤就走開了。
那麼，什麼是我真正做了什麼？
我只是教字符串中存在的計算機，和它的
該文件稱為cs50.h.中
所以，不要抱怨，因為現在你知道在哪裡可以找到
該函數的聲明可以這麼說。
它存在於這個世界。
>> 所以現在我要繼續前進並運行打招呼。
我似乎有一個無限循環，沒有發生的事情。
所以，我需要的東西在這裡，對不對。
在我的程序中的第一行代碼的GetString。
因此，它的字面意思等著我去得到一個字符串。
因此，在這個意義上說，它是一個無限的循環。
顯然，在GetString的默認行為，我們
寫 - 工作人員 -
只是說等待，等待，等待，等待，等待，
直到用戶給你一個字符串，輸入的東西英寸
所以，讓我繼續前進，類型D-A-V - I-D輸入。
還有，你好大衛。
>> 現在，這個問題似乎像它只是一個行為呢？
讓我繼續前進，輸入湯米。
輸入，好吧，似乎是工作。
工程羅布，Zamyla工程，工程 - 好吧。
因此，它去上班，最有可能的。
因此，它應該打印出來，無論我們給它，
我們可以在這裡有點困難。
讓我們來看看，如果我們做這樣的事情你好。
可以去這裡，讓我們來看看，複製，粘貼。
我不能夠將其粘貼，很多時候在這裡。
粘貼，沒關係，按Shift + Ctrl + V。但是，是什麼
發生壞在這裡嗎？
>> 好了，所以，段錯誤。
所以，你們中的一些與以前的背景就知道了，
一般，給人的電腦時，他們大量的投入
可能並不意味著接受這樣的長文件名 - 壞
事情發生。
事實上，在網絡的世界中，也出現這種情況相當多，
由此，當你正在設計一個網站，當你
設計Facebook上，你必須做出武斷的決定了
前方，像多長時間會有人的
Facebook的用戶名是什麼？
要不了多久，一個人的名字是什麼？
多久某人的電話號碼等。
如果程序員做出錯誤的假設，計劃打破
因為你試圖給他們更多的輸出，輸入
相反，比他們有記憶。
或者RAM分配給它的，所以，如果現在我按下Enter鍵，
該計劃的實際工作，因為我們是在圖書館
我們預計這種特殊情況下。
但是，毫無疑問，這學期，你會寫至少一個
程序，會說這​​些話的。
從現在開始，請記住這週，也許兩天從現在。
分割故障是一件壞事。
它會參考你做的東西，在計算機
沒有預料到的。
在這種情況下，你的程序員，沒有預料到的。
就像一堆襪子，有各種不同的
角落的情況下，我們可能都遇到過。
同樣的程序中，如果你不預期是多久
一個人的名字將是。
或者，如果我有一個惡意的用戶，和他或她的名字是
其實很短，但他們只是想
來惹我？
這是怎麼回事，是我的程序的行為嗎？
那麼，在這種情況下，這實際上可能會崩潰。
>> 因此，讓我們做到這一點。
在90分鐘，這是一個可怕的很長一段時間
計算機科學。
我們為什麼不進入五分鐘的習慣，
在這裡休息一下，我們回來的時候，我們將深入到一些
更複雜的和令人信服的計劃呢？
五分鐘。
>> 好的。
因此，一個快速評論。
有人告訴我，雖然這是在屏幕前，
我的嘴裡出來的是cs50.net/rsvp。
這是正確的。 cs50.net/lunch。
所以，現在你可以嘗試/午餐RSVPing。
但是，讓我們現在做到這一點。
因此，這已經超快速，超新了很多人。
對某些人的舊帽子。
因此，讓我們倒帶只是一瞬間，看看我們是如何走到
這個Hello World剛才輸出。
>> 因此，首先，有本CS50電器。
同樣，一塊軟件，問題設為1會告訴
如何下載它，下載它，點擊什麼
等等。
然後，一旦你遵循這些說明，你會能
將窗口最大化，和你的Mac或PC上看起來會
像這樣的小東西。
一個黑色的背景下，一個在頂部，所有的主文件夾
您的文件中去，一個垃圾桶在左上角，
菜單的底部。
所以，再一次，精神，Mac OS或Windows非常相似，
即使它恰好是Linux。
所以，我們接下來做什麼？
好，我們開始編寫程序。
記得從上週表示，所有需要寫一個
程序是一個簡單的文本編輯器，
如記事本或文本。
坦率地說，你甚至可以使用Microsoft Word。
但糟糕的事情最終會發生，因為這是一個非常
嚴厲的解決方案寫一個程序，再加上它會
它在錯誤的文件格式保存。
但它只是一個文本編輯器，文字處理軟件，是所有的
需要寫一個程序。
>> 因此，在CS50電器，我們可以這樣做一個簡單的方法。
我們只需點擊這個圖標在底部的左邊。
再次，問題設置1勸你，這個，瞧 -
你這黑與白的界面，在這裡我們可以開始
編寫代碼。
因此，讓我們再次開始寫一個超級簡單的程序。
我要去文件，保存，我現在就打電話給
這一點，我們說，hello2.c。
我只是告訴它通過點擊jharvard，把它
在其主目錄，我真的不關心
這一個“。
然後保存。
我現在就可以開始編寫我的程序。
我記得，我不得不寫int
主要（無效）。
在左上角放大。
然後我想說的輸出，走兩頭。
現在，一個新行，密切的報價，關閉
括號，分號。
，然後我去到我的終端窗口，在這裡
嵌入在gedit，只是為了方便。
我要繼續前進，並寫使招呼，但不
你好，僅hello2。
>> 所以，我的文件被稱為hello2.c。我的文件，因此
應該被稱為hello2，在這種情況下。
該死的，我做了什麼錯了嗎？
好吧，讓我清楚地省略了行，如果你還記得什麼
以前的節目的樣子。
但是讓我們看看如果我們不能取笑這除了。
不幸的是，大多數人誰寫的程序
我們寫程序不簡化了所有的東西。
因此，我們要種什麼不很清楚掠過
這裡說的，如果我們能弄清楚什麼是錯的。
的第一行說，隱式聲明Ç
int類型的庫函數printf。
OK，我明白了其中的一部分。
但它似乎是在暗指的事實，我使用printf的
錯了，不知何故。
什麼樣的意義是什麼錯了嗎？
我只是不教電腦，它是在一個文件中
被稱為stdio.h中。
現在，我只需要記住現在printf是
在stdio.h中，確實有將是其他
在同一文件的功能，我們會習慣的。
>> 所以，現在讓我繼續前進，擊中按Ctrl-L清除
離開，請重新hello2，瞧。
此命令再次，更複雜的，我們將解釋
今天的目的。
但它沒有運行鐺，鐺源代碼和
吐出來的0和1。
在這種情況下，那些“0”和“1叫什麼？
好了，目標代碼​​。
和文件，它們是在被調用，因此，
hello2，在這種情況下。
因為我的文本文件hello2.c的，回車。
現在我有兩個感嘆號，感嘆號
點，感嘆號。
好，那麼我們現在的能力得到字符串，
顯然。
嗯，還有什麼我們可以從用戶那裡獲得嗎？
>> 以及在的CS50庫，還有其他的功能，
在這些前幾天，要簡化我們的生活。
GETCHAR，GetDouble，GetFloat，調用getInt，
GetLongLong是，GetString。
好吧，讓我們這些第一次把她的最簡單的。
GetString的字面意思做的。
它只是坐在那裡，等待用戶輸入一些東西，
而只要我輸入一些東西，然後按Enter鍵，它
不與價值的東西。
因此，讓我們回到這個例子，看看到底是什麼
GetString的在做什麼。
讓我去進取，不斷開拓gedit中，hello.c的，並召回
右中場休息前，這是我們離開的地方。
>> 現在讓我們捉弄，除了在一些更詳細的。
因此，第6行，有兩件事情
發生的時刻。
等號分離上半年和下半年。
因此，在等號的左邊，我們
說字符串s。
然後，只是外行的話來講，什麼是字符串s
這樣做，你覺得呢？
它創造了什麼？
因此，它創建一個字符串稱為s。
現在這究竟是什麼意思？
那麼，它預留空間的字符串稱為s。
這是不完全正確。
這是什麼做的嗎？
好了電腦，你也知道，硬盤驅動器，這就是
您的文件存儲。
電腦RAM，這就是程序加載
而它們正在運行。
所以，當你雙擊一個圖標和Microsoft Word打開
時，Microsoft Word的運行，可以這麼說，在RAM中，這是
您的計算機的電子零件。
而不是物理的，機械部分的紡紗，其中
數據通常存儲長期的。
因此，字符串s中是相當多的，告訴電腦給我
足夠的內存，以適應一個字符串。
現在這是一個有點過於簡單化，因為
有多大的字符串又如何呢？
那麼我們實際上不知道，所以在接下來的幾週來
實際上，我們將拉了回來層是字符串，
我們會告訴你它到底是什麼。
字符串，就目前而言，我們的世界是一個不錯的簡化。
但字符串s中聲明了一個字符串稱為s，現在。
聲明一個字符串。
它保留了一定的空間，RAM為字符串，用戶是
輸入。
>> 現在，讓我們來看看在正確的等號。
所以說getString（）方法。
一個小的完整性檢查。
一個事實，即有沒有括號內
意味著什麼GetString的呢？
它不帶任何參數。
也就是說，你不能以任何方式影響其行為。
每次你使用它，它會得到一個字符串，僅此而已。
與此相反，輸出，希望其行為不會
更改每一次。
否則，這是一個相當無用的打印功能，如果
做同樣的事情。
如果它總是輸出大衛的東西
所有的任意時間。
因此我們知道printf有一個說法是有道理的。
GetString的不真正需要的參數，因為我想
得到來自用戶的字符串，它的用戶，誰去
提供的活力，通過輸入不同的字母
每次在鍵盤上。
>> 那麼，是什麼GetString的最終嗎？
把它看成是這個黑色的小盒子。
這個黑盒子概不輸入，但是當你的一聲就
它，它吐出來的用戶已鍵入的字符串
而事實上，有一個等號意味著需要
什麼是吐了出來，並將其存儲在正確的內
什麼是在左邊。
所以等號，但實際上並不意味著
平等，而技術上分配。
在右邊的值，並把它放在
變量在左邊。
所以，這一切的發生。
>> 現在，在第7行，我們調用printf。
所以printf的希望還是有點無聊了吧。
因此，格式化字符串打印。
什麼樣的字符串？
打印出“H-E-L-L-O％S
\ n“。
好，所以我想插件％s的嗎？
從字面上看，無論是儲存在s。
因此，在這種情況下，小的完整性檢查，多少個參數
printf的？
好吧，我聽到了一個。
我聽說了。
二，我聽見了兩聲。
如何約三個呢？
好了，三個？
優秀。
有三種可能的答案，其中只有一個是正確的。
所以論據再​​次影響一個函數的行為。
在過去，輸出也只需要一個參數。
“你好世界”是一個參數。
然而，現在，這個逗號。
這個逗號以外報價/引文結束，這意味著
哎輸出，來這裡的第二個參數。
>> 所以在大多數編程語言中的逗號
獨立的多個參數。
因此，這裡的答案是肯定不是，因為
這是逗號。
因此，微創，輸出顯然是採取兩個
參數這個時候。
但這裡的機會，一個棘手的問題是什麼
這個逗號呢？
這是否意味著，實際上有三個參數？
這樣，這樣，和這個。
因此，沒有，因為這個逗號是裡面的引號，這
這意味著，它實際上只是一個審美的英語。
它具有的數目無關
這個程序的參數。
因此，這個逗號是外面的雙引號。
然後返回0。
現在讓我們只是一個信念
今天，只知道，當功能都執行
行代碼，他們通常會返回一定的價值。
在這種情況下，僅僅是因為主必須返回一個int，
這只是C語言的工作方式。
>> 所以，因為沒有發生任何錯誤，感覺就像是這個計劃的
很好，我只是硬編碼在返回0。
但在相反的是，我寫這篇文章的偽代碼
現在，像約瑟一樣，當我們做襪子
例如上週。
如果發生了錯誤 - 這是不實際的代碼 - 去
錯誤，然後返回，比方說，1。
否則返回0。
因此，這是我們要去的地方與此。
這是不實際的C代碼，只是偽代碼。
但是，這是怎麼了，你可能會返回
不同的可能值。
但現在，我只是要繼續前進，返回0。
所有的權利，任何問題迄今在語法，功能，
或喜歡嗎？
是啊，在後面。
>> 觀眾：[聽不清]
DAVID馬蘭：你能不能說大聲一點好嗎？
為什麼這個程序返回0，？
觀眾：[聽不清]
DAVID馬蘭：哦，那是因為我懶，對不起。
沒有良好的學術響應，返回0。
我可以種挽救這個，說技術上Ç，如果主
沒有明確返回一個值，將返回0
自動為您。
這是真的，我不只是覆蓋。
但是，我做了這種方式。
不是我的錯比其他任何有趣的外賣。
是嗎？
>> 聽眾：通常，當你鍵入的空隙，這意味著你
不返回值。
DAVID馬蘭：正確。
相反，如果你之前指定函數的名稱，
例如在這裡，無效的，那麼該函數
不返回任何東西。
因此，我只想說，退貨或什麼都沒有，
這將是一致的。
我們會回來。
僅供參考，學習的漁獲之一
編程的世界中，有數以百計的書籍和
有數百個網站你都會
看到不同的語法在不同的書
由不同的人。
認識到，我們會盡我們最好的部分和講座
一致的。
但有時你會看到衝突的語法。
因此，只要有疑問，就問我。
而在一般情況下，我們會照顧講座和部分
幾乎總是出現在正確的道路。
而且我幾乎總是說，因為點的情況。
其他問題嗎？
>> 觀眾：％s的外部設備存在嗎？
DAVID馬蘭：％s的存在以外的設備嗎？
是。
因此，％s有做C.事實上，我們使用它在
設備從根本上有什麼做的
我們所使用的語言的功能。
事實上，上週，當我們用我的Mac上，我寫了
我的Mac上的C代碼。
我可以用％s，在我的Mac，你可以使用它
您的Windows電腦，如果你安裝一個編譯器，如
微軟Visual Studio中。
因此，％s的。
我們的一切做今天這個窗口裡面，
C.根本沒有做的做
操作系統的問題。
與此相反，黑色和白色的終端窗口 - 當
我輸入ls之類的東西，RM，和CD -
具有與操作系統和
瀏覽左右。
是啊。
觀眾：我指的是庫，的CS50庫。
DAVID馬蘭：好了，所以，如果你的意思是關鍵字串，即
只存在於的CS50庫，正確的。
在C本身不存在的，而事實上，在一對夫婦
的幾週內，我們將扔掉CS50庫，並開始
從頭開始自己做的事情，可以這麼說。
其他問題嗎？
是啊。
>> 觀眾：[聽不清]
DAVID馬蘭：好問題。
的命令區分大小寫？
讓我在這裡進行了區分。
所以命令是一般的事情，我們會寫在
底部的窗口，在終端窗口中。
在這裡的任何陳述或C代碼。
但在這兩種情況下，得到的答案是一樣的，是的。
這兩種環境的C代碼在頂部和
在操作系統的命令行
底部，是區分大小寫的。
所以，你必須利用GetString的與資本ĝ，
資本S.您必須編寫printf全部小寫。
您必須輸入ls全部用小寫。
因此，在幾乎所有的情況下，這個學期開始，情況將在
其實，不管。
是。
>> 觀眾：[聽不清]
DAVID馬蘭：啊，這樣好嗎，如果我們有一個文件
名為hello.d的。
因此，原來D是一種編程語言。
因此，在某些情況下，我們其實可以寫一個程序，
該文件，並以這種方式編譯。
我們就可以了，其實，簡單的答案是，我不知道。
因此，我們要做到這一點。
讓我繼續前進，創建一個新的文件。
和自旋這裡，說實話在一般情況下，每當有任何疑問
這學期，你有你的設備或計算機
打開，繼續前進，嘗試的東西。
所以，我要保存一個文件名為hello.d的。
保存這一點。
而且我要運行make招呼輸入的。
它似乎可以推斷，C是更容易
比d，在這種情況下。
其他的問題。
是啊。
>> 觀眾：[聽不清]
DAVID馬蘭：好吧，說一次。
觀眾：[聽不清]
DAVID馬蘭：你將如何去診斷，或
故障排除了嗎？
因此，最有可能的，因為他們是不同的語言，
最有可能的是，你會得到一個完全
不同的程序輸出。
你會得到完全不同的錯誤信息。
也只是在設計方面，它會可以說是一個
糟糕的設計決定寫兩個不同的
語言幾乎相同名稱的文件，
使用相同的目錄，
自動工具，如使。
所以我也可以推回，並說在15年這樣做，
從來沒有這樣的錯誤。
可能發生。
但只是不同的，我覺得，
到位的後勤辯護。
加上錯誤消息會隨之而來，這將
最終揭示的問題是什麼。
但一個可能的角落的情況。
>> 好吧，讓我們介紹的只是一對夫婦的其他
功能現在在這裡，所以我們就可以開始建立更多
更複雜的程序。
因此，首先，數學。
因此，數學運算的例子只是一種很容易在第一週。
這是不是說，所有的編程是
數學。
當然，理解的各種功能
數學，代數尤其是
相當與此有關。
在較高的水平CS類，線性代數，
演算，和等。
但要意識到什麼，我們就做這學期減少
數學，肯定不會算術，本身，但真正
只是邏輯和縝密的思維。
所以，這種聯繫是計算機科學早已有，
尤其是在高中階段，數學，是一個
有點誤導。
因為大多數的程序，我們會寫，真的，
排序更高的層次，集中精力解決問題，
當然，可能會使用一些加法，減法，以及各種
數學公式或等
但在一天結束的時候，它是關於思考，而不是
你可能會做的像TI實施
在高中的計算機。
>> 因此，隨著中說，讓我們現在做的這些東西
數學運算符不存在，因此，我們可以訪問
在一些的相關方面的編程，或在
這種情況下，所以，CS50庫的建議，
今天，我們只是使用GetString - 在某一時刻
也許另外一個功能 -
但也有不同類型的數據在一台計算機。
在一天結束的時候，計算機只認識0和1。
但記得，上週我們談到的二進位制
在代表數字，比如數字0，1，和2，
一路多達8個，在Nate的視頻。
然後，我們可以算高得多，因為我們
這裡舞台上。
但是，如果你想不只是代表數字，但字母，
我們，人類必須拿出一些任意
公約，即如果在一天結束的時候，我的電腦
是來表示0和1，以及我們最好的能力
啟動標準化模式0和1代表
不同的事情。
0和1的模式，代表字母a。
模式0和1代表的字母z。
模式0和1，代表顏色為藍色，或
紅色，或等。
我們需要利用所有這些0和1來表達我們的
不同的情況下，以不同的方式不
一定數值。
>> 因此，在代表性方面，C有不同的數據類型，
我們已經看到了其中的一個為止。
我們看到int，而屏幕上沒有注意什麼
現在的問題是字符串。
事實上，串不存在的C.再次，這是一個
簡化我們提出第一
幾個星期。
一個char是一個單獨的字符。
一個浮點數是實數，小數點和數字，
它的左側和右側。
雙是什麼，對於那些用回之前的背景？
因此，一個雙兩倍的東西。
添加兩次盡可能多的精度。
所以，這是什麼意思呢？
因此，在這種情況下，世界上有樣的標準化
多少位被用來表示
這些東西。
所以，如果你看過Nate的的ASCII視頻已經為部分
的pset 0，本週晚些時候你會，你可能會知道
該ASCII -
字符表示 -
使用多少位？
你甚至可能還記得上週我們演示如何
很多人在舞台上。
所以，通常為7或8，。
所以一般是8個，而且也稱為擴展
ASCII使用所有8位，而不是7。
但在一般情況下，我們談2的冪，所以在這種情況下，8。
因此，編程語言中的一個字符一般是8位。
因此，一個int通常是32位。
一個浮動通常是32位。
雙64位。
這是什麼意思呢？
這意味著你可以代表更大的數字，或在案件
實數，你可以有更多的號碼後，
小數位。
很多更精確，在這種情況下。
現在不幸的是，很長很長的名字命名。
所以這是一個int，它是32位的。
是一個長期的，不，32位。
很長很長，這是64位。
但是其中一些是上下文相關的，它取決於
你有什麼樣的電腦。
因此，在一般情況下，我們將指定一個作業或測驗中時
它實際上很重要。
但問題是，有所有這些不同的
表示在這裡。
>> 因此，讓的潛入程序。
而不是寫一個從無到有，讓我先走
從今天的源代碼開放 - 所有這一切是
在線 - 如果你想在網上傳播，修改或回報
週三在您的計算機上的設備，指示
將課程的網頁上的鏈接。
這是一個超級簡單的程序。
但它有一點點新的東西在上面，
我們以前是沒有的。
一大堆的藍線的文字。
因此，這些藍線代表的意見。
因此，它是非常有用的程序，能夠寫
一些評論對自己或同事，或朋友，或
教學研究員，諸如此類的描述發生了什麼事在
這個文件，但是什麼都沒有做的C代碼本身。
沒事做的程序功能，它只是
美學。
所以，你的方式做這在C通常是你開始
/ *，您的評論結束您的寶貴意見
* /。
而如果你是真正的肛門，像畫樣的圖片，
然後你把一大堆的明星，你會做一個
像這樣的小盒子。
但這些都不重要了。
唯一重要的是第一個
最後。
這是什麼所謂的多行註釋。
而且這只是一個人的慣例經常做的星星和箱
在這樣的事情，如果你有很多的空閒時間。
>> 所以你已經寫了一些意見後，一般來
實際膽量的方案。
下面是我們所熟悉的＃包括的。
而就快，這是必要的，沒有必要？
觀眾：必要的。
DAVID馬蘭：所以它實際上是沒有必要的。
那麼，為什麼，不過，它沒有必要？
因此，有沒有printf的。
的確如此。
我們正在做的這個計劃是數學。
所以，其實我可以刪除它。
所以，你並不總是有包括什麼
的頂部的一個程序。
>> 因此，讓我們簡化這一點。
現在請大家注意，這是什麼程序。
沒有太多的興趣。
X = 1。
那麼，這是什麼做的？
好了，回想起從之前的心理模型。
這個表達式的左邊做什麼？
創建一個整數的空間。
因此，空間有多大？
好了，我們碰巧知道現在這是32位。
在此之前，字符串是技術上32位，但更多的
在未來。
但是，一個int是32位。
所以這個表達式左邊，詮釋x只是說：哎
操作系統，給我32位的RAM -
否則被稱為4字節的RAM -
所以，我可以把在這個空間中的一個整數。
你想要什麼整數放？
那麼，就數1。
詮釋y得2，完全一樣的東西，即使
數較大，其規模。
數字本身仍然只有32位。
它只是的比特的圖案是不同的
代表1比2。
INT z現在說再給我一次32位，把它Ž，並把
總和1和2在那裡。
所以，現在z是大概存儲的值是3，
然後返回0。
>> 現在這個程序，它是做什麼好玩的東西嗎？
因此，它實際上並沒有做什麼有趣的事，在任何
有道理的，因為為什麼呢？這是做一些數學。
但它不是返回答案，正確的。
它返回0。
這不是印刷的答案。
因此，這個方案基本上是毫無價值的，因為它
代表現在。
這是做了一些工作。
要採取一些秒數，或微秒，到
運行，但它實際上沒有做任何事情
用於人類。
>> 因此，讓我們其實現在打開MATH2，其實我現在
打印結果。
因此，這也可以推斷，從我們前面的例子。
如果我想要做一些簡單的數學，X = 1，Y
= 2。 z是1加2。
這是怎麼回事打印出明顯嗎？
短短3。
因此，快速完整性檢查。
讓我進入這個目錄。
因此，CD source1m。
讓我繼續鍵入make MATH2的。
任何錯誤消息出來了，所以讓我運行 -
a.out的，讓我運行MATH2。輸入。
而事實上，它打印出來。
那麼讓我們來看看一個變種，這種。
在math3.c中，我們現在有這樣的例子。
>> 因此，這是一種有趣的。
因此，在這裡，答案是會得到1除以10，
發現我已經宣布它為float。
為什麼我希望它是一個浮動？
那麼，它的一小部分。
這將是一個實數。
因此，它的將是0.1，希望 - 10％，在這種情況下。
什麼然後，我想打印出來嗎？
那麼，這個答案。
好吧，讓我們的捉弄這些除了第一。
因此，在左側聲明
浮動，把它回答。
在右手邊，1除以10，並把
回答變量的內側。
現在，這條線看起來多了幾分神秘。
但是請注意，一些熟悉的功能。 ％在這裡的意思而來的，是
佔位符。
f表示這裡是一個浮點值，只有一個真正的
數，帶小數點的東西。
0.2意味著什麼？
任何人都知道，從以往的經驗嗎？
小數點後兩位。
因此，我們沒有看到這之前，但它只是一種方式
行使更多的控制權printf和
說不要給我小數點後的30分，
而不是給我2。
>> 然後讓我們繼續前進並運行此。
因此，數學3，現在讓我跑數學3，輸入。
這是不正確的。
我們似乎遇到我們的第一個真正的錯誤。
好吧，也許我只是沒有足夠接近。
因此，讓我在這裡，讓我把十進制的20
點的地方。
讓我編，使math3運行。
相當肯定除以10不為0。
所以，這是怎麼回事呢？
好吧，所以其實也沒有做這個。
這是一個很好的想法。
這是真的只是一個巧合
我們這樣做。
但只是為了證明這不是它，我會
返回隨機的東西。
不這樣做，在家裡，因為它只是錯誤的。
但是，math3，讓我運行它。
所以，做什麼我回無關，只有做
與什麼我打印。
但我聽說了這裡。
什麼？
觀眾：所以，我們需要寫的號碼
該司 -
>> DAVID馬蘭：好非常​​好。
因此，我們需要寫的號碼參與
師在這裡浮點值本身。
因此，這裡的問題是像以前一樣：C，有很多
語言，有不同的數據類型。
這些數據類型，例如，這些在這裡。
和數據類型的問題在這裡，當我鍵入1，然後我
10型，可能是什麼樣的數據類型嗎？
因此，它可能是一個整數，對吧？
這絕對不是一個float，因為沒有小數
點或類似的東西。
所以，真的，我有一個int除以一個int。
>> 因此，有趣的是數學和計算機是
如果你正在做使用整數除法 -
1除以10，是0.1。
然而，當你一個整數除以一個整數，
答案也僅僅是因為，現在是一個整數。
有什麼含義呢？
好吧，如果答案是1除以10等於0.1，
在計算機要做的就是，我不知道如何
代表0.1，因為這是一個浮點值，而不是
整數，它是要砍掉之後的所有
只顯示小數點和0開頭。
而事實上，它的印刷作為一個浮點
價值，它只是一個審美的東西。
這是因為我強迫電腦打印這是一個
浮點值。
事實上，我已經聲明為float，但數學是
發生在這裡。
>> 因此，讓我在一個相當簡單的方法解決這個問題。
我為什麼不只是做10.0和1.0，雖然
技術上，我可以逃脫，只是在做其中的一個。
現在，讓我繼續，並math3的。
讓我去前面，現在運行math3，輸入。
而現在，男孩哦。
現在我們有一個完全新的問題。
因此，更好地權利;我們接近0.1，但顯然是
錯了嗎？
除非我們已經對你說謊了多年，對不對？
1除以10，實際上是不太0.1，有什麼
真的在這裡嗎？
那麼你可以種原因，通過這個邏輯。
如果一台計算機只有有限數量的RAM開始
，的確是一個計算機使用的是32位的
浮點值，按理說，一個
在這種情況下，有限數量的位，32是的，你可以
代表了很多東西。
它實際上是4個億不同的值可以
代表32位，2到32，但它仍然是有限的。
因此，問題是有一個無限的個數的實
號，請右鍵。
如果你給我一個實數，我可以隨時找到你
稍微大一點的，略少，只需要調整
小數點後的號碼。
所以，如果你沒有無限的數位，
不可能代表一個無限
實數的數量。
>> 因此，有電腦，這種固有的不精確性
這被絆倒了所有的時間，即使在最簡單的
這樣的程序。
而且在一些非常現實的世界問題。
事實上，讓我們花一點時間來只是來看看
的事，其實在現實中發生。
我們要注意的第一對夫婦分鐘，然後
我們將網上發布的鏈接。
但是，這是證明什麼可以去錯了，相當
坦率地說，在一個非常悲慘的方式時，這些東西都不是
讚賞或只是我們人類犯錯誤，當涉及到
這類現代計算機的實現細節。
>> [視頻播放]
現在我們回到工程災害對現代奇蹟。
計算機。
我們都接受的往往是令人沮喪的問題
和他們一起去的。
錯誤，病毒，軟件故障是小的價格
支付的便利。
但在高科技，高轉速的軍事和空間
程序的應用程序，可以最小的問題
放大成災難。
1996年6月4日，科學家們準備推出一個無人
阿麗亞娜5型火箭。
它攜帶的科學衛星，旨在
如何建立精確的地球的磁場
與太陽風相互作用。
火箭是專為歐洲航天局和
升空，從法屬圭亞那海岸的設施。
>> 在進入飛行約約37秒，他們第一次
發現了一些錯誤，噴嘴
旋轉的方式，他們實在不應該。
約40秒，成飛，明確了車輛
遇到了麻煩，那就是當他們作出決定，
摧毀它。
一個範圍內的安全人員以極大的勇氣按下
按鈕，炸毀了火箭之前，它可能會成為一個
危害公眾安全。
>> 這是首航的阿麗亞娜5，
破壞了的地方，因為在嵌入式的缺陷
火箭的軟件。
>> 問題的阿麗亞娜的是，有一個數字，
需要64位表示，他們希望將它轉換
到一個16位的數。
他們假設的數量從來沒有
將是非常大的，
大部分那些在64位的數字的位數是0。
他們錯了。
>> 一個軟件程序無法接受
數所產生的另一個種的根目錄下
失敗的原因。
軟件開發已經成為一個非常昂貴的部分
新的技術。
阿麗亞娜4型火箭已經是非常成功的。
這麼多的為它創建的軟件也被用來
阿麗亞娜5。
>> 的基本問題是，阿麗亞娜5快，
加速更快。
軟件不佔。
>> - 破壞的火箭是一個巨大的金融
災​​後，由於軟件錯誤一分鐘。
但是，這不是第一次的數據轉換問題
困擾現代火箭技術。
>> DAVID馬蘭：我們會離開它。
但是，這是證明如何適用，甚至一些
這些最低級別的細節，我們已經開始
探索今天。
所以，即使你得到的一些也許有點心煩意亂
的語法和arcaneness這裡，實現在
長遠來說，我們會重點就如何適用，這是
遠遠超出CS的世界。
我們將看到你在週三。