致初学OIer:
你想知道的9个问题
Beautyyu 执笔
不同于数理化生这些科目, 大部分人可能都是第一次接触”信竞”这个科目. 你对这个科目可能一无所知. 不过没关系, 笔者这里将解答你的疑问.
1. 什么是编程?
我们的计算机上运行这各式各样的程序, 这些程序承担着各种功能. 正如字面意思, “编程”就是”编写程序”
我们将对计算机下达一个”指令清单”, 称作源代码
. 不过计算机并不能直接”读懂”这些源代码
, 因为源代码
是依照人类的逻辑编写的. 计算机只能读懂”010101001001…”这样的机器码
. 这些机器码
就是俗称的”程序”
所以我们需要一位”翻译官”将源代码
翻译成机器码
. 这个过程称作编译
, 翻译官是一个叫做编译器
的程序.
嗯? 你问第一个编译器
是怎么造出来的? 自己查资料去吧.
2. 什么是编程语言?
正如人与人之间使用”语言”进行沟通一样, 人和机器之间使用编程语言
进行沟通. 常见的编程语言有c
, c++
, pascal
等等.
人类使用编程语言
编写源代码
. 上文提到, 人和机器之间有一位翻译官编译器
. 而各种语言都有其对应的编译器.
不过和人不同, 编译器
并不是很聪明. 因此, 你所编写的源代码
一定要严格地符合该语言的语法. 否则编译器就会告诉你”编译失败”
当然, 上文所说的语言特指”古典高级语言”, 我们将要学习的c++
就属于此类. 至于更多五花八门的现代语言, 则不能一概而论了.
3. 什么是算法?
当我们面对一个问题时, 我们会观察问题, 解剖问题, 然后思考如何解决问题.
算法
就是”一个问题的解决方案”. 算法设计
的过程就是”思考解决方案”的过程.
4. 算法和编程什么关系?
算法
是抽象的, 是一种思想. 而程序
则是具象的, 是”操作计算机的过程”
我们将思想化为现实的过程, 就是把算法
写进程序
的过程.
算法
是灵魂, 程序
则是供其使用的工具
5. 什么是信竞?
信息学奥林匹克(Olympiad in Informatics), 简称OI
. 这是一个面向中学生的算法设计比赛
. 参加比赛的中学生则称为**OIer
**.
类似的还有一个算法设计比赛叫ACM-ICPC
, 只不过面向的对象是大学生.
6. 解决算法问题需要什么工具?
测评系统
: 测评系统即俗称”题库”. 我们在这里查看题库中的算法问题, 设计出源代码后再提交到这里进行验证. 我校有自建的测评系统https://192.168.6.233
编辑器
: 理论上Windows系统自带的”写字板”就是最简单的编辑器, 用它来编写源代码也是没有问题的. 不过, 一个优秀的编辑器可以使编写源代码的过程更有效率.
编译器
: 在第一个问题中已经介绍过了.
IDE
: 全称integrated development environment, 简单来说就是将编辑器
, 编译器
等工具集合成一体的综合编程软件. 你可以使用IDE
内部的编辑器
编写源代码, 然后一个快捷键就可以编译运行你的程序. 初学者常用的IDE
是Dev-C++
7. 解决算法问题的流程是什么样的?
读题: 从测评系统上查看题目. 题目主要包含三个部分”题面”, “输入数据”, “输出数据”
读
输入数据
:输入数据
即题目的”已知条件”读
输出数据
:输出数据
即需要你根据”已知条件”推导出的问题的”解”设计
算法
: 确认题目的已知条件和要求的解后, 就可以开始思考问题的解决方案, 形成一个完整的思路设计
代码
: 根据已形成的思路, 编写相应的代码进行
调试
: 编译运行你的代码, 观察程序运行是否符合你的预期. 如果不符合预期, 寻找问题所在. 问题一般出现在两个方面, 即算法错误(思路错误)和代码错误(手抖写错). 优秀的OIer应当尽量避免后者提交
测评
: 编写完成源代码后, 将源代码提交至测评系统
进行验证. 测评系统将会为你的程序提供多组输入数据, 然后检查程序产生的输出数据是否与标准答案相符. 如果全部相符, 测评系统就认为你的程序”通过了测试(Accept)”如果程序没有通过测试, 回到第6步
如果多次没有通过测试, 可以考虑回到第1步
8. 信竞的学习过程是什么样的?
首先我们需要学习c++语法基础
, 这部分内容将教会大家如何写代码. 但语法基础的学习是十分枯燥的, 大约需要耗时2个月. 大部分新生都无法撑过这两个月而选择放弃.
这之后我们将学习算法和数据结构设计
, 这部分内容将教大家如何设计算法. 真正有趣的内容从此时才开始. 我们将会学习怎样使用不同的算法解决不同类型的问题, 怎样结合多个算法解决复杂的综合问题, 以及, 怎样设计或改造出新的算法更优雅更有效率地解决问题.
希望大家都能挺过前两个月, 真正领略到算法的魅力所在.
9. 相关的专业有哪些?
与编程直接相关的专业主要有计算机科学
和软件工程
这两个. 前者侧重于算法设计, 注重算法效率. 后者侧重于软件制作, 注重于综合实用性. 至于所谓的物联网
, 大数据
, 人工智能
等等都是由这两个专业进一步发展而来.
另外, 游戏设计
, 微电子
等等工科专业也和编程有紧密联系.
几乎所有的现代理科专业都需要借助编程工具
最后
希望大家都能在算法设计中享受乐趣
最后安利我校计算机社团微笙无上计算机协会
. 笔者现年高三, 是协会的主要创始人之一, 第二届会长. 欢迎各位加入微笙计协
. 协会纳新群893053706 官网www.weisheng.cf