[音乐播放] 扬声器1:这是CS50和 这是二周的开始。 所以,让我们深入到一些东西 这是越野车,可以这么说。 所以,在这里是CS50的IDE,我已经 停在推动这一screen--该死 它。 剧透。 好吧。 我拉起这个屏幕在这里, 其中有一个非常简单的程序。 如果我们向下滚动,最 这只是评论, 但在这里,在第13行至 17我们有一个计划。 这是语法上有效的,这意味着如果 我编译它,它会编译并运行, 但它的越野车。 在评论该方案要求 往上顶,它应该打印10星, 但事实并非如此。 并可以根据你的经验, 或即将用C的经验, 你能在逻辑上辨别 这是为什么,其实,马车? 是吗? 听众:它从零至10。 这是11次迭代。 扬声器1:是啊。 因此,它是从零持续 通过向上和等于10, 这当然是11迭代。 因此,这将 打印,的确,11星。 因此,计算机科学大会 在大多数编程语言 确实是,只是 从零开始计数, 但算上,但不通过 值,你真正关心的。 现在,这是一件事, 需要一点时间来适应 甚至划痕,设计,因为它是 对于非程序员或非计算机 科学家和儿童 基本上,被设计成具有 你开始在一个普遍计数。 这很好。 您完全可以开始计数 在一个,如果这是更舒适。 而数到,并通过10位,但 你就会明白尤其是本周 超越,仅仅如此 在规划很多东西 假设0是第一个 数字与你算, 那你会觉得它更容易 刚进入这个习惯出发 从零计数达到值 你的关心,现在 得到去。 因此,已固定的。 我们改变了小于或 等于只以内。 让我们来看看 这里的第二示例。 因此,这个程序也要求其 评论往上顶,它应该打印 十星,但事实并非如此。 这里有什么错误? 因此,what--对不起,我们要清楚。 10星。 每行一个,但事实并非如此。 所以,实际上,让我继续前进,编译 这一个,因为它是一个少 基于这样的描述清楚。 让我进入我们的源代码目录。 让车一个点斜线,越野车之一。 好了,我看11星,这 还是有问题, 但他们也都在同一行。 什么是这里的问题? 是啊。 听众:[听不清]。 扬声器1:是啊。 所以这是一个微妙的,你可以 记得我作简要的提到。 尽管一切看起来 漂亮,而且它很好地缩进, 一种,它看起来刮样 在该行的16和17是, 事实上,缩进下,对于循环。 这是无关紧要的。 电脑不 知道或看到空白。 白色的空间只为 我们人类,曲风。 电脑不知道,当你有 大括号,这,的确, 解决这个问题。 所以,如果我们真正走进去, 明确提出在这些大括号 这将通过解决这个问题 昭示编译器 我居然要执行 两行代码再次, 又一次,又一次。 但是,什么是根本的解释? 对? 我们不严格需要 大括号的时候, 即使它可能是最好的 实践进入这个习惯呢 即使它增加了两个 字符代码。为什么呢? 听众:[听不清]? 扬声器1:是啊,这样的 另一种解决方案完全。 对? 特别是如果乍一看你不 真正体会到这是怎么回事。 好了,我们肯定能 只是做两件事 和刚刚完全避免这个问题。 这很好,但现在, 对于今天的目的是什么 对于错误的解释? 为什么在同一行所有的星星? 是吗? 听众:看来,如果 你有一行代码, 你可以不用那些。 扬声器1:没错。 这仅仅是一个人的约定。 人们认识到,这是一个 有点恼人或繁琐 有把花括号所有 如果你想要做的时候 是执行的一行代码。 所以,人类决定一些 时间以前,这很好。 如果你想要把所有的循环 上只是这样一行, 这很好跟单 分号结尾。 但是,你只能做一个这样的 行没有花括号。 所以,当CS50风格指南 如将指向你, 你会看到,一般 这是好习惯 进入这个直到你 相当舒适的飘游 从这类公约 ,做自己的事。 只要你是自洽。 我们将详细讨论 风格有点今天晚些时候。 所以,让我打开另一个程序。 当然,我们应该 修复10为好。 让我继续前进,写一个真正的 快速程序,我会打电话, 比方说,循环点C.因此,循环点C. 而在环路C点我就要有, 包括标准I / O 点^ h诠释主要无效。 现在,就让我们做的,的确是一个循环。 因此,4 INT我得到零。 我不到,也就是说,50。 我加分,加分。 然后在下面就让我们来 继续前进,不要打印F. 然后我要打印我 和一个新行,分号。 这应该打印所有 从零号至50? 几头点点头。 几号。 什么是已经是错误吗? 什么是容易犯的错误我犯了? 是啊。 听众:[听不清]。 扬声器1:是啊。 因此,即使它看起来 像这就是我打算, 记得,我也是 只是一个ASCII字符。 所以,如果我说,打印“一” 它从字面上去 打印一,所以,如果我 想插件的占位符 价值其实我需要这样做 然后插件的 我值动态。 否则,我只是要 获得50我的屏幕上。 所以,让我继续前进, 使这个循环,运行它, 而事实上,我们都 一路攀升至49。 如果我的时间向后滚动我见 数字零的开头。 好吧,如果我有点搞砸? 如果我这样做呢? 只是因为我没有想到。 这是什么程序。 一旦重新编译和运行, 要做到逻辑? 听众:没有。 扬声器1:没有。 这是为什么? 听众:我是专为为零。 因此,条件为假。 扬声器1:是的,没错。 所有的代码是正确的,语法上。 这将编译,这 代码将运行,但它不是 打算做什么有用的东西 因为我初始化我到零。 然后,我们检查一下,我是大于50? 显然,不,不是这样的。 因此,循环永远不会执行的。 如果我们做一些事情 多一点鲁莽? 那么,如果我们不喜欢INT我得到零。 现在让我用,而 循环,这是另一种情况。 虽然我说,而我是大于 或等于零,然后在这里我 继续前进,保存文件,进行循环。 而我要运行它。 我该怎么看到这个 时间while循环? 是啊。 听众:一个无限循环? 扬声器1:一个无限循环? 是的,为什么? 听众:因为它始终为零。 扬声器1:是啊。 所以,我被初始化为零。 当然,我总是更大 大于或等于0作为一个结果。 所以,我只是要 看到这个无限。 而现在,这已经上来一次 或两次课程的负责人。 当你发生什么 有一个无限循环? 听众:控制C. 扬声器1:是啊。 因此,对照C最终会作出反应。 不幸的是,我们已经打印出来 亿万零已经 所以计算机有 种了我前面。 因此,它会忽略 我要一点点。 但如果你只是打对照C几 你的Mac或PC键盘上的时候, 最终它应该确实终止。 如果没有的话,我们会告诉你一些 用不了多久,你的技术 其实可以强行杀程序, 就像在Windows和Mac OS, 如果需要的话。 但是,让我们尝试别的东西。 让我们实际上会增加一。 这仍然将是无限的? 让我跑这一点。 现在你可以种 看到发生了什么。 此,也同样是一个无限循环。 但是,这是一个有点很难回答的问题。 这是怎么回事永远打印的数字呢? 听众:第 扬声器1:否。 为什么呢? 我听到一些号在这里。 Someone--呀。 听众:您没有足够的 位真正坚持下去。 扬声器1:所有权利。 所以,我没有足够的 位继续下去。 那么,有什么事情发生? 它只是要停下来? 听众:在某些时候 它将关闭the-- 扬声器1:将关闭 循环下来,但是为什么呢? 这是怎么回事发生在 其边界的尽头? 是吗? 听众:它会循环 回到负数。 扬声器1:负数,或 如果我们只是积极的治疗, 零最少。 所以,是的,绝对的。 回想一下,我们看到的最后一次,如果你 增加你的点点太多次, 你有FORE溢出 你INT的能力 或任何数据类型,你 要环绕,很可能, 两个负号。 或者,如果你指定你 范围应仅是正的, 你可以这样做,但 我们还没有看到的是, 你可能最终至少回到零。 虽然,实际上是。 在这种情况下,负 号,在这种情况 环路将要终止 因为我是不是,事实上, 大于或等于 零,如果是负面的。 所以,不幸的是,如何 长会,我们不得不等待? 现在,我们正达 什么,200万上下的? 我们是如2十亿, 我们将不得不等待 直到我们可以清楚地看到这种现象。 但是,我们可以看到它快一点, maybe--让我们看看我们是否可以中断。 来吧。 就连菜单出现缓慢。 好吧。 所以,我们会回来的,不久。 这是一个很好的时间 - 该死的,小狗。 这是一个好时机一些短片。 所以,如果你可能会喜欢 从事YHack, 该事件是 我们的朋友在耶鲁大学主办。 而且,事实上,一些过程的 课题组在耶鲁涉及与此有关。 YHack是国际 黑客马拉松主办和举行 在耶鲁大学,汇集1500 志同道合的黑客和广告的所有 全世界。 如果这是感兴趣的, 看看这里。 如果这是过于短暂的 屏幕,看看今天的幻灯片 对于网址yhack.org。 因此,也有一些快速的公告。 因此,正式部分将启动 下周在这里和纽黑文。 请记住,你会得到一个 电子邮件后来这个周末最有可能的。 这需要很长的时间 为CS50节, 给所有的人在 一流的,每个人走动。 而所有的教学研究员“ 时间表也仍在巩固, 但敬请关注电子邮件,如果需要的话 可以,你可以有后再次部分。 Study.cs50.net。 所以,即使你是一个恒定的与会者 在段,实现几乎所有 资源,我们在部分使用 公布于CS50 在研究这个网址在这里。 所以,如果你曾经想重新审查 材料部分,或读取提前, 或者你不能让一些周, 认识到样品的幻灯片, 和问题,和定义, 而更多的是所有有作为。 今天办公时间恢复, 明天,周三, 周四检查过程中的 网站的日程安排。 而且,现在推出 今天是CS50讨论。 因此,如果当你有问题 对方或过程的工作人员, 且通常工作 一些习题集, 认识到你不一定 不得不转向你旁边的人。 如果有一个人也没有,你可以 伸手给我们和同学 网上通过CS50讨论。 所以,这是一个讨论 板的过程中, 并认识到这 也许是最好的 开始的地方,当你有 办公时间问题时,外 特别是。 午餐将在本周启动了。 在火与冰 [听不清]在纽黑文。 看一看在课程的 网站以RSVP。 先来先服务于这一点。 如果你没有得到在这一周 我们将这些最每周五做 在此期限内。 OK,现在大约分级字。 特别是当我们进入的问题 设置一个,这是这个星期, 与问题设置两个,其后。 如何做才好在计算P套 和评价其质量? 所以,这是我们在使用四轴 CS50,他们是这四个位置。 适用范围,它可以捕获一个数字 依据到底有多少在P组 你解决。 它大致与对应 努力,这是我们的拍摄方式 你尝试一半在P 设置,所有P组。 这是一个容易得到完美 分数,如果你做,事实上, 尝试在P组的每一个方面。 所以,记住这一点。 正确性正是如此。 请问你的代码工作规范 而作为员工的样品溶液 建议你的代码 应,实际上,正常工作。 检查50,如果你还没有遇见它 然而,是P中设置一种规格 并且一般 给你是/否的答案 是否你的代码是正确的。 至少到目前为止,我们要​​去 对其进行评估的基础上测试 我们的程序中运行。 设计更加主观的。 这是怎么写得很好,是你的代码。 这是东西 你会得到在一段时间内比较好, 和它的东西,我们会 提供更多的定性反馈。 并通过设计,我可能 过不了多久意味着你 中了一些p-可能会受到诱惑 设置做一些loopingly, 但有可能三个或四个,或 5嵌套循环前或嵌套而 循环。 这一般应 开始做你畏缩 一般会 认为是不好的设计。 你会开始看到在课堂上 出来做事的类好方法, 做事不好的方式, 可能全部是正确的,但不能 一定精心设计的。 就像写论文。 你也许能够把字上 网页是语法正确, 但作文或 论文他们在仅仅是 完全语无伦次或缺乏说服力。 因此,可能是在该模拟 不良或良好的设计编写的世界。 和风格,也同样是相当主观的。 但至少我们期望的一致性。 这是多么漂亮是你的代码。 事情很好地缩进? 是你的变量以及名为/是否所有 你的括号和大括号 对准他们应该是什么? 我们确实有一个CS50风格指南作为 问题集将指向你的。 那些更舒适的 欢迎来自流浪 只要你是自洽。 而这,也同样是一个教训 我们将加强在部分。 因此,如果这一切是一个小 速度快,实现了在P组和部分 将进入更深入没多久。 但一般我们有 很少有水桶为CS50。 分数一般的规模 的一至三个,或者一至五个。 我们literally--,我不能说 这足以在第一周。 三是良好的。 所以,尽管,是的,四分之三 五通常,数学, 可能是一个60%或像A D减去。 三是,其实不错的。 而且,事实上,我们预期 大多数学生在课堂上 各地开始术语 三三两两,和三分球,和四肢。 也许没有那么多五岁以下儿童。 没有太多的人。 但一般开始于 甜蜜点的曲线 使得随着时间的推进, 实际上有空间, 和机会上的进展。 所以,请不要等同于三连60%。 这是比这更抽象。 与我们计算公式 成绩加权如下。 正确性值得最。 设计是值得少一点。 风格是值得少一点。 而这一般 捕获的时间量 即进入获取每个 这些轴的恰到好处。 风格是超级容易, 应该是超级快, 但它是一个简单的习惯 偷懒一下。 正确性可能需要 你的大部分时间。 追击了一些bug威力 采取额外小时或更长时间, 因此,计分 最终捕获。 所以,现在更严重的话。 由于CS50有 区分,为了更好的 或者更糟的是,被 也许是更好的认识 与学术的问题 诚信比大多数其他任何课程。 事实上,这是我的知识 我们送更多的学生,遗憾的是, 为惩戒目的 每年作为结果。因此, 在全兴趣 信息披露,让我们来简单谈谈 关于什么在CS50,和你 可以做的,你可以什么铭记。 所以,在这里,因为2007年的时候, 我继承的过程中, 是广告委员会的案件数量。 AD板是哈佛大学的纪律 身体,还是现在的荣誉顾问, 到案件移交时, 学生做一些课程的 教学大纲认为是不合理的。 有没有真正的模式 在这里,我想说的。 它的波动比 年,但一般 这是数 这被称为箱子。 学生人数 所涉及到的? 它也各不相同。 通常情况下,去年 例如,29名学生在哈佛 是广告登机,可以这么说。 其中在校学生29, 他们俩之前的学生, 谁是合作 在某些不良方式。 然后在的条款 百分比,通常约为3% 之类的,很遗憾, 使这些类型的决定。 所以,去年是3.5% CS50的学生的身体 这是广告登机,可以这么说。 那么,是什么这一切意味着什么呢? 什么我们实际上做? 因此,对于充分披露,我们 绝对的,因为计算机科学家, 有软件工具在我们的处置 它很容易让我们,为公平起见, 其他的同学谁不 越过这些线跨越比较 今年对每家每户提交 提交在过去的八年。 软件做到这一点。 而最终它的 人眼的决定 是否要参照一些 此事作进一步审理, 但软件有一定的帮助。 而这,坦白地说,这就是为什么我认为 我们有这样大量的CS50。 这不是因为CS50 学生或CS学生更多 一般是任何减少诚实 比任何其他的学生, 它只是我们有 工具和技术 与借此第一遍。 但是我们继续关注 在所有这些事情 同时,又在利益 认识到正在被投入工作 在由绝对多数之类的。 而课程的政策 学术诚信, 即使它是一堆段落 长着一堆子弹 那些希望可读性很好,它 确实归结为是合理的。 和拇指的最佳规则 我们提供了教学大纲中 是这样的,本质 所有的工作,你 提交本课程必须是你自己。 事实上,几乎所有这些 宗介纪律处分 这是因为一些学生下旬的一个 晚上一般把他或她的代码 在直接向一个同学, 谁再通过它 其全部或 显著物。 不过说真的,这是确定。 事实上,在办公室 纸小时,卡瓦 你一直在流传,如果你来过办公室 小时上周鼓励之多。 你绝对 欢迎和鼓励 讨论习题集与同学。 要绊倒的时候互相帮助。 但一般经验法则应 是这样的,“当你寻求帮助, 你可能会显示你的代码给其他人, 但你可能不认为他们的。“ 所以,换句话说,如果我 一些页P挣扎 而我在坐在那里 食堂,或在图书馆, 或在课堂上 试图找到一些故障, 我可以肯定的显示 我的我的屏幕上的代码 的人坐在旁边 对我来说,肯定是工作人员, 又是同班同学。 但是,如果解决方案,它 我的同学提供的是,哦, 这里只是来看看什么 我这样做,是穿过线。 而且我敢说这是一般 一个合理的事情对大多数人 很容易发现的行。 所以,看大纲 对于更多的细节。 而现在比较1 有争议的方面 CS50大纲,我认为我 会说话的结论,在这里 是所谓的遗憾子句。 所以,这里的所有的小字。 但总的来说,我们已经看到 在过去的8年以上 如此,事实上,几乎所有的CS50的 学术造假案 一直只是穷人的结果 决策深夜。 应力,其结果的结果 缺乏饮食,睡眠不足, 过多的P组,太多 最后期限,太多的承诺。 应力凌晨一两点建立3:00 :00,4:00,有一个最后期限迫在眉睫。 大多数学生在这些情况下, 刚刚做出了错误的决定 他们很可能会后悔的 第二天早上如果不分钟后, 但直到去年,没有 放气阀,这些学生可以 实际上开辟实际解决 问题的头不用担心被 从大学完全启动。 而且,事实上,我们推出 这个遗憾节最后一年, 它说,如果在 72小时后,三天, 穿越一些线 在规定的教学大纲 你出面了课程之一 头,我们将有一个关于它的聊天。 目前还有一些 结果,违背了什么 据报道,与此相反。 还有一些结果是 是可操作的由课程, 一般归零在P组 或者采取一些其他的措施, 但我们会,事实上, 处理它自己,而不是 指其较高的是结果 可能是更严重的。 而且,事实上,分享发生了什么 去年,在八年,现在 九年,本课程教学 并与各旋钮摆弄后, 过去转弯各种刻度盘 几年来学术诚信, 和每数据没有明显看到 影响甚至这样的演讲, 这是手了最好的东西 我们教学上推出 八年来顺 这些线路在CS50。 19名学生上前 根据本条款的最后一年。 我们没有采取行动 7这些学生, 确定它们是 不必要的担心。 他们没有,事实上, 越过一条线,但它 是一个很好的聊天都不过。 我们归零的分数11 该提交。 而在一种情况下,我们问了 学生做习题集。 但更引人注目的, 说实话,这些19的聊天记录, 这是方式比我 预计将有,他们每个人 10分钟或许一个 小时多头,也带来了 点燃有关的一些问题 家庭问题,朋友的问题, 心理健康问题 我们再搞, 与学生的祝福,居民 院长,或朋友,或任何其它号码 支持资源。 所以,这是迄今为止1 我们这个时代的最佳用途 和最佳干预措施之一。 随着中说,它没有 输入上检测的速率 学术造假的更普遍。 我敢说,这个子集 学生去年 是一个人口我们 以前以前从未确定 和从未与之前连接。 所以,这些人 精彩的成功案例 即使他们被带到光 在低于最佳情况。 所以,记住这一点 当你做,也许, 一些贫困的决定 自己在深夜, 有追索这么久 作为学生在这种情况 自己并出面使我们能 有那种聊天,并处理它 的方式,是教育,然后 我们可以把它在我们身后的第二天。 因此,事不宜迟,取 缘灭这次谈话中, 小狗是上升的原因 只是为了打破僵局了一会儿。 不幸的是,他们都睡觉, 但什么是应该发生在这里 是每个人都应该 以敬畏和一种放松 在那之后很沉重的谈话。 但显然我把 小狗睡觉。 但是,如果你去到CS50的 网站斜线小狗, 你可以整天看着他们。 特别是,也许2:00,或 3:00,或4:00,晚上 看到一个小的压力缓解那里。 所以这是凶多吉少小狗。 好吧。 是不是很好玩? 行。 所以,回到一些电脑 科学,如果我可以。 所以,记得上次我们开始 看着不只是在主,这 是默认的功能,当 绿旗点击当量, 但是,我们也开始简要 写我们自己的一些功能。 因此到目前为止没有这些功能 已经特别大或肉。 你会惹上这些大 功能可能,P组2,P组3, 肯定P设定4及以后。 现在大部分的节目, 如果不是所有的人,肯定对p 集1可以在主全部完成。 如果你的程序是唯一 五类线,10号线, 甚至20日线长,完美 合理的把它写 所有的主,不要过分复杂 你的代码,但我们正在做什么今天 及以后试图也 介绍一些好的设计技巧 这样,当你的代码变得更 复杂和作为问题 你想解决越来越困难和 更有趣的你有几分, 在你的工具箱中的工具,其作用 设计良好的解决这些。 所以,让我们快速回顾一下 这个节目从我的最后一周,这 是函数零点点。和 请注意,很简单, 它看起来像这样有两个 功能,主要和打印的名字。 而回想或者 今天逆向工程, 究竟是什么动机引入 在第28行称为函数, 打印的名字吗? 或者是什么这的一个例子 宗旨或外卖方面, 如果你会的。 一些杂音。 什么? 是啊等等功能分解 是怎么样的说法了奇特的方式, 分解你的程序 成其组成部分 然后使用这些部件 组装一个整体。 所以,这也仅仅是一种 已经一口, 但是这也许是连 的东西更好的例子 只是所谓的抽象。 对? 抽象是要为一个 反复出现的主题CS50的 而且计算机科学 更普遍的,因为它是 一种技术,使用它可以解决 问题更有效,因为你 可以编写解决方案的更多 直观的方式,缩放 并且是可以理解其他人。 我怎么意思? 因此,可以说这是更具可读性 看这样的节目, 超短虽然它是。 当您在22行看到,有 一个调用的函数,打印的名字。 单单这名字就做什么。 这个功能显然需要 它的括号内输入, 显然做一些事情, 想必打印的名称。 因此,尽管我们 绝对可以有 做什么我们做了一个星期前,这是 只是把这个代码的实际行, 摆脱了这一点,并获得 摆脱这一切在一起, 我们之类的抽象出来 打印名的概念。 如果你使用的打印清晰度我不在乎。 我不在乎,如果你有一个 %的S和一个反斜杠N.这些 是令人难以置信的神秘细节。 我所关心的一个 程序员正在打印一个名称。 所以,要做什么更好的方式, 不是通过调用一个函数,打印的名字吗? 因此,这是动机之一 做这样的事情。 使代码更易读,更 可重复使用的,并具有自描述性的。 现在,让我们一起来看看 在另一实例中, 这是一个功能, 这是我们不得不在这里。 所以,这一次或许更 引人注目的,因为,在这种情况下, 我不希望只是得到一个int。 我希望得到一个积极的INT。 而事实证明,得到了肯定 诠释你所要做的一帮跑腿。 对? 这不是一个简单的一行 调用诸如打印的名字, 这是无可否认的那么迫切。 为了得到一个积极的INT,logically-- 让我滚动回落隐藏此。 你有什么做的? 像所有的工具,我们 目前所面对的是 像从标准打印高清 图书馆,也从CS50库 我们有获取int和获取浮动, 获得长隆,获取字符串, 但只有一个,锗, 现在的问题是得到诠释。 所以,如果唯一的工具,你有 在你的工具盒是获取智力, 我们怎么去实现 它得到积极的诠释? 听众:创建一个记录,并检查 是否,他们给输入 为正。 扬声器1:完美。 没错。 我们在另一个工具我们 从两个星期前的工具箱 仅仅是循环结构。 所以,是的,如果我们使用了一段时间 循环或do while循环,或脱颖而出 循环中,我们也许可以蒙混过关 任何那些某种形式的。 我们可以实现获取的概念 积极的INT,只需使用Get诠释, 然后自顾自地调用它 再次,保持缠着用户 直到他或她实际上 为我们提供了我们想要的。 所以现在,这个 该方法的抽象 中得到肯定的INT 到称为函数 得到正int是多一点 引人注目的,因为看这个。 这就像10加 行代码的 参与得到肯定的整型, 我真的不关心你是怎么做的。 所有我关心的是你 能做到这一点,所以我已经 隐藏所有后面的这些细节 函数调用得到正int值, 事实上,有这个do while循环。 而看到上周的语法 在那里,但它只是宣告N, 并打印出 指令给用户。 它要求得到诠释,然后检查 再次此条件,并再次, 并再次直到用户协作。 所以,现在,几个完整性检查。 对于那些也许熟悉 有一定编程, 为什么为N声明,为什么我创造 在do while循环氮之外? 为什么第29行,而不是 像33,例如。 听众:因为当你 一种外部声明,它 的更多,较大scope-- 扬声器1:好。 听众: - 并且如果你声明 它的循环中,[听不清] 因为它不知道这件事。 扬声器1:没错。 如果我能simplify-- 它的范围的问题。 和范围是指在上下文 其中一个变量存在或可用。 和拇指这里的好的规则是, 通常当你声明或创建 一个变量,你只能内部使用 最亲密的拥抱花括号。 那么,是什么意思呢? 如果我,相反,撤消此去与 东西,感觉有点简单。 对? 第32行只是看起来更清洁现在对我。 我正在做两件事在 一次,然后分配 右手到左手。 现在的问题的基础上 范围的界定 是,N能在线路上使用 31和32这循环内, 但如果根据这一定义 可它不能用? 在行是什么? 是啊。 听众:35。 扬声器1:35。 绝对不是35。 而且还还有什么地方? 听众:34。 扬声器1:即使34 有问题的,因为它是 外面的大括号。 所以事实上,让我们看看会发生什么。 对? 这似乎有点 直观的,也可能不是, 但是让我们看看有什么 编译器的时候说 我们进入今天的源目录。 让功能之一。 哦,我的上帝。 好吧,我终于完成 这,顺便说一句。 好吧。 这有什么问题吗? 很神秘的来看待。 但这里是我typed-- 使功能之一。 下面是做诱导, 这实际上是 使用编译器铛 用那些标志 我们将不久再次看到。 再次,总是期待 在第一个错误, 因为它可能只是一个级联 其他线路毫无意义的作用。 所以,这是什么意思的是, 问题是在功能1.C. 它是线32。 而且它在列或字符,13。 所以,当你的文本编辑器,可以 帮助您确定的问题是。 所以,如果我向上滚动,什么是第32行? 这的确是这个 这已经凸显 右这里 - 未使用的变量n。 但它不是使用。 我使用它。 但是编译器的迷惑,因为 它只存在这个范围内。 所以我不能在这里使用它。 我不能在这里使用它。 和编译器,因此, 甚至不关心我尝试。 这似乎是不使用的 在其实际范围。 因此,我们可以通过做扩大范围 正是我们开始with--诠释ñ。 即使它不 看起来优雅,也许, 我们正在做一个额外的行 在这里,现在它的范围无处不在。 因此,让我们再试一次。 因此,请功能之一。 美观大方。 而现在,如果我,如果我运行功能 之一,让我们给它的负10, 负1,0,1,它确实工作。 所以在这里另一种解决方案。 你知道吗? 如果我真的摔跤呢? 我不知道在哪里 N为应该去。 你知道吗? 我只是把它所有的 在我的文件的顶部,在这里的方式。 什么该做,你觉得呢? 是吗? 听众:[听不清]。 扬声器1:是啊。 所以,我做了它全球性的,可以这么说。 如果你有一个变量的外 所有的功能是允许的, 和代码应编译,和n 现在将访问不仅在获取 正整型,而且在main--其中 有点令人担忧,因为有 已经是N的主,所以更 对,在短短一个moment-- 但是这会被认为是不好的设计。 好吧。 如果你不得不求助于 有点像,哦,我会 只要把它在这里,因为 代码看起来编译 一般不是最好的做法。 而你要选择 最窄的可能范围 为你的变量,这将意味着 与我们最初的设计,将其 就在这里。 现在,顺便说一句,如果你确实有 一个同名的变量在这里, 的C方式将处理this-- 虽然这不会发生太大often-- 是,这是仍 完全没有在这里。 但N的线的定义 22将跟随全球之一。 所以这个一会工夫内 主要和全球性 当你将实际应用 得到肯定的INT但更多介绍 还有一次,只是 对于那些好奇。 因此,在短期,我们解决这个问题在这里。 现在,让我们梳理出另外两件 我们来看一个代码最后一行之前 在这个程序。 获得积极的INT。 上的左侧 它的字是字INT。 这是什么意味着你觉得呢? 到目前为止,我们已经多见无效。 是吗? 听众:这类型的 你问有关的变量。 扬声器1:是啊这是类型,让我 不是说变,但值的类型 那我问回来。 事实上,这是 直观这里,希望。 对? 如果你想获得一个 积极的INT,你有什么事 要像function--我们 从上周的志愿者 交给你回来一块 纸,上面有一个int? 所以,我们指定的 此功能的所谓的返回类型 为得到正的int。 如果我们不希望它 返回任何东西,你说无效。 如果你希望它返回 一个字符串,你说的字符串。 如果你希望它返回 浮子,你说的浮动。 但是,这适用于这里只有一个 从逻辑上讲,因为我使用GET INT, 即使我限制它 正值,是返回一个int。 那么反过来说,这是什么意思 这有一个在括号中的空白? 做什么括号 一般定义? 是吗? 听众:这意味着该功能的 没有真正得到它。 扬声器1:表示该功能的 实际上没有得到什么? 听众:输入。 扬声器1:输入任何责任。 因此,事实上,如果括号 在这里你指定无效, 这只是意味着我不希望任何输入。 我会解决自己的问题。 事实上,你不必 告诉得到积极的INT什么。 你刚才说的,得到积极的INT,那 功能将熄灭,做它的事。 但有过一个小窍门,我已经 一直在这里玩这个整个时间 以确保该代码编译。 请注意,int--得到正 INT void--是第27行。 但是,对于一些看似奇怪的原因 这也是在这里第16行。 而刚刚好措施,我会重复 此所以这是完全一样的。 我已经说过原型 有点单行注释。 如果我删除了,会发生什么,以及 现在重新运行使功能1,进入。 哎呦。 等待一分钟。 哪里是我的卡? 咦? 支持。 让功能1。 在那里,我们走了。 行。 好久没救了它正常。 所以,我觉得有一点 这里臭虫,我不是 看到此刻的选项卡名称。 那么,什么是怎么回事? 函数隐式声明 得到肯定的int是在C99无效。 如此混乱了。 所以,这是什么指示? 嗯,事实证明, C是非常愚蠢的。 那么,它的编程 语言,或者说编译器。 它只知道你有什么 教它,它只是 要知道的事 如果你以前教它。 换句话说,在 主要的那一刻,我 试图调用一个函数 所谓得到积极int类型。 但是,编译器是不会 注意到,获得积极的INT 一直存在,直到第26行。 还等什么,编译器不只是 错误一旦它进入第17行, 他说隐式声明 中得到积极int,它 是的说法只是一种奇特的方式,我不 知道什么得到积极int是呢。 其他语言如Java和 Python和Ruby可能向前看。 C没有。 这样一来,我们的方法解决 这是两种方法之一。 任一个,如果问题是,得到 积极INT一直没有见过的, 好了,让我将它移动到顶部。 这将解决这个问题。 但是总体来说,这是 考虑更好的技术 把你的主要功能在很 顶部,这样一个人阅读你的代码 知道该程序的功能, 因为主要是不埋没全部 的方式在底部或在中间。 这是在最高层。 这样就不会觉得理想。 你可以真正得到 成的情况下 如果一个函数调用 另外,它调用了另一个, 你可以成为一个问题,即没有 可以去上面的其它,逻辑上。 这是不可能的。 因此在上班的路上 解决办法是只取 函数的签名,所以要speak-- 第一行,其中它的declared-- 而只是复制,粘贴在 顶,但不与卷曲braces-- 只是一个分号。 这就像一个小提示 是什么来。 而事实上,这一切的时候,我们 已经看到的东西像标准io.h 和cs50.h,类似地,在那些点 .h文件有没有其他的原型。 我们会看到不久。 因此,在短期,当你有一个程序 在具有多种功​​能的文件 除了主要的,你几乎 总是要声明它们 只是他们的第一个方式 行,后跟一个分号, 在该文件的顶部。 这是一个很大的一次。 任何问题? 任何问题? 好吧。 因此,让我们继续前进,然后 为类似咳嗽。 呵呵。 如何装修。 好吧。 咳嗽。 因此,这里是一个C 实施方案的 我们在做了一天 从头开始的很干脆只 说咳,咳,咳。 好吧。 有一个人说了几句 日前,有​​是 可以说已经清理这些代码起来。 好吧? 当你复制和 粘贴可能糟糕的设计。 至少有一次,我们到了四,五 或20咳嗽,感觉不好的做法。 我们只是一味地复制,粘贴。 什么是显而易见的解决方案 要清理这个计划吗? 听众:循环。 扬声器1:是啊。 因此,使用循环。 我们可以用一个for循环,一段时间 循环,任何数量的方法。 事实上,这就是 我们做一个版本在这里。 我不是重写它 在一个版本cough.c的 是一个for循环中只是咳嗽。 好了,但有一个 现在机会来样开始 设计这个有点像 教训我们教刚才, 这是this--假设,我想 创建一个名为止咳的功能, 让我们考虑的只是一瞬间 它是怎么回事的样子。 所以,如果我想要的东西 咳,我只需要 使用打印f显示函数内。 事实上我。 而事实上,这一切 时间,任何时候你 打印的东西 屏幕,程序员 将调用的副作用。 这不是我递过 回别人的值。 这是我采取一些行动 这可能是视觉上明显的。 但是,这个功能的咳嗽,它返回 任何基于它的第一线? 没有,因为它的返回类型 是无效的,这只是意味着 它不是递过来任何东西。 它可能会做什么 在视觉上,但它不是递过来 背一纸像上周。 是否需要任何投入? 第 所以它的无效这里。 所以这也是一种 过工程这一问题。 对? 我做了计划的更多 复杂的,多行代码, 我没有作任何 多个功能,但是这 将是一个敲门砖, 也许,对于更广泛的 上下文与更复杂的代码。 可是你知道吗? 我有什么done--只是瞥一眼 这不看评论 在file--什么都有的最顶端 我根本在这里完成我的咳嗽 实现这有什么不同? 是啊,在后面? 听众:让它这样你就可以 有一个字符关闭。 扬声器1:是啊。 所以,这种感觉挺有意思。 对? 这就像增加一个功能,您 程序或功能,在这种情况下。 它仍然没有返回值。 它可能具有一个视觉副作用, 因为它调用打印F。 但现在我已经参数化 的功能,这 意味着我指定取 int类型的输入,并把它称为N, 但我可以把它叫做什么,我想要的。 事实上,它可能只是 次,以更加明确。 然后,我可能只是在这里改变这一点。 但问题是,这就是我 创建一个函数,该函数的输入。 如果你还记得翻转 通过在一个或者在线 中穿行时, 第四个也是最后咳嗽例如, 你会发现在这里,我概括 我的代码further--那种抽象 它进一步。 像咳嗽,喷嚏,都是 关于好像说什么或做 某种声音。 保存将是 相应的划痕块。 所以我在这个版本中那样, 而我们只要看一眼, 咳嗽就像是说,[咳嗽] 咳嗽,同时,打喷嚏是 就好比说,[ACHOO]。 所以我概括 这些实施 现在实施 这个通用功能, 说,这是有趣的 对于今天的目的 不仅是因​​为它仍然 不具有返回类型。 但是,有多少投入它有? 听众:两个。 扬声器1:两个。 所以,如果你想 参加两个参数, 只是将它们分开用逗号隔开。 如果你要那么 调用该函数, 请注意,您刚才 来电说,报价,引文结束, 第一个参数,常见的 N,第二个参数。 所以,再一次,我们只是现在 积木,使我们实际上可以 实现我们自己的一些功能。 好吧。 对这些有问题吗? 所以,现在,让我们剥开一层,如果左右。 和目标,最终 是下周的习题集 将是对cryptogrophy-- 艺术扰码信息。 和具体地,信息 将你加密或解密 将是文字。 所以那种的邀请 今天的问题一样好, 到底是怎么回事引擎盖下 文字超越ASCII从零一周, 以及我们如何真正能 开始操作它? 因此,这里是Zamyla的名字。 和文本中,这可能是输入 到像的get字符串函数。 而从现在开始,当你看到一个 串像this-- Z-A-M-Y-L-A-- 开始想到它,就好像每个 这些字符是在一个盒子的其 自己的。 事实上,在一个星期左右的 时间,每个这些框 是要代表非常明确 memory--内存咬块。 因此,每个这些信件, 最终,将代表8位。 我们将真正看到这是怎么回事 在我的电脑的引擎盖下。 但不是足够 只是为了看Zamyla 从这个角度,即每 这些信件是在自己的箱子。 并很好地足够的C语言,我们可以 访问每个直接这些箱子。 所以,如果你想获得第一 信中她的名字,在C超方便 如果你想获得最后的 信中,超级方便以及 用一块新的语法。 所以我要继续前进到CS50 IDE和开拓串零点C. 并且在这里此例中,有 一些新的东西怎么回事。 因此,先在第19行,我们已经 看到了这一点before-- GET字符串。 因此,正如一个快速的完整性检查, 如果有人可以提供高达口头 一个外行的解释 这是怎么回事在19行。 像刚才把它理解 英语在CS50一个室友不 可以理解的。 是啊。 听众:让用户输入 字符串,并将其存储在一个变量s。 扬声器1:好。 有用户输入的字符串 并将其存储在一个变量s。 那很棒。 因此,在右侧 方面,我们调用get字符串。 返回一个值 未获得分配 从右手侧到左手 侧入变量称为S这 设计用来存储串。 没错。 所以,现在22行,每 在第21行的注释, 显然打印出字符串 每行一个字符。 但如何? 所以首先,我们初始化我为0。 然后我们怎么来 的Zamyla名结束了吗? 那么,在年底 Zamyla的名字,我可以 手动输入的最后一个字符 她的名字在某种程度上,或者它的数量。 对? 如果我们回到这里 - Z-A-M-L-- Y型L-A--所以我可以输入内容。 什么是指数 Zamyla的最后一封信? 如果这是0--讲像 programmer-- 0,1,2,3,4,5, 我heard--所以事实上,最后一个字母 在Zamyla的名字是第六, 但如果我们从0数, 这将是5号。 所以记住这一点在这里。 原来有一个函数 C中调用strlen的,并在当天回 并以这一天还在, 很多程序员 选择同步的名称为自己 听起来词功能 他们正试图说。 所以strlen的是字符串的长度。 所以会是什么的字符串长度 回归时Zamyla是输入? 听众:五。 扬声器1:Z-A-M-Y-L。六。 对? 什么是对Zamyla姓名的长度? 对? 而就在现实中,六个字母。 对? 所以,这是什么意思为我们的循环? 我们打​​算从去 0多达六个,这 将会给我们五次迭代。 我们该怎么办在每次迭代? 好了,百分之C,人 日前猜到了, 是指一个占位符是什么? 听众:字符。 扬声器1:只是一个字符。 因此,一个单一的character--不 多个字符,像一个字符串。 然后这里的新生产线 我们已经得到了打印输出。 然后这里的新语法。 如果你想打印出的第i个 字符字符串s,可以这么说, 你可以简单地说, 带S的命名, 然后打开括号,然后 然后关闭括号,与我 中间。 而且它是一种很好的在 那种它看起来像一个正方形 就像正方形中Zamyla的 文字上的图片存在。 所以,如果我实际运行这个 现在,让我们看看会发生什么。 使串0点斜线 字符串0,然后我 要在Zamyla的名字输入。 有没有提示,因为我没有 使用打印女,但是这很好。 我知道该怎么做。 事实上,它打印出 Zamyla的名字,每行一个。 现在,让我们有点鲁莽。 假设我不知道 有关strlen的,我算了一下, 所有的权利,没有人将有一个 名称大于像50个字符。 让我们继续前进,重新编译这 并重新运行它,然后键入Zamyla 再次。 从逻辑上讲,什么是 程序将尝试打印? Z-A-M-Y-L-A然后像45 未知字节的内存。 事实上,我们会回来的 这种想法的记忆。 但是,仅仅从逻辑上讲,如果 Zamyla的名字是这样长, 按照图片 在这里,我们在说什么 就是继续打印,保留打印,保存 印刷,保持印花,保持印花, 一路第50字符, 这谁知道会发生什么。 因此,让我们实际来看看。 让我们输入Zamyla。 有趣的。 我们很幸运。 只是一大堆的空白。 呵呵。 还有一个时髦的人物。 它看起来有点像一个奇怪的问题 标记存在,但有Zamyla的名字。 让我们真的很鲁莽。 怎么样,我们打印出500 块到未知? 让我们继续前进,使这个 以及,然后重新运行。 而且,我们全屏幕,​​因为 我们需要看到更多的空间。 Zamyla。 又是幸运的。 敢我们得到更加肆无忌惮? 让我们更加肆无忌惮。 50000字。 这是最肯定不是一个好主意。 好吧。 使串0。 这将是我们最后的演示。 Zamyla。 唉。 唉。 行。 所以,我的记忆真的是空的,现在, 这是一种真正方便。 我试图让用于:没事。 而现在我只是要得到鲁莽。 500,000。 Make--让全屏它。 输入。 Zamyla。 在那里,我们走了。 我不知道那是什么 是的,但它听起来很糟糕。 好吧。 而事实上,很快,如果你是中 在办公时间幸运的少数人 而在问题设置一个,你 很可能会遇到这样的。 段错误实际上做 具有良好定义的含义。 这意味着一些错误 有关的存储器段。 而在通俗地说, 这意味着我们感动 memory--我们使用的RAM在我的电脑 我不应该有访问。 这就是既是 功能强大,也很危险 关于C实际上是你 自由访问 你的程序的内存的全部 或字节或RAM,更具体。 因此,即使Zamyla的名字 只有六个字符, 我还可以去任何地方 在内存我想要的。 而作为顺便说一句,如果你 读过一些文章 在一些多年 服务器或某些节目 盗取或砍死那 东西冤大头 所谓的缓冲区溢出 利用这一点,我们会真正 谈谈在几个星期,这是 通常是指以某种方式欺骗 一台电脑变成进展顺利 以外的存储器的边界 它应该有,与 找到的东西多汁 在memory--一个 密码,也许,一种方法 绕过一些序列号的 检查,或者只是一般都能 诱骗计算机正在执行 代码并不打算。 但是,让我们回过头来 现实只是一瞬间 其中,该计划是 与strlen的实施, 并引入一件事在这里。 什么是这些顶级三条线之间新的? 因此,串点小时。 原来有这个库被称为 串点H,或字符串库, 它的头文件,可以这么说, 是串点h上给我 访问该strlen函数。 如果我省略,编译器 要我大声喊叫以某种形式。 但是,你知道吗? 现在让我们真的很细致入微。 在第22行,有什么样的 的inefficient--设计糟糕, arguably--关于这行代码。 回想一下如何 for循环中实现 什么步骤再次发生, 再次again--初始化, 的情况下,代码 得到执行,那么增量 或变更,则条件, 然后该代码,则改变,那么 的条件,则代码, 然后将改变,等等。 那么,什么可能有点 令人担忧的还是在这里做得不好? 是啊,在蓝色。 听众:strlen的是 所谓的很多很多次。 扬声器1:是啊。 所以strlen的被称为 很多次,但什么是 的Zamyla的名字长度 第一次循环执行? 听众:六。 扬声器1:六。 那么,什么是她的名字长度 代码执行第二次? 听众:六。 扬声器1:所有权利。 它仍然是六人。 对? Zarla的名字还没有 改变,即使我在寻找 在她的名字的字母的一部分。 这样一来,其实我是有效的 问这个问题,什么是 Zamyla的长度,有什么长度 Zamyla的,什么是Zamyla的长度, 六个独立倍,或 七连,仅仅是愚蠢的, 因为这是不变的答案。 所以,我居然可以 做的是this--在串的一个 我有一个稍微好一些的版本在这里。 那里 - whoops--线二我有 一个稍微更好的版本,其中 我做this--,而不是仅仅 我初始化为0,我也用逗号 声明一个叫做第二个变量 N--我没有再说INT。 我不应该,事实上。 但是我要说ñ。 然后我初始化n至 n的strlen的,所以现在 多少次的strlen 共得到执行? 就一次。 所以,这就是我们所说的 早期有关更好的设计。 实际上,一旦你的代码是正确的, 回去和思考通过, 我是使用尽可能少 存储器或几秒钟 电脑的时间或毫秒为单位 可以实现一些问题? 而且我要滚动 并只提 还有就是这个提 在这个版本空的, 但我们会回来的,不久。 因为现在,让我们来看看 在其中,这会引导我们。 所以之一,事实证明, 现在我们有能力 看单个字符, 我们可以利用的东西 从0星期是非常神秘和 那种无趣的时间。 但现在,尤其是当我们 我在一周密码学, 这将是非常强大的。 事实证明,一些 数据types--整型和浮点 和字符和字符串和 其他things--他们中的一些 可以很容易地转化为另一种。 例如,当我们谈到 有关ASCII一段时间ago--这里 资本字母A 通过并购,点,点, dot--我们说有一个映射 这些字母和数字之间。 而事实上,它也适用 小写字母以及。 小写a是97,资本为65。 而且有一些在ASCII码, 这仅仅是这种映射 系统的所有这些其他字母。 那么,是什么意思呢? 好了,我要继续前进,开 达实快一些所谓 ASCII 0,其中大部分是注释。 并再次在网上可以随时 翻阅了意见。 看一看什么 这是要干什么。 所以它有一个主要功能。 我硬编码的数字只为 现在,因为我知道我在做什么。 我知道我想在这里看到。 而且我初始化我65岁。 而且我计数 通过26个字母总额。 而我怎么来 一次打印一行 如果你能理解 这个突出的线路? 什么被印? 是啊。 听众:你要 打印的信 对应的地图 信中值和整数值? 扬声器1:没错。 我要打印的信 对应于该整数值, 反之,如下所示。 嗯,这,有人早些时候说, 只是一个占位符字符。 它仍然是。 当然,这是一个占位符 对于int--不是一个新的生产线。 现在发现,我的第一个值 我堵在该占位符 不只是我。我是说, 括号,字符我, 其中括号字符是 告诉编译器,把我 不是作为它是什么,这是一个数字。 把它作为一个实际的字符。 而第二个值我堵 in--我 - 应该只是一个数字。 所以,如果我编译这个program-- 所以这是使ASCII 0, 点斜线ASCII 0--我只是得到 这个方便的小图表 我显示了所有可能的 映射,而不必认为它 通过或数字出来我自己。 而且我还打印出, 注意小写字母, 因为几行后,我 同时打印出这个映射 还有,这仅仅是 说,一旦你明白 下面是怎么回事 引擎盖,你能 自动来回转换。 而事实上,如果哪 做过这个在小学 或听说过有人 神话般服用记 并将其传递给他的 或她在课堂上的朋友, 但你炒的 按字母如A变成B, 和B变成C,或某事 复杂多了,好了, 你会怎么去 实现了作为一个孩子? 嗯,你刚才那种知道 A成为B,B变成C, 但在数学上, 什么那小子做什么? 什么是你增加了每个字母? 实际上,1。 因此,当你改变A到B,这是 有点像改变65到66, 其中数学意味着只需添加1。 所以,如果你要实现 那小小的欺骗手段 在代码中你的老师,你 可能会做的正是刚刚 通过增加一个字母在一起。 那么过不了多久,我们 要看到我们如何 可以利用这一点来实际 真正的加密和解密 信息。 在此期间,要知道我们已经开始 引进一对夫妇的其他图书馆 一个今天这里 - 字符串。 而一个非常有用的网站 希望你会发现 被称为reference.cs50.net,这 教学人员都放在一起, 因此,如果你想 仰望strlen的是如何工作, 你可以开始输入 函数的名字, 点击strlen的存在,然后 一个不太舒服的解释 将要出现。 或者,如果你想正式 基于Linux的说明中, 您可以点击更舒适 在右上角,它 将呈现相同的信息, 但在更复杂的条件。 这是一个有用的资源 实际上知道什么都做。 我们要下一次 看看阿华田 多,自荐 密码学世界。 在此之前,我们会看到 您在本周晚些时候。 而现在,科尔顿奥格登。 星期三见。 [音乐播放] [音乐播放] 扬声器1:什么 [哔]你在干什么? 扬声器1:我吃我的甜点? 你怎么吃? 用你的手? [音乐播放]