计算机常识与信息学竞赛历史
计算机发展史
第一台计算机:1946 年在美国宾夕法尼亚大学诞生,占地 170 平方米,重 30 吨,使用了 18000 多电子管,每秒可以进行 5000 多次加法运算。
冯诺依曼体系结构
- 计算机硬件设备由五大部件组成:存储器、运算器、控制器、输入设备、输出设备。
- 提出存储程序思想,计算机底层使用 0/1 二进制来存储数据。
计算机分类
按照计算机规模分类:
- 巨型机:用于国家级研究,如大规模天气预报、卫星照片、洲际导弹等。
- 大型机、中型机:用于商业领域,保存大量用户数据资料。
- 小型机:通常用作简单的服务器,性能稍高于个人计算机。
- 微型机:个人计算机,如台式机、一体机、笔记本电脑、平板、手机等。
程序设计语言
程序设计语言是指根据事先定义的语法规则而编写的预定语句的集合。常用的程序设计语言包括高级语言和汇编语言。
在计算机发展的早期,机器语言是唯一的程序设计语言,由 01 序列组成。虽然用机器语言编写的程序真实地表示了数据是如何被计算机操作的,但特定型号的计算机有其专用的机器语言规范,程序不能在不同的硬件上执行,使用机器语言编写程序和调试排错都很困难。
汇编语言是机器语言之后的演化,它使用了带符号或助记符的指令和地址代替二进制代码,并使用汇编程序将汇编语言代码翻译为机器语言。尽管汇编语言大大提高了编程效率,但仍然需要程序员在所使用的硬件上花费大量精力,使用符号语言编程也很不直观。
高级语言适用于许多不同的计算机,使程序员能够关注要解决的问题,将精力集中在应用程序上,无须考虑计算机的复杂性。高级语言的设计目标是使程序员摆脱汇编语言繁琐的细节。
高级语言和汇编语言都有一个共性:它们必须被转化为机器语言。高级语言程序被称为源程序,被翻译成的机器语言程序称为目标程序。这个转化过程称为编译。
程序运行即按照控制流程依次执行程序中的语句,实现其特定的功能。
选择题:编译器的功能是?
- A. 将源程序重新组合
- B. 将一种语言(通常是高级语言)翻译成另一种语言(通常是低级语言)
- C. 将低级语言翻译成高级语言
- D. 将一种编程语言翻译成自然语言
答案
B。
编译器是一种计算机程序,它的核心功能是将使用某种源程序编写的程序,翻译成等价的、用另一种目标语言编写的程序。源语言通常是程序员编写的高级语言,例如 C++、Java、Python、Go 等,这些语言更接近人类的自然语言和数学逻辑,易于编写、阅读和维护。目标语言通常是计算机硬件能够直接理解和执行的低级语言,例如汇编语言或机器码。所以,编译器的作用就像一个“翻译官”,它负责将人类能理解的高级指令,翻译成机器能执行的低级指令,从而架起了高级语言和计算机硬件之间的桥梁。
A 选项这个描述很模糊。将不同的代码模块组合在一起通常是链接器的工作,而不是编译器的主要功能。
C 选项这个过程被称为反编译,是编译的逆过程。它的目的是从可执行文件中尝试还原出高级语言的源代码,这是一个非常复杂且不总是能完美实现的过程。执行这个功能的程序叫作反编译器。
D 选项是代码解释或文档生成工具可能具备的功能,目的是让看代码的人更好地理解代码的意图。
程序设计语言的分类:编译型与解释型
根据“翻译”过程发生的时间和方式,可以将程序设计语言大致分为两大类:编译型语言和解释型语言。
编译型语言
定义:编译型语言是指在程序执行之前,需要通过一个专门的编译器,将所有源代码一次性地完整翻译成目标平台的机器码,并打包成一个独立的可执行文件。
执行过程
- 编译:编译器读取全部源代码,进行词法分析、语法分析、语义分析、优化等操作,最终生成包含机器码的目标文件。
- 链接:链接器将一个或多个目标文件以及它们所需的库文件组合在一起,解决地址和引用的问题,最终生成一个单一的可执行文件。
- 执行:用户可以直接运行这个可执行文件,系统会将其加载到内存中,由 CPU 直接执行其中的机器码。
特点
- 优点
- 运行效率高:程序在执行前已经完全翻译成本地机器码,运行时无需额外翻译,速度非常快。
- 脱离开发环境运行:编译生成的可执行文件可以独立运行,用户不需要安装编译器或源代码。
- 代码保密性好:交付的是可执行文件,而不是源代码,保护了知识产权。
- 缺点
- 开发调试周期长:每次修改代码后,都需要重新编译整个程序才能看到结果,对于大型项目来说可能非常耗时。
- 跨平台性差:编译生成的可执行文件高度依赖于特定的系统和 CPU 架构。例如,在 Windows x64 平台编译的
.exe文件无法在 Linux 或 macOS 上运行。要实现跨平台,必须为每个目标平台重新编译一份代码。
典型代表:C,C++,Go,Rust,Swift,Pascal,Fortran
解释型语言
定义:解释型语言是指在程序运行时,通过一个解释器,将源代码逐行(或逐语句)地翻译成机器码并立即执行。它不会预先生成可执行文件。
执行过程
- 执行:启动解释器,并将源代码文件作为参数传递给它。
- 解释:解释器像一个“同声传译”,读取一行源代码,翻译成对应的机器指令,然后交给 CPU 执行。执行完毕后,再读取下一行,重复此过程,直到程序结束。
特点
- 优点
- 开发调试效率高:修改代码后可以立即运行,无需等待漫长的编译过程,非常适合快速原型开发和脚本任务。
- 跨平台性极好:同一份源代码可以不加修改地运行在任何安装了对应解释器的平台上(“一次编写,到处运行”)。例如,一个 Python 脚本可以在 Windows、macOS、Linux 上运行,只要这些系统安装了 Python 解释器。
- 缺点
- 运行效率低:每次执行程序都需要在运行时进行翻译,这带来了额外的性能开销,通常比编译型语言慢。
- 依赖解释器环境:运行程序的用户必须安装相应的解释器。
- 源码通常是公开的:因为执行需要源代码,所以交付程序时通常也需要交付源码。
典型代表:Python,JavaScript,Ruby,PHP,Perl,Shell 脚本
混合型与现代趋势
严格的“编译”与“解释”二分法在现代已经变得模糊,许多语言采用了混合模式来兼顾效率和跨平台性。
代表:Java,C#
这类语言的执行过程通常是
- 编译到字节码:源代码首先被编译成一种平台无关的中间代码(或称字节码)。这个字节码不是任何特定 CPU 的机器码。
- 虚拟机解释执行:程序运行时,虚拟机会先解释执行字节码。
- 即时编译:为了提高性能,虚拟机会监控代码的运行情况,并将频繁执行的“热点”代码在运行时 即时编译(Just-In-Time,JIT) 成原生机器码。这样,后续执行这些代码时就能获得接近编译型语言的速度。
这种混合模式结合了编译型语言的高效和解释型语言的跨平台两大优点。
补充:即使是传统的解释型语言,其现代实现也通常包含编译步骤。例如,标准 Python(CPython)解释器会先把 .py 文件编译成 .pyc 字节码文件再执行。JavaScript V8 引擎(用于 Chrome 和 Node.js)更是广泛使用 JIT 技术来提升性能。
总结对比
| 特性 | 编译型语言 | 解释型语言 | 混合型(JIT) |
|---|---|---|---|
| 翻译时机 | 执行前 | 执行时 | 部分执行前,部分执行时 |
| 运行速度 | 快 | 慢 | 接近编译型 |
| 跨平台性 | 差(需为各平台重编) | 好(依赖解释器) | 好(依赖虚拟机) |
| 开发效率 | 慢(编译耗时) | 快(立即执行) | 较快 |
| 典型代表 | C, C++, Go, Rust | Python, JavaScript, Ruby | Java, C# |
选择题:下列属于解释器执行的程序设计语言是?
- A. C
- B. C++
- C. Pascal
- D. Python
答案
D。
Python 是解释型语言的典型代表。要运行一个 Python 程序(.py 文件),需要在命令行中输入 python your_script.py 来调用 Python 解释器。解释器会负责读取、翻译并执行代码。这种模式使得 Python 具有极佳的跨平台性和易用性。
C 语言是编译型语言的鼻祖之一。C 代码必须通过编译器(如 GCC)编译成特定平台(如 Windows,Linux)的可执行文件后才能运行。
C++ 是在 C 语言基础上发展而来的,同样是一种高性能的编译型语言。它也需要通过编译器(如 G++)进行编译。
Pascal 是一种结构化的编程语言,主要用于教学。它也是一种编译型语言,需要通过编译器(如 Free Pascal)生成可执行程序。
操作系统
操作系统是介于计算机硬件和用户(程序或人)之间的接口,它作为通用管理程序管理着计算机系统中每个部件的活动,并确保计算机系统中的硬件和软件资源能够更加有效地使用。
常见的桌面级操作系统包括 Windows、UNIX、Linux 系列发行版、MacOS 等。
Windows 操作系统,是由美国微软公司研发的操作系统,问世于 1985 年。前身是 MS-DOS 系统,后续不断更新升级,逐渐提升易用性,现已成为应用最广泛的操作系统之一。
UNIX 是一个强大的多用户、多任务操作系统,支持多种处理器架构,最早由 Ken Thompson、Dennis Ritchie 和 Douglas Mcllroy 于 1969 年在 AT&T 的贝尔实验室开发完成。
Linux 是一个类 UNIX 操作系统,其内核最早由 Linus Torvalds 发布,它是一个多用户、多任务、支持多线程和多 CPU 的操作系统,能运行主要的 UNIX 工具软件、应用程序和网络协议,并支持 32 位和 64 位硬件。Linux 继承了 UNIX 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。Linux 有上百种不同的发行版,如 Ubuntu、Debian、Red Hat Enterprise Linux、SUSE 等。
选择题:操作系统的功能是?
- A. 负责外设与主机之间的信息交换
- B. 控制和管理计算机系统的各种硬件和软件的资源
- C. 负责诊断机器的故障
- D. 将源程序编译成目标程序
答案
B。
操作系统的定义和核心功能就是作为计算机硬件和用户(及用户应用程序)之间的接口,同时对计算机系统中的所有资源进行统一的控制和管理。
操作系统的两大基本功能是:
- 资源管理
- 硬件资源:操作系统管理着计算机的所有硬件部分,包括中央处理器(CPU)的调度、内存的分配与回收、磁盘空间的管理(文件系统)、以及打印机、键盘、鼠标、网络接口等所有外部设备。它决定哪个程序可以使用哪个资源,使用多长时间,以及如何使用。
- 软件资源:操作系统也管理着系统中的软件资源,例如各种系统程序、应用程序的执行、以及它们之间的数据共享和通信。
- 提供接口和控制程序执行:操作系统为应用程序和用户提供一个抽象的、比硬件更容易使用的接口(例如系统调用、图形用户界面 GUI、命令行 CLI)。它控制着程序的执行,确保系统的稳定和安全,防止程序之间相互干扰或非法访问硬件。
A 选项只是操作系统资源管理功能中的一小部分(I/O 管理),描述不够全面。
C 选项通常是专门的诊断软件或固件(如 BIOS/UEFI 的开机自检)的功能,而不是操作系统的主要职责。
D 选项是编译器的功能。编译器是一种开发工具,它运行在操作系统之上,但不是操作系统本身。
图灵
- 提出理想计算机的数学模型(图灵机),成为计算机科学理论基础第一人,也是人工智能之父。
- 图灵奖是为计算机科学与技术领域专门设立的奖项(计算机领域的诺贝尔奖)。
图灵奖
图灵奖是计算机科学领域的最高荣誉,被公认为计算机界的诺贝尔奖。该奖项由 美国计算机学会(Association for Computing Machinery,ACM) 于 1966 年设立,每年评选一次,旨在奖励那些对计算机事业做出持久和重大技术贡献的个人。
名称由来与历史
图灵奖的名称取自英国杰出的数学家、逻辑学家和计算机科学家艾伦·麦席森·图灵。图灵是计算机科学和人工智能领域的奠基人之一,他在 20 世纪 30 年代提出的图灵机模型为现代计算理论奠定了基础。二战期间,他在破解德军的恩尼格玛密码方面发挥了关键作用,极大推动了计算机技术的发展。
为了纪念这位伟大的先驱,ACM 设立了图灵奖,以表彰那些像图灵一样,对计算机领域产生了深远影响的科学家。
评选标准与领域
图灵奖的评选标准及其严格,获奖者必须在计算机领域做出了“持久和重大的技术性贡献”。这通常意味着他们的贡献是开创性的,并且经受住了时间的考验,深刻地影响了计算机科学的发展方向或技术实践。
获奖者的研究领域涵盖了计算机科学的方方面面,包括但不限于:计算理论、程序设计语言与编译器、操作系统、人工智能、数据库、计算机网络、密码学与安全、计算机图形学、机器人技术等。
奖项与赞助
图灵奖不仅是学术上的桂冠,也伴随着高额的奖金。自 2014 年起,在谷歌公司的赞助下,图灵奖的奖金提高到了 100 万美元,与诺贝尔奖的奖金规模相当。
著名的获奖者
自设立以来,图灵奖的获奖者名单几乎就是一部计算机科学的发展史。一些著名的获奖者包括:
- 1972 年,艾兹格·迪科斯彻(Edsger W. Dijkstra):对程序设计语言和结构化程序设计做出了巨大贡献,提出了著名的 Dijkstra 最短路算法。
- 1974 年,高德纳(Donald Knuth):因其巨著《计算机程序设计艺术》以及对算法分析的贡献而获奖。
- 1981 年,埃德加·科德(Edgar F. Codd):提出了关系数据库模型,为现代数据库系统奠定了理论基础。
- 1983 年,肯·汤普逊(Ken Thompson)和丹尼斯·里奇(Dennis M. Ritchie):共同开发了 Unix 操作系统和 C 语言。
- 2000 年,姚期智(Andrew Chi-Chih Yao):目前唯一一位获得图灵奖的华人学者,因其在计算理论,包括伪随机数生成、密码学和通信复杂性等方面的贡献而获奖。
- 2016 年,蒂姆·伯纳斯-李(Tim Berners-Lee):发明了万维网、HTML 语言、HTTP 协议和世界上第一个网页浏览器。
- 2018 年,杰弗里·辛顿(Geoffrey Hinton),杨立昆(Yann LeCun)和约书亚·本吉奥(Yoshua Bengio):因其在深度学习领域的开创性工作而共同获奖,被称为“深度学习三巨头”。
香农
克劳德·香农被公认为信息论之父。
在 1948 年,香农发表了划时代的论文《通信的数学理论》。在这篇论文中,他首次将热力学中的“熵”的概念引入到信息通信领域,提出了“信息熵”的概念,用来量化信息的不确定性。
香农定义的信息熵是一个消息中所含信息量的期望值。一个信息源的熵越高,意味着它的不确定性越大,要用更多的比特(bit)来精确表示其内容。反之,熵越低,可预测性就越强,可以用更少的比特来表示。
香农的这项工作标志着信息论这一学科的正式诞生。它为现代通信技术、数据压缩(如 ZIP、JPEG、MP3)、数据存储和密码学等领域奠定了坚实的数学基础。
选择题:1948 年,谁将热力学中的熵引入信息通信领域,标志着信息论研究的开端?
- A. 欧拉(Leonhard Euler)
- B. 冯·诺伊曼(John von Neumann)
- C. 克劳德·香农(Claude Shannon)
- D. 图灵(Alan Turing)
答案
C。
欧拉是 18 世纪伟大的数学家,在数论、图论、微积分等众多数学领域做出了奠基性贡献。
冯·诺依曼是 20 世纪的杰出数学家,对现代计算机体系结构(冯·诺伊曼结构)、博弈论和数值分析等领域有巨大贡献,被称为“现代计算机之父”。
图灵是英国数学家、计算机科学家,提出了图灵机模型,为计算理论和人工智能奠定了基础,被称为“计算机科学与人工智能之父”。
信息学竞赛
信息学竞赛主办方
中国计算机学会(CCF)
信息学竞赛晋级流程
- 计算机软件能力认证提高组(CSP-S)第一轮
- 计算机软件能力认证提高组(CSP-S)第二轮
- 全国青少年信息学奥林匹克联赛(NOIP)
- 省队选拔赛
- 全国青少年信息学奥林匹克竞赛(NOI)
信息学竞赛历史
1984 年 2 月 16 日,*同志在上海参观展览时,发表了著名的讲话:“计算机的普及要从娃娃抓起。”
为了响应这一号召,推动青少年计算机科学教育的发展,中国计算机学会在同年(1984 年)组织创办了第一届全国青少年计算机程序设计竞赛,即 NOI 的前身。从那时起,NOI 成为国内选拔顶尖信息学人才最重要的平台之一。
1995 年,省级的信息学竞赛开始举办,全国青少年信息学奥林匹克联赛(National Olympiad in Informatics in Provinces,简称:NOIP),以省为单位进行评奖。NOIP 分为普及组和提高组两种组别,包含初赛和复赛,普及组难度更低。
2019 年,CCF 推出计算机软件能力认证(简称为 CSP),分为入门级和提高级(分别简称为 CSP-J,CSP-S),其比赛模式和原来的 NOIP 普及组、提高组大致相同。同年 NOIP 暂停,次年恢复了 NOIP 提高组的比赛,由于普及组一直没有恢复,此后 NOIP 默认代指提高组。
2020 年,恢复了 NOIP,但是赛制有所改变:
- 取消 NOIP 初赛选拔,由 CSP-S 成绩靠前的选手或者一些获得奖励名额的选手进行参赛。
- NOIP 由两个比赛日变为一个,由 2 天共 6 题,变为 1 天共 4 题,满分 400。
选择题:中国计算机学会于哪一年创办全国青少年计算机程序设计竞赛?
- A. 1983
- B. 1984
- C. 1985
- D. 1986
答案
B。
CSP 考试形式
初赛包含选择题和判断题,以笔试形式进行。题目类型包含单项选择题、阅读程序题和完善程序题。复赛共 4 题,每道题满分 100 分,共 400 分,均为机试。最终以复赛分数作为成绩进行评奖。
评测系统
NOI Linux 系统
编程语言
考试纪律
- 选手不可以携带草稿纸、手机、U 盘等进入考场。
- 在考试中舞弊,可能会被给予取消考试资格、禁赛等处罚。

浙公网安备 33010602011771号