教孩子学编程 信息学奥赛C语言版

978-7-115-51317-5
作者: 党松年 方泽波
译者:
编辑: 俞彬

图书目录:

详情

本书主要讲C语言编程的基础知识,是学习C语言的入门级图书。本书以知识点为中心,循序渐进地引导初学者了解计算机的基础知识,揭开计算机程序的神秘面纱,进而逐步讲解C语言的基本概念和各种编程基础知识,最终实现用C语言编写简单的程序来解决一些数学问题。 本书用通俗化的语言和形象的比喻来解释各种专业术语,同时用大量的图示和实例代码来帮助理解,并辅以各类练习题供学习者自己动手进行编程实践。本书适合小学高年级、中学生及编程爱好者作为学习编程的入门图书使用,也可作为备考青少年信息学奥赛的初级教材使用。

图书摘要




教孩子学编程:信息学奥赛C语言版


党松年 方泽波 著






人民邮电出版社

北京

图书在版编目(CIP)数据

教孩子学编程:信息学奥赛C语言版 / 党松年,方泽波著. --北京:人民邮电出版社,2019.10

ISBN 978-7-115-51317-5

Ⅰ.①教… Ⅱ.①党… ②方… Ⅲ.①C语言—程序设计—青少年读物 Ⅳ.①TP312.8-49

中国版本图书馆CIP数据核字(2019)第096397号

◆ 著 党松年 方泽波

责任编辑 俞 彬

责任印制 马振武

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

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

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

临西县阅读时光印刷有限公司印刷

◆ 开本:720×960 1/16

印张:20.75

字数:415千字  2019年10月第1版

印数:1-3000册 2019年10月河北第1次印刷

定价:69.00元

读者服务热线:(010)81055410 印装质量热线:(010)81055316

反盗版热线:(010)81055315

广告经营许可证:京东工商广登字20170147 号

内容提要

本书主要讲C语言编程的基础知识,是学习C语言的入门级图书。本书以知识点为中心,循序渐进地引导初学者了解计算机的基础知识,揭开计算机程序的神秘面纱,进而逐步讲解C语言的基本概念和各种编程基础知识,最终实现用C语言编写简单的程序来解决一些数学问题。

本书用通俗化的语言和形象的比喻来解释各种专业术语,同时用大量的图示和实例代码来帮助理解,并辅以各类练习题供学习者自己动手进行编程实践。本书适合小学高年级、中学生及编程爱好者作为学习编程的入门图书使用,也可作为备考青少年信息学奥赛的初级教材使用。

前言

2015年秋天的一天,当时正上小学五年级的儿子放学回家后,表现出一副很沮丧的样子。原来学校举行了一次选拔考试,每个班选取几位同学去选修计算机编程的课程,以后可以参加青少年信息学奥赛。他因为准备不足落选了,但他说他很想学习计算机编程,还问我说:“爸爸你是学计算机的,编写计算机程序是不是很难?”后来,在几位朋友的鼓励下,我开始尝试教几个孩子学习编程,本书的大部分内容就是由给这几个孩子讲课的教案补充完善而成的。

本书主要讲计算机编程的基础知识,是学习C语言的入门级图书,是一本面向孩子的书,当然,任何想学习计算机编程的初学者,都可以阅读这本书。

要看懂这本书,并不需要你之前对计算机以及编程有任何的了解,你只要懂得怎么使用计算机就可以了,比如说启动一个程序、打开和保存文件等。

本书没有像其他C语言教材那样“系统”“全面”地去讲解所有的C语言知识。而是按照初学者的认知规律,以知识点为中心,循序渐进地引导初学者了解计算机的基础知识,揭开计算机程序的神秘面纱,进而逐步了解并掌握C语言的基本概念和各种编程基础知识,最终能够用C语言编写简单的程序来解决一些数学问题。

书中尽量用通俗化的语言和形象的比喻来解释各种专业术语,同时用大量的图示来帮助理解。编程是一个实践性很强的工作,需要学习者亲自动手编写代码,因而书中有大量的实例代码,每一章后面也有各种类型的编程练习题,供学习者自己动手学习编写代码。本书配套资料中含有全部实例的源代码,扫描下方二维码即可获得。编号与书中代码清单编号一一对应,例如,代码清单4.3对应资料中的源文件example_4_3.c。配套资料中也包含每章后面练习题中的编程题源代码,编号与练习题题号一一对应,例如,习题9.8对应资料中的源文件test_9_8.c。

本书的编写参考了大量的书籍资料,谨向这些书籍资料的作者表示感谢。同时也感谢人民邮电出版社及特约编辑张蓉老师在出版过程中的大力支持和帮助。

由于作者本人水平所限,书中难免存在疏漏和不足之处,敬请各位读者批评指正。

第1章 揭开计算机的神秘面纱

1.1 计算机的发展历程

1946年,世界上公认的第一台电子计算机诞生于美国宾夕法尼亚大学,名为ENIAC(中文名:埃尼阿克)。它由18000多个电子管等元器件组成,占地170多平方米,相当于3个教室那么大,重30多吨。它每秒只能做大约5000次加法运算。我们把这种主要由电子管组成的计算机称为第一代计算机(见图1.1a)。

1954年,美国贝尔实验室研制成功第一台使用晶体管电路的计算机,取名TRADIC(催迪克),里面装有800多个晶体管。它的体积只有ENIAC的百分之一,但运算速度大大增加,每秒可达10万次。我们称之为第二代计算机(见图1.1b)。

又过了几年,随着电子技术的发展,科学家们把中小规模的集成电路装在计算机身体里面,用来代替之前的晶体管。这样计算机的体积变得更小了,运算的速度却更快了,达到了每秒几百万次。我们把这种计算机称为第三代计算机(见图1.1c)。

大约到1970年,计算机家族最年轻的成员诞生了,这就是身体里装着大规模/超大规模集成电路(见图1.1d)的计算机——第四代计算机。它的运算速度可以达到每秒上亿次,体积也更加小巧了。目前我们在学校和家里使用的台式机、笔记本电脑、掌上电脑(PDA)和平板电脑(如苹果iPad)等就是这种计算机。

1.2 计算机的组成原理

可以说计算机是模仿人体的各个器官而被研制出来的。它包括相当于“大脑”的运算、控制、存储设备,相当于“眼睛”和“耳朵”的输入设备,相当于“嘴巴”和“手脚”的输出设备,以及相当于“神经”和“血管”的传输设备。将这些设备组装在一起就构成了计算机。

人所做的所有活动都是由大脑控制的,比如妈妈做很好吃的红烧肉就是这样的。首先妈妈大脑中已经有了如何做红烧肉的食谱,大脑控制妈妈双手按食谱来准备各种食材,然后根据食谱所示步骤一步步地做出好吃的红烧肉来。美国科学家约翰·冯·诺依曼(John von Neumann)就是受此启发提出了计算机的工作原理——存储程序和程序控制,并且明确了计算机的5个组成部分(见图1.2)。

①控制器(相当于大脑)

②运算器(相当于大脑)

③存储器(相当于大脑)

④输入设备(相当于眼睛和耳朵)

⑤输出设备(相当于嘴巴和手脚)

如果要让计算机算出x×(y+z)的值,事先就要把计算方法(比如先算括号内的加法,再做乘法)转化为计算机可以识别的一条条的指令(程序),并把这些指令保存在计算机的存储器中(即存储程序)。接下来我们用键盘把xyz的值输入计算机并且也保存在存储器(内存)中,然后计算机的控制器就会发出已经存储好的指令给运算器,通知它从存储器中取出xyz的值,并按照事先已经保存在存储器中的指令来完成这个运算,最后把运算结果也保存在存储器(内存)中并且把它用输出设备(显示器)显示出来,告诉我们运算结果。这里的从键盘接收输入的数据、运算器执行运算以及输出运算结果都是由事先已经存储在存储器中的程序来控制完成的(即程序控制),由此你会发现,计算机实际上就是只会执行输入、运算、输出3种操作的机器(见图1.3)。

知识点总结

计算机由控制器、运算器、存储器、输入和输出设备5个功能部件组成。

计算机的基本工作原理是存储程序和程序控制,它是由世界著名的科学家冯·诺依曼提出的。他因此被称为“计算机之父”。

在计算机中把负责控制功能的控制器和负责计算功能的运算器合称为中央处理器(Central Processing Unit,CPU)

负责存储功能的存储器有两种:内存储器辅助存储器

内存储器(内存,Memory),也称为主存储器,包括随机存储器(RAM)、只读存储器(ROM),以及高速缓存(CACHE)。我们通常讲的内存指的是随机存储器(RAM),它是计算机中必须有的,而且只有在计算机接通电源开机以后它才能保存内容,计算机关机或断电以后它里面保存的内容也就消失了。只读存储器(ROM)里面保存的内容是固定的,只能读取,不能再往里面保存新的内容,而且即使计算机关闭或断电它里面保存的内容也不会消失。高速缓存(CACHE)是为了提高计算机的处理速度而设置的,它相当于是在中央处理器和内存之间架设的一座桥梁,能使得CPU更快速地获得需要处理的数据。

辅助存储器,也称为外存储器(外存)。计算机即使没有辅助存储器也可以运行。辅助存储器可以长时间甚至永久性地保存内容,而且计算机关机或断电以后,保存在它里面的内容依然存在。硬盘、光盘(CD、VCD、DVD)、USB存储器(优盘)等都属于辅助存储器。

输入设备就是计算机的“眼睛”和“耳朵”,它们负责把外部信息输入到计算机。键盘、鼠标、触摸屏、扫描仪、摄像头、录音话筒等都是输入设备。

输出设备就是计算机的“嘴巴”和“手脚”,它们负责把计算机内部的信息和处理结果表达出来,能让我们看到或听到。显示器、打印机、音箱、耳机等都是输出设备。

除了以上5个功能部件外,计算机中还有大量的数据线,被称为数据总线(Bus)。它们把计算机的各个部件连接起来,并在这些部件之间传输各种信号(数据、指令等),类似于人体中的“神经”和“血管”。

知识点总结

计算机由CPU进行控制和运算。

我们将在各个功能部件之间传输信息的通道称为总线。

计算机是只会执行输入、运算、输出3种操作的机器。

如果将计算机比作人,那么在计算机中,负责指令和运算的CPU和负责存储的内存就相当于人的大脑。思考、想象、记忆与回忆……像这些人类大脑的“思考”行为,只要有CPU和内存,计算机就能够实现。但是无论计算机内部能够得出多么好的“思考”结果(计算结果等),如果不将这些结果表现出来就起不到作用。

人类是通过语言或者手脚的动作(比如用手写等)把自己的想法表达出来的。计算机也一样,为了把CPU和内存的处理结果表达出来,就需要输出设备。计算机毕竟只是一种电子工具,是需要人来操作的,想要计算机的CPU和内存进行“思考”,我们必须得先把“思考”所用的各种指令和数据事先输入计算机(存储程序),这就需要输入设备

输入设备有键盘、鼠标、扫描仪等;输出设备有显示器、打印机等;既可以输入数据又可以输出数据的设备有硬盘、USB存储器(优盘)、网卡等。我们把这些设备统称为外部设备

外部设备和CPU之间是通过输出输入接口来连接并传输数据的(见图1.4)。我们通常用的连接打印机的RS-232C数据接口、连接优盘和鼠标的USB接口、连接摄像机的IEEE 1394接口以及连接硬盘的串行ATA数据接口等都是输出输入接口。

计算机在运行时,会在计算机各功能部件内部和与计算机连接的设备之间进行指令和数据的传输(交换)。计算机内部传输信息所用的公共通道就是总线。总线分为串行总线并行总线(见图1.5)。串行总线只有一根数据线(电线丝),逐位依次传输,一次只能传输一位数据;并行总线有2根以上的数据线,一次能够同时传输多位(如8位、16位、32位)数据。计算机内部的这些数据线实际上都是电线丝,通过给这些电线丝通电或者不通电来表示和传递信息。

知识点总结

外部设备是为了与计算机外部交换信息的设备。

输出输入接口是外部设备与CPU的连接桥梁。

1.3 一台完整的计算机是由硬件和软件构成的

前面我们说到把CPU、存储器、输入设备、输出设备以及数据总线组装在一起就构成了计算机,但是这样的一台计算机还不够完整,它还不能做任何事情,原因是它里面还缺一样东西:软件(Software)。我们把没有软件的计算机称之为裸机。

CPU、存储器、输入设备、输出设备以及数据总线都是我们可以看得见、摸得着的一些电子元器件,比如计算机的显示器、键盘、硬盘等这些东西我们都可以用眼睛看到,用手触摸到它们。我们把这些看得见、摸得着的设备称为计算机的硬件(Hardware)(见图1.6),而把那些计算机中看不到、摸不着的东西称为计算机的软件(见图1.7)。那么计算机中什么东西看不到、摸不着呢?就是我们前面曾经提到过的指令和数据。指令是控制计算机进行输入、运算、输出的各种命令,数据有我们通过键盘等输入设备输入计算机准备让计算机运算处理的,也有计算机通过运算处理以后的结果。我们把这些控制计算机进行输入、运算、输出的命令一条条地列出来连同它们要处理的数据一起称为程序,软件也就是计算机里面的程序及各种文档

计算机软件总体分为系统软件应用软件两大类。系统软件是各类操作系统,如Windows、Linux、UNIX等,是负责管理计算机系统中各种硬件相互协调工作的。系统软件使得我们可以把计算机当作一个整体而无须考虑其内部每个硬件是如何工作的。应用软件是为了某种特定的用途而被开发的软件。它可以是一个特定的程序,比如一个图像浏览器、一个小游戏以及我们常用的QQ等;可以是一组功能联系紧密,可以互相协作的程序的集合,比如微软的Office软件;也可以是一个由众多独立程序组成的庞大的软件系统,比如银行管理系统、学生档案管理系统等。

代码清单1.1 C语言程序示例

知识点总结

完整的计算机是由硬件和软件构成的。

CPU、存储器、输入设备、输出设备以及数据总线都是计算机的硬件。

软件是计算机所执行的程序以及各种文档。

程序是指令和数据的集合。

计算机软件分为系统软件和应用软件。

1.4 对计算机来说所有的东西都是数字

计算机本身只不过是为我们处理特定工作的机器,是要人来操作的。使用计算机的目的就是为了提高手工作业的效率,但是也有一些手工作业的事情是不能直接由计算机来处理的,原因是计算机有计算机处理问题的方式,有时这些处理方式还跟人类的思维习惯是不一样的。

日常生活中,我们用数字、汉字、图像、声音、视频等来传递和存储各种信息,而在计算机内部所有的这些文字、图像、声音、视频等都是用数字来传递和存储的。比如在计算机中用“0,0,255”表示蓝色,用“255,0,0”表示红色,用“255,0,255”表示蓝色和红色混合而成的紫色。不光是颜色,计算机对文字的处理也是这样的。计算机内部会先把文字转换成相应的数字再做处理,这样的方式我们叫作“字符编码”,例如,“A”的编码是65,“a”的编码是97。表1.1列出了常用的ASCII(美国信息交换标准代码)标准字符代码。

表1.1 ASCII(美国信息交换标准代码)标准字符代码表(部分)

我们输入计算机的任何内容,不管是文字、图像还是一段录音、视频等,在计算机内部全部都会转换为数字来处理,因而我们常常把计算机称为数字计算机,把通过用计算机来阅读的图书称为数字图书,对应的图书馆称为数字图书馆;同样,我们把学生的档案资料输入计算机来处理的这个过程称为档案资料的数字化

计算机是一种电器,通电后才能运行,它在内部传输数据也是用电线来传输的,前面提到的总线其实就是一种电线,串行总线里面只有一根电线丝,而并行总线里面有多根电线丝并排在一起。计算机为了利用电,它里面只设置了两种状态,一种“有电”(电流通过),另一种“没电”(电流不通过)。传输数据的时候一根电线丝也只能传输两种状态,要么“有电”要么“没电”。在计算机中这样的两种状态,通常用“0”表示“没电”,用“1”表示“有电”。计算机内部所有的数字都只有“0”和“1”两种数值符号。只有“0”和“1”两种数值符号构成的数字我们称之为二进制数

知识点总结

计算机的处理方式有时与人们的思维习惯不同。

在计算机内部所有的内容都转换为数字来处理。

计算机内部所有的数据都是用二进制数表示的。

计算机的CPU只能认识并处理二进制数。

1.5 二进制

我们在小学算术课中进行各种计算时,一个数的各位都是取0~9这几个值,当某位的值达到10以后就会向高位进一位(逢十进一)。我们将这种计数方法称为十进制计数法。通常我们使用的数值,如100、1234、9999等都是十进制数。

计算机是由一些依靠电来运行的装置构成的,它采用的数据表示方法很简单,并且适合用电来表示。因为电只有两种状态(“有电”和“没电”),所以在计算机内部只存在0和1两个值(“0”表示“没电”,“1”表示“有电”),计算机内部的所有数据都是由0和1这两个值构成的。在计算机内部进行加减等运算时,当某位的值达到2以后就会向高位进一位(逢二进一)。我们将这种计数方法称为二进制计数法。计算机内部所有的数据都是用二进制数来表示的。表1.2列出了0~11的数值分别用十进制和二进制表示的情况。

表1.2 二进制数与十进制数对应关系

计算机中表示数据的最小单位是bit(位),其值可以取0或1。一个bit就是一个电信号,即一根电线丝上“有电”或“没电”的电流状态。“有电”(用ON表示)就是1,“没电”(用OFF表示)就是0。当8bit的电信号是(ON,ON,OFF,ON,OFF,OFF,ON,OFF)时,用二进制数表示就是11010010,这个二进制数我们从视觉上就能够感觉出信号状态,所以很容易理解和识别,这就是二进制数的优点。由此也可以看出二进制计数法是一种非常适合表示计算机内部数据的方法(见图1.8),计算机的CPU也只能识别和处理二进制数(见图1.9)。

知识点总结

在二进制计数法中,数的各位上的值只有0和1两种数字。

计算机中表示数据的最小单位是bit(位)。

1.6 八进制和十六进制

虽然二进制数在表示计算机内部电信号时非常直观。但对我们人来说,当0和1的二进制数位数增加时,就很容易看错数值。

为了弥补这个缺点,并且使所表示的数值变得更容易让人接受和识别,从而在计算机编程过程中引入了八进制数十六进制数

在八进制数中,只用0~7这几个数字符号表示数据,每一位上的数只要满8就要向高位进一位(逢八进一),而十六进制数则是每一位上的数满16进一位(逢十六进一)。十六进制数中即使一位的值达到10~15也不会向高位进位,而此时10~15的两位十进制数字是写不进一位的,因此需要用单一符号来表示10~15。于是就把英文字母A~F作为数字来使用。具体规定是用A、B、C、D、E和F分别表示10、11、12、13、14和15六个数字。不同计数法中组成各位数值的符号如表1.3所示。

表1.3 不同计数法中组成各位数值的符号组成各位数值的符号

例如,表1.4中的两个二进制数就不容易区分,相比之下,八进制和十六进制的数值位数减少很多,也更加容易读取和区分。

表1.4 用八进制、十六进制、十进制表示的数更易识别

知识点总结

在二进制中,各位上的数只要满2就要向高位进一位(逢二进一)。

在八进制中,各位上的数只要满8就要向高位进一位(逢八进一)。

在十六进制中,各位上的数只要满16就要向高位进一位(逢十六进一)。

1.7 数制转换

我们在小学算术中学过,十进制数的个位(从右向左第1位)上的1表示数值1,十位(从右向左第2位)上的1表示数值10,百位(从右向左第3位)上的1表示数值100,千位(从右向左第4位)上的1表示数值1000,依此类推,从右向左第n位上的1表示的数值是10n-1。我们把一个数从右向左第n位上的1所表示的数值大小称为该数位上的位权。表1.5列出了十进制数、二进制数、八进制数和十六进制数各个数位上的位权大小。

表1.5 各个数位上的位权

一个十进制数所表示的数值大小就等于各个数位上的位权乘以该数位上的值(0~9)再相加得到的总和。例如:

9504=1000×9+100×5+10×0+1×4

二进制数也是同样的原理。二进制数从右向左第1位上的1表示数值1(20),第2位上的1表示数值2(21),第3位上的1表示数值4(22),第4位上的1表示数值8(23),依此类推,从右向左第n位上的1表示的数值是2n-1

二进制数各位的位权与各位上的值(0或1)的乘积的总和就是这个二进制数所对应的十进制数(见图1.10)。例如把二进制数101011转换为十进制数就是:

25×1+24×0+23×1+22×0+21×1+20×1=32+0+8+0+2+1=43

同理,八进制数各位的位权(8n-1)与各位上的值(0~7)的乘积的总和就是这个八进制数所对应的十进制数(见图1.11)。例如把八进制数1753转换为十进制数就是:

83×1+82×7+81×5+80×3=512+448+40+3=1003

十六进制数各位的位权(16n-1)与各位上的值(0~F)的乘积的总和就是这个十六进制数所对应的十进制数(见图1.12)。例如把十六进制数27DB转换为十进制数就是:

163×2+162×7+161×13+160×11=8192+1792+208+11=10203

利用二进制数各位的位权,可以把一个二进制数转换为十进制数,那么如果要知道十进制数所对应的二进制数是多少,该怎么办呢?

我们通常使用辗转相除求余法来得到一个十进制数所对应的二进制数,具体的操作步骤如下:用2去除十进制数,得到商和余数,这个余数就是对应的二进制数从右向左第1位的值;然后把商作为被除数继续用2去除,又得到一个商和余数,此时的余数就是对应的二进制数从右向左第2位的值;再次把得到的第二个商作为被除数继续用2除,得到第三个商和余数,这时的余数就是对应的二进制数从右向左第3位的值;像这样把每次得到的商作为被除数用2除,获取余数,直到商为0。最后把得到的所有余数从右向左依次排列就是这个十进制数对应的二进制数(见图1.13)。

知识点总结

在二进制数中,从右向左第n位拥有2n-1(2的n-1次方)的“位权”。

在八进制数中,从右向左第n位拥有8n-1(8的n-1次方)的“位权”。

在十六进制数中,从右向左第n位拥有16n-1(16的n-1次方)的“位权”。

各位的位权与各位上的值的乘积的总和就是这个数所对应的十进制数。

同样的原理,用8作为除数对一个十进制数进行辗转相除,把得到的所有余数从右向左依次排列,可以得到这个十进制数对应的八进制数(见图1.14)。

用16作为除数对一个十进制数进行辗转相除,把得到的所有余数从右向左依次排列,可以得到这个十进制数对应的十六进制数(见图1.15)。

当把二进制数转换为八进制数或十六进制数时,可以先把二进制数转换为十进制数,然后再把这个十进制数转换为八进制数或十六进制数;反过来,八进制数或十六进制数转换为二进制数时,则先把它转化为十进制数,再把这个十进制数转换为二进制数;八进制数与十六进制数之间的相互转换也是如此。除此之外,我们也可以利用前面讲过的各个数位上的位权,把二进制数直接转换为八进制数或十六进制数。要进行这种直接转换需要了解二进制数与八进制数、十六进制数之间的特殊关系。

知识点总结

用2除十进制数时得到的余数就是十进制数所对应的二进制数各位的值。

用8除十进制数时得到的余数就是十进制数所对应的八进制数各位的值。

用16除十进制数时得到的余数就是十进制数所对应的十六进制数各位的值。

八进制数的各位可以取0~7这几个值,这正好是用3位二进制数(000~111)能表示的值(见表1.6);十六进制数的各位可以取0~F这几个值,这正好是用4位二进制数(0000~1111)能表示的值(见表1.7)。因此我们可以总结出下面的特殊关系:

·二进制数的3位相当于八进制数的1位;

·二进制数的4位相当于十六进制数的1位。

表1.6 二进制数与八进制数对应表

所以当把二进制数转换为八进制数时,可以从低位起(从右向左)把二进制数划分为每3位一个区间,再把每个区间内的3位二进制数转换为对应的十进制数,这样最终得到的数就是这个二进制数对应的八进制数。当把二进制数转换为十六进制数时,可以从低位起(从右向左)把二进制数划分为每4位一个区间,再把每个区间内的4位二进制数转换为对应的十进制数(10~15用A~F表示),这样最终得到的数就是这个二进制数对应的十六进制数(见图1.16)。

反过来,把八进制数转换为二进制数时,将八进制数的各位变换为3位二进制数,就得到了这个八进制数对应的二进制数;把十六进制数转换为二进制数时,将十六进制数的各位变换为4位二进制数,就得到了这个十六进制数对应的二进制数(见图1.17)。

知识点总结

3位二进制数的值正好能用1位八进制数来表示。

4位二进制数的值正好能用1位十六进制数来表示。

在C语言中如果一个数以0x开头,表示这是一个十六进制数。比如0x45表示45是一个十六进制数。

在C语言中如果一个数以0开头,表示这是一个八进制数。比如025表示25是一个八进制数。

1.8 计算机内部数据的基本单位——字节

我们前面介绍了计算机内部数据的最小单位是位(bit),也就是一根电线丝一次传输的电信号状态,我们用二进制数0或1来表示。如果把8根电线丝并排在一起,并行传输数据,则一次可以同时传输8种电信号状态,即8位二进制数(0或1)。在计算机中把8位聚在一起的二进制数称为一个字节(byte),即1字节(byte)=8位(bit)。字节是计算机中表示数据大小的基本单位。通常字节(byte)用大写字母B表示,位(bit)用小写字母b表示。例如16位二进制数就是2字节(2B),32位二进制数就是4字节(4B)(见图1.18)。

我们在购买计算机的时候,都会看到有关计算机性能的表示方法。例如,在表示CPU性能时,可以写成16位CPU、32位CPU、64位CPU等,这里的16、32、64指的就是CPU处理数据的能力大小、并行总线一次可以传输的二进制数位多少等,一般这个数值越大,CPU的性能越好。

另外还有表示计算机内存大小的512MB、2GB等,以及表示硬盘存储容量大小的500GB、2TB等,我们还会在计算机中看到某个文件大小表示为320KB这样的形式。前面提到的BKBMBGBTB都是计算机中表示数据大小的计量单位,通常我们把M读作“兆”,其他几个都按英文字母发音。这里的K(kilo)、M(mega)、G(giga)、T(tera)类似于十进制数中的计量单位千、百万、十亿、万亿。十进制数中的十、百、千、万等都是以10n来计量的,计算机中的数据都是用二进制数表示的。计算机中的KMGT都是用2n来计量的,而且它们依次增大为前一个的1024倍,即210倍(见图1.19)。

1KB=1024B=1024字节

1MB=1024KB=1024×1024字节

1GB=1024MB=1024×1024×1024字节

1TB=1024GB=1024×1024×1024×1024字节

知识点总结

1字节(byte)=8位(bit)。

字节是计算机中表示数据大小的基本单位。

练习题

习题1.1 选择题

(1)CPU是()的简称。

A.硬盘

B.中央处理器

C.高级程序语言

D.核心寄存器

(2)以下各项中,()不是CPU的组成部分。

A.控制器

B.运算器

C.寄存器

D.主板

(3)以下断电之后仍能保存数据的有()。

A.硬盘

B.高速缓存

C.ROM

D.RAM

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

A.Windows

B.UNIX

C.OS/2

D.WPS

(5)iOS是一种()。

A.绘图软件

B.程序设计语言

C.操作系统

D.网络浏览器

(6)在下列关于计算机语言的说法中,正确的有()。

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

B.随着Pascal、C等高级语言的出现,机器语言和汇编语言已退出了历史舞台。

C.高级语言程序比汇编语言程序更容易从一种计算机移植到另一种计算机上。

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

(7)计算机中,控制器的基本功能是()。

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

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

C.获取外部信息

D.存放程序和数据

(8)关于计算机内存下面的说法()是正确的。

A.随机存储器的意思是当程序运行时,每次具体分配给程序的内存位置是随机而不确定的。

B.1MB的内存通常是指1024×1024字节大小的内存。

C.计算机内存严格说来包括主存、高速缓存和寄存器三个部分。

D.一般内存中的数据即使在断电的情况下也能保留2小时以上。

(9)关于BIOS下面的说法()是正确的。

A.BIOS是计算机基本输入输出系统软件的简称。

B.BIOS里面包含了键盘、鼠标、声卡、显卡、打印机等常用输入输出设备的驱动程序。

C.BIOS一般由操作系统厂商来开发完成。

D.BIOS能提供各种文件拷贝、复制、删除以及目录维护等文件管理功能。

(10)关于ASCII,下面的说法()是正确的。

A.ASCII码就是键盘上所有键的唯一编码。

B.1个ASCII码使用1个字节的内存空间就能够存放。

C.最新扩展的ASCII编码方案包含了汉字和其他欧洲语言的编码。

D.ASCII码是英国人主持制定并推广使用的。

(11)已知大写字母A的ASCII码为65(十进制),则J的十进制ASCⅡ码为()。

A.71

B.72

C.73

D.以上都不是

(12)十进制数125对应的八进制数是()。

A.100

B.175

C.170

D.以上都不是

(13)(2008)10+(5B)16的结果是()。

A.(833)16

B.(2089)10

C.(4163)8

D.(100001100011)2

(14)在下列各项中,只有()不是计算机存储容量的常用单位。

A.byte

B.KB

C.UB

D.TB

拓展 神奇的八卦:八进制

八卦最初是我国上古时期人们用来记事的符号。古代常用八卦图作为除凶避灾的吉祥图案(见图1.20)。

其实,八卦中隐含了二进制和八进制的概念。首先,八卦的基本概念是阴和阳,这就相当于二进制中的0和1。在八卦图中,用一根长实线代表阳,用一根中间断开的线代表阴,然后由3根这样的线条符号组成8种形式(相当于3位二进制,可以表示8种状态),因此叫作八卦。这样表示8种状态的数据(图形)就是一种八进制计数方法。

在八卦中,每一卦形都代表一定的事物。乾代表天、坤代表地、坎代表水、离代表火、震代表雷、艮(gěn)代表山、巽(xùn)代表风、兑代表泽。

经过几千年的发展演变,八卦被赋予了很多的含义,除了上面介绍的代表自然现象之外,还可以代表方位、家族、五行等。可以将八卦转换为二进制数,表1.8所示就是八卦中各卦象所代表的不同含义。

表1.8 八卦的含义自然

相关图书

中学生C++创意编程
中学生C++创意编程
青少年编程魔法课堂 Python图形化创意编程
青少年编程魔法课堂 Python图形化创意编程
写给 青少年的人工智能 实践
写给 青少年的人工智能 实践
青少年编程魔法课堂 C++图形化创意编程
青少年编程魔法课堂 C++图形化创意编程
青少年Python趣味编程
青少年Python趣味编程
趣味掌控板编程
趣味掌控板编程

相关文章

相关课程