第 1 集 · B1 · 8 分钟

C 语言 · 第1集 · Hello World 是怎么写出来的

从 Hello World、循环、递归讲到汉诺塔和动态规划,句子短,适合跟读。 开头:大家好,欢迎莫斯科物理技术学院的各位同学!

C 语言 · 第1集 · Hello World 是怎么写出来的

中俄字幕

  1. Здравствуйте, уважаемые студенты Московского физико технического института,

    大家好,欢迎莫斯科物理技术学院的各位同学!

  2. поздравляю вас с поступлением.

    祝贺你们被录取!

  3. Я Тимофей Фёдорович Хириянов,

    我是季莫费·费奥多罗维奇·希里亚诺夫。

  4. проведу вас от школьной информатики к уровню информатики в МФТИ.

    我将带领大家从中学信息技术过渡到莫斯科物理技术学院的信息技术水平。

  5. Это мини- курс, в нем всего 5 уроков, каждый урок разбит на несколько видео, а также

    这是一个微型课程,共包含5节课,每节课分为多个视频,此外还有

  6. текстовые материалы и задания в системе ejudge.

    文字资料和ejudge系统中的练习题。

  7. я познакомлю вас с языком программирования Си и изложу школьные алгоритмы, которые

    我将向大家介绍C语言,并讲解一些中学算法知识,这些内容

  8. вы бы знали, если бы готовились к ЕГЭ по информатике хорошо.

    如果你们认真准备过信息技术高考,就应该已经掌握。

  9. Давайте с вами разберем для начала программу Hello World, которая всего лишь

    我们先一起来分析一个“Hello World”程序,它仅用于

  10. печатает" Привет мир".

    输出“你好,世界!”

  11. Итак, давайте посмотрим на неё.

    那么,我们来看一下它。

  12. В первую очередь подключается.

    首先,它会连接。

  13. стандартная библиотека ввода- вывода.

    标准输入输出库。

  14. Обратите внимание, в первой строке include stdio.

    注意,第一行是 #include <stdio.h>。

  15. h. Здесь слово include означает" включить".

    h。这里单词 include 意为“包含”。

  16. Это на самом деле вообще строка написана не на языке программирования Си, а на языке

    实际上,这一行根本不是用 C 语言编写的,而是用

  17. препроцессора Си.

    C 语言预处理器的语言。

  18. Это специфический текстовый предобработчик, который запускается перед компиляцией

    这是一个特定的文本预处理器,在编译之前运行,

  19. для того, чтобы упростить какие- то.

    以简化某些操作。

  20. вещи, в частности подключение библиотеки.

    特别是用于包含库。

  21. Далее сама библиотека std стандартный input output ввод- вывод.

    接下来是标准库 std,用于标准输入输出(I/O)。

  22. H. Это объяснить несколько сложнее.

    H。这解释起来稍复杂一些。

  23. Так называются заголовочные файлы.

    这些称为头文件。

  24. Они написаны на языке C.

    它们是用C语言编写的。

  25. Библиотека разбивается на две части.

    该库分为两部分。

  26. Это, собственно, ее исходный код, да, он преобразован часто сразу в объектный код.

    这实际上是它的源代码,通常会直接被转换为目标代码。

  27. o или. so. Вот.

    .o 或 .so。就是这样。

  28. h- это заголовочный файл, который описывает интерфейс любой библиотеки, даже вот

    .h 是头文件,用于描述任何库(包括标准库)的接口。

  29. когда будете списать свои, да, вот стандартная библиотека, она тоже имеет header,

    当你编写自己的库时,也会有头文件;是的,标准库同样包含头文件。

  30. да, . h поэтому.

    是的,因此扩展名为 .h。

  31. Далее, вся программа на языке Си состоит из функций.

    接下来,整个C语言程序由函数组成。

  32. Эти функции вызывают друг друга.

    这些函数相互调用。

  33. То есть это выглядит следующим образом: есть вот одна функция, она вызывает другую,

    也就是说,它看起来是这样的:有一个函数,它调用另一个函数,

  34. та вызывает эту, ну потом происходит обратный возврат, да, результат возвращается

    后者再调用前者,然后执行返回,对,结果被返回回来,

  35. сюда, результат возвращается сюда.

    返回到这里,结果返回到这里。

  36. Про это еще будем разговаривать, да.

    我们之后还会讨论这个,对。

  37. Но должна быть какая- то первая функция, которая вызывается главной.

    但必须有一个作为主函数被首先调用的函数。

  38. И эта функция называется main, главная.

    这个函数叫做main,即主函数。

  39. Такая функция в проекте должна быть только одна.

    一个项目中只能有一个这样的函数。

  40. Я имею в виду на один исполняемый файл.

    我指的是每个可执行文件。

  41. И эта функция будет собственно запущена в момент запуска.

    该函数实际上会在程序启动时执行。

  42. Но кто- то же ее запускает.

    但总得有人来启动它。

  43. Ее запускает некая командная оболочка, интерпретатор командной строки, там bash или

    它由某个命令行外壳程序(即命令解释器)启动,例如 bash 或

  44. cmd, в общем кто- то.

    cmd,总之是某个程序。

  45. И этот кто- то должен будет получить результат.

    而这个程序需要获取函数的返回结果。

  46. И поэтому главная функция оформляется точно так же, как все остальные функции в

    因此,主函数的定义方式与其他所有 C 语言函数完全相同。

  47. языке C. То есть она имеет, во- первых, заголовок, а во- вторых, тело.

    也就是说,它首先有函数头,其次有函数体。

  48. Тело обрамляется фигурными скобками обязательно.

    函数体必须用花括号括起来。

  49. В заголовке функции присутствует возвращаемый тип.

    函数头中包含返回值类型,

  50. а также присутствует список параметров, вот он, список формальных параметров.

    以及参数列表,即形式参数列表。

  51. надо заметить, что главная функция может и не иметь параметров.

    需要指出的是,主函数可能不带参数。

  52. То есть вот эта часть, она не обязательна.

    也就是说,这部分不是必需的。

  53. не обязательно, но лучше ее все- таки знать

    虽非必需,但最好还是了解它。

  54. и уметь понимать, что здесь вообще находится.

    并能理解这里究竟包含什么内容。

  55. Argc— это argument count, количество аргументов командной строки.

    argc 是 argument count(命令行参数个数)的缩写。

  56. Вообще язык программирования C создавался для Unix.

    C 语言最初是为 Unix 操作系统而设计的。

  57. для операционной системы Unix в те времена, когда никакого графического интерфейса

    当时是为 Unix 操作系统开发的,那时还没有图形界面,

  58. не было, и была только командная строка.

    只有命令行界面。

  59. И любая программа запускалась с параметрами командной строки.

    任何程序都是通过命令行参数来启动的。

  60. Вот это количество параметров командной строки, а это их значения.

    这是命令行参数的个数,而这些是它们的值。

  61. Это тип строки возвращаемой, это означает, что их много, то бишь массив.

    这是返回值的类型,表示返回多个值,即数组。

  62. Не будем сейчас вдаваться в этот синтаксис, давайте вернемся к возвращаемому

    我们暂不深入探讨这种语法,先回到返回值部分。

  63. значению. Возвращает она целое число.

    它返回一个整数。

  64. Что это за целое число?

    这个整数是什么?

  65. Ну, вы можем его увидеть, вы его видите вот здесь, да, return 0.

    嗯,我们可以看到它,就在这里,对吧?return 0。

  66. Вернуть 0. Что вот это вот за return 0?

    返回 0。这个 return 0 到底是什么?

  67. Что вот это значит?

    这代表什么意思?

  68. этот ноль означает код ошибки ноль.

    这个 0 表示错误代码为 0。

  69. Если ваша программа завершается с реальной ошибкой, то код ошибки будет не ноль.

    如果您的程序因实际错误而终止,则错误代码将不为零。

  70. Можете сюда вернуть, там, не знаю, там 13, да, или там 666, что хотите, да, неважно,

    您可以在这里返回任意值,比如 13,或者 666,随便什么都可以,无所谓。

  71. там 1, 2, 3. На самом деле это

    那里有1、2、3。实际上,这是

  72. предполагается, что в справочнике этой программы описано, какой код что значит.

    该程序的帮助文档中应说明各错误代码的含义。

  73. Но в любом случае номер ошибки не ноль означает, что, собственно, ошибка случилась,

    但无论如何,非零的错误编号表示确实发生了错误,

  74. а ноль значит как нулевая ошибка.

    而零表示“无错误”。

  75. Ясно, да? Вот такая логика.

    明白了吗?这就是其逻辑。

  76. Поэтому этот 3.

    所以这个是3。

  77. 0 преследует вас в языке C всегда функции main.

    在C语言中,main函数总是返回0。

  78. И вот его на самом деле можно узнать, то есть в возвращаемый код.

    实际上,我们可以获取这个返回值,即返回码。

  79. можно узнать из интерпретатора командной строки.

    我们可以通过命令行解释器获知该返回码。

  80. Теперь давайте к одной единственной содержательной пятой строке.

    现在,我们来看唯一一条有实际意义的第五行代码。

  81. Здесь вызывается функция printf.

    此处调用了printf函数。

  82. Это print format, форматированная печать.

    这是print format(格式化输出)功能。

  83. И вот эта строка, мы кстати видим, что строки в C заключаются в двойные кавычки, так

    而这条字符串,顺便提一下,我们在C语言中看到字符串是用双引号括起来的。

  84. вот эта строка на самом деле является строкой формата.

    因此,这条字符串实际上就是格式字符串。

  85. с такой формата, в которую может быть подставлено что- то другое значение, в том

    这种格式字符串可以插入其他值,

  86. числе какой- то переменной.

    包括某个变量的值。

  87. Вот, ну здесь" Hello, world!" написано.

    这里写着"Hello, world!"。

  88. И несмотря на всю простоту этой программы,

    尽管这个程序极其简单,

  89. в ней реально почти ничего нет, да, только печать одной единственной строки.

    它实际上几乎什么都没有,对吧?只打印了一行字符串。

  90. Тем не менее присутствует даже вот в этой строке маленькая техническая деталь.

    然而,即使在这行代码中,也存在一个微小的技术细节。

  91. для того чтобы сделать перевод каретки, нам нужно впихнуть вот сюда вот невидимый

    为了实现换行,我们需要在这里插入一个不可见的

  92. символ перевода каретки.

    换行符。

  93. этот символ изображается escape последовательностью.

    该字符以转义序列表示。

  94. Я только три таких вот

    我只介绍三种这样的

  95. escape последовательности дам, просто потому что они используются чаще всего.

    转义序列,因为它们最常用。

  96. Косая n— это перевод каретки.

    反斜杠n代表换行。

  97. Это косая t— это табуляция, в смысле отступ вот этой вот фиксированной ширины.

    反斜杠t代表制表符,即固定宽度的缩进。

  98. И эта косая косая— это собственно косая черта, потому что иначе она не могла бы

    而反斜杠反斜杠则表示反斜杠本身,否则它无法

  99. участвовать в систроках, а так вот она просто равняется одной косой черте.

    参与字符串,这样它就等价于一个单独的反斜杠。

  100. Давайте попробуем немножко модифицировать эту программу.

    我们来尝试稍微修改一下这个程序。

  101. Давайте для начала ее скомпилируем и запустим.

    我们先来编译并运行它。

  102. Компиляцию я запускаю просто build, да, можно посмотреть на.

    我直接用 build 命令来编译,是的,可以看一下。

  103. можно посмотреть то, что она благополучно побил делась, и запустить ее.

    可以查看它是否成功编译完成,然后运行它。

  104. Вот, пожалуйста, Hello World, да, про Соника и Тукантина.

    瞧,Hello World!是的,还有索尼克和图坎丁。

  105. Поменяем немножко программу.

    我们稍微修改一下程序。

  106. Вот сюда вместо" world" я хочу добавить некоторое

    这里,我想把 "world" 替换为另一个值。

  107. другое значение, привет, Джон.

    你好,约翰。

  108. Я это сделаю следующим образом.

    我将通过以下方式实现。

  109. я вот сюда вот вставлю спецификатор формата процент s, процент s.

    我在这里插入格式化占位符 "%s",即 "%s"。

  110. это будет означать, что вот тут вот

    这表示此处将……

  111. будет предполагаться.

    将被假定。

  112. вставка некоторой строки.

    插入某一行字符串。

  113. Я тогда на самом деле смогу использовать и переменную.

    那么我实际上就能使用这个变量了。

  114. Но сейчас переменную пока опустим, давайте просто.

    但目前我们先忽略变量,直接……

  115. вставим сюда, да, Джон.

    在这里插入,对,约翰。

  116. И вот эту строчку я вставлю теперь вот здесь после запятой, да, Джон.

    我把这一行插入到这里,就在逗号之后,对,约翰。

  117. я сейчас не буду углубляться в то, как именно устроены форматные строчки, какие

    我现在不深入讲解格式化字符串的具体结构,以及其中可以包含哪些

  118. именно спецификаторы формата в ней могут присутствовать, но сам факт того, что вот

    具体的格式说明符,但事实是,这里确实可以插入内容,对,不过在这次插入之后,我还需添加

  119. сюда можно вставить, да, тем не менее после вот этой вставляемой мне еще

    一个感叹号,此外还需添加

  120. восклицательного знака, еще перевод каретки.

    一个换行符。

  121. так это устроено.

    事情就是这样安排的。

来源:Тимофей Хирьянов · CC BY 3.0

同系列