初赛
一、计算机编程语言的分类(原文链接)
- 机器语言(二进制代码)
- 汇编语言(面向机器的程序设计语言)
- 高级语言(按转换方式可分为两类:1.编译型语言; 2.解释型语言 || 按照客观系统的描述可分为两类:1.面向过程语言; 2.面向对象语言 || 按照编程范型可分为:1.命令式语言; 2.函数式语言; 3.逻辑式语言; 4.面向对象语言)
-
三种语言的优缺点:
机器语言:
可读性、可移植性差,编程繁杂。
直接执行,速度快,资源占用少;
汇编语言:
不同的处理器有不同的汇编语言语法和编译器,编译的程序无法在不同的处理器上执行,缺乏可移植性,难于从汇编语言代码上理解程序设计意图,可维护性差,即使是完成简单的工作也需要大量的汇编语言代码,很容易产生bug,难于调试,使用汇编语言必须对某种处理器非常了解,而且只能针对特定的体系结构和处理器进行优化,开发效率很低,周期长且单调。
能够保持机器语言的一致性,直接、简捷,并能像机器指令一样访问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、I/O端口等。使用汇编语言,可以访问所有能够被访问的软、硬件资源,目标代码简短,占用内存少,执行速度快。高级语言:
运行速度基本上比直接用汇编写的慢,速度和程序大小与编译软件有关。
高级语言接近算法语言,易学、易掌握,级语言为程序员提供了结构化程序设计的环境和工具,使得设计出来的程序可读性好,可维护性强,可靠性高;高级语言远离机器语言,与具体的计算机硬件关系不大,可移植性好,重用率高;由于把繁杂琐碎的事务交给了编译程序去做,所以自动化程度高,开发周期短,且程序员得到解脱,可以集中时间和精力去从事对于他们来说更为重要的创造性劳动,以提高程序的质量。 -
高级语言的分类:
按转换方式可分为两类:1.编译型语言; 2.解释型语言
-
编译型语言:
编译性语言写的程序在被执行之前,需要一个专门的编译过程,把程序编译成为机器语言的文件,比如exe文件,以后要运行的话就不用重新翻译了,直接使用编译的结果就行了(exe文件),因为翻译只做了一次,运行时不需要翻译,所以编译型语言的程序执行效率高。
-
解释型语言:
解释性语言的程序不需要编译,在运行程序的时候才翻译,每个语句都是执行的时候才翻译。这样解释性语言每执行一次就需要逐行翻译一次,效率比较低。
现代解释性语言通常把源程序编译成中间代码,然后用解释器把中间代码一条条翻译成目标机器代码,一条条执行。
-
关于脚本语言:
脚本语言是一种解释性的语言,脚本语言是为了缩短传统的编写-编译-链接-运行(edit-compile-link-run)过程而创建的计算机编程语言。脚本语言一般都 有相应的脚本引擎来解释执行。 他们一般需要解释器才能运行。一个脚本通常是解释运行而非编译。脚本语言通常都有简单、易学、易用的特性,目的就是希望能让程序员快速完成程序的编写工作。而宏语言则可视为脚本语言的分支,两者也有实质上的相同之处。脚本语言一般都是以文本形式存在,类似于一种命令。
解释性语言:Java、JavaScript、Perl、Python、Ruby、MATLAB 等。
编译性语言: C/C++、Pascal/Object Pascal(Delphi)
脚本语言:Python、JavaScript,ASP,PHP,Perl等
按照客观系统的描述可分为两类:1.面向过程语言; 2.面向对象语言
-
面向过程语言:
面向过程语言是以过程或函数为基础的,这种语言对底层硬件,内存等操作比较方便,但是写代码和调试维护等会很麻烦。例如:c语言
-
面向对象语言:
面向对象语言(Object-Oriented Language)是一类以对象作为基本程序结构单位的程序设计语言,指用于描述的设计是以对象为核心,而对象是程序运行时刻的基本成分。语言中提供了类、继承等成分。
面向对象语言的发展有两个方向:一种是纯面向对象语言,如Smalltalk、EIFFEL等;另一种是混合型面向对象语言,即在过程式语言及其它语言中加入类、继承等成分,如C++、Objective-C等
按照编程范型可分为:1.命令式语言; 2.函数式语言; 3.逻辑式语言; 4.面向对象语言
-
命令式语言:
命令式程序设计语言是基于动作的语言,以冯诺依曼计算机体系结构为背景。机器语言及汇编语言是最早的命令式语言。在这种语言中,计算机被看做是动作的序列,程序就是用语言提供的操作命令书写的一个操作序列。用命令式程序设计语言编写程序,就是描述解题过程中每一步的过程,程序的运行过程就是问题的求解过程,因此也称为过程式语言。Fortran、ALGOL、COBOL、C、Ada、Pascal等都是命令式程序设计语言。
-
函数式语言:
函数式编程是种编程典范,它将电脑运算视为函数的计算。函数编程语言最重要的基础是 λ 演算(lambda calculus)。而且λ演算的函数可以接受函数当作输入(参数)和输出(返回值)。和指令式编程相比,函数式编程强调函数的计算比指令的执行重要。和过程化编程相比,函数式编程里,函数的计算可随时调用。这种语言的语义基础是基于数学函数概念的值映射的λ算子可计算模型。这种语言非常适合于进行人工智能等工作的计算。典型的函数式语言如 Lisp、Haskell、ML、Scheme 、F#等。
-
逻辑式语言:
这种语言的语义基础是基于一组已知规则的形式逻辑系统。这种语言主要用在专家系统的实现中。最著名的逻辑式语言是 Prolog。
-
面向对象语言:
现代语言中的大多数都提供面向对象的支持,但有些语言是直接建立在面向对象基本模型上的,语言的语法形式的语义就是基本对象操作。主要的纯面向对象语言是 Smalltalk。
-
\(\text{eg1.}\)下列属于解释执行的程序设计语言是 ( D )
A. \(\text{C}\) B.\(\text{ C++}\) C. \(\text{Pascal}\) D.\(\text{ Python}\)
\(\text{eg2.}\)以下是面向对象的高级语言的有 ( B、D )。
A. \(\text{汇编语言}\) B. \(\text{C++}\) C. \(\text{Fortran}\) D. \(\text{Java}\)
二、排序相关
详见排序算法
排序方法 | 平均时间 | 最好时间 | 最坏时间 |
---|---|---|---|
桶排序(稳定) | \(O\left ( N\right )\) | \(O\left ( N\right )\) | \(O\left ( N\right )\) |
基数排序(稳定) | \(O\left ( N\right )\) | \(O\left ( N\right )\) | \(O\left ( N\right )\) |
归并排序(稳定) | \(O\left ( N\log N\right )\) | \(O\left ( N\log N\right )\) | \(O\left ( N\log N\right )\) |
快速排序(不稳定) | \(O\left ( N\log N\right )\) | \(O\left ( N\log N\right )\) | \(O\left ( N^2 \right )\) |
堆排序(不稳定) | \(O\left ( N\log N\right )\) | \(O\left ( N\log N\right )\) | \(O\left ( N\log N\right )\) |
希尔排序(不稳定) | \(O\left ( N^{1.25}\right )\) | ||
冒泡排序(稳定) | \(O\left ( N^2 \right )\) | \(O\left ( N\right )\) | \(O\left ( N^2 \right )\) |
选择排序(不稳定) | \(O\left ( N^2 \right )\) | \(O\left ( N^2 \right )\) | \(O\left ( N^2 \right )\) |
直接插入排序(稳定) | \(O\left ( N^2 \right )\) | \(O\left ( N\right )\) | \(O\left ( N^2 \right )\) |
\(\text{eg1.}\)设 A和 B是两个长为 n的有序数组,现在需要将 A和 B合并成一个排好序的 数组,请问任何以元素比较作为基本运算的归并算法最坏情况下至少要做 ( D ) 次比较。
A. \(n^2\) B. \(n\text{log}n\) C. \(2n\) D. \(2n-1\)
解析:此时,将数组 A 与数组 B 中的元素两两比较,将值小的放进数组 C, 直到数组 C 填满为止。
因为 C 有 \(2n\)个空位,每次两两比较就放进去一个数,而最后一个剩下的元素可以不用比较直接放进去,所以一共两两比较了 \(2n-1\) 次。
补:任何以元素比较作为基本运算的归并算法最好情况下要做 \(\min\{m, n\}\) 次比较。(两数组长度分别为 m , n )
解析:有个疑问: 若一个数组为 1, 2,3 ; 另一个数组为 4, 5, 6, 7; 则直接将后一个数组最小的与前一个数组最大的比较,仅需一次比较就行了
一定要注意,这是简单归并排序,必须从第一个元素比。
因此,最好情况下,至少需要两两比较一个数组的长度,比较次数为 min{m,n}
————以上解析来自 将有序数组 归并排序 最多与最少比较次数
\(\text{eg2.}\)以下排序算法在最坏情况下时间复杂度最优的有 ( C、D ) 。
A. \(\text{冒泡排序}\) B. \(\text{快速排序}\) C. \(\text{归并排序}\) D. \(\text{堆排}\)
\(\text{eg3.}\)下列算法中, ( D ) 是稳定的排序算法。
A.\(\text{快速排序}\) B. \(\text{堆排序}\) C. \(\text{希尔排序 }\) D. \(\text{插入排序 }\)
三、CCF、NOIp、信息学竞赛相关
-
全国青少年信息学奥林匹克竞赛(National Olympiad in Informatics,NOI),是由中华人民共和国教育部和中国科学技术协会批准的,中国计算机学会主办的主要面向中华人民共和国全国中学生的每年一度的信息学(计算机)学科奥林匹克竞赛。第一届竞赛于1984年举行,当时名称为全国中学生计算机程序设计竞赛。自1989年起,改名为全国信息学奥林匹克竞赛。————维基百科
-
全国青少年信息学奥林匹克冬令营(Winter Camp,简称WC)自1995年起。每年在寒假期间开展为期一周的培训活动。冬令营共8天,包括授课、讲座、讨论、测试等。参加冬令营的营员分正式营员和非正式营员。国家集训队的选手和指导教师为正式营员,非正式营员限量自愿报名参加。在冬令营授课的是著名大学的资深教授及已获得国际金牌学生的指导教师。————维基百科
-
全国青少年信息学奥林匹克联赛(英语:National Olympiad in Informatics in Provinces,简称:NOIP)是中华人民共和国组织的、面向中国(含中港澳)中学生的信息学竞赛[1],由中国计算机学会主办,其中香港特别行政区由香港电脑教育学会承办[2]。初赛在每年10月第二个星期六,复赛在每年11月第二个周末举办。由于某种原因,由CCF主办的全国青少年信息学奥林匹克联赛NOIP(普及组及提高组)从2019起暂停。————维基百科
-
国际信息学奥林匹克中国队选拔(China Team Selection,简称CTS)。2018年及以前称作国际信息学奥林匹克中国队选拔赛(China Team Selection Competition,简称CTSC)。5名中国国家队候选队队员将参与选拔活动,获得前4名的优胜者将代表中国参加IOI。————百度百科
-
中国计算机学会(CCF)成立于1962年,全国一级学会,独立社团法人,隶属于中国科学技术协会,是一个推动计算机学术进步和技术成果的应用的学术组织。
中国电子学会计算机专业委员会于1962年6月成立,1966年开始因文革停止活动,1979年1月,学会恢复活动并改名为中国电子学会计算机学会。1985年3月,中国科协批准成立中国计算机学会。1985年6月1日,中国计算机学会正式成立。————维基百科
-
国际信息学奥林匹克竞赛(International Olympiad in Informatics,IOI),是面向中学生的一年一度的信息学科竞赛。第一届国际信息学奥林匹克竞赛于1989年在保加利亚的布拉维茨举行。
这项竞赛包含两天的计算机程序设计,主要编程语言以c++为主,解决各类算法问题。选手以个人为单位,每个国家最多可选派4名选手参加(2016年共有83个国家参赛)。参赛选手从各国相应计算机竞赛中选拔。————维基百科
-
图灵奖(英语:ACM A.M. Turing Award),又译杜林奖、A.M.图灵奖,是计算机协会(ACM)于1966年设立的奖项,专门奖励对计算机事业作出重要贡献的个人。其名称取自世界计算机科学的先驱、英国科学家、曼彻斯特大学教授艾伦·图灵(A.M. Turing),这个奖设立目的之一是纪念这位现代计算机科学的奠基者。获奖者必须是在计算机领域具有持久而重大的先进性的技术贡献。大多数获奖者是计算机科学家。是计算机界最负盛名的奖项,有“计算机界诺贝尔奖”之称。
图灵奖对获奖者的要求极高,评奖程序也极严,一般每年只奖励一名计算机科学家,只有极少数年度有两名以上在同一方向上做出贡献的科学家同时获奖。2014年11月13日之前图灵奖由英特尔公司以及Google公司赞助,奖金为250,000美元。2014年11月13日,虽然英特尔退出赞助,Google反而将奖金提高到1,000,000美元,和诺贝尔奖奖金相近。
每年,美国计算机协会将要求提名人推荐本年度的图灵奖候选人,并附加一份200到500字的文章,说明被提名者为什么应获此奖。任何人都可成为提名人。美国计算机协会将组成评选委员会对被提名者进行严格的评审,并最终确定当年的获奖者。————维基百科
\(\text{eg1.}\)中国计算机学会于 ( B ) 年创办全国青少年计算机程序设计竞赛。
A.\(\text{1983}\) B. \(\text{1984}\) C. \(\text{1985}\) D. \(\text{1986}\)
\(\text{eg2.}\)下列关于图灵奖的说法中,正确的有 ( B、C、D ) 。
A. 图灵奖是由电气和电子工程师协会(IEEE)设立的。
B. 目前获得该奖项的华人学者只有姚期智教授一人。
C. 其名称取自计算机科学的先驱、英国科学家艾伦·麦席森·图灵。
D. 它是计算机界最负盛名、最崇高的一个奖项,有“计算机界的诺贝尔奖”之称。
\(\text{eg3.}\)从 () 年开始,NOIP 竞赛将不再支持 Pascal 语言。
A.\(\text{2020}\) B. \(\text{2021}\) C. \(\text{2022}\) D. \(\text{2023}\)
\(\text{eg4.}\)以下和计算机领域密切相关的奖项有 ( ) 。
A. \(\text{奥斯卡奖}\) B. \(\text{图灵奖}\) C. \(\text{诺贝尔奖}\) D. \(\text{王选奖}\)