第 2 集 · B1 · 7 分钟
C++ · 第2集 · 分支和循环
中学信息学选修:用 C++ 讲输入输出、变量、分支和循环。 开头:我们探讨了输入输出、运算操作和数据类型。

中俄字幕
разбирались с вводом выводом, с операциями, с типами данных.
我们探讨了输入输出、运算操作和数据类型。
Сегодня наше занятие называется ветвления и циклы.
今天课程的主题是分支与循环。
и посвящено оно ходу исполнения программы.
本课重点讲解程序的执行流程。
Вот дело в том, что одна из важных
事实上,初学编程时需要理解的一个重要概念是:
вещей, которую нужно осмыслить, когда приступаешь к программированию, в принципе на
在不同编程语言中,这一概念的组织方式各不相同。
разных языках по- разному организована, это
即:
понимание того, как соотнести
如何将所编写的程序代码
саму записанную программу и те реальные действия, которые происходят в истории
与计算系统实际执行的操作对应起来。
собственно вычислительной системы.
也就是计算系统内部真实发生的过程。
То есть представим себе, что у нас происходит логгирование, от слова лог, такая
例如,我们设想一个日志记录过程(log,即日志):
создание полных исторических записей всего, что только
创建计算机上所发生一切的完整历史记录,对吧?
происходило на компьютере, да?
发生在计算机上的一切,对吧?
Вот некая история.
这是一个故事。
Вот история, она исключительно линейна.
这是一个纯粹线性的故事。
Я ее нарисую сверху вниз, да?
我将自上而下画出它,对吧?
а программа, и причем она может даже, программа может даже зациклиться и работать
还有程序,而且程序甚至可能循环运行,
бесконечно долго, да, то есть эта история может начаться и никогда не закончится,
无限长时间,是的,也就是说这个故事可能开始后就永远不会结束,
да. Вот есть такая вещь, которая называется, да, есть текст программы, да, есть
是的。有这样一种东西,叫做……是的,有程序文本,是的,有
исходный текст.
源代码。
исходный текст программы
程序的源代码。
так вот собственно где то в тексте программы есть вот эта вот волшебная точка
程序文本的某个位置就存在这个神奇的点
называется точка входа
它被称为入口点
точка входа, с которой начинают исполняться инструкции.
入口点即程序开始执行指令的位置。
Инструкция означает некое действие, которое мы можем так или иначе наблюдать.
指令代表某种我们可以以某种方式观察到的动作。
Соответственно, тут написана команда там а, и в истории произошло там, что мы там
因此,这里写着命令a,故事中就发生了那里的情况,我们那里……
увидели на экране а, написано б, произошло нечто б.
我们在屏幕上看到显示了a,接着显示了b,于是发生了事件b。
Может быть это невидимое действие, тем не менее оно произошло.
这可能是一个不可见的动作,但确实发生了。
То есть вычислило значение переменной в истории происходящего это, тем не менее,
也就是说,在事件发展过程中,变量的值被计算出来了,尽管如此……
происходит. Соответственно, вот они эти действия идут.
这些动作就这样依次进行。
Но фишка в том, что вот это линейное, прямолинейное программирование, да, в котором
但关键在于,这种线性、直白的编程方式——是的,就是这种……
ровно написанная последовательность действий, да, и она ровно осуществляется.
书写规范的操作步骤,是的,而且这些步骤也严格地被执行。
A, B, C, D, E и пдщь, все.
A、B、C、D、E以及等等,全部。
То есть на самом деле любая программа должна заканчиваться.
也就是说,实际上任何程序都必须结束。
По определению самого понятия алгоритм.
这是算法概念本身的定义所决定的。
Алгоритм— это последовательность действий, записанная на формальном языке
算法是一组用执行者的形式化语言书写的操作步骤。
исполнителя. Не пытайтесь запомнить, это не так важно записывать.
执行者的语言。不用刻意去记,这种记录方式并不那么重要。
Последовательность действий.
操作步骤。
на формальном языке исполнителя,
用执行者的形式化语言,
которая приводит к цели за конечное время.
该步骤在有限时间内达成目标。
Так вот конечное время, конечность- это очень важная вещь для алгоритма,
因此,有限时间或者说“有穷性”,对算法而言是非常重要的特性。
очень важная. Вот, но тем не менее вот эта прямолинейность совсем вот такая вот, она
非常重要。是的,但这种直接性,就是这样的直接性,它
имеет смысл. Имеет смысл, например, если мы можем эту программу запускать
是有意义的。例如,如果我们能多次运行这个程序,它就有意义。
многократно. То есть я запустил ее, она выполнилась замечательно, но история моего
也就是说,我启动了它,它完美地执行了,但我的计算机历史并未结束,我可以一次又一次地启动它。
компьютера не заканчивается, могу запустить ее еще раз и еще раз и еще раз.
也就是说,我启动了它,它完美地执行了,但我的计算机历史并未结束,我可以一次又一次地启动它。
Это прекрасно.
这太棒了。
И если это станок ЧПУ, который изготавливает детали, то я тем самым автоматизацию
如果这是一台加工零件的数控机床,那么我通过这种方式实现了自动化:
ввожу тем, что я не одну команду каждый раз ему говорю, вручную этому станку, а он
我不是每次手动向这台机床发出一条指令,而是
выполняет команды последовательно.
它按顺序执行指令。
Уже супер. Но естественно
已经非常棒了。但很自然地,
возникают разные интересные пожелания.
会出现各种有趣的需求。
И одно из самых простых интересных пожеланий.
其中最简单又有趣的愿望之一。
это возможность совершать прыжки
是能够跳跃。
и перейди к пункту два и перейди к пункту три когда то.
然后进入第二步,再进入第三步。
тридцать лет назад примерно
大约三十年前。
чуть меньше в моей жизни появился первый компьютер.
在我的生活中,第一台计算机出现了,时间稍早一些。
современным аналогом этого компьютера является raspberry pi
这台计算机的现代对应物是树莓派(Raspberry Pi)。
почему raspberry pi это учебный компьютер ограниченной мощности вот ну с прикольными
为什么树莓派是一种功能有限但有趣的学习用计算机?
возможностями а тогда был zx spectrum и вот на том zx spectrum был basic там не было
当时是ZX Spectrum,它内置BASIC语言;而那时还没有Pascal,更不用说C或Python了。
паскаля не было си тем более питона
没有Pascal,更没有C,更别提Python了。
вот там был basic и в этом basic вот эти инструкции нумеровались но правда можно
只有BASIC,且其中的指令需要编号,不过实际上可以。
было конечно нумеровать один а
当然,可以编号为一、a
два b три c да но лучше было по опыту делать десять двадцать тридцать хотя сейчас
二、b,三、c。是的,但根据经验,最好编为十、二十、三十,尽管现在
это не имеет значения вот но была специальная инструкция и она есть в языке си и си
这已无关紧要了,但当时有专门的指令,该指令存在于C语言和C++中
плюс плюс то же это инструкция прыжка goto
++也是跳转指令goto
перейди к пункту такому то и соответственно здесь написано было там goto и дальше
跳转到指定位置,因此这里写的是goto,后面跟着
какой то номер перейди там два например в этом случае
某个编号,例如此处跳转到编号二
в истории исполнения возникает зацикливание то есть фактически я мог бы нарисовать
在程序执行历史中会出现循环,也就是说,我实际上可以画出
это стрелочкой ну так нельзя нарисовать в тексте программы это ж не графический
用箭头表示,但文本程序中无法这样绘制,毕竟这不是图形化
редактор да но фактически да вот оно
编辑器,是的,但事实上确实如此
отсылает нас вот сюда да и получается что при исполнении программы получается a b c
它将我们导向此处,因此程序执行时结果为a、b、c
эта команда она выполняя есть ничего существенного не делает да поэтому я не буду ее
这条命令执行后什么实质性的操作都不做,所以我不写它了。
записывать потом снова b c,
之后再写‘b c’,
потом снова goto 2, да, снова b c, как в том анекдоте про начальника, да.
接着再写‘goto 2’,对,再写‘b c’,就像那个关于领导的笑话一样,对吧?
Если начальник. . .
如果领导……
пункт первый: начальник всегда прав.
第一条:领导永远是对的。
Пункт второй: если начальник не прав, смотри пункт первый.
第二条:如果领导错了,请参见第一条。
Вот у нас возникает вот это вот
这时我们就会遇到这种情况,
бесконечное зацикливание, вот это вот получается, да, оно и называется, вот это вот
即无限循环,结果就形成了这种状况,对吧?这种现象就叫作……
перспектива ухода, да, программа зациклилась.
‘退出前景’,对,程序陷入死循环了。
А вот эта конструкция, в которой исполнение команд происходит, вроде бы происходит,
而这个结构中,指令的执行看似在进行,
да, но раз, раз и за это сам, так говорят цикл, эта штука это цикл.
是的,但一次、一次,而且是它自己,所以人们称之为循环,这个东西就是循环。
понятно цикл это просто вот такая конструкция в которой некая кусочек некая
明白,循环就是这样一个结构,其中某一段代码会重复执行多次。
последовательность команд повторяется много раз вот это соответственно штуковина да
即某条指令序列会重复执行多次,这就是那个东西。
она из себя представляет повторяющийся набор команд
它本质上就是一个重复执行的命令集合。
надо понимать, что реальные действия могут немножко отличаться.
需要理解的是,实际执行的动作可能略有不同。
Ну, например, если здесь написано распечатать переменную x, а здесь эта переменная
例如,这里写着打印变量x,而这里的变量……
изменяется, да, ну соответственно каждый раз будет распечатываться новое
会被修改,对吧?因此每次打印的都是该变量的新值。
значение этой переменной, вот, а там оно будет меняться опять же по- другому как-
而在这里,它的值又会以另一种方式改变……
то, да. Поэтому в принципе- то оно, еще раз говорю, могут действия отличаться, но
是的。因此,原则上,动作可能不同,但……
команды- то те же, ну поэтому я помечаю вот так, да.
命令本身是一样的,所以我这样标注。
так вот вот эти сами команды называют в этом случае телом
因此,这些命令本身在这种情况下被称为主体。
来源:Тимофей Хирьянов · CC BY 3.0