1 00:00:07,830 --> 00:00:12,200 [Powered by Google Translate] DAVID MALAN:这是CS50,这是第1周的开始。 2 00:00:12,200 --> 00:00:15,520 我们认为今天我们做的是采取回头看 3 00:00:15,520 --> 00:00:18,290 东西你们中许多人可能走过去对一些 4 00:00:18,290 --> 00:00:20,570 现在的时间,并可能看起来有点熟悉。 5 00:00:20,570 --> 00:00:23,720 这件事情在这里,当然,这是在 - 6 00:00:23,720 --> 00:00:24,155 观众:科学。 7 00:00:24,155 --> 00:00:26,030 DAVID马兰:科学中心。 8 00:00:26,030 --> 00:00:28,940 因此,这其实是最早的计算机​​之一 9 00:00:28,940 --> 00:00:30,220 从20世纪40年代备份。 10 00:00:30,220 --> 00:00:33,790 这是第一机电计算机 11 00:00:33,790 --> 00:00:35,730 这是特别长的, 12 00:00:35,730 --> 00:00:38,450 自我维持的计算,其实我们看到的 13 00:00:38,450 --> 00:00:41,580 科学中心是唯一的一小片这件事情。 14 00:00:41,580 --> 00:00:44,170 我们认为我们会怎么办呢,拿回来一看,在视频 15 00:00:44,170 --> 00:00:46,670 这是前一段时间,推出这 16 00:00:46,670 --> 00:00:47,520 事情到世界各地。 17 00:00:47,520 --> 00:00:50,200 你会看到从音乐和声音确实是 18 00:00:50,200 --> 00:00:52,070 非常快乐的时光。 19 00:00:54,885 --> 00:00:59,700 >> [视频回放] 20 00:00:59,700 --> 00:01:02,490 -A胜利的数学和机械技能,这是 21 00:01:02,490 --> 00:01:06,340 伟大的新的自动计算器在哈佛大学。 22 00:01:06,340 --> 00:01:08,620 通过复杂的数学问题,把 23 00:01:08,620 --> 00:01:12,420 机在磁带上的编码形式,准确地解决在 24 00:01:12,420 --> 00:01:15,200 对人体所需要的时间的分钟的馏分 25 00:01:15,200 --> 00:01:16,450 计算。 26 00:01:27,050 --> 00:01:30,600 加快各种形式的数学和科学 27 00:01:30,600 --> 00:01:34,610 研究,巨型机械的大脑会为联合国工作 28 00:01:34,610 --> 00:01:36,570 美国海军直到战争结束。 29 00:01:50,280 --> 00:01:52,980 >> DAVID马兰:那么,你可能不知道的是,这是在 30 00:01:52,980 --> 00:01:56,310 此相同的设备,一个术语,我们现在都需要相当多 31 00:01:56,310 --> 00:01:59,300 理所当然的被创造出来,是一个错误。 32 00:01:59,300 --> 00:02:01,140 所以在这台电脑上工作的工程师 33 00:02:01,140 --> 00:02:05,280 从字面上发现了一个小蛾的机器 34 00:02:05,280 --> 00:02:07,580 在一些不正确的计算。 35 00:02:07,580 --> 00:02:10,410 而作为故事的结局,飞蛾贴在该日志 36 00:02:10,410 --> 00:02:14,180 杂志在这里,从9月9日,在1940年的东西, 37 00:02:14,180 --> 00:02:16,550 从而诞生了世界的“错误”。 38 00:02:16,550 --> 00:02:19,880 所以,从今以后,我们认为错误是任何形式的错误 39 00:02:19,880 --> 00:02:23,290 方案,无论是人为或,在这种情况下,昆虫。 40 00:02:23,290 --> 00:02:25,030 >> 因此,一些公告,为我们继续进行。 41 00:02:25,030 --> 00:02:29,160 因此,CS50有一个传统,提供各种各样的午餐 42 00:02:29,160 --> 00:02:31,600 在本学期,在这里我们需要30至最星期五 43 00:02:31,600 --> 00:02:34,650 40名学生在广场上的火与冰的休闲 44 00:02:34,650 --> 00:02:36,390 闲聊,谈谈计算机科学, 45 00:02:36,390 --> 00:02:37,420 谈论未来。 46 00:02:37,420 --> 00:02:40,000 我们邀请校友和朋友聊了起来,从行业 47 00:02:40,000 --> 00:02:40,690 的学生。 48 00:02:40,690 --> 00:02:44,020 什么是一个相当大的类真正走向结束 49 00:02:44,020 --> 00:02:46,740 更亲密,至少一次,而对于 50 00:02:46,740 --> 00:02:47,710 学生的子集。 51 00:02:47,710 --> 00:02:50,940 所以,如果你想加入我们这个星期五,下午1:15,去 52 00:02:50,940 --> 00:02:53,340 CS50.net/lunch RSVP。 53 00:02:53,340 --> 00:02:55,840 我们将做到这一点recurringly,所以不用担心,如果你不 54 00:02:55,840 --> 00:02:57,930 首批30分左右本周。 55 00:02:57,930 --> 00:02:59,070 >> 因此,文士票据。 56 00:02:59,070 --> 00:03:01,500 一个字的资源,现在开始提供 57 00:03:01,500 --> 00:03:03,040 学生在课堂上。 58 00:03:03,040 --> 00:03:05,540 所以,你的头不需要在课堂 59 00:03:05,540 --> 00:03:08,560 涂鸦了一切,我说等等,我们做什么 60 00:03:08,560 --> 00:03:10,765 取而代之的是从教学人员提供一个 61 00:03:10,765 --> 00:03:11,920 标准集的音符。 62 00:03:11,920 --> 00:03:14,850 所以我们有一个我们的教学研究员,安德鲁Sellergren, 63 00:03:14,850 --> 00:03:17,830 他坐了下来,每星期,回顾了视频,然后 64 00:03:17,830 --> 00:03:19,730 写下我们认为这是一个相当 65 00:03:19,730 --> 00:03:21,840 一套权威的音符。 66 00:03:21,840 --> 00:03:24,180 和安德鲁的喜爱,同时,把表露无疑脚注 67 00:03:24,180 --> 00:03:24,820 底部。 68 00:03:24,820 --> 00:03:27,300 所以,你希望享受这些作为参考用书 69 00:03:27,300 --> 00:03:30,230 的乐趣,同时还来测验时间,以此为契机检讨 70 00:03:30,230 --> 00:03:31,830 发生了什么事,个人讲座。 71 00:03:31,830 --> 00:03:33,580 因此,这些链接上的讲课页。 72 00:03:33,580 --> 00:03:35,300 >> 习题集,同时,在0。 73 00:03:35,300 --> 00:03:37,470 的资源提供给您 - 74 00:03:37,470 --> 00:03:38,020 演练。 75 00:03:38,020 --> 00:03:39,730 上周五,米洛率领第一。 76 00:03:39,730 --> 00:03:41,470 它拍下来,放到网上,星期六。 77 00:03:41,470 --> 00:03:44,030 因此,实现,如果你真的不知道从哪里开始, 78 00:03:44,030 --> 00:03:47,280 或未来的P-,总是先对 79 00:03:47,280 --> 00:03:49,300 演练或视频其。 80 00:03:49,300 --> 00:03:52,950 切片过程中,在cs50.net/section是您 81 00:03:52,950 --> 00:03:54,540 提交您的喜好,如果你还没有 82 00:03:54,540 --> 00:03:55,880 已经通过。 83 00:03:55,880 --> 00:03:58,140 由于部分将开始今年星期日,星期一, 84 00:03:58,140 --> 00:03:58,760 和星期二。 85 00:03:58,760 --> 00:04:02,470 我们做节这三天,每星期的 86 00:04:02,470 --> 00:04:03,870 在大多数情况下学期。 87 00:04:03,870 --> 00:04:06,600 同时我们也介绍一下,再次,不同的轨迹。 88 00:04:06,600 --> 00:04:08,270 所以,你会被要求在此切片的形式,如果你 89 00:04:08,270 --> 00:04:10,350 还没有看到它了,如果你是在那些少 90 00:04:10,350 --> 00:04:12,800 舒适,更舒适,或介于两者之间。 91 00:04:12,800 --> 00:04:14,960 如果你是排序的围栏上,一般的地方 92 00:04:14,960 --> 00:04:18,160 介于两者之间的是大多数学生最终的检查。 93 00:04:18,160 --> 00:04:19,579 办公时间今晚开始。 94 00:04:19,579 --> 00:04:23,020 >> 因此,从头开始相当低调,即使它是很自然的 95 00:04:23,020 --> 00:04:25,300 遇到的各种错误,或不确定如何 96 00:04:25,300 --> 00:04:26,550 实现的东西。 97 00:04:26,550 --> 00:04:28,880 因此,我们将开始办公时间本周。 98 00:04:28,880 --> 00:04:30,500 他们将在周一,周二,周三,在安嫩伯格 99 00:04:30,500 --> 00:04:34,300 周四,8:00 PM至11:00 PM在大脑休息。 100 00:04:34,300 --> 00:04:38,160 高年级学生可以进去,如果你有麻烦 101 00:04:38,160 --> 00:04:40,720 在门口,因为他们将可以刷卡,只是说说自己的方式 102 00:04:40,720 --> 00:04:42,560 并解释你是CS50。 103 00:04:42,560 --> 00:04:45,230 通常是20到30,我们的工作人员将在那里帮助 104 00:04:45,230 --> 00:04:46,190 你一对一。 105 00:04:46,190 --> 00:04:48,980 >> 抵达后的想法是这样的:你可以将你的笔记本电脑, 106 00:04:48,980 --> 00:04:51,300 你有你的充电器,我们将有额外的电源线, 107 00:04:51,300 --> 00:04:53,320 特别是沿南壁安嫩伯格 108 00:04:53,320 --> 00:04:55,080 有大量的电源插座。 109 00:04:55,080 --> 00:04:59,290 办公时间Q&A的主入口点是去 110 00:04:59,290 --> 00:05:01,690 cs50.net/discuss和发布 111 00:05:01,690 --> 00:05:02,580 你的问题。 112 00:05:02,580 --> 00:05:05,600 并标记的pset 0或PSet 1,凡一周 113 00:05:05,600 --> 00:05:06,810 可能发生的事情是。 114 00:05:06,810 --> 00:05:09,240 然后我们要做的是有一个表,教学研究员 115 00:05:09,240 --> 00:05:12,040 和课程的助理,一般为8或10个左右的我们, 116 00:05:12,040 --> 00:05:14,430 经历,在黑板上,并保持警觉的眼睛 117 00:05:14,430 --> 00:05:16,810 采摘问题真的以最快的速度,我们可以, 118 00:05:16,810 --> 00:05:19,600 如果你还没有发现,那些转介你到相关的帖子 119 00:05:19,600 --> 00:05:22,220 你们,网上参考(如适用)。 120 00:05:22,220 --> 00:05:24,280 然后,如果有问题,因为不可避免地 121 00:05:24,280 --> 00:05:27,190 会,或只是更有意义坐下来一对一, 122 00:05:27,190 --> 00:05:28,660 通过与他人的问题。 123 00:05:28,660 --> 00:05:30,810 >> 或者你只是办公时间真的 124 00:05:30,810 --> 00:05:31,640 需要这种心态。 125 00:05:31,640 --> 00:05:33,400 你不想去,你通过电子形式 126 00:05:33,400 --> 00:05:34,410 真的想与某人见面。 127 00:05:34,410 --> 00:05:37,240 沟通,对我们来说,会发生什么事是,当你 128 00:05:37,240 --> 00:05:40,620 问题一直被视为一名工作人员,我们 129 00:05:40,620 --> 00:05:43,660 确定了,嗯,这应该是派出的20或 130 00:05:43,660 --> 00:05:47,800 30团队成员在本地,你会看到在左上方 131 00:05:47,800 --> 00:05:51,590 小输入队列“按钮开始闪烁cs50.net / 132 00:05:51,590 --> 00:05:52,165 讨论。 133 00:05:52,165 --> 00:05:55,260 这是告诉你,你现在已经被邀请,所以 134 00:05:55,260 --> 00:05:56,880 可以说,进入队列。 135 00:05:56,880 --> 00:05:59,090 通过点击该按钮,你的名字将出现在 136 00:05:59,090 --> 00:06:02,660 CS50迎宾员,该课程的负责人之一,将一台iPad 137 00:06:02,660 --> 00:06:05,250 持有入口附近的安嫩伯格,谁就会 138 00:06:05,250 --> 00:06:08,630 看到这里所描述的,有疑问的学生谁 139 00:06:08,630 --> 00:06:11,630 左,工作人员是在正确的。 140 00:06:11,630 --> 00:06:14,830 的点击左,右,您的Web浏览器将 141 00:06:14,830 --> 00:06:18,610 尽快开始闪烁,例如,教授McGonnagal 142 00:06:18,610 --> 00:06:21,460 准备好见你在一个特定的表中安嫩伯格。 143 00:06:21,460 --> 00:06:23,340 >> 所以,我们做了一些过去的一年中。 144 00:06:23,340 --> 00:06:25,430 我们已经重新启动办公时间, 145 00:06:25,430 --> 00:06:26,980 重新实现的软件。 146 00:06:26,980 --> 00:06:29,940 因此,认识到这将是本周热身。 147 00:06:29,940 --> 00:06:32,970 但也实现过,在过去的几年中,你可能听说过 148 00:06:32,970 --> 00:06:35,710 朋友,办公时间确实是50至 149 00:06:35,710 --> 00:06:37,040 150名学生在一次。 150 00:06:37,040 --> 00:06:39,300 它根本就不是我们能够处理的 151 00:06:39,300 --> 00:06:42,060 有效地,一个一个,整个晚上。 152 00:06:42,060 --> 00:06:44,570 所以我们真的要尝试这样做是 153 00:06:44,570 --> 00:06:46,590 利用的事实,很多问题是 154 00:06:46,590 --> 00:06:49,050 常见的,经常可以更好的回答 155 00:06:49,050 --> 00:06:50,030 异步的。 156 00:06:50,030 --> 00:06:52,140 所以,你可以认为通过排序员工的响应, 157 00:06:52,140 --> 00:06:54,360 我们可以认为通过你的代码,而不加热 158 00:06:54,360 --> 00:06:57,050 压力一定挣扎 159 00:06:57,050 --> 00:06:58,210 通过它并排。 160 00:06:58,210 --> 00:07:00,980 因此,我们估计,大约有三分之一或一半的问题 161 00:07:00,980 --> 00:07:03,500 被派遣的人,我们会尽力把她的 162 00:07:03,500 --> 00:07:05,530 多达一半或更多电子, 163 00:07:05,530 --> 00:07:06,710 在办公时间内。 164 00:07:06,710 --> 00:07:08,070 我们将继续使用讨论 165 00:07:08,070 --> 00:07:09,990 整个星期。 166 00:07:09,990 --> 00:07:12,680 >> 最后,要认识到这当然可以通过/失败。 167 00:07:12,680 --> 00:07:16,230 所以,如果你正在观望,或者只是认为你真的 168 00:07:16,230 --> 00:07:18,650 不知道这是你的世界,这是真的 169 00:07:18,650 --> 00:07:21,310 相当陌生的,认识到这是一个美妙的方式 170 00:07:21,310 --> 00:07:24,840 步入获得一些信心 171 00:07:24,840 --> 00:07:26,780 类,像我一样坦率地说,几年前。 172 00:07:26,780 --> 00:07:28,630 然后有五周的时间进行排序图 173 00:07:28,630 --> 00:07:30,850 如果你自己想留的通过/失败,切换到信 174 00:07:30,850 --> 00:07:31,800 级,或等。 175 00:07:31,800 --> 00:07:34,050 通常通过/失败呢,我认为,对学生的 176 00:07:34,050 --> 00:07:36,700 ,10小时,20小时,不管它,如果你把 177 00:07:36,700 --> 00:07:38,830 可能在一些问题,你撞你的头 178 00:07:38,830 --> 00:07:39,690 靠在墙上, 179 00:07:39,690 --> 00:07:41,750 ,你真的不能追些东西,和你 180 00:07:41,750 --> 00:07:44,230 有许多其他的事情,你需要做的,说实话,我 181 00:07:44,230 --> 00:07:46,070 想通过/失败的是,它的边缘 182 00:07:46,070 --> 00:07:47,250 这样的情况下。 183 00:07:47,250 --> 00:07:49,350 如果您已经采取了事情的方式的90%。 184 00:07:49,350 --> 00:07:50,830 你知道,这是不是很完美。 185 00:07:50,830 --> 00:07:52,950 但你有很多的,不过。 186 00:07:52,950 --> 00:07:55,440 因此,考虑给你,通过/失败 187 00:07:55,440 --> 00:07:57,590 心智模式,也许。 188 00:07:57,590 --> 00:08:00,680 >> 好了,所以上周我们一头扎进从头开始,我们 189 00:08:00,680 --> 00:08:03,610 谈到相当高的图形编程。 190 00:08:03,610 --> 00:08:05,340 今天,我们过渡到一种语言 191 00:08:05,340 --> 00:08:08,300 C,低层次的编程语言之上 192 00:08:08,300 --> 00:08:11,260 许多现代语言,现已建成,包括一些 193 00:08:11,260 --> 00:08:13,010 那些我们会向学期的结束。 194 00:08:13,010 --> 00:08:15,530 和语法,它们看起来像什么 195 00:08:15,530 --> 00:08:17,330 是颇为相似。 196 00:08:17,330 --> 00:08:19,080 因此,让我们开始使这一过渡。 197 00:08:19,080 --> 00:08:21,730 所以这是一个计划的最后一周,是最简单的 198 00:08:21,730 --> 00:08:22,910 的Hello World程序。 199 00:08:22,910 --> 00:08:25,560 它只是简单地打印到屏幕上的Hello World,用 200 00:08:25,560 --> 00:08:27,650 言语不多泡出来的猫。 201 00:08:27,650 --> 00:08:30,590 那么,如果我们现在就开始翻译到另一个 202 00:08:30,590 --> 00:08:33,419 语言,实现的想法今天(星期三)和 203 00:08:33,419 --> 00:08:36,450 是相同的,但的语法开始改变。 204 00:08:36,450 --> 00:08:39,370 而在上周,我们有绿色标志,当点击时,说 205 00:08:39,370 --> 00:08:40,340 你好世界。 206 00:08:40,340 --> 00:08:43,870 今天我们有int,主要的,无效的,输出, 207 00:08:43,870 --> 00:08:46,350 回报,在那里,以及一些其他语法。 208 00:08:46,350 --> 00:08:49,200 的大括号,括号,引号,和诸如此类的东西。 209 00:08:49,200 --> 00:08:54,520 但认识到,这里的想法的核心是印刷, 210 00:08:54,520 --> 00:08:58,470 最终的事实,主要是现在 211 00:08:58,470 --> 00:09:00,770 代名词一个程序的开始。 212 00:09:00,770 --> 00:09:04,250 主要将是其中的绿色标志踢东西了。 213 00:09:04,250 --> 00:09:06,390 >> 所以,现在让我们梳理出一些的积木 214 00:09:06,390 --> 00:09:08,650 之前,我们深入到一些具体的例子。 215 00:09:08,650 --> 00:09:11,620 所以我们叫一份声明中上周,它只是 216 00:09:11,620 --> 00:09:12,470 的指令。 217 00:09:12,470 --> 00:09:15,660 做到这一点 - 在这种情况下,说Hello World“。 218 00:09:15,660 --> 00:09:18,400 以及在C,如果我们看一下在该行,这是我们如何 219 00:09:18,400 --> 00:09:20,920 要开始表达特定的一块拼图: 220 00:09:20,920 --> 00:09:24,780 printf的(“世界你好”); 221 00:09:24,780 --> 00:09:27,330 现在,我们除了耻笑这些越来越多随着时间的推移, 222 00:09:27,330 --> 00:09:29,330 但要意识到这里有一个模式。 223 00:09:29,330 --> 00:09:31,870 所以,我们有这个东西叫做printf,它是 224 00:09:31,870 --> 00:09:34,310 基本上是类似的字说。 225 00:09:34,310 --> 00:09:35,800 这是它会做什么。 226 00:09:35,800 --> 00:09:37,870 printf的,且f在这里的意思是“格式化”。 227 00:09:37,870 --> 00:09:39,270 因此,它只是意味着你可以插入 228 00:09:39,270 --> 00:09:41,600 不同的美学细节。 229 00:09:41,600 --> 00:09:43,770 因此,报价引文结束的开始,我们将 230 00:09:43,770 --> 00:09:45,340 开始调用一个字符串。 231 00:09:45,340 --> 00:09:47,110 一个词,一个短语,一个句子。 232 00:09:47,110 --> 00:09:50,220 一种编程语言中的字符串是一系列的零 233 00:09:50,220 --> 00:09:51,330 个或多个字符。 234 00:09:51,330 --> 00:09:54,390 因此,H-E-L-L-O,逗号,等等, 235 00:09:54,390 --> 00:09:56,290 报价引文结束的一根弦。 236 00:09:56,290 --> 00:09:58,710 现在反斜杠N,一点点语法奇,但我们 237 00:09:58,710 --> 00:10:01,780 已经定义了,上周,这意味着什么呢? 238 00:10:01,780 --> 00:10:02,630 这只是一个新的生产线。 239 00:10:02,630 --> 00:10:05,000 这只是一个方式传送到计算机,您希望 240 00:10:05,000 --> 00:10:07,700 相当于打的输入有,但你不知道 241 00:10:07,700 --> 00:10:10,460 要按下回车键,因此惹了所有的 242 00:10:10,460 --> 00:10:12,130 格式化您的实际程序。 243 00:10:12,130 --> 00:10:15,500 现在括号括起来的字符串,打开括号和 244 00:10:15,500 --> 00:10:18,130 关闭括号,里面的是我们的字符串。 245 00:10:18,130 --> 00:10:22,600 因为,这是因为在C和其他编程 246 00:10:22,600 --> 00:10:27,510 语言,事情像printf带参数,或采取 247 00:10:27,510 --> 00:10:28,420 参数。 248 00:10:28,420 --> 00:10:31,490 >> 所以,现在开始思考这紫色的言论块作为 249 00:10:31,490 --> 00:10:34,890 功能,作为一种方法,作为一种程序。 250 00:10:34,890 --> 00:10:36,890 你真的可以调用任何你想要的现在,但 251 00:10:36,890 --> 00:10:39,260 这是的一个缩影程序,不仅 252 00:10:39,260 --> 00:10:41,480 的事情,在一个单一的线,毫不逊色。 253 00:10:41,480 --> 00:10:43,620 printf是什么,我们要开始调用 254 00:10:43,620 --> 00:10:46,680 在这种情况下,功能和功能做一些事情 - 255 00:10:46,680 --> 00:10:49,320 打印到屏幕上一个格式化字符串 - 256 00:10:49,320 --> 00:10:53,220 但功能参数或参数。 257 00:10:53,220 --> 00:10:55,880 通过参数或参数,谢谢你,我们的意思 258 00:10:55,880 --> 00:11:01,220 他们的行为可能会受到你传递 259 00:11:01,220 --> 00:11:03,420 括号内。 260 00:11:03,420 --> 00:11:06,460 因此,在这种情况下,printf的需求被告知要打印什么,和我们 261 00:11:06,460 --> 00:11:09,520 只是传递,在双引号的字符串,我们 262 00:11:09,520 --> 00:11:11,270 其实要进行打印。 263 00:11:11,270 --> 00:11:14,060 上线的最末端,这仅仅是一个分号 264 00:11:14,060 --> 00:11:18,020 历史滋扰,在大多数的代码行, 265 00:11:18,020 --> 00:11:21,170 你把一个分号,使超清晰的电脑 266 00:11:21,170 --> 00:11:23,020 这行代码在这里结束。 267 00:11:23,020 --> 00:11:25,600 现在,这是一件好事,因为正如我们将看到的节目获得更多的 268 00:11:25,600 --> 00:11:29,030 复杂,分号超清楚地告诉我们人类, 269 00:11:29,030 --> 00:11:32,280 计算机,其中行的代码的开始和结束。 270 00:11:32,280 --> 00:11:34,360 要认识到,某些语言别有一番 271 00:11:34,360 --> 00:11:35,045 这些相同的信息。 272 00:11:35,045 --> 00:11:37,870 而事实上,在JavaScript中,你并不总是需要的东西 273 00:11:37,870 --> 00:11:38,670 像分号。 274 00:11:38,670 --> 00:11:40,210 但更多的来。 275 00:11:40,210 --> 00:11:41,170 >> 所以循环。 276 00:11:41,170 --> 00:11:43,520 我们有这样的事情,非常直观,明显,做 277 00:11:43,520 --> 00:11:44,860 东西了一遍又一遍。 278 00:11:44,860 --> 00:11:47,720 喜欢把袜子,或者打个招呼,在这种情况下。 279 00:11:47,720 --> 00:11:51,090 好了,从今天开始在C中,我们可以表达这种划痕 280 00:11:51,090 --> 00:11:54,970 阻止而(真)输出(“世界你好”)。 281 00:11:54,970 --> 00:11:57,630 因此,注意到我们开始建立字面上的难题 282 00:11:57,630 --> 00:11:58,480 从之前片。 283 00:11:58,480 --> 00:12:01,310 我们有相同的紫色块,但它在这里面, 284 00:12:01,310 --> 00:12:04,880 括号内永远的块,最好的方式来翻译, 285 00:12:04,880 --> 00:12:06,480 C是如下。 286 00:12:06,480 --> 00:12:08,130 有没有永远关键字。 287 00:12:08,130 --> 00:12:10,940 你不能只键入F-O-R-E-V-E-R在C 288 00:12:10,940 --> 00:12:13,440 因此,最接近的模拟时间。 289 00:12:13,440 --> 00:12:17,050 >> 现在,而(真)似乎有点愚蠢,因为值 290 00:12:17,050 --> 00:12:18,700 真正的不断变化? 291 00:12:18,700 --> 00:12:19,810 大概没有。 292 00:12:19,810 --> 00:12:22,770 这就像当一个人说,同时,而真实。 293 00:12:22,770 --> 00:12:25,430 这是同样的事情,实在是总是如此。 294 00:12:25,430 --> 00:12:29,860 因此,这个循环实际上是诱导什么样的循环? 295 00:12:29,860 --> 00:12:31,210 只是一个无限循环的权利。 296 00:12:31,210 --> 00:12:32,930 永远的循环,我们称之为上周, 297 00:12:32,930 --> 00:12:33,870 只是一个无限循环。 298 00:12:33,870 --> 00:12:35,250 所以有时这是不好的。 299 00:12:35,250 --> 00:12:37,060 有时,这是一个错误,有时,这就是为什么你 300 00:12:37,060 --> 00:12:39,340 纺纱沙滩球或沙漏或类似。 301 00:12:39,340 --> 00:12:41,260 但是,在这种情况下,我们故意的,不管什么 302 00:12:41,260 --> 00:12:43,040 因此,想要打印同样的事情再次 303 00:12:43,040 --> 00:12:43,970 一遍又一遍。 304 00:12:43,970 --> 00:12:45,900 或者像手表一样的情况下,你想做的事 305 00:12:45,900 --> 00:12:47,470 东西了一遍又一遍。 306 00:12:47,470 --> 00:12:49,070 如此无限循环,可能是有意义的。 307 00:12:49,070 --> 00:12:53,560 这是如何在C中,我们可能永远翻译代码。 308 00:12:53,560 --> 00:12:55,570 >> 所以,现在这个更具体一点。 309 00:12:55,570 --> 00:12:58,880 我们已经重复了10次以下声明。 310 00:12:58,880 --> 00:13:02,490 所以,当(真)不相当在那里工作,因为真正的 311 00:13:02,490 --> 00:13:03,590 总是如此。 312 00:13:03,590 --> 00:13:07,060 因此,如果我们在C版本,而不是看,现在的语法得到了 313 00:13:07,060 --> 00:13:08,180 多一点神秘。 314 00:13:08,180 --> 00:13:11,380 但说实话,一旦你开始看到这一点,一切都会变得 315 00:13:11,380 --> 00:13:12,600 迅速非常熟悉。 316 00:13:12,600 --> 00:13:14,370 因此,这就是被称为一个for循环。 317 00:13:14,370 --> 00:13:17,210 一个for循环是要告诉计算机做一些事情 318 00:13:17,210 --> 00:13:20,710 一而再,再而只要再次 319 00:13:20,710 --> 00:13:21,850 这些东西都是真实的。 320 00:13:21,850 --> 00:13:23,370 现在是什么意思? 321 00:13:23,370 --> 00:13:25,470 嗯,有三个部分,一个for循环中,我们要 322 00:13:25,470 --> 00:13:28,240 回来在上下文中的实际 323 00:13:28,240 --> 00:13:29,100 在某一时刻的例子。 324 00:13:29,100 --> 00:13:31,650 所以,不要担心,如果它不完全沉沦在一次全部。 325 00:13:31,650 --> 00:13:35,400 但遇到了int i = 0,长话短说,说给我一个 326 00:13:35,400 --> 00:13:38,290 整数类型的变量,所以给我一个号 327 00:13:38,290 --> 00:13:40,890 叫我,并把它初始化为0。 328 00:13:40,890 --> 00:13:43,460 这是给我像的代数变量x和 329 00:13:43,460 --> 00:13:44,580 它初始化为0。 330 00:13:44,580 --> 00:13:46,250 但是,在这种情况下,我们把它叫做我。 331 00:13:46,250 --> 00:13:49,120 然后在中间,它说,i是小于10。 332 00:13:49,120 --> 00:13:52,150 这是告诉计算机做下面的东西,所以长 333 00:13:52,150 --> 00:13:53,770 因为我是少于10个。 334 00:13:53,770 --> 00:13:55,370 很显然,它启动小于10,因为 335 00:13:55,370 --> 00:13:56,550 它从0开始。 336 00:13:56,550 --> 00:13:59,150 最后,你也许可以猜我+ +。 337 00:13:59,150 --> 00:14:02,140 这是一点点的语法,它只是意味着增加i。 338 00:14:02,140 --> 00:14:05,270 所以加1,我,再,再而三。 339 00:14:05,270 --> 00:14:09,260 >> 所以我们会看到这个循环,这个语法,而是实现 340 00:14:09,260 --> 00:14:12,160 坦率地说,正是同样的事情,在暂存只是这样 341 00:14:12,160 --> 00:14:13,250 更容易表达。 342 00:14:13,250 --> 00:14:15,170 重复10,你就大功告成了。 343 00:14:15,170 --> 00:14:17,690 C,和大多数编程语言中,我们必须是一个 344 00:14:17,690 --> 00:14:20,190 多一点启发性的计算机,实际上 345 00:14:20,190 --> 00:14:21,630 指定这样的事情。 346 00:14:21,630 --> 00:14:23,730 但我们会回来,这和其他语法。 347 00:14:23,730 --> 00:14:24,780 >> 什么变量? 348 00:14:24,780 --> 00:14:26,940 在Scratch中,我们有这样的橙色块的东西, 349 00:14:26,940 --> 00:14:28,180 在这里我可以声明一个变量。 350 00:14:28,180 --> 00:14:30,000 让我们随意调用计数器。 351 00:14:30,000 --> 00:14:31,880 让我们把它初始化为0,然后 352 00:14:31,880 --> 00:14:33,240 让我们永远做一些事情。 353 00:14:33,240 --> 00:14:35,760 在这种情况下,在Scratch我说的计数器,所以 354 00:14:35,760 --> 00:14:38,230 猫有一点点说话的语音泡沫 355 00:14:38,230 --> 00:14:40,010 在这个变量的数字。 356 00:14:40,010 --> 00:14:42,460 然后我们有改变计数器减1。 357 00:14:42,460 --> 00:14:45,760 因此,所有这一切都被包装在一个永远的锁。 358 00:14:45,760 --> 00:14:48,960 因此,我们现在已经有在C积木 359 00:14:48,960 --> 00:14:50,040 翻译这一点。 360 00:14:50,040 --> 00:14:51,650 >> 我们能做到这一点的方法之一是这样的。 361 00:14:51,650 --> 00:14:53,890 给我一个整数,它称为计数器。 362 00:14:53,890 --> 00:14:55,190 它初始化为0 363 00:14:55,190 --> 00:14:56,490 在第一行中出现。 364 00:14:56,490 --> 00:14:59,390 而(真),所以我偷这个想法只是一瞬间 365 00:14:59,390 --> 00:15:01,300 前,继续执行以下操作。 366 00:15:01,300 --> 00:15:04,880 打印出来的计数器,然后递增计数器, 367 00:15:04,880 --> 00:15:06,930 再次,一次又一次地。 368 00:15:06,930 --> 00:15:09,380 再或者,+ +只是意味着添加的东西。 369 00:15:09,380 --> 00:15:11,030 但是,这里有一个新的语法一块。 370 00:15:11,030 --> 00:15:15,730 什么不跳出在我们前面的例子吗? 371 00:15:15,730 --> 00:15:17,190 是的,这为%d。 372 00:15:17,190 --> 00:15:19,810 所以,你也许可以推断出这是什么做的,坦率地说,根据 373 00:15:19,810 --> 00:15:21,410 什么样的擦除块在做什么。 374 00:15:21,410 --> 00:15:24,510 但也是在C中,我们只需要多一点特别 375 00:15:24,510 --> 00:15:25,990 当它来表达自己。 376 00:15:25,990 --> 00:15:30,560 >> 因此我们知道printf(“%d \ n”)。 377 00:15:30,560 --> 00:15:32,320 以及大部分的,我们可以扔掉的熟悉。 378 00:15:32,320 --> 00:15:34,910 报价仅仅意味着它是一个字符串,反斜线Ň 379 00:15:34,910 --> 00:15:35,970 仅仅是一个新的生产线。 380 00:15:35,970 --> 00:15:38,860 因此,唯一的新东西是%d。 381 00:15:38,860 --> 00:15:40,390 是一个占位符。 382 00:15:40,390 --> 00:15:43,510 %d是要表示一个十进制数。 383 00:15:43,510 --> 00:15:47,820 和%D指计算机,把一个十进制数。 384 00:15:47,820 --> 00:15:49,450 好了,你要什么号码放在那里呢? 385 00:15:49,450 --> 00:15:52,400 那么,你或许可以推断,逗号后的我们说 386 00:15:52,400 --> 00:15:55,480 计数器,这是一个变量的名称,我们宣布或 387 00:15:55,480 --> 00:15:57,260 创建几行。 388 00:15:57,260 --> 00:16:02,420 因此,这只是C的方式插入到一个变量 389 00:16:02,420 --> 00:16:04,480 字符串动态。 390 00:16:04,480 --> 00:16:07,350 因为相比之下,如果是我,而不是做了一些事情,如 391 00:16:07,350 --> 00:16:12,470 这一点,printf(“请反”),这是 392 00:16:12,470 --> 00:16:15,220 程序,而不是做的,大概是吗? 393 00:16:15,220 --> 00:16:17,260 它会从字面上打印“反击”。 394 00:16:17,260 --> 00:16:18,750 这是不是我想要的效果。 395 00:16:18,750 --> 00:16:20,920 我需要替换一些数字值。 396 00:16:20,920 --> 00:16:24,340 因此,我们可以看到,其功能,如printf,可以采取不 397 00:16:24,340 --> 00:16:26,930 只是单一的参数,就像 398 00:16:26,930 --> 00:16:28,150 “你好世界”。 399 00:16:28,150 --> 00:16:32,050 他们可以把报价引文结束逗号,然后一些变量 400 00:16:32,050 --> 00:16:35,830 将插入,我们会看到前面的字符串 401 00:16:35,830 --> 00:16:38,280 通过这些%符号的占位符。 402 00:16:38,280 --> 00:16:39,660 >> 那么布尔表达式呢? 403 00:16:39,660 --> 00:16:42,200 布尔表达式的值,true或false。 404 00:16:42,200 --> 00:16:42,830 “是”或“否。 405 00:16:42,830 --> 00:16:44,020 1或0。 406 00:16:44,020 --> 00:16:45,190 “开”或“关”。 407 00:16:45,190 --> 00:16:47,570 因此,在从头开始,他们看起来像这样,并注意 408 00:16:47,570 --> 00:16:50,170 其实,这里是底块的结合 409 00:16:50,170 --> 00:16:51,500 两个更小的块。 410 00:16:51,500 --> 00:16:53,610 所以,我种拖放3个拼图 411 00:16:53,610 --> 00:16:56,450 在一起,使较长的一块拼图,让我 412 00:16:56,450 --> 00:17:00,420 可传达的想法,我想将x小于y, 413 00:17:00,420 --> 00:17:02,540 将y小于z。 414 00:17:02,540 --> 00:17:05,790 这样我就可以翻译如下两条线。 415 00:17:05,790 --> 00:17:08,650 顶一个很平凡转换到C, 416 00:17:08,650 --> 00:17:10,069 只有X 00:17:11,990 也许一些括号的好措施。 418 00:17:11,990 --> 00:17:15,520 然后在C,你不写,并表示 419 00:17:15,520 --> 00:17:16,819 结合的东西。 420 00:17:16,819 --> 00:17:19,585 您来写&&。 421 00:17:19,585 --> 00:17:22,849 而我们最终会看到,发生在一个单一的符号 422 00:17:22,849 --> 00:17:23,880 意味着不同的东西。 423 00:17:23,880 --> 00:17:27,530 因此&&表示的想法。 424 00:17:27,530 --> 00:17:30,040 >> 所以,再一次,尽管这开始看起来相当复杂, 425 00:17:30,040 --> 00:17:32,560 引入划痕的目的之一,除了 426 00:17:32,560 --> 00:17:34,810 只是有样的,你可以做一个有趣的匝道 427 00:17:34,810 --> 00:17:36,590 这是非常图形和动画, 428 00:17:36,590 --> 00:17:39,000 可共享的和等,也传达的想法 429 00:17:39,000 --> 00:17:42,010 所有的想法今天起,我们开始深入 430 00:17:42,010 --> 00:17:44,300 已体现在即使是简单的 431 00:17:44,300 --> 00:17:46,850 接口从第一天开始。 432 00:17:46,850 --> 00:17:47,790 这一个在这里怎么样呢? 433 00:17:47,790 --> 00:17:48,860 >> 所以条件。 434 00:17:48,860 --> 00:17:50,590 因此,擦除块的左边有看起来 435 00:17:50,590 --> 00:17:51,610 一个稍微复杂一些。 436 00:17:51,610 --> 00:17:52,650 但它只是一些拖动和 437 00:17:52,650 --> 00:17:54,140 下降熟悉的作品。 438 00:17:54,140 --> 00:17:56,690 如果x小于y,这么说。 439 00:17:56,690 --> 00:17:59,900 否则,如果x是大于y,这么说。 440 00:17:59,900 --> 00:18:02,460 否则,我们可以合理地假设它的推断, 441 00:18:02,460 --> 00:18:03,580 他们必须是平等的。 442 00:18:03,580 --> 00:18:05,220 所以说,他们是平等的。 443 00:18:05,220 --> 00:18:07,690 现在在C上的权利,同样的事情。 444 00:18:07,690 --> 00:18:09,730 并注意花括号将是一个 445 00:18:09,730 --> 00:18:12,190 C和其他语言,这样做排序的功能, 446 00:18:12,190 --> 00:18:13,210 封装。 447 00:18:13,210 --> 00:18:15,470 就像块,如果这是黄色的东西的排序 448 00:18:15,470 --> 00:18:17,770 抓住它里面的紫色块。 449 00:18:17,770 --> 00:18:19,480 同样是这些大括号 - 450 00:18:19,480 --> 00:18:20,870 这些花括号 - 451 00:18:20,870 --> 00:18:24,710 为了变出的,拥抱一个或多个同样的想法 452 00:18:24,710 --> 00:18:27,680 行代码的缩进内的。 453 00:18:27,680 --> 00:18:31,270 因此,在这里的右手侧,如果x小于y,输出 454 00:18:31,270 --> 00:18:32,270 (“x是小于y”)。 455 00:18:32,270 --> 00:18:34,980 否则,如果x是大于y,打印出来的一样。 456 00:18:34,980 --> 00:18:38,360 否则打印出来,他们是平等的。 457 00:18:38,360 --> 00:18:41,750 >> 因此,在短,有相当直接的映射或翻译 458 00:18:41,750 --> 00:18:44,720 的语言,我们迄今为止见过的,包括一些 459 00:18:44,720 --> 00:18:45,940 更复杂的功能。 460 00:18:45,940 --> 00:18:48,680 所以,你可能不会被使用为您的项目,也可能不会 461 00:18:48,680 --> 00:18:51,150 为您的项目使用这个这个星期。 462 00:18:51,150 --> 00:18:54,650 但是,我们这些东西叫做数组在C划痕, 463 00:18:54,650 --> 00:18:55,680 他们是所谓的名单。 464 00:18:55,680 --> 00:18:59,370 我们看到这些的Fruitcraft RPG的最后一周。 465 00:18:59,370 --> 00:19:01,320 蓝色的小家伙,走来走去,拿起 466 00:19:01,320 --> 00:19:03,010 樱桃,橘子,等。 467 00:19:03,010 --> 00:19:05,110 那么在从头开始,实施这种橙色 468 00:19:05,110 --> 00:19:09,000 块,其中包含的话,在这种情况下,我们从字面上 469 00:19:09,000 --> 00:19:10,800 加入“橙色”的 470 00:19:10,800 --> 00:19:12,460 变量称为库存。 471 00:19:12,460 --> 00:19:14,910 因此,在C,此语法要多了几分神秘。 472 00:19:14,910 --> 00:19:17,250 我们会回来这个下周和做多 473 00:19:17,250 --> 00:19:21,060 密码学与它在世界上的有趣的事情。 474 00:19:21,060 --> 00:19:23,990 但是,在这里的底部,这两条线基本上 475 00:19:23,990 --> 00:19:27,550 翻译,以我们正在做的一个临时挡住了。 476 00:19:27,550 --> 00:19:30,120 但更多的来。 477 00:19:30,120 --> 00:19:34,120 >> 因此,把它在一起,这里是一个程序,在C因此,让我们的 478 00:19:34,120 --> 00:19:36,590 迅速梳理出一些语法在这里的碎片,但 479 00:19:36,590 --> 00:19:40,300 那么,让我们开始编写一些代码,熟悉 480 00:19:40,300 --> 00:19:42,440 你的工具,我们将使用,看看我们 481 00:19:42,440 --> 00:19:45,400 现在可以建立这些基本构建块 482 00:19:45,400 --> 00:19:49,150 上周,现在在语法C.所以在这里的顶部, 483 00:19:49,150 --> 00:19:51,380 也许是其中一个最无聊的节目,您可以 484 00:19:51,380 --> 00:19:53,130 写在几乎任何编程语言。 485 00:19:53,130 --> 00:19:55,010 但它的排序具有特殊的意义,因为它是 486 00:19:55,010 --> 00:19:58,120 规范程序,任何一台计算机科学家写 487 00:19:58,120 --> 00:19:59,620 教人一种编程语言 - 488 00:19:59,620 --> 00:20:01,230 一个Hello World程序。 489 00:20:01,230 --> 00:20:05,120 >> 因此,在最高层,我们看到这个概念的#include 490 00:20:05,120 --> 00:20:08,180 然后,在尖括号,stdio.h中。 491 00:20:08,180 --> 00:20:10,580 我们要回来,但真的是什么 492 00:20:10,580 --> 00:20:13,770 意思是,在这个世界上有一个文件叫做标准 493 00:20:13,770 --> 00:20:17,670 I / O,标准输入输出点H,而这只是一个文本文件, 494 00:20:17,670 --> 00:20:19,240 有人写了几年前。 495 00:20:19,240 --> 00:20:22,550 该文本文件里面是一大堆的 496 00:20:22,550 --> 00:20:25,840 函数或方法,程序,其他人 497 00:20:25,840 --> 00:20:28,970 写,我们是受益者,因为我们 498 00:20:28,970 --> 00:20:31,420 现在可以使用该人士的代码。 499 00:20:31,420 --> 00:20:33,070 的功能,他或她写道。 500 00:20:33,070 --> 00:20:36,320 在这种情况下,printf是不是我写的,这是 501 00:20:36,320 --> 00:20:37,500 没有CS50写的东西。 502 00:20:37,500 --> 00:20:40,290 这件事情,有人写了几年前,放在一个 503 00:20:40,290 --> 00:20:43,450 文件名为​​stdio.h中,然后,顺便说一句,把 504 00:20:43,450 --> 00:20:45,830 在另一个文件中的功能的另一部分。 505 00:20:45,830 --> 00:20:46,940 但是,我们一定会成功的。 506 00:20:46,940 --> 00:20:50,070 >> 因此,#包括仅仅是我们的一种说法,在 507 00:20:50,070 --> 00:20:53,110 C,给我访问别人写的功能。 508 00:20:53,110 --> 00:20:55,490 在这种情况下,我不在乎,因为我想输出。 509 00:20:55,490 --> 00:20:57,530 现在,我们要诠释的主要(无效)。 510 00:20:57,530 --> 00:21:00,160 所以这是一个这些事情,坦率地说,在第0天, 511 00:21:00,160 --> 00:21:02,400 几乎我已经带出来的一种,因为它只是 512 00:21:02,400 --> 00:21:03,260 不感兴趣 513 00:21:03,260 --> 00:21:04,780 在智力上,一些语法。 514 00:21:04,780 --> 00:21:07,940 但现在知道的功能,也被称为 515 00:21:07,940 --> 00:21:11,660 过程或方法,一般会产生一定的价值。 516 00:21:11,660 --> 00:21:12,520 他们做了。 517 00:21:12,520 --> 00:21:13,810 他们想出一个答案。 518 00:21:13,810 --> 00:21:15,020 它们产生的输出。 519 00:21:15,020 --> 00:21:18,780 所以int下主要是说我们的速记方式 520 00:21:18,780 --> 00:21:21,380 此功能时,此过程中,最终将 521 00:21:21,380 --> 00:21:22,650 给你一个数字。 522 00:21:22,650 --> 00:21:24,370 这是为什么,我们会回来的。 523 00:21:24,370 --> 00:21:27,810 主要是默认的世界标准的默认 524 00:21:27,810 --> 00:21:30,990 功能,在C程序中得到执行时 525 00:21:30,990 --> 00:21:31,860 你运行它。 526 00:21:31,860 --> 00:21:34,160 虚空只是意味着这件事情,主要概不 527 00:21:34,160 --> 00:21:35,270 的参数,在这种情况下。 528 00:21:35,270 --> 00:21:36,400 所以,我超明确。 529 00:21:36,400 --> 00:21:38,160 在那里有没有,有没有逗号。 530 00:21:38,160 --> 00:21:40,690 空隙率是指不带参数的主。 531 00:21:40,690 --> 00:21:44,350 >> 最后,现在幸运的是,最后两行是熟悉的。 532 00:21:44,350 --> 00:21:46,160 在大括号中,我们有一个printf 533 00:21:46,160 --> 00:21:47,620 我们有回报。 534 00:21:47,620 --> 00:21:50,450 返回的是一种不幸的是,我们必须 535 00:21:50,450 --> 00:21:53,510 把它放在那里,因为在这种情况下,它没有做这一切 536 00:21:53,510 --> 00:21:54,600 更多的兴趣。 537 00:21:54,600 --> 00:21:58,790 但是,在计算机程序中,当一个函数返回0, 538 00:21:58,790 --> 00:22:00,610 这意味着一切都很好。 539 00:22:00,610 --> 00:22:01,820 没有发生任何错误。 540 00:22:01,820 --> 00:22:06,170 与此相反,如果一个函数返回1,或负1,或 541 00:22:06,170 --> 00:22:11,670 负1,337,或一些随机的,这样的数字, 542 00:22:11,670 --> 00:22:14,020 一般意味着,实际上已发生一个错误。 543 00:22:14,020 --> 00:22:16,150 所以,如果你在你的Mac或PC机,如果你曾经看到 544 00:22:16,150 --> 00:22:18,590 一些恼人的消息,因为您的计算机崩溃或 545 00:22:18,590 --> 00:22:20,660 冻结,并有一个模糊的错误消息, 546 00:22:20,660 --> 00:22:23,320 然后一些代码,如系统代码 547 00:22:23,320 --> 00:22:25,110 1,2,3,4,一些数字, 548 00:22:25,110 --> 00:22:29,270 通常是不必要的细节告诉 549 00:22:29,270 --> 00:22:32,110 我们大多数的人,但是这是一些功能或一些 550 00:22:32,110 --> 00:22:34,890 程序实际返回一个非零值。 551 00:22:34,890 --> 00:22:38,540 这样做的好处是0表示以及 552 00:22:38,540 --> 00:22:40,470 然后,你基本上有无限多的东西, 553 00:22:40,470 --> 00:22:41,130 可以去错了。 554 00:22:41,130 --> 00:22:44,700 这就是为什么他们选择了0好一个非零值 555 00:22:44,700 --> 00:22:46,450 糟糕,因为我们很快就会看到。 556 00:22:46,450 --> 00:22:47,870 >> 因此,让我们继续前进,写这篇文章。 557 00:22:47,870 --> 00:22:51,610 所以,记得有一天,我用我的Mac上打开了一个 558 00:22:51,610 --> 00:22:53,970 终端窗口,然后我打开了文本程序,如 559 00:22:53,970 --> 00:22:55,900 文字编辑,我开始写一些代码。 560 00:22:55,900 --> 00:22:56,580 这是罚款。 561 00:22:56,580 --> 00:22:58,636 但是,你的经验是要在Mac上是不同的,或 562 00:22:58,636 --> 00:23:01,220 在Solaris计算机上,Linux计算机上,无论操作 563 00:23:01,220 --> 00:23:02,810 系统你碰巧使用。 564 00:23:02,810 --> 00:23:04,970 因此,在使用过程中,是我们,而不是使用的是什么 565 00:23:04,970 --> 00:23:07,010 称为CS50电器。 566 00:23:07,010 --> 00:23:10,420 因此,CS50电器是一个可下载的软件 567 00:23:10,420 --> 00:23:13,640 允许你运行一个称为Linux操作系统, 568 00:23:13,640 --> 00:23:16,810 特别是Fedora Linux中,你自己的Mac或PC上。 569 00:23:16,810 --> 00:23:20,810 你这样做,下载名为hypervisor的东西。 570 00:23:20,810 --> 00:23:23,100 因此,所有这一切都将被记录在问题设置1。 571 00:23:23,100 --> 00:23:25,240 你会引向你所需要的下载。 572 00:23:25,240 --> 00:23:27,510 但最终的结果,无论你拥有一台Mac或PC,是你 573 00:23:27,510 --> 00:23:29,080 下载一些免费的软件。 574 00:23:29,080 --> 00:23:32,340 然后,您可以下载CS50设备,然后你告诉 575 00:23:32,340 --> 00:23:33,960 免费软件 - 管理程序 - 576 00:23:33,960 --> 00:23:38,080 CS50电器在一个窗口,在您的计算机上运行。 577 00:23:38,080 --> 00:23:39,490 会发生什么事是这样的。 578 00:23:39,490 --> 00:23:43,660 >> 现在,我已经注意到,这似乎是一个桌面 579 00:23:43,660 --> 00:23:44,130 环境。 580 00:23:44,130 --> 00:23:46,150 让我真正缩小这个窗口。 581 00:23:46,150 --> 00:23:49,640 因此,这是我的Mac上,一个小窗口,在这里,和内 582 00:23:49,640 --> 00:23:51,300 此窗口发生是一个完全 583 00:23:51,300 --> 00:23:52,380 不同的操作系统。 584 00:23:52,380 --> 00:23:55,250 事实上,这个开始菜单,在这里,让人想起 585 00:23:55,250 --> 00:23:57,990 Windows上,有一大堆的子菜单,包括 586 00:23:57,990 --> 00:24:00,720 CS50手动升降梭箱,像一个链接。 587 00:24:00,720 --> 00:24:03,480 而现在这样的环境是一个标准的环境 588 00:24:03,480 --> 00:24:06,280 现在,我们所有的人都可以使用,所以,不管你是什么 589 00:24:06,280 --> 00:24:08,960 电脑是什么,你已经安装了就可以了,什么版本 590 00:24:08,960 --> 00:24:11,430 你正在运行的Mac OS或Windows的,我们现在有 591 00:24:11,430 --> 00:24:12,800 相同的环境。 592 00:24:12,800 --> 00:24:15,850 而现在,在这样的环境中,我们可以开始编写一些代码。 593 00:24:15,850 --> 00:24:18,480 >> 所以我要继续前进,并打开了一个名为gedit的。 594 00:24:18,480 --> 00:24:21,500 这相当于把notepad.exe,或 595 00:24:21,500 --> 00:24:22,790 上的Mac TEXTEDIT。 596 00:24:22,790 --> 00:24:25,390 而这仅仅是一个超级简单的文本编辑程序 597 00:24:25,390 --> 00:24:27,500 第一眼看起来是这样的。 598 00:24:27,500 --> 00:24:30,640 在最高层,我有一个白色的调色板,在底部我 599 00:24:30,640 --> 00:24:33,860 这件黑色的窗口,上面写着jharvard @器具。 600 00:24:33,860 --> 00:24:36,440 这是因为该用户帐户,我们预先创建 601 00:24:36,440 --> 00:24:38,430 每个人都被称为约翰·哈佛。 602 00:24:38,430 --> 00:24:41,490 他有他的所有文件的文件夹要去, 603 00:24:41,490 --> 00:24:43,500 在这里,我们可以开始编写一些代码。 604 00:24:43,500 --> 00:24:45,810 因此,让我继续在这里,只是有点放大,和我 605 00:24:45,810 --> 00:24:51,550 怎么办#包括的,诠释的主要(无效),并 606 00:24:51,550 --> 00:24:57,470 然后我会做printf的(“世界你好”) 607 00:24:57,470 --> 00:24:59,490 ;返回0。 608 00:24:59,490 --> 00:25:01,400 现在,这是很黑的,白的。 609 00:25:01,400 --> 00:25:03,830 >> 让我继续前进,做一件事教我的gedit的 610 00:25:03,830 --> 00:25:04,510 其实这样做。 611 00:25:04,510 --> 00:25:06,140 让我去“另存为”。 612 00:25:06,140 --> 00:25:08,560 我会选择在这里的左边jharvard。 613 00:25:08,560 --> 00:25:11,010 所以,再一次,即使你从来没有使用过Linux之前,坦率地说 614 00:25:11,010 --> 00:25:13,680 这些天,所有的人都被下放本质上是 615 00:25:13,680 --> 00:25:14,590 同一类型的接口 - 616 00:25:14,590 --> 00:25:16,030 的Mac OS,Windows和Linux操作系统。 617 00:25:16,030 --> 00:25:18,680 因此,,我选择jharvard的主文件夹。 618 00:25:18,680 --> 00:25:21,120 我将这个文件保存为hello.c的。 619 00:25:21,120 --> 00:25:24,260 因此,在最高层,我输入hello.c中,命名为C 620 00:25:24,260 --> 00:25:26,520 C扩展程序 621 00:25:26,520 --> 00:25:27,570 什么是常见的做法。 622 00:25:27,570 --> 00:25:28,650 和我打保存。 623 00:25:28,650 --> 00:25:32,510 现在有什么好,我已经有效地教gedit中, 624 00:25:32,510 --> 00:25:33,690 这是一个C程序。 625 00:25:33,690 --> 00:25:36,470 请注意,我的黑色和白色文字颜色编码,或 626 00:25:36,470 --> 00:25:39,330 语法高亮显示,这只是吸引了我的注意 627 00:25:39,330 --> 00:25:41,540 不同的语义的程序部分。 628 00:25:41,540 --> 00:25:44,260 在顶部,离开了那里,我的程序变得越来越复杂,我 629 00:25:44,260 --> 00:25:47,060 要所有的事情,我已经写了一个总结。 630 00:25:47,060 --> 00:25:48,050 所以这是它在那里。 631 00:25:48,050 --> 00:25:52,350 所以,现在让我放大,并深入到这个终端窗口。 632 00:25:52,350 --> 00:25:54,570 >> 因此,这也许是很多人。 633 00:25:54,570 --> 00:25:57,260 如果你从来没有使用过命令行环境,你从来没 634 00:25:57,260 --> 00:26:00,020 使用DOS,或者你从来没有使用过Linux,或者你从来没有打开 635 00:26:00,020 --> 00:26:02,550 您的Mac OS终端窗口中,有很多的事情,你 636 00:26:02,550 --> 00:26:04,820 可以做的图形用户界面,如定位及点击, 637 00:26:04,820 --> 00:26:07,080 拖动,和滴,等,但一般 - 638 00:26:07,080 --> 00:26:09,360 当然,在世界计算机科学 - 639 00:26:09,360 --> 00:26:11,580 使用命令行,在那里你没有你的鼠标 640 00:26:11,580 --> 00:26:14,220 一般来说,你有你的键盘,实际上是很多 641 00:26:14,220 --> 00:26:17,260 更强大的接口,一旦你适应了 642 00:26:17,260 --> 00:26:18,580 各种命令。 643 00:26:18,580 --> 00:26:20,940 而你自己的需要点和点击 644 00:26:20,940 --> 00:26:21,690 在一切。 645 00:26:21,690 --> 00:26:23,890 因此,在gedit中,我们将有两全其美排序。 646 00:26:23,890 --> 00:26:25,600 我们可以拖放文本,我们可以看到它 647 00:26:25,600 --> 00:26:26,840 漂亮的颜色编码。 648 00:26:26,840 --> 00:26:29,630 但是,当它的时间来运行我们的程序,我们有时会 649 00:26:29,630 --> 00:26:31,750 这里只是用这个小窗口。 650 00:26:31,750 --> 00:26:33,460 >> 所以我要继续前进,并做到这一点。 651 00:26:33,460 --> 00:26:36,420 在底部的黑色和白色的窗口,我要继续前进 652 00:26:36,420 --> 00:26:37,890 并写铛。 653 00:26:37,890 --> 00:26:40,130 而铛是一个编译器的名称。 654 00:26:40,130 --> 00:26:43,310 这是一个程序,它把我的源代码 655 00:26:43,310 --> 00:26:48,770 成,所以,对象代码。 656 00:26:48,770 --> 00:26:51,270 0和1,我们上周看到的。 657 00:26:51,270 --> 00:26:53,700 回想一下从上周开始,我们承诺,我们要 658 00:26:53,700 --> 00:26:55,920 从这样的事情 - 我们需要 659 00:26:55,920 --> 00:26:57,010 这样的事情 - 660 00:26:57,010 --> 00:26:58,700 这当然不是一个人的 661 00:26:58,700 --> 00:26:59,690 做手工。 662 00:26:59,690 --> 00:27:01,980 所以,我们要使用一个程序,该程序在 663 00:27:01,980 --> 00:27:03,430 这种情况被称为“铿锵。 664 00:27:03,430 --> 00:27:06,020 我的程序的名称是hello.c的。 665 00:27:06,020 --> 00:27:09,670 因此,为了从源代码编译hello.c的 666 00:27:09,670 --> 00:27:12,930 目标代码,或“0”和“1,它应该足以做 667 00:27:12,930 --> 00:27:14,820 这并按下回车键。 668 00:27:14,820 --> 00:27:16,850 >> 好,似乎什么都没有发生。 669 00:27:16,850 --> 00:27:20,450 但现在我知道,从上周开始,默认的名称, 670 00:27:20,450 --> 00:27:24,920 一个程序,C语言编写的,是愚蠢的,叫做a.out。 671 00:27:24,920 --> 00:27:26,610 最无趣的名字,你能来。 672 00:27:26,610 --> 00:27:28,790 A是第一个字母是什么 673 00:27:28,790 --> 00:27:29,960 输出,但就这样吧。 674 00:27:29,960 --> 00:27:33,570 这是我的计划,现在点斜线,正如我们看到的,是 675 00:27:33,570 --> 00:27:36,170 其实只是一种安全功能,因为 676 00:27:36,170 --> 00:27:38,250 a.out是我写的程序。 677 00:27:38,250 --> 00:27:39,650 它没有来,这是我的电脑 678 00:27:39,650 --> 00:27:40,790 在Program Files。 679 00:27:40,790 --> 00:27:42,910 这不是在Mac OS的应用程序文件夹。 680 00:27:42,910 --> 00:27:45,740 我需要超级计算机明确的,并说 681 00:27:45,740 --> 00:27:49,030 这个程序,a.out格式,是当前文件夹中, 682 00:27:49,030 --> 00:27:50,260 当前目录。 683 00:27:50,260 --> 00:27:53,160 的方式在这样的环境中你代表这 684 00:27:53,160 --> 00:27:57,070 点代表文件夹,无论你目前所在 685 00:27:57,070 --> 00:27:59,420 因此,/只是意味着运行a.out 686 00:27:59,420 --> 00:28:00,530 在当前文件夹中。 687 00:28:00,530 --> 00:28:04,830 我运行与输入,瞧,我的第一个程序。 688 00:28:04,830 --> 00:28:05,990 >> 现在,让我退后一步。 689 00:28:05,990 --> 00:28:08,280 这个窗口是小了点,实现底部 690 00:28:08,280 --> 00:28:10,340 离开这里的设备是另一个图标。 691 00:28:10,340 --> 00:28:12,660 一个是Chrome浏览器,这应该是相当熟悉的,只是一个Web 692 00:28:12,660 --> 00:28:14,350 组件内的浏览器。 693 00:28:14,350 --> 00:28:16,340 而这黑色和白色图标只是一个 694 00:28:16,340 --> 00:28:17,720 更大的终端窗口。 695 00:28:17,720 --> 00:28:19,830 因此,如果它变得有点讨厌排序的 696 00:28:19,830 --> 00:28:22,270 这个小片的一个窗口互动 697 00:28:22,270 --> 00:28:24,370 的程序,而我们可以做到这一点。 698 00:28:24,370 --> 00:28:26,640 现在让我先键入几个很快 699 00:28:26,640 --> 00:28:27,980 熟悉的命令。 700 00:28:27,980 --> 00:28:28,900 LS。 701 00:28:28,900 --> 00:28:31,410 因此,ls是上市的命令。 702 00:28:31,410 --> 00:28:33,900 所以,在Mac OS或Windows,你一般会仔细单击 703 00:28:33,900 --> 00:28:36,510 文件夹,然后,瞧,你可以看到所有的各种文件 704 00:28:36,510 --> 00:28:37,210 和文件夹。 705 00:28:37,210 --> 00:28:39,650 在命令行环境下,你只能输入 706 00:28:39,650 --> 00:28:42,390 命令或文本,LS是等效的。 707 00:28:42,390 --> 00:28:44,380 告诉我什么是在这个目录中。 708 00:28:44,380 --> 00:28:46,540 >> 现在有一堆东西在这里都有点 709 00:28:46,540 --> 00:28:48,190 熟悉又有点陌生的。 710 00:28:48,190 --> 00:28:50,740 但是请注意,就像Windows和Mac OS,jharvard 711 00:28:50,740 --> 00:28:52,190 有一个桌面文件夹中。 712 00:28:52,190 --> 00:28:54,520 所以是我的桌面上的任何图标, 713 00:28:54,520 --> 00:28:55,650 在该文件夹中。 714 00:28:55,650 --> 00:28:57,250 有一个下载文件夹的东西, 715 00:28:57,250 --> 00:28:58,890 Chrome浏览器可能会放在那里。 716 00:28:58,890 --> 00:28:59,250 Dropbox的。 717 00:28:59,250 --> 00:29:01,820 因此,设备都带有内置的支持Dropbox的 718 00:29:01,820 --> 00:29:04,500 因此,在这学期,你可以与你的Dropbox同步 719 00:29:04,500 --> 00:29:06,420 帐户,以使所有的程序进行备份。 720 00:29:06,420 --> 00:29:08,050 他们访问其他计算机上。 721 00:29:08,050 --> 00:29:09,780 如果有什么出错的设备,你可以 722 00:29:09,780 --> 00:29:11,340 很容易从Dropbox的恢复。 723 00:29:11,340 --> 00:29:12,940 因此,该文件夹中有。 724 00:29:12,940 --> 00:29:14,660 有两个文件,​​我 - hello.c的 725 00:29:14,660 --> 00:29:16,540 和a.out。 726 00:29:16,540 --> 00:29:18,530 然后在右边有一些其他的文件夹,我们将 727 00:29:18,530 --> 00:29:20,710 得到的学期即将结束,与网络 728 00:29:20,710 --> 00:29:21,540 编程。 729 00:29:21,540 --> 00:29:26,160 所以,当我这样做。/ a.out格式,输入,这是说去 730 00:29:26,160 --> 00:29:29,460 在我的目录,当前目录,并运行 731 00:29:29,460 --> 00:29:32,465 程序名为a.out在那里。 732 00:29:32,465 --> 00:29:35,810 >> 好了,所以这是好和好,但不是所有的 733 00:29:35,810 --> 00:29:38,550 引人注目的写一个程序,称为帮助的a.out。 734 00:29:38,550 --> 00:29:40,790 因此,我们可以真正做到这一点有点不同。 735 00:29:40,790 --> 00:29:43,980 因此,而不是仅仅运行铛,hello.c的,让我们添加 736 00:29:43,980 --> 00:29:46,850 什么所谓的命令行参数。 737 00:29:46,850 --> 00:29:50,730 因此,一个命令行参数,或一个开关,在这种情况下,只是 738 00:29:50,730 --> 00:29:54,930 另一个词或短语,在提示符下键入 739 00:29:54,930 --> 00:29:56,290 你想运行的程序。 740 00:29:56,290 --> 00:29:59,970 因此,在这种情况下,铛是我想要运行的程序,-O 741 00:29:59,970 --> 00:30:03,480 装置的输出不再是一个文件,该文件名为a.out。 742 00:30:03,480 --> 00:30:07,510 输出文件名为hello,这样做编译 743 00:30:07,510 --> 00:30:10,200 最后一个字就行了,hello.c的。 744 00:30:10,200 --> 00:30:13,200 因此,在短,这是一个非常微小的改善,据此, 745 00:30:13,200 --> 00:30:15,850 而不是有这个愚蠢的名为a.out文件, 746 00:30:15,850 --> 00:30:21,430 我现在可以做铛-O招呼,然后hello.c的,和 747 00:30:21,430 --> 00:30:22,530 然后按Enter键。 748 00:30:22,530 --> 00:30:25,510 似乎没有发生,但再多想用0 - 749 00:30:25,510 --> 00:30:28,510 似乎什么都没有发生,这意味着什么错误的发生 - 750 00:30:28,510 --> 00:30:31,460 让我们现在做LS,输入,而事实上我现在 751 00:30:31,460 --> 00:30:32,780 有一个hello计划。 752 00:30:32,780 --> 00:30:38,510 所以,如果我现在键入Hello,命令没有找到。 753 00:30:38,510 --> 00:30:39,440 OK,。/。 754 00:30:39,440 --> 00:30:40,220 所以完全正确的。 755 00:30:40,220 --> 00:30:43,170 所以我写的,因为这个程序,并没有配备 756 00:30:43,170 --> 00:30:45,810 电脑,/你好,输入,这意味着 757 00:30:45,810 --> 00:30:47,350 我现在运行打招呼。 758 00:30:47,350 --> 00:30:48,440 >> 所以这是它在那里。 759 00:30:48,440 --> 00:30:51,070 现在,我们最终会得到越来越多的命令行 760 00:30:51,070 --> 00:30:54,110 参数,使我们能够做更多的,只是那些 761 00:30:54,110 --> 00:30:57,760 其中,这可能是旧帽子,让我真正进入一个 762 00:30:57,760 --> 00:31:01,910 目录在这里,怎么回事,我们只是给你一个传情 763 00:31:01,910 --> 00:31:05,770 可以去实施的Hello World。 764 00:31:05,770 --> 00:31:10,730 让我在这里赘述了,我要打开它。 765 00:31:10,730 --> 00:31:13,090 因此,实际上,我将解释我在做什么,所以 766 00:31:13,090 --> 00:31:15,610 这是非常有用的。 767 00:31:15,610 --> 00:31:17,410 让我回来了。 768 00:31:17,410 --> 00:31:19,620 >> 所以,我一直在这样做了很长一段时间。 769 00:31:19,620 --> 00:31:23,030 所以注意在右边有一对夫妇的 770 00:31:23,030 --> 00:31:26,940 目录名字古怪的source1m和source1w的。 771 00:31:26,940 --> 00:31:28,830 这仅仅是愚蠢的约定,我们使用。 772 00:31:28,830 --> 00:31:31,825 来源只是意味着源代码,意味着这是本周一, 773 00:31:31,825 --> 00:31:34,000 m表示这是星期一,w表示它是星期三。 774 00:31:34,000 --> 00:31:34,900 所以没有什么神秘的存在。 775 00:31:34,900 --> 00:31:37,830 这只是速记符号。 776 00:31:37,830 --> 00:31:39,860 这些蓝色的文件夹的东西,否则被称为 777 00:31:39,860 --> 00:31:40,630 目录。 778 00:31:40,630 --> 00:31:43,870 我想进入该文件夹,并在一个正常的电脑 779 00:31:43,870 --> 00:31:45,710 我可以双击单击一个文件夹图标 780 00:31:45,710 --> 00:31:46,810 我的所有文件。 781 00:31:46,810 --> 00:31:49,270 但在命令行环境中,我也不能完全做到 782 00:31:49,270 --> 00:31:52,640 ,所以不是,我必须手动更改目录。 783 00:31:52,640 --> 00:31:57,900 所以,如果我键入cd,然后source1m,输入,请注意, 784 00:31:57,900 --> 00:32:01,180 我的提示,在左边的白色的东西,只是改变了。 785 00:32:01,180 --> 00:32:03,690 确实,当它刚才说的括号,然后 786 00:32:03,690 --> 00:32:06,450 小波浪线,波浪线符号,那只是意味着我 787 00:32:06,450 --> 00:32:08,800 在约翰·哈佛的主目录,我的文档, 788 00:32:08,800 --> 00:32:10,390 他的个人档案。 789 00:32:10,390 --> 00:32:14,000 但现在在括号中说,〜/​​ source1m。 790 00:32:14,000 --> 00:32:17,090 这也就意味着我在一个文件夹,名为source1m 791 00:32:17,090 --> 00:32:19,160 这是约翰·哈佛的主目录中。 792 00:32:19,160 --> 00:32:22,030 所以,如果我现在要列出的文件,在此文件夹中,方便 793 00:32:22,030 --> 00:32:25,300 的问题,我只输入LS。 794 00:32:25,300 --> 00:32:28,860 现在我看到的所有文件,我今天的预先创建 795 00:32:28,860 --> 00:32:31,020 演讲,所有这一切,其中大部分发生 796 00:32:31,020 --> 00:32:32,740 结束于。c。 797 00:32:32,740 --> 00:32:36,210 >> 因此,让我继续和运行gedit中的一个程序,称为 798 00:32:36,210 --> 00:32:39,140 holloway.c,写的是一些随机的黑客 799 00:32:39,140 --> 00:32:42,920 在互联网上,它看起来有点像这样。 800 00:32:42,920 --> 00:32:44,880 我们是不会去任何通过这个 801 00:32:44,880 --> 00:32:48,530 详细地说,但对于那些更舒适,尤其是,如果 802 00:32:48,530 --> 00:32:50,935 你想以此来猜测这是什么程序在这里所做的。 803 00:32:57,950 --> 00:32:59,990 放心吧,无论是你还是舒服多了, 804 00:32:59,990 --> 00:33:01,655 我们甚至没有得到这样的事情在年底 805 00:33:01,655 --> 00:33:02,160 这个学期。 806 00:33:02,160 --> 00:33:05,390 这是什么是一个例子的模糊C大赛, 807 00:33:05,390 --> 00:33:08,390 装置写最神秘的程序,你可能 808 00:33:08,390 --> 00:33:10,820 可以超越其他聪明的人,也同样 809 00:33:10,820 --> 00:33:13,010 尝试写的东西,炫耀,他们可以写 810 00:33:13,010 --> 00:33:14,280 更神秘的东西比你多。 811 00:33:14,280 --> 00:33:17,290 所以这不是一个例子,一个精心编写的程序从 812 00:33:17,290 --> 00:33:21,260 风格的角度来看,这是一个例子的一个程序 813 00:33:21,260 --> 00:33:22,860 人们试图赢得一场比赛, 814 00:33:22,860 --> 00:33:24,090 模糊和抽象的。 815 00:33:24,090 --> 00:33:27,670 >> 因此,如果我们运行这个事情,让我去到我的终端窗口中, 816 00:33:27,670 --> 00:33:28,110 可以这么说。 817 00:33:28,110 --> 00:33:29,650 因此,这黑与白的环境被称为 818 00:33:29,650 --> 00:33:31,160 一般终端窗口。 819 00:33:31,160 --> 00:33:32,600 让我继续前进,并编译它。 820 00:33:32,600 --> 00:33:34,440 我不打算使用铛,因为这个程序是一个 821 00:33:34,440 --> 00:33:36,340 有点神秘,它需要一个不同的 822 00:33:36,340 --> 00:33:38,190 一个叫GCC编译器,。 823 00:33:38,190 --> 00:33:39,200 但是,做同样的事情。 824 00:33:39,200 --> 00:33:41,130 源代码,目标代码。 825 00:33:41,130 --> 00:33:43,940 现在,如果我运行a.out,该程序 826 00:33:43,940 --> 00:33:46,065 刚看到这样做。 827 00:33:49,220 --> 00:33:51,170 所以那家伙赢得了那场比赛。 828 00:33:51,170 --> 00:33:54,020 总之,我们不打算在那个方向,本身。 829 00:33:54,020 --> 00:33:57,400 >> 因此,让我们真正尝试到现在取笑除了我们能做些什么 830 00:33:57,400 --> 00:33:59,540 这些基本构建块,使越来越多的 831 00:33:59,540 --> 00:34:00,590 有趣的节目。 832 00:34:00,590 --> 00:34:02,800 因此,我们已经写了一个程序,我们运行程序。 833 00:34:02,800 --> 00:34:05,780 现在,我们实际上可以简化,不再写 834 00:34:05,780 --> 00:34:07,210 字铿锵的提示。 835 00:34:07,210 --> 00:34:10,710 事实证明,我们的计划变得更加神秘的,我们可以,或 836 00:34:10,710 --> 00:34:14,699 更复杂的,而实际上,我们可以运行此命令。 837 00:34:14,699 --> 00:34:17,610 因此,让我回到我的家目录,可以这么说,让我 838 00:34:17,610 --> 00:34:20,750 删除 - rm是remove命令 - 我要删除 839 00:34:20,750 --> 00:34:23,060 名为a.out的文件,并招呼。 840 00:34:23,060 --> 00:34:25,489 而现在注意到,在命令行环境中,就像在 841 00:34:25,489 --> 00:34:27,800 一个图形用户界面,你会得到提示。我无法点击一个按钮,但我 842 00:34:27,800 --> 00:34:31,040 键入y(是),Y(是)。 843 00:34:31,040 --> 00:34:33,460 现在,如果我输入ls再次,那些绿色的通知 844 00:34:33,460 --> 00:34:35,469 节目 - a.out的招呼 - 845 00:34:35,469 --> 00:34:35,734 已经一去不复返了。 846 00:34:35,734 --> 00:34:37,340 当心室。 847 00:34:37,340 --> 00:34:39,739 它可以做不好的事情,就像你可以通过拖动 848 00:34:39,739 --> 00:34:40,810 事情到您的垃圾。 849 00:34:40,810 --> 00:34:43,989 >> 所以,现在让我们继续 - 我能做到这一点 - 铛-O 850 00:34:43,989 --> 00:34:45,139 你好,你好 - 851 00:34:45,139 --> 00:34:46,884 我已经厌倦键入该命令。 852 00:34:46,884 --> 00:34:48,080 即使我输入的有点快。 853 00:34:48,080 --> 00:34:51,870 因此,我们可以,而不是做您好。 854 00:34:51,870 --> 00:34:53,880 所以,做的是不是一个编译器。 855 00:34:53,880 --> 00:34:57,720 这只是一个友好的Linux自带的程序,在此 856 00:34:57,720 --> 00:34:59,070 的情况 - 操作系统 - 857 00:34:59,070 --> 00:35:02,480 它可以自动编译程序的过程中。 858 00:35:02,480 --> 00:35:05,555 因此,而不是记住铛-o文件名和 859 00:35:05,555 --> 00:35:08,190 再等等,尤其是当这些线路越来越长, 860 00:35:08,190 --> 00:35:10,110 时间越长,我可以只写。 861 00:35:10,110 --> 00:35:12,030 这是怎么回事吐出了一大堆的东西, 862 00:35:12,030 --> 00:35:13,940 我们最终会看到这个学期。 863 00:35:13,940 --> 00:35:17,500 但是请注意,现在如果我输入ls,hello是在我的目录。 864 00:35:17,500 --> 00:35:19,850 事实上,我可以运行。/打招呼。 865 00:35:19,850 --> 00:35:23,330 所以只是自动运行的过程中,什么是, 866 00:35:23,330 --> 00:35:26,910 在这种情况下,一个更长的,更复杂的命令。 867 00:35:26,910 --> 00:35:29,060 因此,我们将开始使用品牌,只是因为它是一个很大 868 00:35:29,060 --> 00:35:30,530 更加人性化。 869 00:35:30,530 --> 00:35:32,770 >> 但现在让我们做一个更有趣的程序 870 00:35:32,770 --> 00:35:34,650 不只是打个招呼。 871 00:35:34,650 --> 00:35:38,680 因此,在程序中,我们已经写了迄今为止的主。 872 00:35:38,680 --> 00:35:40,890 这仅仅是默认的事情,踢一切。 873 00:35:40,890 --> 00:35:43,340 但也有其他的功能在那里, 874 00:35:43,340 --> 00:35:45,890 stdio.h中的事情,我们看到,在我们的最高 875 00:35:45,890 --> 00:35:48,480 文件之前,这是什么作为标准库。 876 00:35:48,480 --> 00:35:51,300 的标准库里面是一大堆的功能 877 00:35:51,300 --> 00:35:53,850 别人写,我们就可以开始使用这些 878 00:35:53,850 --> 00:35:55,050 函数来编写更 879 00:35:55,050 --> 00:35:56,760 有趣的节目我们自己。 880 00:35:56,760 --> 00:35:58,370 >> 因此,让我回去的设备。 881 00:35:58,370 --> 00:35:59,820 我要关闭这个终端窗口。 882 00:35:59,820 --> 00:36:02,630 我要关闭的事情,我们之前写的,只是去 883 00:36:02,630 --> 00:36:07,350 到hello.c的,请注意,现在我可以做以下。 884 00:36:07,350 --> 00:36:09,730 你好世界是不是所有的有趣,我想 885 00:36:09,730 --> 00:36:11,770 此程序为自己个性化。 886 00:36:11,770 --> 00:36:13,440 因此,不是说世界,我要 887 00:36:13,440 --> 00:36:14,830 继续说 - 888 00:36:14,830 --> 00:36:16,880 我可以输入大卫 - 但是这真的是一种 889 00:36:16,880 --> 00:36:18,050 基本上是相同的。 890 00:36:18,050 --> 00:36:19,970 但是,让我们来试试这个占位符的想法。 891 00:36:19,970 --> 00:36:24,460 回想一下,在C,而在printf,我们有这些 892 00:36:24,460 --> 00:36:28,110 占位符,并有更多的不仅仅是%d的。 893 00:36:28,110 --> 00:36:31,150 因此,%d的快速完整性检查。 894 00:36:31,150 --> 00:36:32,310 好吧,十进制数,就是这样。 895 00:36:32,310 --> 00:36:33,860 十进位数字,仅此而已。 896 00:36:33,860 --> 00:36:37,755 因此,%C,我们也会遇到,将是一个字符。 897 00:36:37,755 --> 00:36:40,530 在这里放一个字符,一个字母A到Z, 898 00:36:40,530 --> 00:36:41,600 或标点符号的象征。 899 00:36:41,600 --> 00:36:45,590 单个字符,%F,任何人都知道,从其他语言呢? 900 00:36:45,590 --> 00:36:47,020 因此,一个浮点值。 901 00:36:47,020 --> 00:36:47,880 实数。 902 00:36:47,880 --> 00:36:51,550 因此,没有一个十进制数 - 这其实是一个实数, 903 00:36:51,550 --> 00:36:54,130 一个小数点,和一些数字的小数点左边 904 00:36:54,130 --> 00:36:55,520 和右边的。 905 00:36:55,520 --> 00:36:58,060 %s的字符串。 906 00:36:58,060 --> 00:36:59,530 我们经常会看到。 907 00:36:59,530 --> 00:37:02,140 再次,仅仅是一个字符串,一个词,一个短语,一个序列 908 00:37:02,140 --> 00:37:03,330 单个字符。 909 00:37:03,330 --> 00:37:06,730 最后,LLD? 910 00:37:06,730 --> 00:37:08,210 因此,这是一个角落的情况。 911 00:37:08,210 --> 00:37:09,850 长,长的十进制数。 912 00:37:09,850 --> 00:37:12,035 所以,如果你想不只是一个数字,这个大的,你 913 00:37:12,035 --> 00:37:14,160 希望有一个更大的数字,你要必须指定 914 00:37:14,160 --> 00:37:16,400 计算机,它具有特定大小。 915 00:37:16,400 --> 00:37:17,610 >> 因此,我们修改这一点点。 916 00:37:17,610 --> 00:37:20,610 而不是硬编码在大卫,让我略 917 00:37:20,610 --> 00:37:22,460 动态%S说。 918 00:37:22,460 --> 00:37:25,790 所以在这里放一个%,这是一个占位符的字符串。 919 00:37:25,790 --> 00:37:30,500 然后让我做逗号,然后在这里的“国宝”。 920 00:37:30,500 --> 00:37:32,770 现在,这是不是所有的智力有趣的, 921 00:37:32,770 --> 00:37:35,060 因为我现在所做的一切是真的创造更多的工作 922 00:37:35,060 --> 00:37:35,790 计算机。 923 00:37:35,790 --> 00:37:39,660 而不是告诉计算机做这一次,我现在 924 00:37:39,660 --> 00:37:43,760 说做到这一点,最终在这里插入一个字符串,逗号, 925 00:37:43,760 --> 00:37:44,950 这里是字符串。 926 00:37:44,950 --> 00:37:47,220 因此,这是不是一个更好的改善,但它至少 927 00:37:47,220 --> 00:37:49,010 一步步走向一个更有趣的程序。 928 00:37:49,010 --> 00:37:51,240 因为现在,让我继续前进,使这个窗口一点点 929 00:37:51,240 --> 00:37:56,850 大,让我继续运行使招呼。 930 00:37:56,850 --> 00:38:01,340 而现在,。/ a.out的不工作,为什么呢? 931 00:38:03,880 --> 00:38:05,570 好了,现在,它被称为打招呼。 932 00:38:05,570 --> 00:38:09,400 所以,再一次,也铛带-o,改名为 933 00:38:09,400 --> 00:38:11,120 程序更有趣的东西。 934 00:38:11,120 --> 00:38:13,060 瞧,现在它说你好大卫。 935 00:38:13,060 --> 00:38:14,590 >> 所有的权利,仍然是一个愚蠢的计划。 936 00:38:14,590 --> 00:38:18,070 现在让我们回去,在这里介绍的概念 937 00:38:18,070 --> 00:38:18,810 一个变量。 938 00:38:18,810 --> 00:38:21,600 那岂不是很好,如果我可以声明一个变量 939 00:38:21,600 --> 00:38:23,150 其类型为字符串? 940 00:38:23,150 --> 00:38:26,720 变量的值实际上是从用户 941 00:38:26,720 --> 00:38:27,810 他或她自己。 942 00:38:27,810 --> 00:38:30,240 所以,随意,我现在就打电话给我的变量s,这是 943 00:38:30,240 --> 00:38:32,410 只是一个普通的惯例,当你有一个变量称为 944 00:38:32,410 --> 00:38:33,250 的字符串。 945 00:38:33,250 --> 00:38:35,670 我该怎么办等号,然后我就打电话给一个 946 00:38:35,670 --> 00:38:38,030 函数调用GetString的。 947 00:38:38,030 --> 00:38:40,830 因此,GetString的是不是内建C.这是 948 00:38:40,830 --> 00:38:43,330 一个函数,它的CS50的工作人员写的,真的只是 949 00:38:43,330 --> 00:38:45,670 这些最初几周,简化的过程中, 950 00:38:45,670 --> 00:38:49,450 获取用户输入并获得用户输入的形式 951 00:38:49,450 --> 00:38:51,960 字符串或数字,而这样的。 952 00:38:51,960 --> 00:38:55,520 因此,GetString的是,但很明显,而不是像printf 953 00:38:55,520 --> 00:38:58,700 打印,它会做它的名字一样,得到一个字符串。 954 00:38:58,700 --> 00:39:00,970 但是,使用GetString时,我们将不得不做出改变 955 00:39:00,970 --> 00:39:03,180 这里,超出此。 956 00:39:03,180 --> 00:39:07,170 所以,这个方案直观地,希望会以某种方式 957 00:39:07,170 --> 00:39:09,700 得到来自用户的字符串,然后又是怎样的做 958 00:39:09,700 --> 00:39:11,460 以该字符串,称为s? 959 00:39:15,060 --> 00:39:16,470 这只是要打印的它,对不对呢? 960 00:39:16,470 --> 00:39:18,870 还不是,因为它会刺激计划 961 00:39:18,870 --> 00:39:22,160 做的是插入该值,其中%s 962 00:39:22,160 --> 00:39:23,750 说,它应该去。 963 00:39:23,750 --> 00:39:25,290 >> 因此,让我们至少看到这个动作。 964 00:39:25,290 --> 00:39:27,040 让我保存和缩小。 965 00:39:27,040 --> 00:39:30,280 现在,在我的终端窗口,在这里,一小片, 966 00:39:30,280 --> 00:39:32,760 让我再次做你好。 967 00:39:32,760 --> 00:39:35,160 好了,啊,该死的,我得到了一大堆的错误。 968 00:39:35,160 --> 00:39:38,020 让我向上卷动,我们看到我们的第一个 - 969 00:39:38,020 --> 00:39:40,430 让我们真正做到这一点在一个更大的窗口,所以你 970 00:39:40,430 --> 00:39:42,110 可以看到如何厉害,我搞砸了 - 971 00:39:42,110 --> 00:39:44,460 所以一定要打招呼。 972 00:39:44,460 --> 00:39:46,540 好吧,这是一场灾难,对不对? 973 00:39:46,540 --> 00:39:48,740 我已经写了三行代码, 974 00:39:48,740 --> 00:39:50,070 它给了我12个错误。 975 00:39:50,070 --> 00:39:51,980 所以,这是为什么? 976 00:39:51,980 --> 00:39:55,720 幸运的是,通常情况下,当你看到很多很多的错误 977 00:39:55,720 --> 00:39:57,730 随地吐痰一次,它真的只是因为你 978 00:39:57,730 --> 00:39:59,760 混淆了计算机。 979 00:39:59,760 --> 00:40:02,330 它仍然困惑的时候,它得到了。 980 00:40:02,330 --> 00:40:04,400 所以刚开始跳闸的脚步,和 981 00:40:04,400 --> 00:40:07,310 随地吐痰更可怕的东西,而不是实际应用。 982 00:40:07,310 --> 00:40:10,120 因此,在一般情况下,总是从最上方的一个。 983 00:40:10,120 --> 00:40:13,320 >> 因此,很红色的,最上面的实例 984 00:40:13,320 --> 00:40:14,740 这是错误消息。 985 00:40:14,740 --> 00:40:17,750 使用未声明的标识符字符串,我 986 00:40:17,750 --> 00:40:19,160 意思是标准的呢? 987 00:40:19,160 --> 00:40:19,900 我不知道。 988 00:40:19,900 --> 00:40:24,180 我的意思是字符串,但是这是因为,太多的字串 989 00:40:24,180 --> 00:40:26,020 我一直在使用口头其实 990 00:40:26,020 --> 00:40:27,240 在C要么不存在。 991 00:40:27,240 --> 00:40:29,470 这件事情,我们将使用的第一个星期或两个 992 00:40:29,470 --> 00:40:34,500 在这里,但它存在于一个名为cs50.h. 993 00:40:34,500 --> 00:40:37,110 因此,现在知道有这个其他图书馆, 994 00:40:37,110 --> 00:40:39,330 工作人员写的,所以它最近被写入 995 00:40:39,330 --> 00:40:40,510 stdio.h中。 996 00:40:40,510 --> 00:40:45,020 但里面的cs50.h是一个定义的代名词 997 00:40:45,020 --> 00:40:48,310 排序,创建此字串。 998 00:40:48,310 --> 00:40:50,890 >> 所以,现在让我回到我的终端窗口。 999 00:40:50,890 --> 00:40:53,200 我要清除这个全乱了,按Ctrl-L。我们只是 1000 00:40:53,200 --> 00:40:55,700 消灭一切干净,我要继续前进,并 1001 00:40:55,700 --> 00:40:57,860 大家好,回车。 1002 00:40:57,860 --> 00:40:59,440 所以现在发生了什么事? 1003 00:40:59,440 --> 00:41:01,150 现在,所有的这些错误就走开了。 1004 00:41:01,150 --> 00:41:02,230 那么,什么是我真正做了什么? 1005 00:41:02,230 --> 00:41:05,920 我只是教字符串中存在的计算机,和它的 1006 00:41:05,920 --> 00:41:07,890 该文件称为cs50.h.中 1007 00:41:07,890 --> 00:41:10,930 所以,不要抱怨,因为现在你知道在哪里可以找到 1008 00:41:10,930 --> 00:41:13,220 该函数的声明可以这么说。 1009 00:41:13,220 --> 00:41:15,200 它存在于这个世界。 1010 00:41:15,200 --> 00:41:18,820 >> 所以现在我要继续前进并运行打招呼。 1011 00:41:18,820 --> 00:41:22,300 我似乎有一个无限循环,没有发生的事情。 1012 00:41:25,530 --> 00:41:26,870 所以,我需要的东西在这里,对不对。 1013 00:41:26,870 --> 00:41:29,650 在我的程序中的第一行代码的GetString。 1014 00:41:29,650 --> 00:41:31,750 因此,它的字面意思等着我去得到一个字符串。 1015 00:41:31,750 --> 00:41:33,680 因此,在这个意义上说,它是一个无限的循环。 1016 00:41:33,680 --> 00:41:36,520 显然,在GetString的默认行为,我们 1017 00:41:36,520 --> 00:41:37,510 写 - 工作人员 - 1018 00:41:37,510 --> 00:41:39,550 只是说等待,等待,等待,等待,等待, 1019 00:41:39,550 --> 00:41:42,550 直到用户给你一个字符串,输入的东西英寸 1020 00:41:42,550 --> 00:41:46,000 所以,让我继续前进,类型D-A-V - I-D输入。 1021 00:41:46,000 --> 00:41:47,420 还有,你好大卫。 1022 00:41:47,420 --> 00:41:50,430 >> 现在,这个问题似乎像它只是一个行为呢? 1023 00:41:50,430 --> 00:41:52,810 让我继续前进,输入汤米。 1024 00:41:52,810 --> 00:41:54,740 输入,好吧,似乎是工作。 1025 00:41:54,740 --> 00:41:59,130 工程罗布,Zamyla工程,工程 - 好吧。 1026 00:41:59,130 --> 00:42:01,000 因此,它去上班,最有可能的。 1027 00:42:01,000 --> 00:42:05,030 因此,它应该打印出来,无论我们给它, 1028 00:42:05,030 --> 00:42:07,830 我们可以在这里有点困难。 1029 00:42:07,830 --> 00:42:12,130 让我们来看看,如果我们做这样的事情你好。 1030 00:42:12,130 --> 00:42:18,000 可以去这里,让我们来看看,复制,粘贴。 1031 00:42:18,000 --> 00:42:19,950 我不能够将其粘贴,很多时候在这里。 1032 00:42:19,950 --> 00:42:24,410 粘贴,没关系,按Shift + Ctrl + V。但是,是什么 1033 00:42:24,410 --> 00:42:26,970 发生坏在这里吗? 1034 00:42:26,970 --> 00:42:27,770 >> 好了,所以,段错误。 1035 00:42:27,770 --> 00:42:29,710 所以,你们中的一些与以前的背景就知道了, 1036 00:42:29,710 --> 00:42:32,710 一般,给人的电​​脑时,他们大量的投入 1037 00:42:32,710 --> 00:42:36,140 可能并不意味着接受这样的长文件名 - 坏 1038 00:42:36,140 --> 00:42:36,740 事情发生。 1039 00:42:36,740 --> 00:42:39,230 事实上,在网络的世界中,也出现这种情况相当多, 1040 00:42:39,230 --> 00:42:41,000 由此,当你正在设计一个网站,当你 1041 00:42:41,000 --> 00:42:43,850 设计Facebook上,你必须做出武断的决定了 1042 00:42:43,850 --> 00:42:45,370 前方,像多长时间会有人的 1043 00:42:45,370 --> 00:42:46,360 Facebook的用户名是什么? 1044 00:42:46,360 --> 00:42:48,050 要不了多久,一个人的名字是什么? 1045 00:42:48,050 --> 00:42:50,110 多久某人的电话号码等。 1046 00:42:50,110 --> 00:42:53,580 如果程序员做出错误的假设,计划打破 1047 00:42:53,580 --> 00:42:56,640 因为你试图给他们更多的输出,输入 1048 00:42:56,640 --> 00:42:58,330 相反,比他们有记忆。 1049 00:42:58,330 --> 00:43:01,860 或者RAM分配给它的,所以,如果现在我按下Enter键, 1050 00:43:01,860 --> 00:43:04,640 该计划的实际工作,因为我们是在图书馆 1051 00:43:04,640 --> 00:43:06,790 我们预计这种特殊情况下。 1052 00:43:06,790 --> 00:43:10,900 但是,毫无疑问,这学期,你会写至少一个 1053 00:43:10,900 --> 00:43:13,280 程序,会说这些话的。 1054 00:43:13,280 --> 00:43:16,520 从现在开始,请记住这周,也许两天从现在。 1055 00:43:16,520 --> 00:43:18,760 分割故障是一件坏事。 1056 00:43:18,760 --> 00:43:21,920 它会参考你做的东西,在计算机 1057 00:43:21,920 --> 00:43:23,310 没有预料到的。 1058 00:43:23,310 --> 00:43:25,810 在这种情况下,你的程序员,没有预料到的。 1059 00:43:25,810 --> 00:43:27,720 就像一堆袜子,有各种不同的 1060 00:43:27,720 --> 00:43:29,520 角落的情况下,我们可能都遇到过。 1061 00:43:29,520 --> 00:43:32,340 同样的程序中,如果你不预期是多久 1062 00:43:32,340 --> 00:43:33,310 一个人的名字将是。 1063 00:43:33,310 --> 00:43:35,890 或者,如果我有一个恶意的用户,和他或她的名字是 1064 00:43:35,890 --> 00:43:37,230 其实很短,但他们只是想 1065 00:43:37,230 --> 00:43:37,960 来惹我? 1066 00:43:37,960 --> 00:43:40,490 这是怎么回事,是我的程序的行为吗? 1067 00:43:40,490 --> 00:43:43,930 那么,在这种情况下,这实际上可能会崩溃。 1068 00:43:43,930 --> 00:43:44,750 >> 因此,让我们做到这一点。 1069 00:43:44,750 --> 00:43:46,860 在90分钟,这是一个可怕的很长一段时间 1070 00:43:46,860 --> 00:43:47,780 计算机科学。 1071 00:43:47,780 --> 00:43:49,550 我们为什么不进入五分钟的习惯, 1072 00:43:49,550 --> 00:43:51,520 在这里休息一下,我们回来的时候,我们将深入到一些 1073 00:43:51,520 --> 00:43:53,430 更复杂的和令人信服的计划呢? 1074 00:43:53,430 --> 00:43:54,680 五分钟。 1075 00:43:56,910 --> 00:43:58,160 >> 好的。 1076 00:44:01,138 --> 00:44:02,780 因此,一个快速评论。 1077 00:44:02,780 --> 00:44:05,590 有人告诉我,虽然这是在屏幕前, 1078 00:44:05,590 --> 00:44:08,880 我的嘴里出来的是cs50.net/rsvp。 1079 00:44:08,880 --> 00:44:11,670 这是正确的。 cs50.net/lunch。 1080 00:44:11,670 --> 00:44:16,030 所以,现在你可以尝试/午餐RSVPing。 1081 00:44:16,030 --> 00:44:16,980 但是,让我们现在做到这一点。 1082 00:44:16,980 --> 00:44:20,150 因此,这已经超快速,超新了很多人。 1083 00:44:20,150 --> 00:44:21,560 对某些人的旧帽子。 1084 00:44:21,560 --> 00:44:24,930 因此,让我们倒带只是一瞬间,看看我们是如何走到 1085 00:44:24,930 --> 00:44:29,350 这个Hello World刚才输出。 1086 00:44:29,350 --> 00:44:31,780 >> 因此,首先,有本CS50电器。 1087 00:44:31,780 --> 00:44:34,270 同样,一块软件,问题设为1会告诉 1088 00:44:34,270 --> 00:44:36,610 如何下载它,下载它,点击什么 1089 00:44:36,610 --> 00:44:37,430 等等。 1090 00:44:37,430 --> 00:44:39,670 然后,一旦你遵循这些说明,你会能 1091 00:44:39,670 --> 00:44:42,840 将窗口最大化,和你的Mac或PC上看起来会 1092 00:44:42,840 --> 00:44:43,910 像这样的小东西。 1093 00:44:43,910 --> 00:44:47,170 一个黑色的背景下,一个在顶部,所有的主文件夹 1094 00:44:47,170 --> 00:44:49,850 您的文件中去,一个垃圾桶在左上角, 1095 00:44:49,850 --> 00:44:51,130 菜单的底部。 1096 00:44:51,130 --> 00:44:54,010 所以,再一次,精神,Mac OS或Windows非常相似, 1097 00:44:54,010 --> 00:44:56,040 即使它恰好是Linux。 1098 00:44:56,040 --> 00:44:58,120 所以,我们接下来做什么? 1099 00:44:58,120 --> 00:44:59,580 好,我们开始编写程序。 1100 00:44:59,580 --> 00:45:02,260 记得从上周表示,所有需要写一个 1101 00:45:02,260 --> 00:45:04,970 程序是一个简单的文本编辑器, 1102 00:45:04,970 --> 00:45:06,550 如记事本或文本。 1103 00:45:06,550 --> 00:45:08,360 坦率地说,你甚至可以使用Microsoft Word。 1104 00:45:08,360 --> 00:45:11,170 但糟糕的事情最终会发生,因为这是一个非常 1105 00:45:11,170 --> 00:45:13,930 严厉的解决方案写一个程序,再加上它会 1106 00:45:13,930 --> 00:45:15,400 它在错误的文件格式保存。 1107 00:45:15,400 --> 00:45:18,150 但它只是一个文本编辑器,文字处理软件,是所有的 1108 00:45:18,150 --> 00:45:19,390 需要写一个程序。 1109 00:45:19,390 --> 00:45:23,420 >> 因此,在CS50电器,我们可以这样做一个简单的方法。 1110 00:45:23,420 --> 00:45:25,580 我们只需点击这个图标在底部的左边。 1111 00:45:25,580 --> 00:45:28,790 再次,问题设置1劝你,这个,瞧 - 1112 00:45:28,790 --> 00:45:31,210 你这黑与白的界面,在这里我们可以开始 1113 00:45:31,210 --> 00:45:32,160 编写代码。 1114 00:45:32,160 --> 00:45:34,960 因此,让我们再次开始写一个超级简单的程序。 1115 00:45:34,960 --> 00:45:38,890 我要去文件,保存,我现在就打电话给 1116 00:45:38,890 --> 00:45:42,870 这一点,我们说,hello2.c。 1117 00:45:42,870 --> 00:45:45,410 我只是告诉它通过点击jharvard,把它 1118 00:45:45,410 --> 00:45:46,750 在其主目录,我真的不关心 1119 00:45:46,750 --> 00:45:47,980 这一个“。 1120 00:45:47,980 --> 00:45:49,090 然后保存。 1121 00:45:49,090 --> 00:45:50,880 我现在就可以开始编写我的程序。 1122 00:45:50,880 --> 00:45:53,560 我记得,我不得不写int 1123 00:45:53,560 --> 00:45:55,400 主要(无效)。 1124 00:45:55,400 --> 00:45:57,000 在左上角放大。 1125 00:45:57,000 --> 00:46:02,670 然后我想说的输出,走两头。 1126 00:46:02,670 --> 00:46:05,690 现在,一个新行,密切的报价,关闭 1127 00:46:05,690 --> 00:46:07,820 括号,分号。 1128 00:46:07,820 --> 00:46:10,560 ,然后我去到我的终端窗口,在这里 1129 00:46:10,560 --> 00:46:12,840 嵌入在gedit,只是为了方便。 1130 00:46:12,840 --> 00:46:15,200 我要继续前进,并写使招呼,但不 1131 00:46:15,200 --> 00:46:17,500 你好,仅hello2。 1132 00:46:17,500 --> 00:46:20,490 >> 所以,我的文件被称为hello2.c。我的文件,因此 1133 00:46:20,490 --> 00:46:23,510 应该被称为hello2,在这种情况下。 1134 00:46:23,510 --> 00:46:26,490 该死的,我做了什么错了吗? 1135 00:46:26,490 --> 00:46:29,490 好吧,让我清楚地省略了行,如果你还记得什么 1136 00:46:29,490 --> 00:46:31,020 以前的节目的样子。 1137 00:46:31,020 --> 00:46:32,480 但是让我们看看如果我们不能取笑这除了。 1138 00:46:32,480 --> 00:46:35,310 不幸的是,大多数人谁写的程序 1139 00:46:35,310 --> 00:46:38,820 我们写程序不简化了所有的东西。 1140 00:46:38,820 --> 00:46:41,520 因此,我们要种什么不很清楚掠过 1141 00:46:41,520 --> 00:46:44,050 这里说的,如果我们能弄清楚什么是错的。 1142 00:46:44,050 --> 00:46:46,700 的第一行说,隐式声明Ç 1143 00:46:46,700 --> 00:46:49,310 int类型的库函数printf。 1144 00:46:49,310 --> 00:46:51,210 OK,我明白了其中的一部分。 1145 00:46:51,210 --> 00:46:54,570 但它似乎是在暗指的事实,我使用printf的 1146 00:46:54,570 --> 00:46:55,700 错了,不知何故。 1147 00:46:55,700 --> 00:46:56,930 什么样的意义是什么错了吗? 1148 00:46:56,930 --> 00:46:59,970 我只是不教电脑,它是在一个文件中 1149 00:46:59,970 --> 00:47:01,420 被称为stdio.h中。 1150 00:47:01,420 --> 00:47:04,120 现在,我只需要记住现在printf是 1151 00:47:04,120 --> 00:47:06,540 在stdio.h中,确实有将是其他 1152 00:47:06,540 --> 00:47:08,900 在同一文件的功能,我们会习惯的。 1153 00:47:08,900 --> 00:47:12,490 >> 所以,现在让我继续前进,击中按Ctrl-L清除 1154 00:47:12,490 --> 00:47:16,050 离开,请重新hello2,瞧。 1155 00:47:16,050 --> 00:47:19,490 此命令再次,更复杂的,我们将解释 1156 00:47:19,490 --> 00:47:20,520 今天的目的。 1157 00:47:20,520 --> 00:47:23,570 但它没有运行铛,铛源代码和 1158 00:47:23,570 --> 00:47:24,870 吐出来的0和1。 1159 00:47:24,870 --> 00:47:28,610 在这种情况下,那些“0”和“1叫什么? 1160 00:47:28,610 --> 00:47:29,470 好了,目标代码。 1161 00:47:29,470 --> 00:47:32,210 和文件,它们是在被调用,因此, 1162 00:47:32,210 --> 00:47:33,820 hello2,在这种情况下。 1163 00:47:33,820 --> 00:47:37,040 因为我的文本文件hello2.c的,回车。 1164 00:47:37,040 --> 00:47:39,820 现在我有两个感叹号,感叹号 1165 00:47:39,820 --> 00:47:41,880 点,感叹号。 1166 00:47:41,880 --> 00:47:45,430 好,那么我们现在的能力得到字符串, 1167 00:47:45,430 --> 00:47:46,280 显然。 1168 00:47:46,280 --> 00:47:48,190 嗯,还有什么我们可以从用户那里获得吗? 1169 00:47:48,190 --> 00:47:51,010 >> 以及在的CS50库,还有其他的功能, 1170 00:47:51,010 --> 00:47:53,300 在这些前几天,要简化我们的生活。 1171 00:47:53,300 --> 00:47:56,350 GETCHAR,GetDouble,GetFloat,调用getInt, 1172 00:47:56,350 --> 00:47:57,290 GetLongLong是,GetString。 1173 00:47:57,290 --> 00:47:59,550 好吧,让我们这些第一次把她的最简单的。 1174 00:47:59,550 --> 00:48:01,430 GetString的字面意思做的。 1175 00:48:01,430 --> 00:48:04,210 它只是坐在那里,等待用户输入一些东西, 1176 00:48:04,210 --> 00:48:07,170 而只要我输入一些东西,然后按Enter键,它 1177 00:48:07,170 --> 00:48:08,860 不与价值的东西。 1178 00:48:08,860 --> 00:48:11,700 因此,让我们回到这个例子,看看到底是什么 1179 00:48:11,700 --> 00:48:12,950 GetString的在做什么。 1180 00:48:12,950 --> 00:48:17,445 让我去进取,不断开拓gedit中,hello.c的,并召回 1181 00:48:17,445 --> 00:48:20,590 右中场休息前,这是我们离开的地方。 1182 00:48:20,590 --> 00:48:23,240 >> 现在让我们捉弄,除了在一些更详细的。 1183 00:48:23,240 --> 00:48:27,190 因此,第6行,有两件事情 1184 00:48:27,190 --> 00:48:28,450 发生的时刻。 1185 00:48:28,450 --> 00:48:32,630 等号分离上半年和下半年。 1186 00:48:32,630 --> 00:48:34,670 因此,在等号的左边,我们 1187 00:48:34,670 --> 00:48:35,580 说字符串s。 1188 00:48:35,580 --> 00:48:37,580 然后,只是外行的话来讲,什么是字符串s 1189 00:48:37,580 --> 00:48:41,040 这样做,你觉得呢? 1190 00:48:41,040 --> 00:48:42,990 它创造了什么? 1191 00:48:42,990 --> 00:48:44,930 因此,它创建一个字符串称为s。 1192 00:48:44,930 --> 00:48:46,370 现在这究竟是什么意思? 1193 00:48:46,370 --> 00:48:51,540 那么,它预留空间的字符串称为s。 1194 00:48:51,540 --> 00:48:52,490 这是不完全正确。 1195 00:48:52,490 --> 00:48:53,120 这是什么做的吗? 1196 00:48:53,120 --> 00:48:55,400 好了电脑,你也知道,硬盘驱动器,这就是 1197 00:48:55,400 --> 00:48:56,300 您的文件存储。 1198 00:48:56,300 --> 00:48:59,100 电脑RAM,这就是程序加载 1199 00:48:59,100 --> 00:49:00,240 而它们正在运行。 1200 00:49:00,240 --> 00:49:02,470 所以,当你双击一个图标和Microsoft Word打开 1201 00:49:02,470 --> 00:49:06,380 时,Microsoft Word的运行,可以这么说,在RAM中,这是 1202 00:49:06,380 --> 00:49:08,160 您的计算机的电子零件。 1203 00:49:08,160 --> 00:49:10,660 而不是物理的,机械部分的纺纱,其中 1204 00:49:10,660 --> 00:49:12,640 数据通常存储长期的。 1205 00:49:12,640 --> 00:49:15,810 因此,字符串s中是相当多的,告诉电脑给我 1206 00:49:15,810 --> 00:49:18,150 足够的内存,以适应一个字符串。 1207 00:49:18,150 --> 00:49:20,450 现在这是一个有点过于简单化,因为 1208 00:49:20,450 --> 00:49:22,300 有多大的字符串又如何呢? 1209 00:49:22,300 --> 00:49:24,410 那么我们实际上不知道,所以在接下来的几周来 1210 00:49:24,410 --> 00:49:27,290 实际上,我们将拉了回来层是字符串, 1211 00:49:27,290 --> 00:49:28,510 我们会告诉你它到底是什么。 1212 00:49:28,510 --> 00:49:31,050 字符串,就目前而言,我们的世界是一个不错的简化。 1213 00:49:31,050 --> 00:49:35,700 但字符串s中声明了一个字符串称为s,现在。 1214 00:49:35,700 --> 00:49:36,520 声明一个字符串。 1215 00:49:36,520 --> 00:49:39,310 它保留了一定的空间,RAM为字符串,用户是 1216 00:49:39,310 --> 00:49:40,150 输入。 1217 00:49:40,150 --> 00:49:41,840 >> 现在,让我们来看看在正确的等号。 1218 00:49:41,840 --> 00:49:44,110 所以说getString()方法。 1219 00:49:44,110 --> 00:49:45,070 一个小的完整性检查。 1220 00:49:45,070 --> 00:49:47,940 一个事实,即有没有括号内 1221 00:49:47,940 --> 00:49:50,810 意味着什么GetString的呢? 1222 00:49:50,810 --> 00:49:52,180 它不带任何参数。 1223 00:49:52,180 --> 00:49:55,290 也就是说,你不能以任何方式影响其行为。 1224 00:49:55,290 --> 00:49:58,940 每次你使用它,它会得到一个字符串,仅此而已。 1225 00:49:58,940 --> 00:50:02,210 与此相反,输出,希望其行为不会 1226 00:50:02,210 --> 00:50:03,010 更改每一次。 1227 00:50:03,010 --> 00:50:05,230 否则,这是一个相当无用的打印功能,如果 1228 00:50:05,230 --> 00:50:06,480 做同样的事情。 1229 00:50:06,480 --> 00:50:07,970 如果它总是输出大卫的东西 1230 00:50:07,970 --> 00:50:09,500 所有的任意时间。 1231 00:50:09,500 --> 00:50:11,540 因此我们知道printf有一个说法是有道理的。 1232 00:50:11,540 --> 00:50:14,240 GetString的不真正需要的参数,因为我想 1233 00:50:14,240 --> 00:50:16,700 得到来自用户的字符串,它的用户,谁去 1234 00:50:16,700 --> 00:50:19,580 提供的活力,通过输入不同的字母 1235 00:50:19,580 --> 00:50:20,850 每次在键盘上。 1236 00:50:20,850 --> 00:50:23,140 >> 那么,是什么GetString的最终吗? 1237 00:50:23,140 --> 00:50:25,080 把它看成是这个黑色的小盒子。 1238 00:50:25,080 --> 00:50:29,340 这个黑盒子概不输入,但是当你的一声就 1239 00:50:29,340 --> 00:50:33,240 它,它吐出来的用户已键入的字符串 1240 00:50:33,240 --> 00:50:36,660 而事实上,有一个等号意味着需要 1241 00:50:36,660 --> 00:50:39,890 什么是吐了出来,并将其存储在正确的内 1242 00:50:39,890 --> 00:50:41,390 什么是在左边。 1243 00:50:41,390 --> 00:50:43,470 所以等号,但实际上并不意味着 1244 00:50:43,470 --> 00:50:46,490 平等,而技术上分配。 1245 00:50:46,490 --> 00:50:49,330 在右边的值,并把它放在 1246 00:50:49,330 --> 00:50:51,050 变量在左边。 1247 00:50:51,050 --> 00:50:52,820 所以,这一切的发生。 1248 00:50:52,820 --> 00:50:55,640 >> 现在,在第7行,我们调用printf。 1249 00:50:55,640 --> 00:50:58,170 所以printf的希望还是有点无聊了吧。 1250 00:50:58,170 --> 00:50:59,530 因此,格式化字符串打印。 1251 00:50:59,530 --> 00:51:00,440 什么样的字符串? 1252 00:51:00,440 --> 00:51:05,460 打印出“H-E-L-L-O%S 1253 00:51:05,460 --> 00:51:07,840 \ n“。 1254 00:51:07,840 --> 00:51:10,470 好,所以我想插件%s的吗? 1255 00:51:10,470 --> 00:51:12,960 从字面上看,无论是储存在s。 1256 00:51:12,960 --> 00:51:15,570 因此,在这种情况下,小的完整性检查,多少个参数 1257 00:51:15,570 --> 00:51:16,820 printf的? 1258 00:51:19,860 --> 00:51:21,110 好吧,我听到了一个。 1259 00:51:23,840 --> 00:51:26,330 我听说了。 1260 00:51:26,330 --> 00:51:27,730 二,我听见了两声​​。 1261 00:51:27,730 --> 00:51:29,920 如何约三个呢? 1262 00:51:29,920 --> 00:51:30,450 好了,三个? 1263 00:51:30,450 --> 00:51:30,930 优秀。 1264 00:51:30,930 --> 00:51:33,170 有三种可能的答案,其中只有一个是正确的。 1265 00:51:33,170 --> 00:51:36,390 所以论据再次影响一个函数的行为。 1266 00:51:36,390 --> 00:51:39,380 在过去,输出也只需要一个参数。 1267 00:51:39,380 --> 00:51:42,260 “你好世界”是一个参数。 1268 00:51:42,260 --> 00:51:45,190 然而,现在,这个逗号。 1269 00:51:45,190 --> 00:51:49,600 这个逗号以外报价/引文结束,这意味着 1270 00:51:49,600 --> 00:51:52,170 哎输出,来这里的第二个参数。 1271 00:51:52,170 --> 00:51:54,240 >> 所以在大多数编程语言中的逗号 1272 00:51:54,240 --> 00:51:57,300 独立的多个参数。 1273 00:51:57,300 --> 00:51:59,600 因此,这里的答案是肯定不是,因为 1274 00:51:59,600 --> 00:52:00,390 这是逗号。 1275 00:52:00,390 --> 00:52:03,680 因此,微创,输出显然是采取两个 1276 00:52:03,680 --> 00:52:04,940 参数这个时候。 1277 00:52:04,940 --> 00:52:07,050 但这里的机会,一个棘手的问题是什么 1278 00:52:07,050 --> 00:52:07,990 这个逗号呢? 1279 00:52:07,990 --> 00:52:11,260 这是否意味着,实际上有三个参数? 1280 00:52:11,260 --> 00:52:13,820 这样,这样,和这个。 1281 00:52:13,820 --> 00:52:18,820 因此,没有,因为这个逗号是里面的引号,这 1282 00:52:18,820 --> 00:52:20,890 这意味着,它实际上只是一个审美的英语。 1283 00:52:20,890 --> 00:52:23,180 它具有的数目无关 1284 00:52:23,180 --> 00:52:24,890 这个程序的参数。 1285 00:52:24,890 --> 00:52:27,670 因此,这个逗号是外面的双引号。 1286 00:52:27,670 --> 00:52:28,850 然后返回0。 1287 00:52:28,850 --> 00:52:30,980 现在让我们只是一个信念 1288 00:52:30,980 --> 00:52:34,460 今天,只知道,当功能都执行 1289 00:52:34,460 --> 00:52:37,950 行代码,他们通常会返回一定的价值。 1290 00:52:37,950 --> 00:52:42,010 在这种情况下,仅仅是因为主必须返回一个int, 1291 00:52:42,010 --> 00:52:44,320 这只是C语言的工作方式。 1292 00:52:44,320 --> 00:52:47,040 >> 所以,因为没有发生任何错误,感觉就像是这个计划的 1293 00:52:47,040 --> 00:52:49,960 很好,我只是硬编码在返回0。 1294 00:52:49,960 --> 00:52:52,980 但在相反的是,我写这篇文章的伪代码 1295 00:52:52,980 --> 00:52:55,020 现在,像约瑟一样,当我们做袜子 1296 00:52:55,020 --> 00:52:56,220 例如上周。 1297 00:52:56,220 --> 00:53:00,440 如果发生了错误 - 这是不实际的代码 - 去 1298 00:53:00,440 --> 00:53:06,570 错误,然后返回,比方说,1。 1299 00:53:06,570 --> 00:53:08,770 否则返回0。 1300 00:53:08,770 --> 00:53:10,070 因此,这是我们要去的地方与此。 1301 00:53:10,070 --> 00:53:12,090 这是不实际的C代码,只是伪代码。 1302 00:53:12,090 --> 00:53:14,010 但是,这是怎么了,你可能会返回 1303 00:53:14,010 --> 00:53:15,580 不同的可能值。 1304 00:53:15,580 --> 00:53:19,520 但现在,我只是要继续前进,返回0。 1305 00:53:19,520 --> 00:53:24,410 所有的权利,任何问题迄今在语法,功能, 1306 00:53:24,410 --> 00:53:25,000 或喜欢吗? 1307 00:53:25,000 --> 00:53:26,280 是啊,在后面。 1308 00:53:26,280 --> 00:53:27,530 >> 观众:[听不清] 1309 00:53:30,510 --> 00:53:32,210 DAVID马兰:你能不能说大声一点好吗? 1310 00:53:32,210 --> 00:53:34,325 为什么这个程序返回0,? 1311 00:53:34,325 --> 00:53:35,575 观众:[听不清] 1312 00:53:39,910 --> 00:53:43,450 DAVID马兰:哦,那是因为我懒,对不起。 1313 00:53:43,450 --> 00:53:48,290 没有良好的学术响应,返回0。 1314 00:53:48,290 --> 00:53:52,690 我可以种挽救这个,说技术上Ç,如果主 1315 00:53:52,690 --> 00:53:55,900 没有明确返回一个值,将返回0 1316 00:53:55,900 --> 00:53:57,730 自动为您。 1317 00:53:57,730 --> 00:54:00,290 这是真的,我不只是覆盖。 1318 00:54:00,290 --> 00:54:03,270 但是,我做了这种方式。 1319 00:54:03,270 --> 00:54:05,250 不是我的错比其他任何有趣的外卖。 1320 00:54:05,250 --> 00:54:06,170 是吗? 1321 00:54:06,170 --> 00:54:08,470 >> 听众:通常,当你键入的空隙,这意味着你 1322 00:54:08,470 --> 00:54:10,770 不返回值。 1323 00:54:10,770 --> 00:54:11,420 DAVID马兰:正确。 1324 00:54:11,420 --> 00:54:15,800 相反,如果你之前指定函数的名称, 1325 00:54:15,800 --> 00:54:18,590 例如在这里,无效的,那么该函数 1326 00:54:18,590 --> 00:54:20,480 不返回任何东西。 1327 00:54:20,480 --> 00:54:25,210 因此,我只想说,退货或什么都没有, 1328 00:54:25,210 --> 00:54:26,730 这将是一致的。 1329 00:54:26,730 --> 00:54:27,750 我们会回来。 1330 00:54:27,750 --> 00:54:31,030 仅供参考,学习的渔获之一 1331 00:54:31,030 --> 00:54:33,450 编程的世界中,有数以百计的书籍和 1332 00:54:33,450 --> 00:54:36,180 有数百个网站你都会 1333 00:54:36,180 --> 00:54:38,220 看到不同的语法在不同的书 1334 00:54:38,220 --> 00:54:40,220 由不同的人。 1335 00:54:40,220 --> 00:54:42,100 认识到,我们会尽我们最好的部分和讲座 1336 00:54:42,100 --> 00:54:42,960 一致的。 1337 00:54:42,960 --> 00:54:46,660 但有时你会看到冲突的语法。 1338 00:54:46,660 --> 00:54:48,540 因此,只要有疑问,就问我。 1339 00:54:48,540 --> 00:54:51,100 而在一般情况下,我们会照顾讲座和部分 1340 00:54:51,100 --> 00:54:53,710 几乎总是出现在正确的道路。 1341 00:54:53,710 --> 00:54:56,070 而且我几乎总是说,因为点的情况。 1342 00:54:56,070 --> 00:54:56,860 其他问题吗? 1343 00:54:56,860 --> 00:55:01,590 >> 观众:%s的外部设备存在吗? 1344 00:55:01,590 --> 00:55:03,710 DAVID马兰:%s的存在以外的设备吗? 1345 00:55:03,710 --> 00:55:04,180 是。 1346 00:55:04,180 --> 00:55:07,760 因此,%s有做C.事实上,我们使用它在 1347 00:55:07,760 --> 00:55:10,290 设备从根本上有什么做的 1348 00:55:10,290 --> 00:55:12,080 我们所使用的语言的功能。 1349 00:55:12,080 --> 00:55:15,990 事实上,上周,当我们用我的Mac上,我写了 1350 00:55:15,990 --> 00:55:17,160 我的Mac上的C代码。 1351 00:55:17,160 --> 00:55:20,020 我可以用%s,在我的Mac,你可以使用它 1352 00:55:20,020 --> 00:55:22,400 您的Windows电脑,如果你安装一个编译器,如 1353 00:55:22,400 --> 00:55:24,070 微软Visual Studio中。 1354 00:55:24,070 --> 00:55:24,990 因此,%s的。 1355 00:55:24,990 --> 00:55:27,860 我们的一切做今天这个窗口里面, 1356 00:55:27,860 --> 00:55:31,140 C.根本没有做的做 1357 00:55:31,140 --> 00:55:33,450 操作系统的问题。 1358 00:55:33,450 --> 00:55:35,900 与此相反,黑色和白色的终端窗口 - 当 1359 00:55:35,900 --> 00:55:40,160 我输入ls之类的东西,RM,和CD - 1360 00:55:40,160 --> 00:55:42,020 具有与操作系统和 1361 00:55:42,020 --> 00:55:43,562 浏览左右。 1362 00:55:43,562 --> 00:55:44,546 是啊。 1363 00:55:44,546 --> 00:55:46,520 观众:我指的是库,的CS50库。 1364 00:55:46,520 --> 00:55:49,960 DAVID马兰:好了,所以,如果你的意思是关键字串,即 1365 00:55:49,960 --> 00:55:52,460 只存在于的CS50库,正确的。 1366 00:55:52,460 --> 00:55:55,350 在C本身不存在的,而事实上,在一对夫妇 1367 00:55:55,350 --> 00:55:58,220 的几周内,我们将扔掉CS50库,并开始 1368 00:55:58,220 --> 00:56:02,290 从头开始自己做的事情,可以这么说。 1369 00:56:02,290 --> 00:56:02,940 其他问题吗? 1370 00:56:02,940 --> 00:56:04,577 是啊。 1371 00:56:04,577 --> 00:56:05,827 >> 观众:[听不清] 1372 00:56:09,470 --> 00:56:10,160 DAVID马兰:好问题。 1373 00:56:10,160 --> 00:56:11,720 的命令区分大小写? 1374 00:56:11,720 --> 00:56:13,710 让我在这里进行了区分。 1375 00:56:13,710 --> 00:56:15,840 所以命令是一般的事情,我们会写在 1376 00:56:15,840 --> 00:56:17,940 底部的窗口,在终端窗口中。 1377 00:56:17,940 --> 00:56:21,770 在这里的任何陈述或C代码。 1378 00:56:21,770 --> 00:56:24,490 但在这两种情况下,得到的答案是一样的,是的。 1379 00:56:24,490 --> 00:56:27,800 这两种环境的C代码在顶部和 1380 00:56:27,800 --> 00:56:29,910 在操作系统的命令行 1381 00:56:29,910 --> 00:56:31,440 底部,是区分大小写的。 1382 00:56:31,440 --> 00:56:33,830 所以,你必须利用GetString的与资本ĝ, 1383 00:56:33,830 --> 00:56:37,050 资本S.您必须编写printf全部小写。 1384 00:56:37,050 --> 00:56:39,520 您必须输入ls全部用小写。 1385 00:56:39,520 --> 00:56:43,260 因此,在几乎所有的情况下,这个学期开始,情况将在 1386 00:56:43,260 --> 00:56:44,820 其实,不管。 1387 00:56:44,820 --> 00:56:46,148 是。 1388 00:56:46,148 --> 00:56:47,398 >> 观众:[听不清] 1389 00:56:54,770 --> 00:56:56,480 DAVID马兰:啊,这样好吗,如果我们有一个文件 1390 00:56:56,480 --> 00:56:57,840 名为hello.d的。 1391 00:56:57,840 --> 00:57:00,090 因此,原来D是一种编程语言。 1392 00:57:00,090 --> 00:57:02,790 因此,在某些情况下,我们其实可以写一个程序, 1393 00:57:02,790 --> 00:57:06,190 该文件,并以这种方式编译。 1394 00:57:06,190 --> 00:57:09,090 我们就可以了,其实,简单的答案是,我不知道。 1395 00:57:09,090 --> 00:57:10,440 因此,我们要做到这一点。 1396 00:57:10,440 --> 00:57:13,040 让我继续前进,创建一个新的文件。 1397 00:57:13,040 --> 00:57:15,580 和自旋这里,说实话在一般情况下,每当有任何疑问 1398 00:57:15,580 --> 00:57:18,130 这学期,你有你的设备或计算机 1399 00:57:18,130 --> 00:57:20,030 打开,继续前进,尝试的东西。 1400 00:57:20,030 --> 00:57:23,740 所以,我要保存一个文件名为hello.d的。 1401 00:57:23,740 --> 00:57:25,010 保存这一点。 1402 00:57:25,010 --> 00:57:29,070 而且我要运行make招呼输入的。 1403 00:57:29,070 --> 00:57:31,660 它似乎可以推断,C是更容易 1404 00:57:31,660 --> 00:57:35,920 比d,在这种情况下。 1405 00:57:35,920 --> 00:57:38,046 其他的问题。 1406 00:57:38,046 --> 00:57:40,456 是啊。 1407 00:57:40,456 --> 00:57:41,706 >> 观众:[听不清] 1408 00:57:48,170 --> 00:57:49,837 DAVID马兰:好吧,说一次。 1409 00:57:49,837 --> 00:57:51,087 观众:[听不清] 1410 00:58:04,250 --> 00:58:05,780 DAVID马兰:你将如何去诊断,或 1411 00:58:05,780 --> 00:58:06,380 故障排除了吗? 1412 00:58:06,380 --> 00:58:08,800 因此,最有可能的,因为他们是不同的语言, 1413 00:58:08,800 --> 00:58:10,280 最有可能的是,你会得到一个完全 1414 00:58:10,280 --> 00:58:11,580 不同的程序输出。 1415 00:58:11,580 --> 00:58:14,140 你会得到完全不同的错误信息。 1416 00:58:14,140 --> 00:58:16,750 也只是在设计方面,它会可以说是一个 1417 00:58:16,750 --> 00:58:19,140 糟糕的设计决定写两个不同的 1418 00:58:19,140 --> 00:58:21,510 语言几乎相同名称的文件, 1419 00:58:21,510 --> 00:58:23,000 使用相同的目录, 1420 00:58:23,000 --> 00:58:24,550 自动工具,如使。 1421 00:58:24,550 --> 00:58:27,750 所以我也可以推回,并说在15年这样做, 1422 00:58:27,750 --> 00:58:29,190 从来没有这样的错误。 1423 00:58:29,190 --> 00:58:30,030 可能发生。 1424 00:58:30,030 --> 00:58:31,190 但只是不同的,我觉得, 1425 00:58:31,190 --> 00:58:33,180 到位的后勤辩护。 1426 00:58:33,180 --> 00:58:35,440 加上错误消息会随之而来,这将 1427 00:58:35,440 --> 00:58:37,260 最终揭示的问题是什么。 1428 00:58:37,260 --> 00:58:39,120 但一个可能的角落的情况。 1429 00:58:39,120 --> 00:58:41,730 >> 好吧,让我们介绍的只是一对夫妇的其他 1430 00:58:41,730 --> 00:58:45,600 功能现在在这里,所以我们就可以开始建立更多 1431 00:58:45,600 --> 00:58:47,140 更复杂的程序。 1432 00:58:47,140 --> 00:58:49,000 因此,首先,数学。 1433 00:58:49,000 --> 00:58:51,520 因此,数学运算的例子只是一种很容易在第一周。 1434 00:58:51,520 --> 00:58:53,560 这是不是说,所有的编程是 1435 00:58:53,560 --> 00:58:54,390 数学。 1436 00:58:54,390 --> 00:58:57,890 当然,理解的各种功能 1437 00:58:57,890 --> 00:58:59,610 数学,代数尤其是 1438 00:58:59,610 --> 00:59:00,330 相当与此有关。 1439 00:59:00,330 --> 00:59:03,010 在较高的水平CS类,线性代数, 1440 00:59:03,010 --> 00:59:03,920 演算,和等。 1441 00:59:03,920 --> 00:59:06,500 但要意识到什么,我们就做这学期减少 1442 00:59:06,500 --> 00:59:09,230 数学,肯定不会算术,本身,但真正 1443 00:59:09,230 --> 00:59:11,570 只是逻辑和缜密的思维。 1444 00:59:11,570 --> 00:59:14,310 所以,这种联系是计算机科学早已有, 1445 00:59:14,310 --> 00:59:16,570 尤其是在高中阶段,数学,是一个 1446 00:59:16,570 --> 00:59:17,370 有点误导。 1447 00:59:17,370 --> 00:59:20,090 因为大多数的程序,我们会写,真的, 1448 00:59:20,090 --> 00:59:23,290 排序更高的层次,集中精力解决问题, 1449 00:59:23,290 --> 00:59:26,410 当然,可能会使用一些加法,减法,以及各种 1450 00:59:26,410 --> 00:59:28,650 数学公式或等 1451 00:59:28,650 --> 00:59:30,860 但在一天结束的时候,它是关于思考,而不是 1452 00:59:30,860 --> 00:59:33,240 你可能会做的像TI实施 1453 00:59:33,240 --> 00:59:35,050 在高中的计算机。 1454 00:59:35,050 --> 00:59:38,410 >> 因此,随着中说,让我们现在做的这些东西 1455 00:59:38,410 --> 00:59:40,980 数学运算符不存在,因此,我们可以访问 1456 00:59:40,980 --> 00:59:43,950 在一些的相关方面的编程,或在 1457 00:59:43,950 --> 00:59:48,930 这种情况下,所以,CS50库的建议, 1458 00:59:48,930 --> 00:59:51,520 今天,我们只是使用GetString - 在某一时刻 1459 00:59:51,520 --> 00:59:52,940 也许另外一个功能 - 1460 00:59:52,940 --> 00:59:55,380 但也有不同类型的数据在一台计算机。 1461 00:59:55,380 --> 00:59:58,550 在一天结束的时候,计算机只认识0和1。 1462 00:59:58,550 --> 01:00:01,880 但记得,上周我们谈到的二进位制 1463 01:00:01,880 --> 01:00:05,000 在代表数字,比如数字0,1,和2, 1464 01:00:05,000 --> 01:00:07,480 一路多达8个,在Nate的视频。 1465 01:00:07,480 --> 01:00:08,840 然后,我们可以算高得多,因为我们 1466 01:00:08,840 --> 01:00:10,000 这里舞台上。 1467 01:00:10,000 --> 01:00:15,660 但是,如果你想不只是代表数字,但字母, 1468 01:00:15,660 --> 01:00:18,240 我们,人类必须拿出一些任意 1469 01:00:18,240 --> 01:00:21,180 公约,即如果在一天结束的时候,我的电脑 1470 01:00:21,180 --> 01:00:24,260 是来表示0和1,以及我们最好的能力 1471 01:00:24,260 --> 01:00:27,990 启动标准化模式0和1代表 1472 01:00:27,990 --> 01:00:28,800 不同的事情。 1473 01:00:28,800 --> 01:00:32,370 0和1的模式,代表字母a。 1474 01:00:32,370 --> 01:00:34,840 模式0和1代表的字母z。 1475 01:00:34,840 --> 01:00:37,600 模式0和1,代表颜色为蓝色,或 1476 01:00:37,600 --> 01:00:38,600 红色,或等。 1477 01:00:38,600 --> 01:00:42,360 我们需要利用所有这些0和1来表达我们的 1478 01:00:42,360 --> 01:00:45,140 不同的情况下,以不同的方式不 1479 01:00:45,140 --> 01:00:46,470 一定数值。 1480 01:00:46,470 --> 01:00:51,150 >> 因此,在代表性方面,C有不同的数据类型, 1481 01:00:51,150 --> 01:00:52,550 我们已经看到了其中的一个为止。 1482 01:00:52,550 --> 01:00:54,940 我们看到int,而屏幕上没有注意什么 1483 01:00:54,940 --> 01:00:56,140 现在的问题是字符串。 1484 01:00:56,140 --> 01:00:58,550 事实上,串不存在的C.再次,这是一个 1485 01:00:58,550 --> 01:01:00,610 简化我们提出第一 1486 01:01:00,610 --> 01:01:01,570 几个星期。 1487 01:01:01,570 --> 01:01:03,770 一个char是一个单独的字符。 1488 01:01:03,770 --> 01:01:07,050 一个浮点数是实数,小数点和数字, 1489 01:01:07,050 --> 01:01:09,066 它的左侧和右侧。 1490 01:01:09,066 --> 01:01:16,040 双是什么,对于那些用回之前的背景? 1491 01:01:16,040 --> 01:01:19,720 因此,一个双两倍的东西。 1492 01:01:19,720 --> 01:01:21,240 添加两次尽可能多的精度。 1493 01:01:21,240 --> 01:01:22,440 所以,这是什么意思呢? 1494 01:01:22,440 --> 01:01:26,090 因此,在这种情况下,世界上有样的标准化 1495 01:01:26,090 --> 01:01:27,960 多少位被用来表示 1496 01:01:27,960 --> 01:01:29,160 这些东西。 1497 01:01:29,160 --> 01:01:31,590 所以,如果你看过Nate的的ASCII视频已经为部分 1498 01:01:31,590 --> 01:01:36,170 的pset 0,本周晚些时候你会,你可能会知道 1499 01:01:36,170 --> 01:01:37,450 该ASCII - 1500 01:01:37,450 --> 01:01:38,610 字符表示 - 1501 01:01:38,610 --> 01:01:40,670 使用多少位? 1502 01:01:40,670 --> 01:01:43,410 你甚至可能还记得上周我们演示如何 1503 01:01:43,410 --> 01:01:45,500 很多人在舞台上。 1504 01:01:45,500 --> 01:01:46,840 所以,通常为7或8,。 1505 01:01:46,840 --> 01:01:49,230 所以一般是8个,而且也称为扩展 1506 01:01:49,230 --> 01:01:51,240 ASCII使用所有8位,而不是7。 1507 01:01:51,240 --> 01:01:54,710 但在一般情况下,我们谈2的幂,所以在这种情况下,8。 1508 01:01:54,710 --> 01:01:58,900 因此,编程语言中的一个字符一般是8位。 1509 01:01:58,900 --> 01:02:02,550 因此,一个int通常是32位。 1510 01:02:02,550 --> 01:02:04,810 一个浮动通常是32位。 1511 01:02:04,810 --> 01:02:08,060 双64位。 1512 01:02:08,060 --> 01:02:08,870 这是什么意思呢? 1513 01:02:08,870 --> 01:02:11,500 这意味着你可以代表更大的数字,或在案件 1514 01:02:11,500 --> 01:02:15,490 实数,你可以有更多的号码后, 1515 01:02:15,490 --> 01:02:16,240 小数位。 1516 01:02:16,240 --> 01:02:18,980 很多更精确,在这种情况下。 1517 01:02:18,980 --> 01:02:21,780 现在不幸的是,很长很长的名字命名。 1518 01:02:21,780 --> 01:02:24,340 所以这是一个int,它是32位的。 1519 01:02:24,340 --> 01:02:29,800 是一个长期的,不,32位。 1520 01:02:29,800 --> 01:02:32,610 很长很长,这是64位。 1521 01:02:32,610 --> 01:02:34,830 但是其中一些是上下文相关的,它取决于 1522 01:02:34,830 --> 01:02:36,190 你有什么样的电脑。 1523 01:02:36,190 --> 01:02:40,510 因此,在一般情况下,我们将指定一个作业或测验中时 1524 01:02:40,510 --> 01:02:41,180 它实际上很重要。 1525 01:02:41,180 --> 01:02:43,080 但问题是,有所有这些不同的 1526 01:02:43,080 --> 01:02:44,250 表示在这里。 1527 01:02:44,250 --> 01:02:45,950 >> 因此,让的潜入程序。 1528 01:02:45,950 --> 01:02:48,300 而不是写一个从无到有,让我先走 1529 01:02:48,300 --> 01:02:50,940 从今天的源代码开放 - 所有这一切是 1530 01:02:50,940 --> 01:02:54,980 在线 - 如果你想在网上传播,修改或回报 1531 01:02:54,980 --> 01:02:57,120 周三在您的计算机上的设备,指示 1532 01:02:57,120 --> 01:02:59,160 将课程的网页上的链接。 1533 01:02:59,160 --> 01:03:00,830 这是一个超级简单的程序。 1534 01:03:00,830 --> 01:03:02,520 但它有一点点新的东西在上面, 1535 01:03:02,520 --> 01:03:03,650 我们以前是没有的。 1536 01:03:03,650 --> 01:03:05,800 一大堆的蓝线的文字。 1537 01:03:05,800 --> 01:03:08,410 因此,这些蓝线代表的意见。 1538 01:03:08,410 --> 01:03:10,620 因此,它是非常有用的程序,能够写 1539 01:03:10,620 --> 01:03:13,160 一些评论对自己或同事,或朋友,或 1540 01:03:13,160 --> 01:03:15,700 教学研究员,诸如此类的描述发生了什么事在 1541 01:03:15,700 --> 01:03:18,500 这个文件,但是什么都没有做的C代码本身。 1542 01:03:18,500 --> 01:03:20,860 没事做的程序功能,它只是 1543 01:03:20,860 --> 01:03:21,760 美学。 1544 01:03:21,760 --> 01:03:24,580 所以,你的方式做这在C通常是你开始 1545 01:03:24,580 --> 01:03:29,860 / *,您的评论结束您的宝贵意见 1546 01:03:29,860 --> 01:03:31,270 * /。 1547 01:03:31,270 --> 01:03:34,140 而如果你是真正的肛门,像画样的图片, 1548 01:03:34,140 --> 01:03:35,870 然后你把一大堆的明星,你会做一个 1549 01:03:35,870 --> 01:03:36,970 像这样的小盒子。 1550 01:03:36,970 --> 01:03:37,990 但这些都不重要了。 1551 01:03:37,990 --> 01:03:40,230 唯一重要的是第一个 1552 01:03:40,230 --> 01:03:41,620 最后。 1553 01:03:41,620 --> 01:03:43,820 这是什么所谓的多行注释。 1554 01:03:43,820 --> 01:03:46,610 而且这只是一个人的惯例经常做的星星和箱 1555 01:03:46,610 --> 01:03:48,420 在这样的事情,如果你有很多的空闲时间。 1556 01:03:48,420 --> 01:03:51,550 >> 所以你已经写了一些意见后,一般来 1557 01:03:51,550 --> 01:03:53,160 实际胆量的方案。 1558 01:03:53,160 --> 01:03:55,630 下面是我们所熟悉的#包括的。 1559 01:03:55,630 --> 01:04:00,410 而就快,这是必要的,没有必要? 1560 01:04:00,410 --> 01:04:02,860 观众:必要的。 1561 01:04:02,860 --> 01:04:04,390 DAVID马兰:所以它实际上是没有必要的。 1562 01:04:04,390 --> 01:04:07,070 那么,为什么,不过,它没有必要? 1563 01:04:07,070 --> 01:04:08,170 因此,有没有printf的。 1564 01:04:08,170 --> 01:04:08,510 的确如此。 1565 01:04:08,510 --> 01:04:10,470 我们正在做的这个计划是数学。 1566 01:04:10,470 --> 01:04:11,640 所以,其实我可以删除它。 1567 01:04:11,640 --> 01:04:14,330 所以,你并不总是有包括什么 1568 01:04:14,330 --> 01:04:15,420 的顶部的一个程序。 1569 01:04:15,420 --> 01:04:17,020 >> 因此,让我们简化这一点。 1570 01:04:17,020 --> 01:04:18,650 现在请大家注意,这是什么程序。 1571 01:04:18,650 --> 01:04:19,920 没有太多的兴趣。 1572 01:04:19,920 --> 01:04:21,410 X = 1。 1573 01:04:21,410 --> 01:04:22,550 那么,这是什么做的? 1574 01:04:22,550 --> 01:04:25,130 好了,回想起从之前的心理模型。 1575 01:04:25,130 --> 01:04:27,500 这个表达式的左边做什么? 1576 01:04:31,440 --> 01:04:32,830 创建一个整数的空间。 1577 01:04:32,830 --> 01:04:33,930 因此,空间有多大? 1578 01:04:33,930 --> 01:04:36,980 好了,我们碰巧知道现在这是32位。 1579 01:04:36,980 --> 01:04:40,070 在此之前,字符串是技术上32位,但更多的 1580 01:04:40,070 --> 01:04:40,950 在未来。 1581 01:04:40,950 --> 01:04:42,240 但是,一个int是32位。 1582 01:04:42,240 --> 01:04:45,590 所以这个表达式左边,诠释x只是说:哎 1583 01:04:45,590 --> 01:04:48,490 操作系统,给我32位的RAM - 1584 01:04:48,490 --> 01:04:50,450 否则被称为4字节的RAM - 1585 01:04:50,450 --> 01:04:53,930 所以,我可以把在这个空间中的一个整数。 1586 01:04:53,930 --> 01:04:55,330 你想要什么整数放? 1587 01:04:55,330 --> 01:04:56,640 那么,就数1。 1588 01:04:56,640 --> 01:04:59,530 诠释y得2,完全一样的东西,即使 1589 01:04:59,530 --> 01:05:02,160 数较大,其规模。 1590 01:05:02,160 --> 01:05:04,790 数字本身仍然只有32位。 1591 01:05:04,790 --> 01:05:06,520 它只是的比特的图案是不同的 1592 01:05:06,520 --> 01:05:08,260 代表1比2。 1593 01:05:08,260 --> 01:05:11,980 INT z现在说再给我一次32位,把它Ž,并把 1594 01:05:11,980 --> 01:05:14,210 总和1和2在那里。 1595 01:05:14,210 --> 01:05:18,050 所以,现在z是大概存储的值是3, 1596 01:05:18,050 --> 01:05:19,360 然后返回0。 1597 01:05:19,360 --> 01:05:23,020 >> 现在这个程序,它是做什么好玩的东西吗? 1598 01:05:23,020 --> 01:05:26,170 因此,它实际上并没有做什么有趣的事,在任何 1599 01:05:26,170 --> 01:05:28,450 有道理的,因为为什么呢?这是做一些数学。 1600 01:05:28,450 --> 01:05:30,590 但它不是返回答案,正确的。 1601 01:05:30,590 --> 01:05:31,790 它返回0。 1602 01:05:31,790 --> 01:05:33,440 这不是印刷的答案。 1603 01:05:33,440 --> 01:05:35,760 因此,这个方案基本上是毫无价值的,因为它 1604 01:05:35,760 --> 01:05:36,350 代表现在。 1605 01:05:36,350 --> 01:05:37,220 这是做了一些工作。 1606 01:05:37,220 --> 01:05:39,530 要采取一些秒数,或微秒,到 1607 01:05:39,530 --> 01:05:41,510 运行,但它实际上没有做任何事情 1608 01:05:41,510 --> 01:05:42,770 用于人类。 1609 01:05:42,770 --> 01:05:46,810 >> 因此,让我们其实现在打开MATH2,其实我现在 1610 01:05:46,810 --> 01:05:48,250 打印结果。 1611 01:05:48,250 --> 01:05:51,260 因此,这也可以推断,从我们前面的例子。 1612 01:05:51,260 --> 01:05:54,320 如果我想要做一些简单的数学,X = 1,Y 1613 01:05:54,320 --> 01:05:56,820 = 2。 z是1加2。 1614 01:05:56,820 --> 01:05:59,240 这是怎么回事打印出明显吗? 1615 01:05:59,240 --> 01:06:00,120 短短3。 1616 01:06:00,120 --> 01:06:01,590 因此,快速完整性检查。 1617 01:06:01,590 --> 01:06:03,830 让我进入这个目录。 1618 01:06:03,830 --> 01:06:06,480 因此,CD source1m。 1619 01:06:06,480 --> 01:06:09,370 让我继续键入make MATH2的。 1620 01:06:09,370 --> 01:06:11,510 任何错误消息出来了,所以让我运行 - 1621 01:06:11,510 --> 01:06:14,800 a.out的,让我运行MATH2。输入。 1622 01:06:14,800 --> 01:06:16,750 而事实上,它打印出来。 1623 01:06:16,750 --> 01:06:18,460 那么让我们来看看一个变种,这种。 1624 01:06:18,460 --> 01:06:23,870 在math3.c中,我们现在有这样的例子。 1625 01:06:23,870 --> 01:06:26,540 >> 因此,这是一种有趣的。 1626 01:06:26,540 --> 01:06:32,000 因此,在这里,答案是会得到1除以10, 1627 01:06:32,000 --> 01:06:33,910 发现我已经宣布它为float。 1628 01:06:33,910 --> 01:06:35,200 为什么我希望它是一个浮动? 1629 01:06:35,200 --> 01:06:36,110 那么,它的一小部分。 1630 01:06:36,110 --> 01:06:37,140 这将是一个实数。 1631 01:06:37,140 --> 01:06:40,970 因此,它的将是0.1,希望 - 10%,在这种情况下。 1632 01:06:40,970 --> 01:06:42,610 什么然后,我想打印出来吗? 1633 01:06:42,610 --> 01:06:43,440 那么,这个答案。 1634 01:06:43,440 --> 01:06:44,760 好吧,让我们的捉弄这些除了第一。 1635 01:06:44,760 --> 01:06:47,020 因此,在左侧声明 1636 01:06:47,020 --> 01:06:49,410 浮动,把它回答。 1637 01:06:49,410 --> 01:06:52,280 在右手边,1除以10,并把 1638 01:06:52,280 --> 01:06:54,370 回答变量的内侧。 1639 01:06:54,370 --> 01:06:56,410 现在,这条线看起来多了几分神秘。 1640 01:06:56,410 --> 01:06:59,440 但是请注意,一些熟悉的功能。 %在这里的意思而来的,是 1641 01:06:59,440 --> 01:07:00,490 占位符。 1642 01:07:00,490 --> 01:07:03,230 f表示这里是一个浮点值,只有一个真正的 1643 01:07:03,230 --> 01:07:05,490 数,带小数点的东西。 1644 01:07:05,490 --> 01:07:07,330 0.2意味着什么? 1645 01:07:07,330 --> 01:07:10,740 任何人都知道,从以往的经验吗? 1646 01:07:10,740 --> 01:07:12,010 小数点后两位。 1647 01:07:12,010 --> 01:07:14,050 因此,我们没有看到这之前,但它只是一种方式 1648 01:07:14,050 --> 01:07:16,360 行使更多的控制权printf和 1649 01:07:16,360 --> 01:07:20,840 说不要给我小数点后的30分, 1650 01:07:20,840 --> 01:07:22,490 而不是给我2。 1651 01:07:22,490 --> 01:07:23,960 >> 然后让我们继续前进并运行此。 1652 01:07:23,960 --> 01:07:30,160 因此,数学3,现在让我跑数学3,输入。 1653 01:07:30,160 --> 01:07:34,630 这是不正确的。 1654 01:07:34,630 --> 01:07:37,390 我们似乎遇到我们的第一个真正的错误。 1655 01:07:37,390 --> 01:07:39,400 好吧,也许我只是没有足够接近。 1656 01:07:39,400 --> 01:07:41,960 因此,让我在这里,让我把十进制的20 1657 01:07:41,960 --> 01:07:43,300 点的地方。 1658 01:07:43,300 --> 01:07:47,950 让我编,使math3运行。 1659 01:07:47,950 --> 01:07:50,960 相当肯定除以10不为0。 1660 01:07:50,960 --> 01:07:54,270 所以,这是怎么回事呢? 1661 01:07:54,270 --> 01:07:56,740 好吧,所以其实也没有做这个。 1662 01:07:56,740 --> 01:07:57,600 这是一个很好的想法。 1663 01:07:57,600 --> 01:07:59,140 这是真的只是一个巧合 1664 01:07:59,140 --> 01:08:00,220 我们这样做。 1665 01:08:00,220 --> 01:08:02,010 但只是为了证明这不是它,我会 1666 01:08:02,010 --> 01:08:03,160 返回随机的东西。 1667 01:08:03,160 --> 01:08:05,160 不这样做,在家里,因为它只是错误的。 1668 01:08:05,160 --> 01:08:08,000 但是,math3,让我运行它。 1669 01:08:08,000 --> 01:08:10,690 所以,做什么我回无关,只有做 1670 01:08:10,690 --> 01:08:11,940 与什么我打印。 1671 01:08:11,940 --> 01:08:14,150 但我听说了这里。 1672 01:08:14,150 --> 01:08:15,270 什么? 1673 01:08:15,270 --> 01:08:17,524 观众:所以,我们需要写的号码 1674 01:08:17,524 --> 01:08:19,680 该司 - 1675 01:08:19,680 --> 01:08:20,319 >> DAVID马兰:好非常好。 1676 01:08:20,319 --> 01:08:22,810 因此,我们需要写的号码参与 1677 01:08:22,810 --> 01:08:25,979 师在这里浮点值本身。 1678 01:08:25,979 --> 01:08:29,359 因此,这里的问题是像以前一样:C,有很多 1679 01:08:29,359 --> 01:08:31,819 语言,有不同的数据类型。 1680 01:08:31,819 --> 01:08:34,600 这些数据类型,例如,这些在这里。 1681 01:08:34,600 --> 01:08:37,430 和数据类型的问题在这里,当我键入1,然后我 1682 01:08:37,430 --> 01:08:40,870 10型,可能是什么样的数据类型吗? 1683 01:08:40,870 --> 01:08:42,170 因此,它可能是一个整数,对吧? 1684 01:08:42,170 --> 01:08:44,149 这绝对不是一个float,因为没有小数 1685 01:08:44,149 --> 01:08:45,460 点或类似的东西。 1686 01:08:45,460 --> 01:08:48,270 所以,真的,我有一个int除以一个int。 1687 01:08:48,270 --> 01:08:52,160 >> 因此,有趣的是数学和计算机是 1688 01:08:52,160 --> 01:08:54,840 如果你正在做使用整数除法 - 1689 01:08:54,840 --> 01:08:57,310 1除以10,是0.1。 1690 01:08:57,310 --> 01:09:01,420 然而,当你一个整数除以一个整数, 1691 01:09:01,420 --> 01:09:06,859 答案也仅仅是因为,现在是一个整数。 1692 01:09:06,859 --> 01:09:08,630 有什么含义呢? 1693 01:09:08,630 --> 01:09:13,640 好吧,如果答案是1除以10等于0.1, 1694 01:09:13,640 --> 01:09:15,680 在计算机要做的就是,我不知道如何 1695 01:09:15,680 --> 01:09:19,270 代表0.1,因为这是一个浮点值,而不是 1696 01:09:19,270 --> 01:09:21,910 整数,它是要砍掉之后的所有 1697 01:09:21,910 --> 01:09:27,470 只显示小数点和0开头。 1698 01:09:27,470 --> 01:09:29,540 而事实上,它的印刷作为一个浮点 1699 01:09:29,540 --> 01:09:31,200 价值,它只是一个审美的东西。 1700 01:09:31,200 --> 01:09:34,279 这是因为我强迫电脑打印这是一个 1701 01:09:34,279 --> 01:09:35,229 浮点值。 1702 01:09:35,229 --> 01:09:37,720 事实上,我已经声明为float,但数学是 1703 01:09:37,720 --> 01:09:39,010 发生在这里。 1704 01:09:39,010 --> 01:09:41,859 >> 因此,让我在一个相当简单的方法解决这个问题。 1705 01:09:41,859 --> 01:09:45,250 我为什么不只是做10.0和1.0,虽然 1706 01:09:45,250 --> 01:09:47,609 技术上,我可以逃脱,只是在做其中的一个。 1707 01:09:47,609 --> 01:09:50,630 现在,让我继续,并math3的。 1708 01:09:50,630 --> 01:09:56,350 让我去前面,现在运行math3,输入。 1709 01:09:56,350 --> 01:09:57,500 而现在,男孩哦。 1710 01:09:57,500 --> 01:10:00,050 现在我们有一个完全新的问题。 1711 01:10:00,050 --> 01:10:05,600 因此,更好地权利;我们接近0.1,但显然是 1712 01:10:05,600 --> 01:10:06,240 错了吗? 1713 01:10:06,240 --> 01:10:08,260 除非我们已经对你说谎了多年,对不对? 1714 01:10:08,260 --> 01:10:13,660 1除以10,实际上是不太0.1,有什么 1715 01:10:13,660 --> 01:10:14,700 真的在这里吗? 1716 01:10:14,700 --> 01:10:16,420 那么你可以种原因,通过这个逻辑。 1717 01:10:16,420 --> 01:10:19,200 如果一台计算机只有有限数量的RAM开始 1718 01:10:19,200 --> 01:10:23,530 ,的确是一个计算机使用的是32位的 1719 01:10:23,530 --> 01:10:26,200 浮点值,按理说,一个 1720 01:10:26,200 --> 01:10:29,870 在这种情况下,有限数量的位,32是的,你可以 1721 01:10:29,870 --> 01:10:31,050 代表了很多东西。 1722 01:10:31,050 --> 01:10:33,220 它实际上是4个亿不同的值可以 1723 01:10:33,220 --> 01:10:38,040 代表32位,2到32,但它仍然是有限的。 1724 01:10:38,040 --> 01:10:40,730 因此,问题是有一个无限的个数的实 1725 01:10:40,730 --> 01:10:41,370 号,请右键。 1726 01:10:41,370 --> 01:10:43,560 如果你给我一个实数,我可以随时找到你 1727 01:10:43,560 --> 01:10:46,080 稍微大一点的,略少,只需要调整 1728 01:10:46,080 --> 01:10:47,970 小数点后的号码。 1729 01:10:47,970 --> 01:10:50,870 所以,如果你没有无限的数位, 1730 01:10:50,870 --> 01:10:52,940 不可能代表一个无限 1731 01:10:52,940 --> 01:10:54,800 实数的数量。 1732 01:10:54,800 --> 01:10:58,090 >> 因此,有电脑,这种固有的不精确性 1733 01:10:58,090 --> 01:11:00,930 这被绊倒了所有的时间,即使在最简单的 1734 01:11:00,930 --> 01:11:02,260 这样的程序。 1735 01:11:02,260 --> 01:11:05,640 而且在一些非常现实的世界问题。 1736 01:11:05,640 --> 01:11:07,790 事实上,让我们花一点时间来只是来看看 1737 01:11:07,790 --> 01:11:09,530 的事,其实在现实中发生。 1738 01:11:09,530 --> 01:11:11,620 我们要注意的第一对夫妇分钟,然后 1739 01:11:11,620 --> 01:11:13,270 我们将网上发布的链接。 1740 01:11:13,270 --> 01:11:16,700 但是,这是证明什么可以去错了,相当 1741 01:11:16,700 --> 01:11:19,680 坦率地说,在一个非常悲惨的方式时,这些东西都不是 1742 01:11:19,680 --> 01:11:23,870 赞赏或只是我们人类犯错误,当涉及到 1743 01:11:23,870 --> 01:11:26,792 这类现代计算机的实现细节。 1744 01:11:26,792 --> 01:11:27,284 >> [视频播放] 1745 01:11:27,284 --> 01:11:30,730 现在我们回到工程灾害对现代奇迹。 1746 01:11:30,730 --> 01:11:32,200 计算机。 1747 01:11:32,200 --> 01:11:34,920 我们都接受的往往是令人沮丧的问题 1748 01:11:34,920 --> 01:11:36,750 和他们一起去的。 1749 01:11:36,750 --> 01:11:40,690 错误,病毒,软件故障是小的价格 1750 01:11:40,690 --> 01:11:42,550 支付的便利。 1751 01:11:42,550 --> 01:11:45,170 但在高科技,高转速的军事和空间 1752 01:11:45,170 --> 01:11:48,450 程序的应用程序,可以最小的问题 1753 01:11:48,450 --> 01:11:52,220 放大成灾难。 1754 01:11:52,220 --> 01:11:56,780 1996年6月4日,科学家们准备推出一个无人 1755 01:11:56,780 --> 01:11:58,430 阿丽亚娜5型火箭。 1756 01:11:58,430 --> 01:12:00,750 它携带的科学卫星,旨在 1757 01:12:00,750 --> 01:12:03,580 如何建立精确的地球的磁场 1758 01:12:03,580 --> 01:12:06,900 与太阳风相互作用。 1759 01:12:06,900 --> 01:12:10,330 火箭是专为欧洲航天局和 1760 01:12:10,330 --> 01:12:13,450 升空,从法属圭亚那海岸的设施。 1761 01:12:13,450 --> 01:12:16,970 >> 在进入飞行约约37秒,他们第一次 1762 01:12:16,970 --> 01:12:19,700 发现了一些错误,喷嘴 1763 01:12:19,700 --> 01:12:21,590 旋转的方式,他们实在不应该。 1764 01:12:21,590 --> 01:12:25,020 约40秒,成飞,明确了车辆 1765 01:12:25,020 --> 01:12:27,340 遇到了麻烦,那就是当他们作出决定, 1766 01:12:27,340 --> 01:12:28,136 摧毁它。 1767 01:12:28,136 --> 01:12:31,450 一个范围内的安全人员以极大的勇气按下 1768 01:12:31,450 --> 01:12:34,160 按钮,炸毁了火箭之前,它可能会成为一个 1769 01:12:34,160 --> 01:12:37,470 危害公众安全。 1770 01:12:37,470 --> 01:12:40,750 >> 这是首航的阿丽亚娜5, 1771 01:12:40,750 --> 01:12:43,990 破坏了的地方,因为在嵌入式的缺陷 1772 01:12:43,990 --> 01:12:45,480 火箭的软件。 1773 01:12:45,480 --> 01:12:47,660 >> 问题的阿丽亚娜的是,有一个数字, 1774 01:12:47,660 --> 01:12:51,245 需要64位表示,他们希望将它转换 1775 01:12:51,245 --> 01:12:53,010 到一个16位的数。 1776 01:12:53,010 --> 01:12:54,900 他们假设的数量从来没有 1777 01:12:54,900 --> 01:12:56,280 将是非常大的, 1778 01:12:56,280 --> 01:12:59,920 大部分那些在64位的数字的位数是0。 1779 01:12:59,920 --> 01:13:01,860 他们错了。 1780 01:13:01,860 --> 01:13:04,550 >> 一个软件程序无法接受 1781 01:13:04,550 --> 01:13:07,730 数所产生的另一个种的根目录下 1782 01:13:07,730 --> 01:13:08,930 失败的原因。 1783 01:13:08,930 --> 01:13:11,490 软件开发已经成为一个非常昂贵的部分 1784 01:13:11,490 --> 01:13:13,280 新的技术。 1785 01:13:13,280 --> 01:13:16,530 阿丽亚娜4型火箭已经是非常成功的。 1786 01:13:16,530 --> 01:13:19,100 这么多的为它创建的软件也被用来 1787 01:13:19,100 --> 01:13:21,050 阿丽亚娜5。 1788 01:13:21,050 --> 01:13:25,530 >> 的基本问题是,阿丽亚娜5快, 1789 01:13:25,530 --> 01:13:27,280 加速更快。 1790 01:13:27,280 --> 01:13:30,590 软件不占。 1791 01:13:30,590 --> 01:13:33,060 >> - 破坏的火箭是一个巨大的金融 1792 01:13:33,060 --> 01:13:37,670 灾后,由于软件错误一分钟。 1793 01:13:37,670 --> 01:13:40,750 但是,这不是第一次的数据转换问题 1794 01:13:40,750 --> 01:13:43,680 困扰现代火箭技术。 1795 01:13:43,680 --> 01:13:44,390 >> DAVID马兰:我们会离开它。 1796 01:13:44,390 --> 01:13:46,870 但是,这是证明如何适用,甚至一些 1797 01:13:46,870 --> 01:13:48,750 这些最低级别的细节,我们已经开始 1798 01:13:48,750 --> 01:13:50,040 探索今天。 1799 01:13:50,040 --> 01:13:52,510 所以,即使你得到的一些也许有点心烦意乱 1800 01:13:52,510 --> 01:13:55,240 的语法和arcaneness这里,实现在 1801 01:13:55,240 --> 01:13:57,690 长远来说,我们会重点就如何适用,这是 1802 01:13:57,690 --> 01:13:59,530 远远超出CS的世界。 1803 01:13:59,530 --> 01:14:00,780 我们将看到你在周三。