JASON HIRSCHHORN:歡迎到 CS50節,每個人。 我的名字是賈森·赫塞豪恩。 我是你的轉錄因子很多,但很多 人們會希望能夠加入我們 在線擴展學生或學生 試圖通過部分看,如果他們 那一周或錯過了他們的部分 正好趕上,如果他們想 回顧一些材料。 因此,按照教學大綱,所有 你們都讀過,糾正嗎? 我看到了很多的點頭。 節為您提供的機會 探索課程 材料在一個更親密的環境, 以及潛入 實踐活動。 所以,基本上我們什麼 會做每週。 我們通過我們有什麼打算去 確定為最重要的 涵蓋的主題演講,和那些 大概也是最有用和最 最有可能想出問題集 和測驗,並在您的編碼 CS50之外的生活。 因此,我們要進入這些主題, 討論這些問題,他們走了過來, 回答你們有任何問題, 然後我們做了很多 在編碼的實際問題。 你們都帶來了筆記本電腦, 這是夢幻般的。 這是一個計算機科學類。 但是,我們做了很多的練習, 你不會需要你的筆記本電腦。 你可以做他們在片材上的紙張。 這就是你要 做他們的測驗。 而事實上,這是一個偉大的方式來 真的知道,你該怎麼辦 如果你沒有的東西檢查50〜 依賴或依靠,告訴 你做了任何錯誤。 因此,歡迎你在代碼 裝置或run.cs50.net,這是 另一種工具,允許您編寫 在線,但我也建議,如果 你有沒有試過,使用表 紙和嘗試這些做法 一張紙的問題。 這還是因為同樣的原因,這是最終 你要什麼 要求做測驗。 因此,讓我們開始我們的 今天的議程。 我們打算去了一些規範 我們的部分,然後我們要去潛水 成數組,函數和命令行 參數,這是你們 過去的這一周,已覆蓋講座 然後在週一,你會覆蓋 更多的明天。 最後,我們要 談論pset2。 如果我能得到一個舉手,如果你 沒有看著兩個問題集 規範。 我們大家會說。 太棒了。 我們將談論問題套在一個位, 但如果你閱讀問題集 規範,這是 所有你需要做的。 如果你讀之前,你來 類和部分在週二,你會 是一個偉大的位置。 我們可以去通過習題集, 這就是我們要去 做底。 我們要經過 邏輯,確保 每個人都在同一頁上。 我希望你能夠離開週二 你感覺很舒服 需要做的這個星期的問題集, 如果你不這樣做,我會很高興 留後,並與您合作。 但是,這是一件事,你必須 做,但我認為很聰明, 只是閱讀問題集 規範類星期二 這聽起來像一個 你們做的很多。 我將開始與每類議程 所以你知道我們要去的地方。 這也是有幫助的人看 在網上,因為每個節 顏色編碼,所以如果你要來 ,只是看10分鐘,而 比整個90分鐘的部分, 剛去的顏色編碼部分 並期待在這一部分。 因此,我一直試圖將它們分開成漂亮的 模塊將允許你 - 如果你想回來,並檢討, 或其他學生只是 看一段檢討 - 找到具體的事情,他們 要注意的 並進一步了解。 甜。 規範。 我是一個FOP在校園裡的領導者。 我不知道,如果有人做FOP。 有沒有人做FOP? 一個人做FOP。 兩個人做FOP。 真棒。 因此,FOP是第一年戶外 迎新活動。 我們進了樹林,使新生 最神奇的經歷 他們的生活,是否正確? 嗯。 聽起來是正確的。 所以,我只是想開始我們的第一個 通過討論一些規範部分 類和我們之間的關係 因為我覺得 他們是非常重要的。 首先,那些你們誰 我的部分已收到並 中討論的 電子郵件,我喜歡這個。 這是今年我最喜歡的部分。 我一直很興奮。 我在這裡已經好幾個小時。 我還沒有離開這棟樓除了 去吃飯,因為我愛CS50節,我 愛教學,我愛工作 你們。 我的最高優先事項之一,如果不是我 頭號優先,不僅為 這一類,但包括我的其他 類和課外活動,是 支持你們,幫助你們, 盡我所能,確保您 你們有一個美好的,有趣的,多產, 引人入勝,令人振奮 在這個類中的經驗。 這就是我的承諾。 這就是為什麼我喜歡這樣做。 這是我的一件事, 支持你們。 如果您有任何關於講座的問題, 問題集,節, 生活中,即使你想談談 生活中,請隨時伸手。 你有我的手機號碼, 你有我的電子郵件 地址,你有我的GChat。 你可以聯繫我的任何或所有 何時何地,但可能不會得到 響應時。 我嘗試在24小時內取回。 通常情況下,它會在 20分鐘或24分鐘。 我應該說, 使其平行。 但是,你會得到一個回應 很快。 如果你給我發短信前一小時 問題集中到期,我會冷靜 下來,做深呼吸練習 你,但如果你還沒有開始, 你可能不會完成, 我真的不能幫你在那裡 儘管我會盡我所能。 所以,我會盡一切 我可以支持你。 請隨意是否達到 它在節再次,在辦公時間 如果你看到我,甚至在外頭。 我很高興,設立時間,以滿足 通過問題和工作 或材料走了過來。 所以這是頭號,支持。 我會盡我 可以支持你。 二,會議中間。 就像我想是的,我 不是萬能的或強大或 全知的,所以我不知道所有的 時間,如果我在做什麼 跨越,如果我教的方式 主題幫助您了解它,或者,如果你 感到困惑的話題,但不 舉起你的手,或問我 或發電子郵件給我。 或者,即使你再感到困惑 有關問題上的東西。 如果你不拿出來給我, 我不知道那是肯定的。 我要盡我所能來檢查 你們這些傢伙,確保一切 順利,試教的方式的事情 大部分將有利於 您的學習風格,但如果有 我能做些什麼,讓我知道。 沿著這些線路,如果你想要一些幫助 設置的問題,我更 比竭誠為您服務 問題集。 我們打算做了很多 ,朝第二 本節的一半。 但是,如果你還沒有閱讀問題集 備份和沒有看過步行 通過和沒有看過的短褲 並期待我來教你 一切已經錄像 在線或你可以找到CS50 學習,這不是一個真正公平的 我或你的其他同行。 所以,請我更樂意幫助 你,但你們得到了滿足我 中間。 我們有資源噸 你CS50。 我提到其中的一些。 請利用它們。 如果你困惑,我更樂意 幫你解釋他們在 另一種方式,但它是不公平的,如果 學生在辦公時間, 還沒有開始任何事情,它是 週四晚上,他們正在期待 他們通過每一個TF走 由於問題的東西設置 第二天中午。 有意義嗎? 再次,請配合我們在中間。 最後,很高的期望。 我要分級大家誰 在我的部分,或得分 習題集。 你還沒有問題 設置零次或一次。 我們很遺憾。 我們花了一段時間,終於 解決部分,而現在 我們可以開始分級。 我將讓他們回到你 盡快。 這些都是我的一些 有advisees。 我將讓他們回到你 盡快。 第二個問題集,我們會在 安排,我們將開始讓他們 你很快後 你打開它們。 當您重新設置您的問題, 將獲得更高的分數,因為你知道,從 閱讀大綱 - 正確性, 設計,範圍和風格分數。 您還可以得到意見。 更重要的意見 比分數。 我認為它是安全地說。 分數只是一個數字 從一到五。 這是很難讀入那些。 這是從那些難以改善。 但評論指出具體 事情,你做得很好或地區 你可以改善,並給你一些 對未來的想法或替代 做事的方法。 所以,請,請,請仔細閱讀“ 通過的意見。 我把大量的時間到 這些意見。 請仔細閱讀並通過他們不只是 向下滾動到的底部 PDF格式,看你的分數,或者去網上 找到你的分數,然後忽略 的意見。 那不是你 會變得更好。 那不是你要增加 你的分數,最終,只是 看上面的分數。 請看看這些意見。 沿線很高的期望, 再次,就像我說的,你 可以砍下從一到五。 三三兩兩,三分球,四肢 絕大多數分數 你要得到。 和五歲以下兒童的都是真的很罕見。 總是有東西 我們可以做的更好。 每當我編寫一個程序,有 總有一些事情我 可以做的更好。 因此,而不是說你得到了五 一切所有的時間,並 一切完美,我不認為任何 我們真的相信我們 - 希望我們不要做的一切 完善所有的時間。 所以,不要擔心,如果你 沒有得到一個五。 一個五不映射到一個A, 不映射到一個B,一個三不 不映射到這不是一個C。 的分數是如何工作的。 像大衛已經說過很多次, 學期結束所有你的分數和 從我做起,輸入你的TF,走到了一起 並為您確定最終成績。 但同樣,它不是五, 四,B,等等。 所以我要抱有很高的期望 為你們。 我要去預期良好的問題 套,我要去給 您的反饋等。 它不會意味著你 會得到檔次更糟。 您而言,分級 你的進步從週 為零,當然結束。 最後,在高 在課堂上的期望,我愛 人參與。 我明白有些人覺得更多的還是 不太舒服的參與。 其他人參與 不是靠提高他們的手, 說話的時候。 但我們在這個類將要 做了很多的小問題,很多 小的問題,然後一些 更大的編碼問題。 所以肯定這些工作鍛煉出來 當我們這樣做,他們在您的計算機上或 一張紙。 但我還會給你前一段時間 有人回答一些 我問的問題。 所以,因為我會給你一些時間 想想吧,因為我們要去 有時合作夥伴做的事情, 我會期待大家 要有點從事。 而對於缺乏一個更好的詞, 可能會冷通話, 是每個人都將有機會 思考答案,然後 我會打電話給你,然後 你會說答案。 不要擔心或害怕,。 我已經做到了在過去,我們已經找到了 它的成功得多, 閱讀教育研究 確定是否它是一個 良好的戰術。 這是非常有用的,特別是如果你 讓學生有時間去思考 的答案,不要讓他們剛進來 出來,說出來了蝙蝠的權利。 但是,如果你感覺不舒服 回答,我還不錯 感應到了,我們不打算 把你在現場,尤其是在 攝像頭,即使沒有 你是在相機現在。 因此,這些都是我的規範。 沿線的一件事 滿足在中間。 我去給你們 很多反饋意見。 請給我反饋。 有一個網站,sayat.me/cs50。 所以這是一個誠實的反饋。 如果你想給它一節期間, 我收到一封電子郵件,每當發生。 我們將稍事休息,所以我會在一個位 然後看通過反饋。 如果你有任何意見, 請給我有。 如果你給我反饋,這是在Q 美妙的,但是這是導 你做底。 但是,這將是在學期結束,所以 我不會可以採取任何的 反饋,並把它融入教學 你們更好。 所以,請如果您有任何 反饋,把它給我。 我愛的反饋。 備份FOP,我們得到的反饋 所有的時間。 你可以給我加號,好東西, 三角洲的事情,我可以改善。 你可以評論我的衣服上。 這不會是有幫助,但你 歡迎發表任何評論, 一切。 請,請給我反饋。 我很看重它了很多,這 對我來說意味著很多。 一個規範,樂趣無窮。 我們將有很多的樂趣。 希望在這個過程中,你會 有很多的樂趣。 我們將有糖果部分。 我們就得音樂。 我們會希望去了解一個 另一個有點好,所以我想 這是一個有趣的,引人入勝的體驗。 我知道你們有些人睡著 你今天早些時候的演講, 所以希望這不會 現在的情況。 而如果是現在的情況下,只是 不打呼嚕,因為可能 被抓相機。 甜。 有任何疑問,意見或疑慮 之前,我謹什麼,我們已經 談到? 太好了。 因此,我們打算去 先成陣列。 這是你如何使一個數組。 我們已經看到過。 你有一個數據類型,你有一個 名稱,然後你有一個大小。 在這裡,我創建了兩個數組。 第一個是一個字符數組, 它有26個停車位。 第二個是一個數組 分數,它有三個 空間三個整數。 是嗎? 學生:所有這些幻​​燈片 可為我們的地方嗎? JASON HIRSCHHORN:大問題。 問題是,所有的 這些滑動? 是。 所有這些幻​​燈片將是可利用的, 在未來,我會通過電子郵件給 你之前部分。 然而今天,因為這是第一次 本週,我們起步較晚。 所以通常情況下,你會得到這些幻燈片,但 他們將可在網上和 我會通過電子郵件發送給你 下課後權。 任何其他的問題嗎? 如此反复,陣列箱,由於缺乏 一個更好的詞,有多個 一種數據類型的元素,而且他們 在內存中彼此旁邊。 如此反复,這怎麼可以 使兩種類型的陣列。 所以在你做出陣列 - 詮釋,第一行分數,支架 三,靠近支架 - 想要初始化它。 你想在那裡把一些值。 這是你如何把一些值 在那裡,只是選擇的指數和 記錄的號碼。 讓我們畫在黑板上。 每個人都可以看到嗎? 每個人都可以看到。 甜。 所以這將是我的 陣列稱為比分。 正如你可以看到的,它的大小為3。 在那裡有三個框。 每一個可以容納什麼 類型的數據類型? 學生:整數。 JASON HIRSCHHORN:一個整數 在這其中。 我們寫INT的分數,並且第一個字 那將是數據類型 該數組中的框。 所以,我能適合三種。 為什麼我必須零 板? 為什麼它說得分為零等於1? 提醒我你的名字。 學生:庫爾特。 JASON HIRSCHHORN:庫爾特。 學生:是的。 JASON HIRSCHHORN:為什麼呢? 學生:因為第一個索引 為零,我們開始計數為零。 JASON HIRSCHHORN:所以我們開始 在零計數。 這是完全正確的。 這是令人困惑的部分和意志之旅 你,尤其是當你 試圖遍歷數組, 我們會做一個位。 我們開始計數為零。 所以,如果我想參照第一 盒,它不是箱裡。 不幸的是,箱零。 第二個是框中,並在這 的情況下,第三個是箱兩種。 關於對話框三是什麼? 箱三在哪裡呢? 或者,如果我想要做的成績,支架 三,密切支架,那是什麼? 所以你說的空字符。 任何其他的想法? 什麼是得分支架三個支架? 學生:它並沒有真正存在,因為 你只定義為得分, 支架三。 JASON HIRSCHHORN:所以你說 它並沒有真正存在。 在某些情況下,當我們正在處理 字符串,一般我們把空 結束字符。 我們會在第二。 但是,在這種情況下,有 這裡沒有第三個方塊。 所以任何數組中的最後一箱 的尺寸減去1。 所以,如果我們有一個大小為n的數組, 第一盒是為零,最後一個是 在n減1。 在這種情況下,它不存在。 也有一些是在這裡 內存,但它不是我們的。 我們並不擁有它。 我們並沒有要求它。 因此,如果我們嘗試訪問它,我們將 做在一個位,我們很可能會 惹上麻煩。 在這種情況下,我初始化我 三個變量的數組。 我們把一箱零,兩 在箱,三箱二。 沒有任何人有任何疑問, 有關初始化的數組? 於是我們過剛才。 比分,支架三,靠近支架, 不存在。 我們從零開始編制索引,計算機科學, 所以我們開始計數為零。 最後一箱提供給我們,這是 第三個框,但是它稱為盒 數二。 而在下面,這是一種替代 初始化數組的方式。 因此,而不是創建一個數組 線,灌裝的第一個框,然後 第二個框中,然後在第三個框, 在同一行中,你可以做到這一切。 因此,在該行中,兩個數組。 這將創建完全相同的陣列 我們在這裡,但它 只是它在一行。 現在,我們已經創建了我們的陣列。 通常,一旦你創建一個數組,你 它想要做的事,無論是 填寫或得到的東西出來呢 並打印出來在屏幕上。 在這種情況下,我們將通過我們的 分數數組,初始化 的第一行,在這裡在灰度。 然後在第二行,我們開始 遍歷數組。 沒有任何人有任何疑問, 一個for循環的結構? 因此,這是for循環。 我們有我們的初始條件,然後 我們的最終狀態,然後我們 迭代,我,每一個循環。 而在此花括號中的 循環,會發生什麼,如果我是運行 這個程序? 誰能告訴我,我們會得到什麼? [?成熟度? ?] MATU:打印所有分數 在每一行上。 這將打印每個分數 在一個單獨的行。 JASON HIRSCHHORN:究竟 它會打印嗎? 學生:它會打印一個, 然後兩個,然後三個。 JASON HIRSCHHORN:沒錯。 它會打印一個,然後兩個,然後 三,每一個單獨的行,因為 我們正在經歷的數組,你會 看到第二個,在printf 聲明,分數。 因此,在第一輪通過我們的 循環,i等於為零,這意味著我們 獲得得分為零的值 - 其中,如果我們回去 我們的圖,是一個 - 並填寫 - 哦,它說。 這應該為%d。 我會解決這個問題有點 我的手,你們。 但我們呈現一個整數,所以 這裡應該為%d,而不是%C。 %c代表是什麼? 學生:字符。 JASON HIRSCHHORN:性格,正是。 另一種是什麼呢? 如果你不想做一個%D 整數,還有什麼可以做什麼? 學生:我。 JASON HIRSCHHORN%,完全相同。 所以任何疑問迭代 通過數組? 所以會發生什麼,如果我們做到這一點嗎? 而不是做i小於 三,我是少 大於或等於3。 當我們運行這段代碼,會發生什麼事? 是的,安妮? 學生:他們打算打印出來 第四行的怪異的東西。 JASON HIRSCHHORN:所以你說的,是什麼 要打印出怪異的東西 第四行嗎? 沒有任何人有一個答案 她的問題? 所以賠率是當 我們得到的 - 通過我們對第四輪 循環,就像你想,安妮, 這將是分數支架三, 我們已經想通了,不 存在的,我們要去嘗試 和訪問,打印 出來,用一些方式。 所以電腦可能會 我們生氣。 你說得對。 它可能完全退出程序。 它可能會打印出來的東西 真不可思議。 你不能說是肯定的。 賠率是它可能會生氣 你,只是馬上退出。 但是,這是一個常見的錯誤,你就會有 你只是在關閉 到底,這是一個錯誤,將 困擾你整個編碼。 我喜歡做的僅僅是在 白板,經過每次迭代 手頭上或在紙上看到循環 發生了什麼,然後你 普遍意識到,哦,等一下,我不應該 已經小於或 等於三。 ,這是我應該停止在兩個 會發生什麼,如果你的條件 超過三種。 有任何疑問,這麼遠嗎? 甜。 所以你打開你的電腦。 我們要去給你兩到三個 分鐘寫一個程序, 創建一個數組整數 通過五個,然後打印出每個 在新的一行的整數。 如果您有任何疑問, 舉起你的手。 我很高興來的。 就像我說的,讓我們採取三種 分鐘來寫這篇文章。 是所有人都好,如果我去一個 新窗口,並關閉此? 對不起,如果你還沒有機會 完成,但我們要做到這一點 現在一起。 所以在屏幕上,我的#include cs50.h#包括stdio.h中。 有人可以告訴我是什麼 這兩行辦? 邁克爾? 學生:他們包括庫 CS50和史蒂夫 保存供您使用 使您的生活更輕鬆。 JASON HIRSCHHORN:所以你說他們 包括圖書館,一個CS50 ,cs50.h,另一種是 只是標準,自帶 C包,stdio.h中。 你是什​​麼意思,包括 圖書館,雖然? 你能更具體一點嗎? 學生:它使得你可以 使用某些碼字有 不必去功能發生 c的功能自己。 JASON HIRSCHHORN:你能 給我一個例子嗎? 學生:喜歡的printf 是您可以使用。 JASON HIRSCHHORN:printf的。 所以,你說的printf是那些 功能而不必 寫上自己的printf,printf是 實際上包含stdio.h中,所以你 可以只使用它,並承擔 它會奏效。 stdio.h中,如果打開了這個文件, 這包括如何的printf 作品,所有的代碼為printf? 你為什麼搖頭? 學生:因為剛才的頭文件 包括函數的聲明。 JASON HIRSCHHORN:完全正確。 頭文件只是包括 在函數聲明。 所以基本上,當你編譯這個, 打計數,我們將做一個 第二,編譯器知道,如果 使用了printf printf的存在。 這是怎麼回事某處被定義。 這不是一個問題,你使用它。 再後來,它會包括 實際上包含的和為零 printf的實施和 將其與你的代碼。 你如何確保它包括 的和零點,也就是說,得到的字符串? 學生:獲取字符串cs50.h. JASON HIRSCHHORN:右。 所以說得到的字符串存在, 在函數聲明。 但隨後的1和0的二進制 文件實際上包含 實施獲取字符串? 你如何確保 與你的程序? 學生:通過連接器 命令行參數。 JASON HIRSCHHORN:通過連接器 在命令行參數。 你怎麼做到這一點呢? 學生:這是鐺-L線 JASON HIRSCHHORN:完全正確。 你說CS50-L,對不對? 這包括那些和零。 學生:但要確實 為你,對不對? JASON HIRSCHHORN:沒錯。 make沒有你,但最終, 你不會有廠名,或 你就得做出 你自己的,所以這是一個 好事要記住。 如果你要使用其中的一個 其他圖書館,你不僅有 寫# 然後圖書館。 您還需要與其鏈接。 而這兩件事情是不同的。 -L CS50是不同的 #cs50.h. 然後我們有INT主要無效花括號, 現在我們要去代碼 主內。 我這裡有第一行是註釋 說,創建一個數組 與int的一到五。 什麼是一個很好的詞來形容我 現在在屏幕上,只是 裡面主要的意見? 我們稱之為什麼呢? 學生:偽代碼。 JASON HIRSCHHORN:偽代碼。 謝謝你,杰弗裡。 這是完全正確的。 偽代碼。 有你們之前見過的偽代碼? 舉起你的手,如果你使用 問題的偽代碼之前設置一個。 關於你的一半。 我會強烈建議使用 偽代碼問題 更小,更容易咬掉件。 另外,如果你做偽代碼,你 您的意見已經在很大程度上 內置的,所以你不要有 回去揣摩 你在做什麼。 因此,有人可以給我這個第一線 創建一個數組int類型之一 通過五個? 你呢? 學生:詮釋,然後你可以調用 任何號碼,然後方 支架五。 JASON HIRSCHHORN:所以整型數, 方形支架五個。 學生:等於, 然後大括號。 JASON HIRSCHHORN:等於, 大括號。 學生:一,二,三,四。 JASON HIRSCHHORN:一,二, 三,四,五。 學生:那麼大括號 然後分號。 JASON HIRSCHHORN和捲曲 括號和分號。 優秀的。 打印出每個INT在新的一行。 可以給別人 我該代碼,好嗎? [?成熟度? ?] 來吧。 學生:( JASON HIRSCHHORN:( 學生:INT I = 0 JASON HIRSCHHORN:INT I = 0 學生:分號我不到五。 JASON HIRSCHHORN:分號, 我小於5。 學生:分號,我+ +。 JASON HIRSCHHORN:分號,I + +。 學生:休息括號, 然後開括號。 JASON HIRSCHHORN:休息括號 兩個大括號。 在大括號內? 學生:當時的printf“%D / N” JASON HIRSCHHORN:很抱歉,挺住。 printf的“%D / N,封閉的引號。 學生:那麼封閉報價, 逗號,計數,支架I。 JASON HIRSCHHORN:逗號, 數,支架í。 學生:對不起,數字支架。 的JASON HIRSCHHORN:數字,支架I。 學生:對不起。 然後關閉括號, 分號。 JASON HIRSCHHORN:休息 括號,分號。 我要去拯救。 我們要去計數。 我怎麼運行計數? 學生:反斜杠。 學生:點斜杠 - JASON HIRSCHHORN:。/計數,準確。 謝謝。 /計數。 一,二,三,四, 五個新的生產線。 看起來像它的工作。 是的,諾亞? 學生:你也可以做到小於或 等於4,如i小於 或等於4? 少做有什麼優勢 五,或只是以不同的方式 寫它呢? JASON HIRSCHHORN:所以,問題是你 可以做得i是小於或 等於四,而不是 i是少於五個。 又會有同樣的工作嗎? 學生:它應該。 JASON HIRSCHHORN:是的。 它完全將工作一樣。 在文體上,它是一般小於 你會看到在第二個時 我們的字符串,可以使用的東西 調用strlen的,你見過 之前,來取得長度 的字符串。 你不能小於 或等於strlen的。 你可以做到小於或 等於strlen的減一。 所以它只是更好 做小於strlen的。 是嗎? 學生:在實際測驗, 我們必須提供我們的意見 代碼呢? JASON HIRSCHHORN:問題 測驗,你 有提供意見? 因此,我們會更多地談到測驗時 他們來了,但一般來說,一個好的 經驗法則是,只要你 編寫代碼,提供意見。 如果你得到的代碼錯了,但 發表意見的權利,你可能會得到一些 信貸從我,如果我是分級 您的問題集,或交了白卷。 因此,意見總是 好來提供。 甜。 計數。 出色的工作。 讓我們繼續前進。 字符串。 字符串。 我們已經看到了這個講座之前。 吹我的腦海裡,當我 首先發現了這一點。 它可能沒有任何人吹的 想到這裡,不過沒關係。 字符串是字符數組, 他們最終,正如你自己所說, 空終結者, 這是/ 0個字符。 如果我們要畫一個串上 板,我們將它畫在這裡。 所以,這是字符串有多長? 抱歉。 這是字符串有多長? 學生:[聽不清]。 JASON HIRSCHHORN:四? 為什麼是四個呢? 學生:因為第五位 是空字符。 JASON HIRSCHHORN:所以第五位 是空字符。 所以,如果我上運行的strlen 這一點,那就給我4。 正確。 而陣中,不過,如果我是 初始化這個數組,多少個空格 我要問的嗎? 學生:五。 JASON HIRSCHHORN:五。 我不得不問五,但我可以 在這裡只把四個字符 因為我需要把這些空 終結者就結束了。 因此,我們打算寫“ohai” 把空終止符結束時。 我們會說這是串 s等於這一點。 什麼是支架為零? Ş支架零,安妮? 學生:O。 JASON HIRSCHHORN:O型,正好。 Ş支架? Ş支架五? Ş支架五? 學生:不存在。 JASON HIRSCHHORN:不存在。 完全正確。 涼爽。 任何理解問題 字符數組,字符串? OK,然後。 你們更多的程序。 寫一個程序,要求用戶 一個字符串,然後打印出每個 在新的一行字符。 因此,讓我們三分鐘的時間寫 這個程序,然後,我們將對其進行編碼 作為一個群體。 抱歉。 你需要看到這一點嗎? 學生: JASON HIRSCHHORN:確定。 讓我們多一分鐘的代碼這一點, 或至少​​開始瀏覽網頁就可以了。 所以,你可以繼續工作,但我要去 開始經歷它。 像以前一樣,我在屏幕上 ##cs50.h,包括stdio.h中。 int類型主作廢。 主要的大括號內,我有 兩點意見,偽代碼。 其一是要求一個來自用戶的字符串。 二是打印出每個人 在新的一行字符。 所以,安娜,你能不能給我問 一個來自用戶的字符串? 學生:printf的。 JASON HIRSCHHORN:printf的? 學生:是的。 ( JASON HIRSCHHORN:( 學生:“給我一個字符串。 JASON HIRSCHHORN:“給 我STR - 哎呀 - 字符串。 學生:/ N“)分號。 JASON HIRSCHHORN:結束的字符串, 閉合的括號,分號。 學生:是的。 然後,下一行,串 S =得到的字符串。 JASON HIRSCHHORN:字符串 S =得到的字符串。 學生:是的。 然後是() JASON HIRSCHHORN:() 學生:分號。 JASON HIRSCHHORN:分號。 太棒了。 所以我要得到一個字符串 我要保存在什麼? 什麼是變量 您創建的嗎? 學生:String的。 JASON HIRSCHHORN:變量 稱為s。 字符串類型。 沒錯。 接下來的事情,我們要的是打印出來 每個字符在新的一行。 誰可以給我代碼嗎? [聽不清]? 你可以把它給我嗎? 學生:當然。 JASON HIRSCHHORN:讓我們做吧。 對不起。 我不喜歡重複你說的話 因為你得到它的權利,但我 有重複,當他們 抄寫這一點,他們可以得到所有 的文本改編出來。 所以,你可以繼續說話。 不幸的是,我有 說你。 我很抱歉,但 - 學生:那很好。 對於INT I = 0 JASON HIRSCHHORN:INT I = 0 學生:我小於 - JASON HIRSCHHORN:分號。 學生:在此之前,我們可以把一個 可變的,所以你得到的int名長度? JASON HIRSCHHORN:哦,你不要 想要把分號? 確定。 所以,你想要什麼後做零? 學生:我想要得到的 字符串的長度和 設置到一個變量? JASON HIRSCHHORN:OK, 所以我怎麼做呢? 學生:所以你做INT長度= JASON HIRSCHHORN:詮釋長度= 學生:S-T-R-L-E-N。 JASON HIRSCHHORN:S-T-R-L-E-Ñ - 學生:的​​S。 括號內。 JASON HIRSCHHORN:(S)。 學生:那麼我認為你必須 把兩個整數之間用分號隔開。 JASON HIRSCHHORN:分號 零後? 學生:是啊。 然後放一個分號後, 你說,我不到長度。 我長度小於 是可變的。 學生:分號。 JASON HIRSCHHORN:分號。 學生:我+ +。 JASON HIRSCHHORN:我+ +。 還有我們的for循環。 OK,在for循環中。 學生:然後做的printf。 JASON HIRSCHHORN:printf的。 學生:括號內。 的JASON HIRSCHHORN:括號,報價。 學生:括號,引號,%C / N。 JASON HIRSCHHORN:%C,“確定”。 學生:/ N。 JASON HIRSCHHORN / N。 學生:休息的報價。 JASON HIRSCHHORN:閉合的引號。 學生:逗號。 JASON HIRSCHHORN:逗號。 學生:S. JASON HIRSCHHORN:S。 學生:支架。 JASON HIRSCHHORN:支架I。 學生:然後關閉括號。 JASON HIRSCHHORN:封閉括號。 學生:分號。 JASON HIRSCHHORN:分號。 太棒了。 因此,讓我們保存這個。 讓拼寫。 哦,男孩。 我有一對夫婦的錯誤。 第11行的第一個錯誤,它說, 預期表達,它給 我的錯誤,第二 整型,有錯誤。 有一些錯誤圍在那裡。 有誰知道什麼樣的錯誤,是嗎? 庫爾特? 學生:我認為它應該 是一個逗號,而不是一個分號。 ,JASON HIRSCHHORN:OK,逗號 而不是分號。 因此,我們需要修復? 學生: JASON HIRSCHHORN:還有什麼 我們需要修正? 學生:我們有包括string.h中。 JASON HIRSCHHORN:包括string.h中。 在哪裡我需要的是什麼? 學生:同一個地方,你包括 其他的東西,右 之後包括stdio.h中。 JASON HIRSCHHORN:讓我們來看看如果這樣運行 首先是因為一般來說,我喜歡 解決一件事第一,然後運行 它,然後看看我們得到的錯誤。 因此,我們要清除終端 與控制n,讓我們做法術。 因此,第11行的另一個錯誤。 預期分號。 而且我還得到 此線路上的錯誤。 所以,還沒有給我一個錯誤說 不明白strlen的是, 但它給我的錯誤 行,所以什麼是錯的? 馬克? 馬庫斯。 學生:你必須刪除 第二個int類型聲明? JASON HIRSCHHORN:刪除 第二個int。 讓我們試試這個。 現在清除的終端。 讓拼寫。 錯誤。 隱式聲明庫 strlen函數。 所以,現在我們看到這個錯誤。 我們需要包括什麼? 學生:string.h中。 JASON HIRSCHHORN:包括string.h中, 我們要做的#include string.h中的頂部 在屏幕上。 讓我們保存,拼寫。 現在編譯。 所以,再一次的事情,我們需要 記得在for循環時,12號線 我們設置它,INT I = 0, 長度= strlen的()。 這是一個很好的策略。 這樣的風格是偉大的, 這是偉大的設計。 我們可以進入這些原因後, 但這樣一來,你只需要調用 strlen的一次,而不是每一個 時間運行循環。 但是,您需要使用一個逗號 你不需要重新詮釋。 如果你宣布這兩個 變量在一起,你 不需要再次詮釋。 然後,如果你要使用strlen 這是另一種庫 的功能不包括在 stdio.h中或cs50.h的的,使 一定要包括string.h中。 庫爾特? 學生:那麼,如果你並不需要 說是什麼類型的長度,是否 意味著它必須是一個int? 你不能有兩個不同的 類型嗎? JASON HIRSCHHORN:所以,你可以 有兩種不同的類型。 長度是一個int在這裡,雖然。 長度是一個int,因為它是逗號 然後同樣的事情。 學生:所以它假定它是怎麼回事 作為第一個是相同的嗎? JASON HIRSCHHORN:沒錯。 我們不打算現在做到這一點,但你 可以包括兩個變量對 同一個聯機使用一種數據類型。 所以詮釋的x,y將創建 兩個變量。 因此,整數X,Y,如果我們做的是,它給 我一個未使用的變量x和y,因為 我們不使用它們。 所以把無效之前,僅僅是一個 花哨的技巧,如果你不使用 的東西,要使用它。 但是,正如你看到的,我創建了x和y 在同一線路上用逗號。 它創建兩個整數 就在這裡。 所以,是的,完全可以創建 兩件事情在同一行上 用逗號分隔。 讓我們擺脫這些,雖然。 因此,有法術。 謝謝你們為我們編碼。 讓我們把它更多的時間,運行它。 給我一個字符串。 [聽不清],你做了大部分。 字符串是什麼? 學生:您好。 JASON HIRSCHHORN:你好。 H-E-L-L-O,同一行上的每個字符。 看起來不錯。 讓我們再次運行它。 總是要檢查 為一角案件。 有什麼好的角落的情況進行檢查? 學生:多少? JASON HIRSCHHORN:一個數字。 所以,我會投入1,它打印出1。 它不要求的信件,所以 它看起來像數字工作。 好角落的情況進行檢查。 什麼是另一個很好的角落 檢查的情況? 學生:一個空字符串。 JASON HIRSCHHORN:嗯? 學生:喜歡一個空字符串。 JASON HIRSCHHORN:空字符串。 所以,讓我們不要把任何東西。 什麼被打印出來? 學生:沒有。 JASON HIRSCHHORN:沒有。 好像它的工作原理。 你可以嘗試更多的角的情況下,但 一般的數字,不同的數據 偉大的嘗試,也什麼都不是。 沒有,零,底片總是 偉大的事情,嘗試和活動 測試應該,事情當然我們會測試 和檢查50測試。 任何問題spell.c? OK,讓我們的後腦勺。 我還有一個程序 你們寫。 它稱為students.c。 這是一個程序,要求用戶 五個名字,然後隨機選擇 打印出的名字之一。 這個程序是多一點點 參與比過去兩年中,我們寫道, 那麼,為什麼我們不採取五分鐘 單獨代碼,然後我們會 代碼為一組。 該方案還涉及到一些東西 你可能沒有見過,所以如果 你有一個問題,怎麼辦 我這樣做,舉起你的手。 我會過來和指向你 在正確的方向。 但我們也這樣做,因為這 將是一個很好的方式來介紹一些 是棘手的話題。 因此,它的工作原理,對不對? 學生:是啊。 JASON HIRSCHHORN:每當你打開一個 習題集,有很多方法可以做到 ,但有些更 優雅的比別人多。 讓我們長驅直入 #包括cs50.h.服務 #包括stdio.h中。 int主要的空隙中,花括號。 大括號內, 我有兩點意見。 第一個問 5名用戶。 第二個是,隨機選擇 打印出來的名字之一。 因此,讓我們做的第一個,問 5名用戶。 誰已要求用戶5名 並能告訴我該怎麼辦? 只有兩個人做的第一部分。 三個人做的第一部分。 四,五。 湯姆,你怎麼辦呢? 學生:你聲明一個字符串 然後將其命名,支架五。 JASON HIRSCHHORN:字符串 命名支架五。 那麼,什麼是做這行, 字符串名稱支架五? 學生:你會聲明 一個字符串數組。 JASON HIRSCHHORN:這是 一個字符串數組。 多少字符串會 適合在這裡嗎? 學生:五。 JASON HIRSCHHORN:五。 優秀的。 我們要調用它的名字,因為 我們要得到多個。 OK,接下來呢? 學生:那麼你 有一個for循環 - JASON HIRSCHHORN:For循環。 學生: - 對於i = 0。 JASON HIRSCHHORN:為(int i = 0。 學生:分號。 JASON HIRSCHHORN:分號。 學生:我不到五。 JASON HIRSCHHORN:我不到五。 學生:分號。 JASON HIRSCHHORN:分號。 學生:我+ +。 JASON HIRSCHHORN:我+ +。 學生:然後關閉括號。 JASON HIRSCHHORN:閉合的括號, 然後一些大括號。 花括號內的? 學生:printf的。 JASON HIRSCHHORN:printf的。 學生:開括號,名稱為%d。 JASON HIRSCHHORN:對不起? 學生:名稱。 JASON HIRSCHHORN:名稱。 學生:空間,然後%D。 JASON HIRSCHHORN:名稱,空間,%D。 學生:/ N,然後關閉。 JASON HIRSCHHORN:所以名稱,空間, %D / N,右括號。 學生:逗號,I + 1。 對不起。 封閉報價,然後逗號,我+1。 JASON HIRSCHHORN:休息 引號,逗號,I +1。 學生:是的。 然後下一行 - JASON HIRSCHHORN:+ 1。 學生:是的。 然後下一張幻燈片 名稱支架I。 JASON HIRSCHHORN:下一行 名稱支架I。 學生:獲得字符串。 JASON HIRSCHHORN:= - 資本G-E-T - 字符串。 哎呀,對不起。 學生:開放式,封閉式括號 然後 - JASON HIRSCHHORN:開放,封閉括號。 學生:分號。 JASON HIRSCHHORN:分號。 好了,你初始化數組 字符串,名稱,然後經過一個 for循環,並打印出一些五倍 提示給用戶,然後存儲 五根弦。 沒有任何人有任何 調整? 湯姆,我想每個人都 同意你的。 看起來還不錯。 確定。 你為什麼要這麼做i +1的,但? 學生:我的意思是,沒有 是的,但我+1,它是 名稱命名五。 否則,這將是名 僅舉四個零。 JASON HIRSCHHORN:所以,你做了我+1 因為否則它將有 通過四個零打印出來,因為 這電腦怎麼想的,但人類 真的不讀這樣的。 這是另一回事 你會遇到的問題。 有時,當你打印出來的東西 給用戶,你會想它 有點漂亮,做 i +1的在這種情況下,是一個 方式,使其更漂亮。 我也看到了五進行兩次,字符串名稱 範圍是5,i是小於5。 我知道你從哪裡得到的五個。 我告訴你猜對了 五個名字。 但是,如果我們想使代碼 有點更強大的,有一件事我們 能做的就出在這裡,外面的int, 我們可以做這樣的事情, #定義,我們可以做名稱5。 所以基本上,無論我寫的資本 N,資本大寫M,A,大寫字母E, 大寫字母S,則該字符串,它將取代 5代碼。 還是讓我們只是把它 - 我們將 只需撥打號碼。 所以我定義全部大寫 號碼為5。 所以,現在無論我有5號,我 可以將其替換所有瓶蓋號碼。 而現在,如果我想改變號碼 名字,所有我需要做的是 這一條線,4號線,在那裡我有 #定義5號,改到10, 或改變4。 當你的代碼越長,你不是 要記住所有的地方,你 把你想要多少名,並在 為了讓你不要錯過,這是 做到這一點,找到一個很好的方式 往上頂,然後只使用該短語 各地你的代碼。 馬庫斯? 學生:那是風格的首選 不是全局定義 常數n? JASON HIRSCHHORN:是 文體不是全局的首選 定義一個常數n? 所以你說你能 做數= 5? 學生:他們有輔音 在C或沒有? JASON HIRSCHHORN或const - 等於。 所以,你說的只是 一個全局變量? 學生:是啊。 JASON HIRSCHHORN:文體, 有沒有一定的權利 回答,但那些都更好 不僅僅是扔這些隨機 整個代碼中的數字。 我們稱他們為幻數。 當我看看你的代碼或當 任何人的閱讀,通過它,他們 要的不只是這些隨機數 沒有意義的。 連號26,它一般是 字母表中的字母數, 這是更好地定義字母往上頂 並保存在該字符串中的26號, 如果是有道理的。 或者問題上設置一個,而不是 - 再次,我們不談論這個在 的時候,但不是僅僅拋出 到處25或10,你可以 節省25號的季度或10 毛錢,這使得它更容易 無論是誰,通過閱讀你的代碼 明白你為什麼選擇了這個數字。 ,也為你,如果你曾經想要的 更新你的代碼,這使得它有點 更健壯。 是嗎? 學生:這是代碼也將 後為我們提供? JASON HIRSCHHORN:所有這些代碼 我們一起寫的是 將通過電子郵件發送給你 傢伙。 是。 因此,要求用戶5名。 隨機選擇和打印 的名稱之一。 誰這樣做行嗎? 這是這裡最棘手的線。 對不起,湯姆。 你做了一個很好的工作,但 這是一個有點棘手。 馬庫斯,請便。 學生:那麼首先,你要 需要包含stdlib.h中time.h中 JASON HIRSCHHORN:所以你說在 頂部,包括兩個庫。 你要我包括S-T-D-L-I-乙 點H,標準庫, 是另一個人呢? 學生:time.h中 JASON HIRSCHHORN:#包括time.h中 因此,這些都是兩個庫。 我假設現在我們將要使用 在這些中所包含的功能 二,這就是為什麼你需要 包括他們? 學生:那麼,你先 會想要寫srand函數。 JASON HIRSCHHORN:函數srand。 學生:((0) JASON HIRSCHHORN:對不起。 函數srand(時間( 學生:0。 JASON HIRSCHHORN:0。 學生:)),分號。 JASON HIRSCHHORN:另一個封閉的括號? 分號。 我要去只需更換 您零NULL。 它會做同樣的事情,但 通常,你會看到NULL, 我們會談論這個 在第二行。 學生:文體更好? JASON HIRSCHHORN:一般來說,人們 右NULL,但同樣的事情。 學生:INT名。 JASON HIRSCHHORN:詮釋名。 學生:= JASON HIRSCHHORN:= 學生:蘭特。 JASON HIRSCHHORN:蘭特。 學生:() JASON HIRSCHHORN:() 學生:模數。 JASON HIRSCHHORN:模是什麼? 字符? %字符? 學生:百分比字符。 模數定義往上頂。 JASON HIRSCHHORN:模數。 學生:分號。 JASON HIRSCHHORN:分號。 學生:那麼新生產線中,將printf。 JASON HIRSCHHORN:printf的。 學生:( JASON HIRSCHHORN:( 學生:“ JASON HIRSCHHORN:“ 學生:%S / N JASON HIRSCHHORN:%S / N 學生:“ JASON HIRSCHHORN:%S / N“ 學生:逗號,空間名稱。 JASON HIRSCHHORN:空間 - 學生:哦,我猜, 我們在這裡? JASON HIRSCHHORN:我們稱它的名字。 學生:打開支架,名稱。 JASON HIRSCHHORN打開支架,姓名。 學生:休息支架。 JASON HIRSCHHORN:休息支架。 學生:) JASON HIRSCHHORN:) 學生:分號。 JASON HIRSCHHORN:分號。 OK,讓我們保存。 讓我們把這段代碼。 學生。 讓運行該代碼。 學生。 /學生。 /學生。 名稱之一。 我們會說大衛。 名稱兩種,RJ。 名稱三,羅布。 名稱四,盧卡斯。 名稱五,約瑟夫。 然後它打印出約瑟夫。 所以,讓我再次運行此。 讓我做相同的名稱。 大衛,RJ,羅布,盧卡斯,約瑟夫。 它給了我這一次大衛。 所以我做了同樣的事情,但它給 我不同的東西,這就是 因為,當然,我們要求 一個隨機名稱。 所以我認為,根據我徘徊 在房間裡,大多數人 可能得到的第一部分權利, 設立該陣列,然後讓 所有的名字。 我說的是第10行到16。 但18至21行可能 有些東西,你以前沒有見過, 讓我們通過這些。 這線,的函數srand時間NULL 本質上是 - 對不起,讓我們跳過下來 一條線,RAND()。 這就給了你一個隨機數, 一個隨機整數。 如果你打的人蘭特, 很多你做 - M-A-n空間R-A-N-D - 在這樣的終端,M-A-N 空間上R-A-N-D,敲回車。 你會拿出來手冊 將能夠閱讀蘭特的 命令輸出數偽隨機字節 播種後的隨機數 發電機一次。 所以這是一個描述。 這是什麼蘭特,給人 你一個隨機號碼,當 你調用該函數。 不幸的是,這是不是真正的隨機 因為如果你只需要調用隨機 一些種子,一些沒有得到 起點,但它總是會選擇 相同的之一,它使用一個公式 以確定下一個。 所以,如果你調用rand,它只是 給你同樣的事情。 這將是非常可預測的。 實際上,它不會是隨機的。 所以我們需要做什麼,每馬庫斯的 指示給我,種子蘭特 別的東西,這是什麼 的srand函數確實。 種子蘭特的東西多一點 隨機比同樣的事情, 他的播種時間NULL, 是,按照慣例,目前的 時間(以秒為單位)。 所以,你假設每個人的不 要在準確的運行代碼 同一秒內,所以它是一個安全的賭注 時間NULL將是不同的 每次運行此代碼。 安全的賭注,因此,srand函數將種子蘭特 不同的東西每 一次。 因此,按照慣例,當我們想要一個 隨機數,我們寫這條線, 函數srand時間NULL,給我們一個更 更多的隨機種子,然後我們運行 蘭特,這給了我們一個隨機數。 是嗎? 學生:你能說什麼 你的意思是由種子嗎? JASON HIRSCHHORN:如在種子 - 所以蘭特要挑一些數字 它會使用一些 公式得到。 所以它要的東西開始 然後把它變成一種基於 關閉該公式。 如果你總是給它同樣的事情, 它總是會變成 同樣的事情。 所以,第一件事你 給它的種子。 所以,你想給的東西 不同的開始,所以它 會變成不同的東西。 ,然後最後,第20行 這被稱為% 模,那就是混亂。 這東西是一點點 不同,在這裡,你真的不 在現實生活中的數學。 但本質上,當你把一個巨大的 號碼,你分在C, 發生的其餘? 學生:被截斷。 JASON HIRSCHHORN:被截斷。 所以20除以3是什麼? 這是什麼返回 你,20除以3。 我們很抱歉,10除以3。 這是什麼回報給你嗎? 學生:[聽不清]。 JASON HIRSCHHORN:10除以3只是 返回3,不是3餘1。 那麼,什麼10模3返回 僅僅是餘數,1。 所以,如果你想知道什麼10分 3,你會 做10除以3,你會得到你的3, 然後你會做10模3, 你會得到一個1。 所以,你會意識到10分 3 3,其餘1。 在此行中,蘭特 的任一整數,本質上。 因此,模說,它除以 號,這是在這種情況下,5。 如果你曾經除以一個數字, 整數總是有小於 這個數字。 所以,如果你數除以5, 剩下的總是要 通過四個零。 這是多麼的數學工作。 所以一個一個較小的moduloed的大量 數將始終返回 其餘部分將始終返回一些 數數比您少 除以。 沒有任何人有任何疑問, 模的,因為它會非常, 非常方便,所以我要確保 大家都明白嗎? 涼爽。 而且,我們看到,這個程序工作。 OK,繼續前進。 所以接下來,我們將要進入 的功能,我們打算去 通過這個東西剩下的漂亮 很快,因為我​​想獲得 命令行參數。 所以基本上, 如您所見,黑盒子。 他們拿東西名為參數, 他們做了他們,無論是 改變或創造一些副作用, 最後,他們吐 出來的東西,這是 返回值。 有誰能夠給我一個理由 為什麼我們會使用的功能呢? 任何人嗎? 其中一個原因就是為什麼我們要使用的功能嗎? 有人嗎? 我看到了兩隻手。 一個很好的理由是什麼? 馬庫斯? 學生:如果你必須調用相同的 大塊的代碼多次。 JASON HIRSCHHORN:OK,如果你需要 調用相同的塊 多次編碼。 傑夫,你是否也有不同的原因嗎? 學生:只要 您可以編寫更少。 JASON HIRSCHHORN:您可以編寫更少。 右。 如果你想要做的東西很多 - 在上面的代碼中,我能有 書面串五倍,但 for循環,使它看起來更好, 你必須寫更少的代碼。 函數是一種類似的想法。 如果我想要做同樣的事情很多, 將它移動到一個函數,並調用 每次功能。 這會為你做那件事。 這是一個很大的原因 使用功能。 因此,解剖函數。 函數一般會 這個樣子。 它會開始返回類型, 那麼你會得到這個名字。 它會採取的論點,否則 已知參數,和內部 那些花括號,你會 寫你的代碼。 我們已經看到了一個功能很多。 這是主要的。 這裡主要是疊加 解剖我有更早。 詮釋權在這裡表示什麼? 什麼詮釋是什麼意思? 當我寫的詮釋主要(無效)。 學生:返回類型? JASON HIRSCHHORN:對不起? 學生:返回類型。 JASON HIRSCHHORN:詮釋是 返回類型,分毫不差。 主返回一個int。 主要是什麼? 學生:功能名稱。 JASON HIRSCHHORN:主要是 的函數名。 完全正確。 和無效的呢? 括號內的什麼是無效的? 學生:它並不需要 任何外部的價值。 JASON HIRSCHHORN:所以無效 - 正確的。 括號內的,我們把 參數或參數 功能需要? 黑盒子內。 當你寫無效,你說 這需要什麼英寸 因此INT主要無效意味著主要的 不採取任何英寸 花括號內的,我們有一些 代碼,然後我們看到了在年底 返回零。 歸零什麼意思? 好吧,我們談到的返回類型。 主要需要返回一個int。 這是這一行做什麼。 它返回一個int,零。 當然,我們還沒有看到,很多 因為在編程中,我們做 我們做的機器和編譯器 我們用如今,你 不需要該行。 主要是夠特別,它知道 主,只是當你到達終點 返回零,如果一切都很順利。 事實上,如果事情不順利, 主往往會返回不同的 數字標誌著東西 與你的程序出了錯。 所以,通常當你看到代碼,你 不寫返回零,但它的好 知道背後發生了什麼事 場景,因為每當你寫 另一種不同的功能, 您將需要 包括返回行。 如果你說我要去 返回一個int,你必須 寫返回的東西。 如果你說在這裡無效 年初,無效的主要無效, 例如,那麼它並沒有返回 什麼 - 空虛意味著什麼 - 所以你不需要返回的行。 但你曾經寫的東西,這不是 無效的返回類型,你需要 一個回報,你說行 需要把東西 類型相匹配的。 任何問題嗎? 甜。 範圍。 這是我們已經 以及感動。 每個變量,因為我們知道,有一個 一定範圍內,這是基本 談論變量 可能會或可能不會被引用。 我喜歡說會發生什麼 在大括號中保持 花括號內。 因此,例如,如果我們看一下這段代碼, 我們定義了一個全局變量 為主,詮釋一個外, 這裡在頂部。 我們調用另一個 int一個主裡面。 我們有一些比較大括號, 我們調用另一個INT的一個。 我們有三個代碼。 這些都是不一樣的東西。 我創建了三個不同的變量。 然後裡面這些內在的捲髮 牙套,我說A = 4。 哪一個是談論, 第一個,第二個, 第三只呢? 學生:第三個。 JASON HIRSCHHORN:在談論 關於第三個。 所有那些實際上可以 談到在這個特殊的 例如,由於其範圍 到這些最裡面的大括號。 然而,當你調用東西是一樣的 名稱,稱為隱藏的東西。 所以你只處理或修復,或使用 最近的變量,或者一個 最接近你。 所以,裡面第三個是在這裡,這是最接近 該行中,a = 4,所以它 影響第三。 和最後一行中,a = 2,a是 ,談論,所述第一,第二, 第三個是? 學生:二。 JASON HIRSCHHORN:在談論 關於第二個是。 當然,第三個是最接近 它的代碼,但第三個 外部不存在 那些大括號。 一旦你到那個封閉的捲髮 梅開二度,這就像它不見了, 本質上。 所以,唯一的兩個你已經離開的是那些 第2個,當然,現在 它的最近的第二個。 所以這是一件好事, 記得大約範圍。 例如,我敢肯定,你遇到 這在一個do while循環。 如果初始化的變量裡面 DO WHILE循環,然後你試試 訪問它之外,你可能 像,這得到了一些警告 變量不存在。 那是因為範圍的想法, 事情只存在 那些大括號內。 大括號是像一個巨大的擁抱 你給你的代碼,又是另一回事 去想它。 因此,這是另一種功能,這 你們的代碼​​,hellofunction.c。 我們要跳過的現在,但 這是我鼓勵你 在自己的練習。 寫一個方案,其中主要電話 另一個函數,打印出 問候給用戶。 它本質上是“世界,你好 和抽象成的printf 另一個功能。 但我們不打算這樣做,現在 因為我們沒有盡可能多的時間 離開,我會很喜歡。 所以函數聲明。 我們已經看到了這個前。 如果你想要寫另一個函數, 你需要讓計算機知道 主知道它的存在。 所以,我們做的是上面的主,我們寫 返回類型,名稱,和 參數,然後向下跌破主力, 這裡,我們實際上該行複製 然後編寫實際的代碼。 那麼這樣一來,如果你調用函數 主要在頂部,主知道, 你好存在,例如,如果我是 打電話招呼,然後它看起來 實施向下跌破。 會發生什麼事,如果不包括這 線向上頂,無效(無效)? 如果不包括此行 和主呼叫你好,我是 要得到一個錯誤。 我要得到一個錯誤,因為 編譯器不知道 這件事情的存在。 這就是為什麼我們 #包括cs50.h. 基本上cs50.h做 放置得到字符串在那裡。 推桿得到int的有。 它把所有這些功能 前主讓原型時 你叫他們在主,主知道 這些東西的存在。 這是那些h文件。 所以,如果你打算讓自己的 功能,你一定要確保 在那裡,你把原型。 關於這個到目前為止的任何問題? 命令行參數。 這就是我們要去完成 ,然後希望我們能 擠在一些pset中。 我不知道,如果我們將能夠擠 因為時間,但 你們誰在這裡,如果你 傢伙想了一下後說,我們 可以在它外面。 但我們要完成 命令行參數 最後15分鐘。 我們醒了,邁克爾? 你醒了嗎? 好。 我不知道,如果你睡 閉上你的眼睛。 這將是非常棘手。 命令行參數。 這是一個的方式來傳遞信息 進入程序。 最後,我們會遇到別人。 但是,從本質上講,我們要停止 寫詮釋的主要(無效)如果我們想 採取一些命令行參數。 我們打算寫這個東西 被稱為國際主要(INT ARGC, 串argv的括號內。 這是令人目不暇接。 這是一個很大的字母中所沒有的 人類的英語,所以我們要 現在他們解壓。 ARGC參數計數 - 再次,所有這些都將 可在線 - 參數的個數。 ARGV參數向量, 這些都是自己的論據。 這是一個字符串數組。 實際上,我們已經看到了一個陣列 今天之前的字符串。 我們創建了一個在過去 程序編碼。 因此,這裡是一個例子。 我寫。/ ohai CS50節 我的命令行。 ARGC在這種情況下等於3。 ARGV支架0 ohai,argv的支架1 CS50,argv的支架2部分。 同樣,ar​​gc是參數的個數, 把你絆倒了一點 位,我們總是算的名稱 函數的第一個參數。 因此,在這種情況下,有三個 參數的函數名 那麼這兩個,我鍵入。 下一步,我們要拯救那些 參數本身argv中。 再次,正如我們之前看到的,我們做 這在過去的程序編碼。 您可以將通過數組 argv和那些字符串。 本質上這是我們做了什麼 年底我們的最後一個節目。 我們挑了隨機的名字,然後去 名稱支架無論和印刷 出字符串設在那裡。 論只是一個陣列的頂部,由於 字符串本身陣列, 談到,你可以有陣列 的陣列,這是 基本上argv是什麼。 一種方式,你可以考慮一下 這是行和列。 現在,我可以得出這樣的權利。 所以argv的 - 不擦除。 讓我們借鑒ohai下。 所以,如果我寫的,ohai CS50部分, 我要截斷 在這個例子中的一節。 但是,從本質上講,我的多維 陣列,ohai CS50 我們要做的教派。 所以在這裡,我可以訪問 - 如果我只是給argv的一個數字 - 這是錯誤的。 在這個圖中有什麼不對? 學生:從零開始。 JASON HIRSCHHORN:它應該 從零開始。 也許我應該還可以旋轉它,但 因為我已經畫了,我 要離開現在。 但是,從零開始。 這是正確的。 對不起,如果這是小的。 你們可以看到嗎? 所以,如果我做的argv 0,我會 得到所有ohai。 如果我做的argv 1,我會得到所有的CS50。 如果我做的argv 2,我會得到所有的教派。 但現在,正如我們所說,字符串 陣列本身。 那麼我能做什麼我就可以把這個 作為一個多維數組,並且我 可以做一些沿線 argv的0,0,這給了我只是 字符0。 ARGV 0,1,這給了我只是ħ。 ARGV 1,3,給我 0這裡CS50。 因此,因為字符串本身 陣列,我們把 在另一個數組。 我們現在有數組的數組,我們 我們的第一個數組索引和 然後我們第二個數組的索引。 和你所期望的,我們這樣做 只是把那兩個 - 只是我們做的方括號 旁邊另一個。 所以在這個例子中,argv 1是CS50和 argv的1,2,就像我們所說的,僅僅是5。 沒有任何人有任何疑問, 多維數組? 你們做得真棒。 甜。 因此,我們有另一個程序在這裡, 這是我們的最後一件事 現在要做的。 所以,我要你寫一個程序, 以用戶的全名,只有兩個 兩個命令行參數,最後, 打印出問候 用戶包括他們的名字。 那麼,為什麼不把三個或四個 分鐘做這個,然後我們一起去 以上為一組,並 然後我們將收官? 再次,在這裡,當我們說一個 描述每個用戶的全名 這個問題,它應該是命令 行參數,不使用字符串。 是啊,馬庫斯? 學生:所以當你說兩個命令 行參數,除了 /運行,或者 - JASON HIRSCHHORN:好問題。 做的,包括。/運行,三 命令行參數。 或包括/個性化, 這種情況下,因為這是 此文件的名稱。 所以ARGC將有三個。 不過,我想只有兩個參數 給程序。 我應該指定。 之前,我交的,我會作出這樣的改變 這些,並送他們到你們。 學生:如果你 有一個中間的名字嗎? JASON HIRSCHHORN:如果你有一個中間 名字,你的運氣了。 對不起。 或者,如果你只去夏奇拉 你也是出於運氣。 是嗎? 學生:所以當人們沒有 cs50.h,他們定義的argv 為char明星argv的? 或者是它仍然被稱為串的argv? JASON HIRSCHHORN:是的。 因此,字符串,我們再次掩蓋了什麼 究竟是有發生。 這是怎麼回事也許要解​​壓縮 上週三,但很快。 這就像訓練車輪。 因為從本質上講,它是 同樣的事情。 因此,讓我們一分鐘程序 這一點,然後我們會去 為一組,然後 就像我說的,包裹起來。 而且我覺得他們仍然是額外的糖果, 所以你們應該有希望 ,請採取這一。 很抱歉,如果你還在寫, 但我想潛水,我們 可以一起完成。 所以,我已經寫了# cs50.h#包括stdio.h中。 詮釋的主要(無效),捲髮,大括號 括號,裡面三行 偽代碼,用戶的全名, 兩個,只有兩個命令行 參數,打印出問候 用戶包括他們的名字。 因此,第一個, 用戶的全名。 誰可以幫我 用戶的全名嗎? 我該怎麼做的那部分? 難道你們這樣做,第一部分? 以用戶的全名。 那麼,對於一個命令行 的說法,我應該寫什麼? 我應該改變什麼 我的函數聲明? 學生:你不希望 它是無效的了。 JASON HIRSCHHORN:沒錯。 我不希望它是無效的。 我想要什麼? 學生:INT ARGC。 JASON HIRSCHHORN:INT ARGC。 學生:弦樂的argv。 JASON HIRSCHHORN的String argv的。 學生:支架,支架。 JASON HIRSCHHORN:支架,支架。 這完全正確的,那就是 其實我會怎麼得到 用戶的全名。 他們打算把它放在那裡。 所以,一個人的工作。 所以現在我想兩個,只有兩個 命令行參數。 所以,諾亞,什麼是盡我所能 檢查數量的命令 我行參數? 學生:你做一個if語句。 JASON HIRSCHHORN:如果 聲明中,完全吻合。 我想要什麼條件? 學生:如果大於3的argc。 JASON HIRSCHHORN:如果ARGC 大於3。 如果ARGC大於3,怎麼做? 學生:返回1。 JASON HIRSCHHORN:返回1。 將確保我有 兩個只有兩個? 學生: 如果argc是大於 3和小於2。 JASON HIRSCHHORN:如果argc是更大 比3和argc小於2。 什麼方法可以讓我寫這篇文章,在短短 一行上,或者不使用該 布爾運算符? 學生:這不是等於2。 JASON HIRSCHHORN:如果ARGC 不等於2。 沒錯。 因此,如果argc是不等於2,即 會給我這個程序, 個性化,當我跑的時候, 會給我多少 命令行參數? 我檢查了多少? 抱歉。 讓我改寫了。 如果ARGC = 2,沒多少東西 用戶寫入行? 學生:一。 JASON HIRSCHHORN:只有一個問題。 所以之前,你是對的,諾亞。 什麼我確實需要放在那裡? 學生:那等於3。 JASON HIRSCHHORN:ARGC 不等於3。 因為我想,我要等於3 個性化的附加其他兩個。 因此,如果ARGC不等於3,返回1。 你為什麼說返回1? 學生:因為, 意味著它是錯誤的。 JASON HIRSCHHORN:這意味著它是錯誤的, 什麼該怎麼辦? 學生:重新提示用戶。 JASON HIRSCHHORN:這將退出 程序,所以它會運行 了,但我們不會有什麼關係 在這裡再次要求他們。 我沒有要求。 所以這是完全正確的。 返回1只退出程序。 太好了。 並打印出用戶打招呼 ,其中包括他們的名字。 我怎樣才能做到這一點呢? 安娜? 學生:printf的。 JASON HIRSCHHORN:printf的。 學生:(“ JASON HIRSCHHORN:( 學生:“你好 JASON HIRSCHHORN:“你好 學生:%S JASON HIRSCHHORN:%s的 學生:/ N JASON HIRSCHHORN / N 學生:“ JASON HIRSCHHORN:“ 學生:ARGV JASON HIRSCHHORN:對不起? 學生:ARGV JASON HIRSCHHORN:ARGV 學生:方括號1。 JASON HIRSCHHORN:方括號? 學生:1。 JASON HIRSCHHORN:1。 學生:)和分號。 JASON HIRSCHHORN:)分號。 讓我們運行這個。 使個性化。 /個性化。 它只是退出。 為什麼退出? 學生:你沒有提出任何論據。 JASON HIRSCHHORN:我沒有 把任何參數英寸 看起來不錯。 你們釘。 如此反复,你走進argv和你 在開始的argc檢查。 這些是兩個重要的 事情要記住。 因此,在我們之前,我們最後兩分鐘 離開,我們不會給pset兩個,但 就像我說的,如果你想留後 10分鐘,我想他樂意去 用你們的邏輯 這些問題集。 我們有很多今天覆蓋 所以我沒有得到他們。 通常情況下,我想包括 在末端。 所以,如果你要堅持圍繞, 堅持10分鐘左右。 我們會做到這一點。 然後,我開始提到的, pset的零和一,我們會拿到 反饋回給您 盡快。 我們的目標是獲得的pset一個反饋, 註釋部分, 之前的pset二是由於。 所以,如果你犯了一些錯誤或 文體,事情可能會更好, 你就會有這些信息,以便您 不會做同樣的事情在pset中兩個。 然後在未來,你會得到所有 您的的PSET反饋和意見 回在下單前到期。 最後,如果我可以把在另一個 插頭反饋。 這是你的第一個部分。 這是我的第一部分 今年教學。 去那裡。 寫的東西​​,好的和壞的, 我會用它來作 部分在下一次做得更好。 最後,再次,如果你需要 什麼,讓我知道。 我更樂意幫助你們。 如果你只是想糖果,我 將有額外的糖果。 我很高興把它給你。 這將是一個驚人的課程。 這是一個,如果不是我喜歡的 當然,我已經在我的整個生命, 我希望這將是 為您精彩。 所以,我想要做我的一切力量 ,你真棒。 我要發送一封電子郵件,如果你 在我的部分或諾亞, 去嘗試,並安排與各 你們的時間檢查過 接下來的幾個星期,這樣我就可以得到 感你的CS背景是什麼, 它也將幫助我定制這些 部分,以更好地滿足您的需求。 所以,這就是我得到一字排開。 再次,我會看到你外 如果你想在那裡。 這是一周兩節。 謝謝你們這麼多。