全国青少年CSP-J编程竞赛真题解析

978-7-115-62566-3
作者: 核桃编程
译者:
编辑: 吴晋瑜

图书目录:

详情

本书汇总了 CCF CSP 非专业级别的能力认证入门级(简称 CCF CSP-J)第一轮和第二轮认证的真题,并附带 3 套第一轮认证模拟试卷和 1 套第二轮认证模拟题。本书通过对计算机历史、C++语言的基础语法和基础算法的介绍,详细讲解了自 2019 年以来的真题,帮助想要参加认证的选手熟悉常见的题型、知识点分布以及重点和难点,了解近几年 CCF CSP-J 认证的考查方向和变化趋势。书中提供的习题可以帮助 参赛选手提升能力、查漏补缺。 本书既可以作为参赛选手的参考用书,也可以作为教师辅导用书。

图书摘要

版权信息

书名:全国青少年CSP-J编程竞赛真题解析

ISBN:978-7-115-62566-3

本书由人民邮电出版社发行数字版。版权所有,侵权必究。

您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。

我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。

如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。


版  权

著    核桃编程

责任编辑 吴晋瑜

人民邮电出版社出版发行  北京市丰台区成寿寺路11号

邮编 100164  电子邮件 315@ptpress.com.cn

网址 http://www.ptpress.com.cn

读者服务热线:(010)81055410

反盗版热线:(010)81055315

内 容 提 要

本书汇总了CCF CSP非专业级别的能力认证入门级(简称CCF CSP-J)第一轮和第二轮认证的真题,并附带3套第一轮认证模拟试卷和1套第二轮认证模拟题。本书通过对计算机历史、C++语言的基础语法和基础算法的介绍,详细讲解了自2019年以来的真题,帮助想要参加认证的选手熟悉常见的题型、知识点分布以及重点和难点,了解近几年CCF CSP-J认证的考查方向和变化趋势。书中提供的习题可以帮助参赛选手提升能力、查漏补缺。

本书既可以作为参赛选手的参考用书,也可以作为教师辅导用书。

编 委 会

内容总策划:王宇航

执 行 主 编:谭锐莘 伍建霖 何汪瀚冰 

      汪诗豪 代建杉

前  言

随着信息技术和人工智能的高速发展,越来越多的青少年朋友对计算机编程领域投入了大量的关注。CSP(Certified Software Professional)作为中国计算机学会推出的非专业级别的软件能力认证,难度直接对标全国青少年信息学奥林匹克联赛(National Olympiad in Informatics in Provinces,NOIP),是目前中小学编程领域含金量最高的比赛之一。同时,CSP及后续竞赛作为教育部认可的“五大联赛”之一,也是高校强基计划重要的参考标准。

参加CSP竞赛的选手年龄跨度广,很多对计算机编程感兴趣的同学从初中甚至小学就接触了这一比赛。近年来,从NOIP到CSP,竞赛的风格和题型发生了较大变化,但市面上相关图书的内容相对较少,而且多数不适合小学生学习。究其原因,多半是因为C++语言非常严格,细节较多,入门门槛高。一些书中习题的难度上升过快,缺少基础题,导致读者面临“听懂了,但实际编程过程中并不能真正独立实现”的问题,进而学习的成就感大幅下降,尤其在入门阶段,“劝退率”很高。CSP认证自2019年推出以来,侧重考查选手对信息学内容掌握的全面程度,要求选手掌握丰富的计算机知识,具备熟练的代码阅读能力、深刻的算法理解能力等,从而导致以往很多选手采用的短期识记方法不再奏效,这体现了CSP认证具备很强的实用性,也是CSP认证在一系列信息学竞赛中受众面非常广的原因。

本书由核桃编程C++教研团队一批资深的信息学老师编写,他们长期活跃在教学一线,其中不乏在学生时代就已经斩获信息学竞赛奖项的优秀教师。通过将多年的竞赛经验与近年的信息学趋势发展相结合,核桃编程C++教研团队自2019年起探索出一套适合青少年学习信息学的路径。核桃编程的C++学员在老师的指导下,通过科学的学习方法,每年在CSP认证中都能取得耀眼的成绩,其中不乏CSP-J满分、CSP-S一等奖选手等。

本书用简短的篇幅介绍了计算机基础知识,用详尽的语言讲授了C++语法知识,用大量的实例展现了C++算法思想。为了让选手们能够形成有效的学习闭环,编委会成员将近 几年的真题穿插在各个章节,配以相应的习题供选手们巩固知识点,并且精心编制了3套CSP-J第一轮模拟试卷和1套CSP-J第二轮模拟题,让选手们检验自己的学习效果。

本书资源配置说明

为了帮助读者更好地备战CSP认证,核桃编程搭建了在线评测平台,并提供了“环境配置和使用”“代码编写技巧”“常用知识点文档”等资料。读者可登录oj.hetao101.com网站自行学习。

第一部分 CSP-J第一轮认证

CSP-J第一轮认证为笔试。笔试内容均为客观题,一般由三部分组成:第一部分是选择题,内容涉及计算机基础知识、C++基础语法、常见数据结构、算法和数论等;第二部分是阅读程序题,含选择题和判断题,考查选手对程序功能的理解能力、输入/输出的模拟能力、复杂度的计算能力等;第三部分是完善程序题,由选择题组成,考查选手对程序功能的理解能力、算法设计的抽象能力、程序设计的技巧性等。

这一部分将详细介绍CSP-J第一轮认证所涉及的常见知识点,通过讲解历年真题介绍常用的解题技巧和方法。

第1章 计算机基础知识

在2019—2022这4年的CSP初级软件能力认证考试中,涉及计算机基础知识的选择题有2~5道,占总分值的4%~10%。具体考点分值分布如表1.1所示。

表1.1

年份

计算机历史

计算机系统

数据表示与计算

信息编码

网络基础

计算机语言

2019年

2

2

2

2

2020年

2

2

2

2

2021年

2

2

2

2

2022年

2

2

图1.1所示为本章思维导图。

图1.1

1.1 计算机历史

在本节中,我们会介绍计算机历史的相关内容,包括计算机发展历史、计算机领域的代表人物和计算机分类,如图1.2所示。

图1.2

1.1.1 计算机的发展历史

人们常说的“计算机”,是指“电子数字计算机”。1946年,美国宾夕法尼亚大学的物理学家莫克利和工程师埃克特研制出了ENIAC计算机,它是世界上第一台通用电子数字计算机。

以计算机采用的元器件作为划分依据,迄今为止计算机的发展已经经历了四代,目前正在向第五代过渡,各代的发展概况如表1.2所示。

表1.2

代别

逻辑元件

特点

应用领域

第一代(1946—1957)

电子管

体积大、耗电多、可靠性差、价格昂贵

科学和工程计算

第二代(1958—1964)

晶体管

体积缩小、耗电减少、可靠性提高、性能提高

数据处理领域

第三代(1965—1970)

中小规模集成电路

体积更小、耗电更少、可靠性更好、性能更高

科学计算、数据处理、工业控制等领域

第四代(1971年至今)

大规模集成电路

微型化、耗电极少、可靠性很高

深入各行各业,家庭和个人开始使用计算机

1.1.2 计算机领域的代表人物

在计算机的发展过程中,涌现出了许多杰出的人物,如艾伦·图灵、冯·诺依曼等。

1.艾伦·图灵

艾伦·图灵(见图1.3)是英国计算机科学家、数学家、逻辑学家、密码分析学家和理论生物学家,被誉为“计算机科学与人工智能之父”,以他的名字命名的“图灵奖”是计算机领域的最高奖项。

图1.3

艾伦·图灵对于人工智能的发展有诸多贡献,比如图灵机模型和图灵测试,其中,图灵测试是一种用于判定机器是否具有人工智能的测试方法。

2.冯·诺依曼

冯·诺依曼(见图1.4)是理论计算机科学与博弈论的奠基者,被誉为“现代计算机之父”。计算机系统的冯·诺依曼结构,采用存储程序以及二进制编码等思想,至今仍为电子计算机设计者所遵循。

图1.4

3.丹尼斯·里奇和肯·汤普森

丹尼斯·里奇和肯·汤普森(见图1.5)都是美国的计算机软件工程师,他们共同创建了UNIX操作系统和C语言,并因此在1983年同时获得图灵奖。

图1.5

1.1.3 计算机的分类

按照计算机的性能和规模的不同,我们可以将计算机分为巨型机、大型机、小型机、微型机和单片计算机,如表1.3所示。

表1.3

具体分类

特点

应用领域

巨型机

运算速度快、存储容量大

核武器研制、空间技术、大规模天气预报

大型机

通用性强、综合处理能力强、性能覆盖面广

银行、政府部门、社会管理机构等

小型机

规模小、易于操作、便于维护

中小型企业事业单位

微型机

价格低廉、性能强、体积小、功耗低

日常办公、生活、学习

单片计算机

体积小、质量轻、结构简单

控制家电、广告牌等智能电气设备

1.1.4 真题解析

1.【2019年第15题】以下哪个奖项是计算机科学领域的最高奖?(  )

A.图灵奖

B.鲁班奖

C.诺贝尔奖

D.普利策奖

【解析】图灵奖是由美国计算机协会(Association for Computing Machinery,ACM)于1966年设立的计算机奖项,旨在奖励对计算机事业做出重要贡献的个人。图灵奖是计算机领域的国际最高奖项,被誉为“计算机界的诺贝尔奖”。

【答案】A

2.【2021年第2题】以下奖项与计算机领域最相关的是(  )。

A.奥斯卡奖

B.图灵奖

C.诺贝尔奖

D.普利策奖

【解析】同第1题的【解析】。

【答案】B

1.1.5 习题

1.(  )提出了“存储程序”的计算机工作原理。

A.克劳德·香农

B.查尔斯·巴比奇

C.艾伦·图灵

D.冯·诺依曼

【解析】冯·诺依曼提出的冯·诺依曼体系结构,采用存储程序以及二进制编码等思想,至今仍为电子计算机设计者所遵循。

【答案】D

2.从ENIAC到当前最先进的计算机,冯·诺依曼体系结构始终占有重要地位,那么冯·诺依曼体系结构的核心内容是(  )。

A.采用开关电路

B.采用半导体器件

C.采用存储程序和程序控制原理

D.采用键盘输入

【解析】冯·诺依曼体系结构的核心内容是采用存储程序和程序控制原理。

【答案】C

3.1946年,诞生于美国宾夕法尼亚大学的ENIAC属于(  )计算机。

A.电子管

B.晶体管

C.集成电路

D.超大规模集成电路

【解析】ENIAC属于电子管计算机。

【答案】A

4.计算机最早的应用领域是(  )。

A.数值计算

B.人工智能

C.电子游戏

D.电子商务

【解析】计算机最早的应用领域是数值计算。

【答案】A

5.下列关于计算机历史的叙述中,正确的是(  )。

A.第一代计算机采用的元器件是晶体管

B.计算机按照性能和规模可分为巨型机、大型机、小型机、微型机和单片计算机

C.个人计算机属于小型机

D.艾伦·图灵提出了存储程序以及二进制编码等思想

【解析】第一代计算机采用的元器件是电子管,第二代计算机采用的元器件是晶体管,选项A错误;个人计算机属于微型机,选项C错误;存储程序以及二进制编码等思想是由冯·诺依曼提出的,选项D错误。

【答案】B

1.2 计算机系统

随着计算机技术的不断发展,微型计算机已经成为计算机世界的主流计算机之一。日常生活中常用的桌面计算机、笔记本计算机等众多设备都属于微型计算机。本节将主要以微型计算机为原型,介绍计算机系统的组成,如图1.6所示。

图1.6

计算机硬件是看得见摸得着的设备,是计算机进行工作的基础, 例如常见的主机、鼠标、键盘等;计算机软件是在硬件设备上运行的各种程序及其文档, 例如Windows系统、Office办公软件等。

1.2.1 计算机硬件系统

按照冯·诺依曼计算机体系结构,计算机硬件系统由五部分组成:运算器、控制器、存储器、输入设备和输出设备。

1.运算器

运算器是计算机中执行各种算术运算和逻辑运算操作的部件。运算器的核心部件是算术逻辑部件(ALU),并包含若干通用寄存器,用来暂时存放操作数和中间结果。

2.控制器

控制器是指挥计算机各个部件按照指令的功能和要求协调工作的部件,是计算机的“神经中枢”和“指挥中心”,完成协调和指挥整个计算机系统的操作。

运算器和控制器通常集成在一块半导体芯片上,称为中央处理器(Central Processing Unit)或微处理器,简称CPU。CPU是整个计算机的核心部件。

3.存储器

存储器是计算机系统中的记忆设备,用来存放程序和数据。存储器包括主存储器、外存储器,以及CPU就内部的高速缓冲存储器(Cache)。

数据存取速度:Cache >主存储器>外存储器

(1)Cache:其工作原理是将CPU频繁用到的程序和数据从主存储器送到Cache,这样CPU就能直接从Cache中取得指令和数据,达到加速程序运行的效果。

(2)主存储器:又称为内存,计算机中所有程序的运行都是在内存中进行的,内存的核心在于地址和内容。地址是指每个存储单元对应的序号,一般是从0开始逐个编制;而内容是指存储单元中存放的信息。

(3)外存储器:又称为辅助存储器,作为主存储器的辅助存储部件,外存储器大大扩充了存储器的容量。目前常用的辅助存储器有U盘、硬盘、光盘及网络存储器。

4.输入设备

输入设备是指向计算机输入信息的设备。常用的输入设备有键盘、鼠标、扫描仪、传声器(麦克风)、触摸屏等。

5.输出设备

输出设备是指从计算机输出信息的设备。常用的输出设备有显示器、打印机、绘图仪和扬声器等。

1.2.2 计算机软件系统

如图1.7所示,软件系统一般分为系统软件和应用软件,用户主要通过软件和计算机进行交流。所有软件运行需要的程序和数据都是存放在计算机内存里的。

图1.7

1.2.3 真题解析

1.【2020年第1题】在内存储器中每个存储单元都被赋予唯一的序号,称为(  )。

A.地址

B.序号

C.下标

D.编号

【解析】在内存储器中每个存储单元都被赋予了唯一的地址。

【答案】A

2.【2021年第3题】目前主流的计算机存储数据最终都是转换成(  )数据进行存储。

A.二进制

B.十进制

C.八进制

D.十六进制

【解析】主流的计算机存储数据最终都是转换成二进制数据进行存储。

【答案】A

1.2.4 习题

1.一个完整的计算机系统应包括(  )。

A.系统硬件和系统软件

B.硬件系统和软件系统

C.应用层系统、逻辑层系统及物理层系统

D.运算器、控制器、存储器、输入设备、输出设备

【解析】一个完整的计算机系统由硬件系统和软件系统组成。

【答案】 B

2.下列各项中,哪一项不是CPU的组成部分?(  )

A.运算器

B.控制器

C.寄存器

D.显示器

【解析】显示器是输出设备,不是CPU(中央处理器)的组成部分。

【答案】D

3.在微型计算机中,运算器的基本功能是(  )。

A.控制机器各个部件协调工作

B.实现算术运算和逻辑运算

C.获取外部信息

D.存放程序和数据

【解析】运算器是计算机中执行各种算术和逻辑操作的部件。

【答案】B

4.下列软件中不是计算机操作系统软件的是(  )。

A.Windows

B.NOI Linux

C.WPS

D.DOS

【解析】Windows、NOI Linux、DOS都是操作系统,WPS是一款办公软件。

【答案】C

小技巧:

名称中带有Linux和OS的,很有可能是操作系统软件,但这并不是绝对的。

5.以下哪一个软件不是常用的关系型数据库软件?(  )

A.MySQL

B.Oracle Database

C.PostgreSQL

D.Microsoft Office

【解析】MySQL、Oracle Database、PostgreSQL都是常用的关系型数据库软件,Microsoft Office是微软发行的一款办公软件。

【答案】D

小技巧:

名称中带有SQL、data、base和DB的,很有可能是数据库软件,但这并不是绝对的。

1.3 数据表示与计算

数据表示与计算的主要内容如图1.8所示。

图1.8

1.3.1 数制转换

数制也称计数制,是用一组固定的符号和统一的规则来表示数值的方法。日常生活中最常用的是十进制,而在计算机中,多采用二进制,有时也采用八进制和十六进制。

1.3.2 进位计数制

进位计数制简称进位制,是按进位方式实现计数的一种规则,特点是数码的数值大小与它所在的位置有关。每一数位的数值是由该位数码的值乘以处在该位的一个固定常数,这个常数称为位权或权值。例如,在十进制中,个位的位权是100,十位的位权是101,百位的位权是102,以此类推。

十进制:是基数为10的数制,它有0~9共10个数码,进位规则是“逢10进1”。

二进制:是基数为2的数制,它只有0和1两个数码,进位规则是“逢2进1”。

八进制:是基数为8的数制,它有0~7共8个数码,进位规则是“逢8进1”。

十六进制:是基数为16的数制,有0~9和A、B、C、D、E、F共16个数码,其中A~F代表的数值依次是10~15,进位规则是“逢16进1”。

1.常用数制的书写方式

为了区分不同的数制,我们可以采用以下两种方式表示。

(1)字母表示法:可在数据后面加一个特定的字母来表示它所采用的进制。通常以字母B表示二进制、字母O表示八进制、字母D表示十进制、字母H表示十六进制。例如,11B(二进制)、11O(八进制)、11D(十进制)、11H(十六进制)。

(2)下标表示法:在数据的右下角加上相应进制的基数。例如,(11)2、(11)8、(11)10、(11)16

2.不同进制之间的转换

(1)非十进制数转换十进制数:将非十进制数按位权展开,求出各位数值之和,就可以得到对应的十进制数。

【示例】请将二进制数(1011.01)2转换成十进制数。

【解答】按位权展开:(1011.01)2=1×23+0×22+1×21+1×20+0×2-1+1×2-2=8+2+1+0.25 =(11.25)10

(2)十进制数转换非十进制(R进制)数:将十进制数的整数部分和小数部分分别转换成R进制数,再把结果合并起来,就可以得到对应的R进制数。其中十进制数的整数部分采用“除基取余法”进行转换,小数部分采用“乘基取整法”进行转换。

整数部分的转换——除基(R)取余法:除基取余法是用十进制数除以目的数制的基数R,所得余数作为最低位,把得到的商再除以R,所得余数作为次低位,以此类推,直至商为0时,所得余数作为最高位。

【示例】请将十进制数(29)10转换为二进制数。

【解答】把(29)10转换为二进制数,逐次除以2取余数:

然后,从下往上写出余数,就可以得到(29)10=(11101)2

小数部分的转换——乘基(R)取整法:乘基取整法是用目的数制的基数R乘以十进制数,对于第一次相乘得到的结果,将整数部分作为最高位,把结果的小数部分再乘以R,所得结果的整数部分作为次高位,以此类推,直至小数部分为0,或者达到要求的精度为止。

【示例】请将十进制数(0.625)10转换为二进制数。

【解答】把(0.625)10 转换为二进制数,逐次乘以2取整:

然后,依次写出整数,可以得到(0.625)10=(0.101)2

注意,若要把十进制数(29.625)10 转换成二进制数,只需要把上面求出的整数部分和小数部分合并起来,可以得到(29.625)10=(11101.101)2

3.二、八、十六进制数的互相转换

(1)二进制数和八进制数之间的转换:由于八进制数的基数8=23,因此3位二进制数可以构成1位八进制数。如果要将二进制数转换成八进制数,只需要将二进制数的整数部分自右向左每3位一组,最后一组不足3位时以0补足;小数部分自左向右每3位一组,最后一组不足3位时以0补齐;再把每组对应的八进制数写出即可。

【示例】请将二进制数(1100110.0101)2转换为八进制数。

【解答】按照上述方法分组:

由此可知,(1100110.0101)2 =(146.24)8

反之,如果要将八进制数转换成二进制数,只要将每1位八进制数写成3位二进制数,再按顺序排列起来即可。

(2)二进制数和十六进制数之间的转换:由于十六进制数的基数16=24,因此4位二进制数可以构成1位十六进制数。如果要将二进制数转换成十六进制数,只需要将二进制数的整数部分自右向左每4位一组,最后一组不足4位时以0补足;小数部分自左向右每4位一组,最后一组不足4位时以0补齐;再把每组对应的十六进制数写出即可。

【示例】请将二进制数(1100110.10101)2转换为十六进制数。

【解答】按照上述方法分组:

由此可知,(1100110.10101)2=(66.A8)16

反之,如果要将十六进制数转换成二进制数,只要将每1位十六进制数写成4位二进制数,再按顺序排列起来即可。

(3)八进制数和十六进制数之间的转换:八进制数和十六进制数之间的转换以二进制数为桥梁,先转换为二进制数,再将二进制数转换为相应的进制数。

【示例】请将八进制数(57.16)8转换为十六进制数。

【解答】先转换成二进制数:

再转换成十六进制数:

由此可知,(57.16)8=(101111.00111)2=(2F.38)16

1.3.3 原码、反码与补码

在计算机中,正数和负数的表示方法是:把一个数的最高位作为符号位,用“0”表示“正”,用“1”表示“负”,数值位连同符号位一起作为一个数,称为机器数。带符号位的机器数对应的数值称为机器数的真值。例如,正数X=+1101011,负数Y=−1101011,表示成机器数就是X=01101011,Y=11101011。原码、反码和补码是计算机存储具体数字时常用的三种机器数。

1.原码

原码是符号位加上真值的绝对值,最高位表示符号,其余位表示真值的绝对值。

【示例】以8位二进制数举例,+1和−1的原码分别为:

[+1]=[00000001],[−1]=[10000001]

2.反码

正数的反码就是原码,负数的反码是在原码的基础上符号位不变,其余各位取反。

【示例】以8位二进制数举例,+1和−1的反码可用如下过程表示出来:

[+1]=[00000001]=[00000001]

[−1]=[10000001]=[11111110]

如果一个反码表示的是负数,可以先转换成原码,然后再看它的真值是多少。

3.补码

正数的补码就是原码,负数的补码是在原码的基础上符号位不变,其余各位取反,最后+1,也就是在反码的基础上+1。

【示例】以8位二进制数举例,+1和−1的补码可用如下过程表示出来:

[+1]=[00000001]=[00000001]=[00000001]

[−1]=[10000001]=[11111110]=[11111111]

如果一个补码表示的是负数,可以将其先转换成反码,再转换成原码,然后看它的真值是多少。也可以使用这样的规则进行转换:符号位不变,其他位取反,然后再+1。

【示例】以8位二进制数举例,补码11110001所表示的真值推导方法如下:

[11110001]=[10001110+1]=[10001111],所以[11110001]表示的真值是−15。

1.3.4 真题解析

1.【2019年第2题】二进制数11101110010111和01011011101011进行逻辑与运算的结果是(  )。

A.01001010001011

B.01001010010011

C.01001010000001

D.01001010000011

【解析】两个二进制数进行逻辑与运算的规则:依次计算每一个二进制位,如果两个数相同位上的数字都是1,则这一位的结果为1,否则结果为0。本题的运算见表1.4。

表1.4

第一个数

1

1

1

0

1

1

1

0

0

1

0

1

1

1

第二个数

0

1

0

1

1

0

1

1

1

0

1

0

1

1

逻辑与结果

0

1

0

0

1

0

1

0

0

0

0

0

1

1

【答案】D

2.【2020年第9题】二进制数1011 转换成十进制数是(  )。

A.11

B.10

C.13

D.12

【解析】将二进制数中的每一位数码与其相对应的位权相乘后再相加:23+21+20=8+2+1=11。

【答案】A

3.【2021年第7题】二进制数101.11对应的十进制数是(  )。

A.6.5

B.5.5

C.5.75

D.5.25

【解析】将二进制数中的每一位数码与其相对应的位权相乘后再相加:

1×22+0×21+1×20+1×21+1×22=5.75

【答案】C

4.【2022年第13题】八进制数32.1对应的十进制数是(  )。

A.24.125

B.24.250

C.26.125

D.26.250

【解析】将八进制数中的每一位数码与其相对应的位权相乘后再相加:

3×81+2×80+1×81=26.125。

【答案】C

1.3.5 习题

1.以下哪一项是二进制数10010010对应的十进制数?(  )

A.73

B.96

C.122

D.146

【解析】二进制数10010010对应的十进制数为27+24+21=146。

【答案】D。

2.以下哪一项是十进制数109对应的二进制数?(  )

A.1100101

B.1100111

C.1101001

D.1101101

【解析】本题的运算详见表1.5。十进制数109对应的二进制数为1101101。

表1.5

被除数

除数

余数

结果

109

2

54

1

自下而上
记录每个余数

54

2

27

0

27

2

13

1

13

2

6

1

6

2

3

0

3

2

1

1

1

2

0

1

【答案】D

3.以下哪一项是八进制数2330对应的十六进制数?(  )

A.230

B.3EB

C.4D8

D.4E0

【解析】八进制数转十六进制数,可以先将八进制数的每一位转换成3个二进制位,再将二进制数的每4位转换成一个十六进制位,即八进制数2 3 3 0=二进制数10 011 011 000=二进制数100 1101 1000=十六进制数4D8。

【答案】C

4.整数56的八位补码是(  )。

A.01001000

B.01011100

C.00111000

D.11100011

【解析】因为非负整数的原码=反码=补码,所以56的八位补码是00111000。

【答案】C

5.八位补码10100110对应的十进制整数是(  )。

A.−11

B.37

C.−37

D.−90

【解析】该补码符号位为1,可以确定是一个负数。对于负数来说,通过补码(10100110)→反码(10100101)→原码(11011010)的方式,再计算真值的绝对值(1011010)2得到其对应的十进制数是90,最后添加上负号就是−90。

【答案】D

1.4 信息编码

信息编码是指将信息从一种形式或格式转换为另一种形式或格式,按照预先规定的方法将文字、数字或其他对象转换成数码,或将信息、数据转换成规定的电脉冲信号。本节的主要内容如图1.9所示。

图1.9

1.4.1 ASCII码

ASCII码是由美国国家标准委员会制定的一种包括数字、字母、通用符号和控制符号在内的字符编码集,其全称为美国信息交换标准代码(American Standard Code for Information Interchange,ASCII),如表1.6所示。ASCII码是一种7位二进制编码,能表示27=128种国际上最通用的西文字符,是目前计算机特别是微型计算机中使用最普遍的字符编码集。

表1.6

ASCII码包括以下4类最常用的字符。

(1)数字0~9。ASCII码值为0110000B~0111001B,对应的十六进制数为30H~ 39H。

(2)26个英文字母。大写字母A~Z的ASCII码值为41H~5AH,小写字母a~z的ASCII码值为61H~7AH。

(3)通用符号。如+、−、=、*和/等共32个。

(4)控制符号。如空格符和回车符等共34个。

1.4.2 内码和外码

内码是计算机内部进行存储和运算使用的数字编码。对于输入计算机的文本文件,机器是存储其相应的字符的ASCII码,如输入字符“A”,计算机将其转换成内码65后存储 在内存中。

外码是相对内码而言,指经过“外在的”学习之后,计算机可直接认识的编码形式,如字符“A”的外码是“A”。通常一个西文字符占1字节,一个中文字符占2字节。

1.4.3 汉字信息编码

1.区位码和国际码

区位码把常用的汉字、数字和符号分类编在了一个方阵里,方阵的每一行称为“区”,每一列称为“位”,区码和位码均采用从01到94的十进制表示。方阵里的每个字符用4位十进制数表示,前两位是它的区码,后两位是它的位码。

国标码以GB/T 2312—1980为标准,包括6763个汉字及682个标点符号、西文字母、图形、数码等符号。国标码采用十六进制的21H到73H表示。

区位码和国标码之间的换算关系是:区码和位码分别加上十进制数32,就是对应的国标码。例如,“大”字的区位码为2083,对应的国标码就是3473H。

2.字形存储码

字形存储码是指供计算机输出(显示或打印)汉字时用的二进制信息,也称字模,常见的是数字化点阵字模。

一般的点阵规模大小有16×16、24×24等,每一个点在存储器中用一个二进制位(bit)存储,如图1.10所示。在16×16的点阵中,需16×16 bit的存储空间,也就是16×16÷8=32字节的存储空间。在相同点阵中,不管其笔画繁简,每个汉字所占的字节数相等。为了节省存储空间,普遍采用字形数据压缩技术,例如矢量汉字就是用矢量方法将汉字点阵字模进行压缩后得到的汉字字形的数字化信息。

图1.10

1.4.4 真题解析

1.【2019年第3题】一个32位整型变量占用(  )字节。

A.32

B.128

C.4

D.8

【解析】1字节= 8位,因此32位整型变量占用4字节。

【答案】C

2.【2020年第4题】现有一张分辨率为2048像素× 1024像素的32位真彩色图像。请问要存储这张图像,需要多大的存储空间?(  )。

A.16MB

B.4MB

C.8MB

D.2MB

【解析】该图片一共需要2048×1024×32位二进制,因为1字节(byte)等于8位(bit)二进制,1MB=1024KB=1024×1024B,所以需要2048×1024×32/(8×1024×1024) MB,即8MB。

【答案】C

1.4.5 习题

1.ASCII码的含义是(  )。

A.一个简单的中文信息编码

B.通用字符编码

C.计算机信息交换标准代码二代

D.美国信息交换标准代码

【解析】ASCII码的全称是“美国信息交换标准代码”。

【答案】D

2.已知大写字母A的十进制ASCII码为65,则大写字母K的十进制ASCII码为(  )。

A.72

B.73

C.75

D.76

【解析】在ASCII码表中,字母字符的ASCII码是连续的,所以大写字母K的ASCII码为65+10=75。

【答案】C

3.字符0的ASCII码为48,则字符8的ASCII码为(  )。

A.8

B.56

C.128

D.视具体的计算机而定

【解析】在ASCII码表中,因为数字字符的ASCII码是连续的,所以8的ASCII码为48+(8−0)=56。

【答案】B

4.关于ASCII码,下面哪个说法是正确的?(  )

A.ASCII码表一共包含了256个不同的字符

B.ASCII码方案最初由英国人图灵提出

C.最新扩展的ASCII码方案包含了汉字、阿拉伯语的字符编码

D.一个ASCII码使用一字节的内存空间就能够存放

【解析】ASCII码表中共有128个不同的编码,最初由美国电气和电子工程师协会制定,不能表示中文。

【答案】D

5.已知大写英文字母A的ASCII码 比小写英文字母a的ASCII码小32,则大写英文字符Q的ASCII码比小写英文字母n的ASCII码(  )。

A.大3

B.小3

C.小29

D.小35

【解析】26个大写英文字母的ASCII码是连续的,26个小写英文字母的ASCII码也是连续的,所以可以根据A的ASCII码得到Q的ASCII码为81,根据a的ASCII码得到n的ASCII码为110,所以Q的ASCII码比n的ASCII码小29。

【答案】C

1.5 网络基础

本节的主要内容如图1.11所示。

图1.11

1.5.1 网络体系结构

1.计算机网络

计算机网络是用来连接多台计算机的一套体系(见图1.12),主要用来解决“多台计算机之间如何互相传输数据”这个问题。就像世界上不同的国家分布在不同的位置,有不同的语言和文化,多台计算机也可能分布在不同的位置,有不同的型号。为了让计算机之间能传输数据,人们便制定了一些标准的传输数据的规则,这些规则被称为网络协议。在传输数据的基础上,计算机网络就有了资源共享、信息传输、分布处理、综合信息服务等功能。

图1.12

2.因特网

计算机网络按照其覆盖的范围,可以简单分为局域网(Local Area Network,LAN)和广域网(Wide Area Network,WAN),如图1.13所示。局域网与广域网按照一定的通信协议组成国际计算机网络,便是目前人们使用的国际互联网了,又称为因特网(Internet)。因特网中最基础的协议是TCP/IP(Transmission Control Protocol/Internet Protocol)协议。

图1.13

3.TCP/IP协议

TCP/IP协议包含了很多网络协议,如表1.7所示,其中TCP协议和IP协议最具代表性,所以被称为TCP/IP协议。

表1.7

协议类型

协议名称

文件传输协议

FTP

远程登录协议

Telnet

电子邮件协议

SMTP、POP3、IMAP

传输协议

TCP、UDP

网际互联协议

IP

1.5.2 IP地址

1.IP地址的概念

IP地址是因特网中每个节点的地址,相当于现实世界中的门牌号码,如图1.14所示。计算机之间传输信息,必须先知道对方在哪儿,IP地址就是因特网中的每个网络和每台机器的地址。

图1.14

2.IPv4与IPv6

IPv4与IPv6是目前常用的两种IP地址版本。其中,IPv4已经得到了广泛支持,它使用一个32位二进制数来表示地址,最多只能有232(约20亿)个地址。因为网络中的每台计算机都需要一个唯一的IP地址,所以在信息化的现代社会,IPv4的地址逐渐不够用了。IPv6使用的是一个128位的二进制数,最多有2128(约1039)个地址,足够为世界上的每台计算机都分配一个IP地址,目前大部分的计算机都支持IPv6,未来IPv6会成为因特网中主要使用的IP地址版本。

3.IP地址表示方法

IPv4的32位地址由两部分组成,一部分表示网络号,一部分表示机器号。按照表示网络号和机器号的长度不同分为A、B、C、D、E五类,如图1.15所示。不同类的IP地址能容纳的网络数量和机器数量各不相同。

图1.15

不管是哪一类的IP地址,都是一个32位的二进制数,计算机能很轻松地读取这个地址,但是人们很难书写和记忆。因此人们通常采用点分十进制法,将这32位分为4组,每组8位。然后把每组转换为对应的十进制数并用点号分隔。例如,32位的二进制IP地址01111011 10001011 10011111 11010101用点分十进制法表示为123.139.159.213。

1.5.3 域名系统

1.域名的概念

域名是IP地址的代称,访问一个域名就相当于访问它对应的IP地址。除了数字,域名还可以包含字母、连字符(-)等。这使得人们可以设计一些带有具体含义的域名。

域名里的英文字母没有大小写的区分,同一个域名写成大写和小写是等效的。另外,还有一种包含非英文字符的域名,叫作国际化域名,比如“.中国”。

2.域名的构成

一个完整的域名由多个部分组成,这些部分之间用点(.)隔开,每个部分不超过63个字符。其中,末尾的部分叫作顶级域名。

顶级域名可以分为两大类,其中一类叫作通用顶级域名,主要包括.com、.edu、.gov等。每个通用顶级域名都有各自的用途,常见通用顶级域名及用途如表1.8所示。

表1.8

域名

用途

.com

个人、机构、学校等均可使用

.edu

仅限特定教育机构使用

.gov

仅限政府使用

.info

一般供资讯性网站使用,但没有严格限制

.org

一般由非营利组织使用,但没有严格限制

另一类顶级域名叫作国家和地区顶级域名,这些域名一般由两个字符构成,表示对应国家或地区的名称缩写。表1.9列出了几个国家的域名。

表1.9

域名

对应国家

域名

对应国家

.cn

中国

.us

美国

.uk

英国

.fr

法国

.jp

日本

.kr

韩国

顶级域名的下一级是二级域名,它位于顶级域名之前。二级域名和顶级域名之间用一个点隔开,比如在www.×××××.com中,“×××××”是二级域名。二级域名前面是三级域名,三级域名前面是四级域名,以此类推。域名的级别数量一般没有限制,不过一个完整的域名的总长度不能超过253个ASCII码字符的总长度。

3.域名解析

域名解析是指把网络里的域名和IP地址建立对应关系,这项工作由域名系统(Domain Name System,DNS)完成。提供域名解析服务的服务器叫作DNS服务器(DNS Server)。

1.5.4 HTML基础知识

1.HTML的用途

HTML是超文本标记语言(Hyper Text Markup Language)的缩写,可用于创建互联网上的网页。计算机上的浏览器可以识别HTML文档,并将其转化成人们最终看到的网页。

HTML文档由HTML标签构成,标签包含在尖括号“< >”中。比如<title>是用来表示网页标题的标签,<body>是用来表示网页内容的标签。一个简单的HTML文档如图1.16所示。

图1.16

2.HTML的发展历程

HTML最早由物理学家蒂姆·伯纳斯-李于1991年提出。1993年,他与丹·康纳利共同撰写并发布了首个HTML规范的提案。1995年,HTML的新版本HTML 2.0发布。后续版本不断更新,目前最新版本是HTML 5,它能够更灵活地处理网页上的多媒体视频和图片。HTML各版本的发布年份如表1.10所示。

表1.10

HTML版本

发布年份

HTML

1993年

HTML 2

1995年

HTML 3

1997年

HTML 4

1997年

HTML 5

2014年

1.5.5 真题解析

【2019年第1题】中国的顶级域名是(  )。

A..cn

B..ch

C..chn

D..china

【解析】中国的顶级域名为 .cn。

【答案】A

1.5.6 习题

1.下列几个32位IP地址中,书写错误的是(  )。

A.192.168.0.101

B.177.168.233.1

C.255.255.255.255

D.127.0.0.256

【解析】IP地址中的每一个数字都应该在0~255内。

【答案】D

2.以下哪个协议是目前互联网上常用的E-mail服务协议?(  )

A.SSH

B.POP3

C.HTTP

D.FTP

【解析】常用的电子邮件(E-mail)传输协议有POP3、SMTP、IMAP。

【答案】B

3.FTP可以用于(  )。

A.发送电子邮件

B.在线直播

C.远程传输文件

D.量化交易

【解析】FTP的全称是文件传输协议(File Transfer Protocol),主要用于进行客户端和网络端的文件传输。

【答案】C

1.6 计算机语言

计算机语言是用于人和计算机沟通的语言,所有的软件包括操作系统和编译器都是由各种计算机语言编写的程序生成的。计算机语言按产生的时间顺序,一般分为三大类:机器语言、汇编语言和高级语言,如图1.17所示。

图1.17

1.6.1 机器语言

机器语言是计算机可以直接识别并运行的语言,它由一系列指令构成,每条指令完成一个具体操作,比如加法指令、减法指令、跳转指令等。

计算机内部的一切数据都是由二进制数表示的,指令也不例外。例如,0100 0001 0010可以作为一条机器指令,如图1.18所示,其中0100表示这条指令是加法指令,0001表示R1寄存器,0010表示R2寄存器,这条指令的功能是将R1寄存器中的数和R2寄存器中的数相加,结果存到R1寄存器中。

图1.18

使用机器语言编写的程序是一个巨大的由0、1组成的串码。早期的程序员将这些串码标记在打孔纸带上,数字1打孔,数字0不打孔,如图1.19所示。打孔纸带最终经过光电输入机将数据输入计算机,以供运行。

图1.19

复杂的计算机会有成百上千条指令,要背下这些指令的功能和每条指令的二进制格式,不是一件简单的事情。现在除了计算机生产厂商中的少数专业人员,几乎没有人需要用机器语言编写程序。

1.6.2 汇编语言

汇编语言是机器语言的另外一种形式,它用英文字母或单词的缩写作为指令,也可以认为汇编语言给每条指令起了一目了然的名字。例如,机器指令0100 0001 0010可以用ADD R1 R2代替,其中ADD代表加法指令,R1和R2是参与运算的两个寄存器的名字。

用汇编语言编写的程序不能在计算机上直接运行,需要先由编译器“翻译”成机器语言,再让计算机运行。这个翻译的过程通常称为编译,编译后的程序称为可执行程序,如图1.20所示。

图1.20

1.6.3 高级语言

高级语言是多种编程语言的统称,它的语言风格更接近于人类的自然语言。用高级语言编写代码时可以使用英文字母、英文单词和一些数学符号。编程人员可以在不了解计算机的硬件和CPU结构的情况下编写程序。例如计算两个数的和,在许多高级语言中可以写成a=a+b,这里a和b是两个变量,至于这两个变量在计算机中是怎么处理的、怎么存储的,编程人员不需要知道,全部交给计算机去处理。

图1.21展示了用机器语言(左)、汇编语言(中)和高级语言(右)编写的计算两数之和的程序。

图1.21

1.编译型语言与解释型语言

用高级语言编写的程序不能在计算机上直接运行,需要将其编译成计算机可以识别的机器语言才行。按照编译的方式不同,高级语言又可以分为编译型语言和解释型语言。

编译型语言需要用编译器将源程序一次性编译成机器语言,然后在计算机上运行。例如NOI选手在Windows系统上用C++语言编写的源程序,需要经过编译器(Dev-C++、CodeBlocks等)的编译,生成一个扩展名为.exe的文件,才能在计算机上运行。编译型语言主要有C、C++、Pascal、Object Pascal(Delphi)等。这种编译好的可执行程序实际上就是由机器指令组成的二进制程序,由于不同类别计算机的机器指令集是不同的,因此这个可执行程序不能在其他类别计算机上直接运行。

解释型语言不需要将源程序一次性编译出一个可执行文件,而是在运行的时候,由一个解释程序边解释边运行,逐条将源代码翻译成机器语言来运行。例如,Python就是典型的解释型语言,要在一台计算机上运行Python程序,必须要安装Python解释器。运行一个Python程序,实际上就是运行这个Python源程序,然后由Python解释器逐条扫描Python源程序,边扫描、边翻译、边运行。解释型语言主要有Python、PHP、ASP、JavaScript、VBScript、Perl、Ruby、MATLAB等。

编译型语言和解释型语言的区别如表1.11所示。

表1.11

区别项

编译型语言

解释型语言

是否需要编译

运行过程

直接运行编译好的可执行程序

由解释器直接运行源代码

运行时环境要求

需要安装解释程序

能否跨平台

不能

代码效率

主要语言

C、C++、Pascal、Object Pascal(Delphi)

Python、PHP、ASP、JavaScript、VBScript、Perl、Ruby、MATLAB

2.面向过程的语言与面向对象的语言

按照解决问题的方法步骤的不同,高级语言又分为面向过程的语言和面向对象的语言。

面向过程的语言在解决问题时,会将整个问题划分成若干个步骤,然后从第一步开始,一步步地将问题解决。

面向对象的语言在解决问题时,会将整个问题分解成若干个对象——每个对象都有自己的属性和行为方式,然后将这些对象逐一实现,最后再按这些对象的关系组合在一起将问题解决。

面向过程的语言与面向对象的语言的区别如表1.12所示。

表1.12

区别项

面向过程的语言

面向对象的语言

核心思想

解决问题时,将问题分解成步骤

解决问题时,将问题分解成对象

代码效率

代码体积

可维护性

使用范围

硬件配置低,对效率要求高的小系统

规范庞大的复杂系统

主要语言

C、Pascal、Fortran

C++、C#、Python、Java、Object Pascal(Delphi)

3.NOI系列比赛中的高级语言

在以往的NOI系列比赛中,选手可以使用的语言有C、C++和Pascal。从2022年开始,只能使用C++语言。

1.6.4 真题解析

1.【2020年第2题】编译器的主要功能是(  )。

A.将源程序翻译成机器指令代码

B.将源程序重新组合

C.将低级语言翻译成高级语言

D.将一种高级语言翻译成另一种高级语言

【解析】编译器用来将源程序翻译成机器指令代码。

【答案】A

2.【2021年第1题】以下不属于面向对象程序设计语言的是(  )。

A.C++

B.Python

C.Java

D.C

【解析】C语言是面向过程的语言。

【答案】D

3.【2022年第1题】以下哪种功能没有涉及C++语言的面向对象特性支持?(  )

A.C++中调用printf函数

B.C++中调用用户定义的类成员函数

C.C++中构造一个class或struct

D.C++中构造来源于同一个基类的多个派生类

【解析】C++中class、类、基类、派生类相关特性都与C++语言的面向对象特性有关。

【答案】A

1.6.5 习题

1.关于程序设计语言,下面哪种说法是正确的?(  )。

A.高级语言比汇编语言更“高级”,是因为它的程序运行效率更高

B.高级语言相对于低级语言更容易实现跨平台的移植

C.加了注释的程序一般会比没有加注释的程序运行速度慢

D.C语言是一种面向对象的高级计算机语言

【解析】相比汇编语言,高级语言的语法特性更容易理解和实现;高级语言比汇编语言更容易移植;程序的注释并不影响程序的运行效率,因为注释的内容并不会被编译器或解释器执行;C语言是面向过程的编程语言。

【答案】B

2.Python语言、C语言和C++语言都属于(  )。

A.面向对象语言

B.脚本语言

C.解释型语言

D.以上3个选项都不对

【解析】三种编程语言中,C语言不是面向对象的,所以选项A错误;C语言和C++语言都不是脚本语言,也不是解释型的,所以B、C错误,因此答案为D。

【答案】D

3.下列不属于解释型程序设计语言的是(  )。

A.Python

B.C++

C.JavaScript

D.PHP

【解析】C++语言是编译型语言。

【答案】B

4.编译器的主要功能是(  )。

A.将两个源文件合并成一个新的文件

B.将低级语言翻译成高级语言

C.将源程序翻译成机器指令代码

D.将汇编语言翻译成高级语言

【解析】编译器的主要功能是将源程序翻译成机器指令代码。

【答案】C

5.以下哪个选项不属于面向对象编程语言的特性?(  )

A.封装性

B.便携性

C.多态性

D.继承性

【解析】便携性不是面向对象编程语言的特性。

【答案】B

相关图书

青少年编程魔法课堂 Python零基础入门
青少年编程魔法课堂 Python零基础入门
青少年学三维图形化编程
青少年学三维图形化编程
离散的魅力:世界为何数字化
离散的魅力:世界为何数字化
了不起的人工智能
了不起的人工智能
青少年编程魔法课堂 C++图形化创意编程
青少年编程魔法课堂 C++图形化创意编程
Python少儿趣味编程:海龟绘图
Python少儿趣味编程:海龟绘图

相关文章

相关课程