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部分。 同样,argc是参数的个数, 把你绊倒了一点 位,我们总是算的名称 函数的第一个参数。 因此,在这种情况下,有三个 参数的函数名 那么这两个,我键入。 下一步,我们要拯救那些 参数本身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背景是什么, 它也将帮助我定制这些 部分,以更好地满足您的需求。 所以,这就是我得到一字排开。 再次,我会看到你外 如果你想在那里。 这是一周两节。 谢谢你们这么多。