[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 / 讨论。 这是告诉你,你现在已经被邀请,所以 可以说,进入队列。 通过点击该按钮,你的名字将出现在 CS50迎宾员,该课程的负责人之一,将一台iPad 持有入口附近的安嫩伯格,谁就会 看到这里所描述的,有疑问的学生谁 左,工作人员是在正确的。 的点击左,右,您的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 仅仅是我们的一种说法,在 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的世界。 我们将看到你在周三。