资源描述
青少年信息学竞赛简要介绍
青少年信息学(计算机)奥林匹克竞赛(早期称为青少年计算机程序设计竞赛)是旨在广大青少年中普及计算机教育,推广计算机应用的一项学科性竞赛活动。全国从1984年开始举办全国性竞赛。而自从1989年我国参加第一届国际信息学奥林匹克(International Olympiad in Informatics, 简称IOI)以来,全国青少年计算机程序设计竞赛也更名为全国青少年信息学(计算机)奥林匹克(National Olympiad in Informatics, 简称NOI)。
全国信息学奥林匹克竞赛是经国家教委批准,中国科协具体领导,由中国计算机学会主办的。浙江省信息学奥林匹克竞赛活动从84年参加全国赛开始,由省科学技术协会、省教育厅和省计算机学会联合组织。
为促进计算机普及并兼顾提高,从95年开始全国举办信息学奥林匹克竞赛分区联赛,根据浙江实际情况,我省将分区联赛初、复赛作为省信息学奥赛的初赛和复赛。浙江省开始几年初赛试题自己命题,现在采用全国卷。
一. 信息学奥林匹克竞赛的内容和考核方式:
对学生学习计算机理论知识和实践能力有一个整体性的全面要求,也即整个信息学(计算机)竞赛已成为智力和应用计算机能力的竞赛,涉及到有关计算机基础知识、计算机软件知识、程序设计知识、组合数学和运筹学的知识、人工智能初步知识以及计算机应用知识等,同时要求学生有较强的编程和上机调试的实践能力。
1. NOI全国分区联赛初赛 (每年10月左右)
对象:在校中学生, 分初中、高中组
考试形式:笔试 性质: 普及
确定获初级选手证书名单及进入复赛名单,在各地市举行。
2.NOI全国分区联赛复赛 (每年12月左右)
对象:初赛优胜者 分初中、高中组
考试形式:上机试 性质:普及兼顾提高
确定全国分区联赛一、二等奖,省各等奖及全国各级证书获得者名单,在杭州进行,省派评委协助测评。信息学奥林匹克竞赛复赛的考核方式是采用封闭式(连续3~4小时)上机编程解题的形式,编程语言基本限于BASIC与 PASCAL,竞赛难度较大。程序完成后要通过严格的数据测试,这就对同学们编程能力有更高的要求:不但要能编程,编好的程序能运行,而且所设计的程序还要能通过在各种边界条件下和各种环境下设置的测试数据。
二. 全国青少年信息学奥林匹克联赛大纲竞赛大纲
一、初赛内容与要求:(#表示普及组可不涉及,以下同)
计 基
算 本
机 常
的 识
*诞生与发展 *特点 *在现代社会中的应用
*计算机系统的基本组成 *计算机中的数的表示
*计算机的工作原理#
*计算机信息安全基础知识 *计算机网络
计 基
算 本
机 操
的 作
*常见操作系统的使用基础
*常用输入/输出设备的种类、功能、使用
*汉字输入/输出方法 *常用计算机屏示信息
程
序
设
计
基
本
知
识
程序的表示
*自然语言的描述 *PASCAL或BASIC语言
数据结构
*简单数据的类型 *构造类型:数组、字符串
*了解基本数据结构(线性表、队列与栈)
程序设计
*结构化程序的基本概念 *阅读理解程序的基本能力
*具有完成下列过程的能力:
现实世界(指知识范畴的问题)→信息世界(表达解法)
→计算机世界(将解法用计算机能实现的数据结构和算法描述出来)
基本算法
处 理
*简单搜索 *字串处理 *排序 *查找 *统计 *分类 *合并
*简单的回溯算法 *简单的递归算法
二、复赛内容与要求:
在初赛的内容上增加以下内容:
计算机
软 件
*操作系统的使用知识
*编程语言的使用
数据
结构
*结构类型中的记录类型 *指针类型 *文件(提高组必须会使用文本文件输入)
*链表 *树 *图#
程序
设计
*程序设计能力 *设计测试数据的能力
*运行时间和占用空间的估算能力#
算法
处理
*排列组合的应用 *进一步加深回溯算法、递归算法
*分治法 *搜索算法:宽度、深度优先算法
*表达式处理:计算、展开、化简等# *动态规划#
三、初赛试题类型:注:试题语言两者选一、高中学生必须参加提高组联赛。
( 程序设计语言:基本BASIC或TURBO PASCAL)
*判断 *填空 *完善程序 *读程序写运行结果 *问答
四、推荐读物:
*分区联赛辅导丛书 *学生计算机世界报
三. Pascal语言
一、 结构化程序设计
结构化程序设计实际上就是为了使程序具有合理的结构,以便保证和验证程序的正确性而规定的一套进行结构程序设计的方法。用结构化程序设计的方法设计出来的程序称为结构化程序。结构化程序设计语言就是反映了结构化程序设计的要求和限制,便于用来书写结构化程序的语言。用这种语言书写的程序易于保证正确性。
二、 PASCAL语言的特色
从使用者的角度看,PASCAL语言有以下几个主要特点:
1、它是结构化语言
PASCAL语言是结构化的程序设计语言。PASCAL语言提供了直接实现3种基本结构的语句心以及定义子程序(“过程”和“函数”)的功能。可以方便的书写出结构化的程序。在编写程序时可以完全不使用转向语句。这就易于保证程序的正确性和易读性。PASCAL语言强调的是可靠性、易读性和概念性的清晰性。
2、有丰富的数据类型
PASCAL语言提供了整型、实型、字符型、布尔型、枚举型、子域型以及由以上类型构成的数组类型、集合类型、记录类型和文件类型。此外,还提供了指针类型。PASCAL语言所提供的丰富的数据结构和上述的结构化性质,使得它可以被方便地用来描述复杂的算法,得到质量较高的程序。
3、能适应于数值计算和非数值信息处理领域
在PASCAL语言出现之前,FORTRAN语言主要处理科学计算,而COBOL语言则主要用于非数值信息处理。PASCAL语言则兼顾了这两个不同领域的应用。PASCAL语言可广泛应用于各种领域,还可以用于计算机辅助教育、计算机绘图等应用领域。
4、PASCAL程序的书写格式比较自由
PASCAL允许一行写多个语句,一个语句可以分写在多行上,这样就可以使PASCAL程序写得像讲诗歌格式一样优美,便于阅读。
除了以上优点外,PASCAL语言还具有简单易学的特点,许多学校把PASCAL作为程序设计课程的第一种程序设计语言。
PASCA:L语言的主要缺点:不够灵活,书写较麻烦。
四. 数据结构
数据结构是计算机专业基础课程之一,是十分重要的核心课程。计算机的所有系统软件和应用软件都要用到各种类型的数据结构。要想更好地运用计算机来解决实际问题,仅仅学习计算机语言而缺乏数据结构知识是远远不够的,而打好“数据结构”这门课程的扎实基础,对于学习计算机专业的其他课程都是十分重要的。
随着计算机应用领域不断扩大,非数值计算问题占据了当今计算机应用的绝大多数,简单的数据类型已经远远不能满足需要,各数据元素之间的复杂联系已经不是普通数学方程所能表达的。因此,掌握好数据结构方面的知识,对于提高我们解决实际问题的能力将会有莫大的帮助。实际上一个好的程序无非是选择一个合适的数据结构和好的算法,而好的算法的选择很大程度上取决于描述实际问题的数据结构的选取。所以,学好数据结构,将是进一步提高我们程序设计的关键之一。
五. 算法例子
1.称小球重量:
有6个小球分别用1~6编号, 其中5个重量相同。现在有一架台称,一次能称出放在上面的若干物体的总重,要求编一个程序,让计算机找出一种称法,只要称3次就可以知道每个小球的重量。
具体操作时由操作者默想6个物体的重量,然后由计算机用编号提问若干物体的重量,如此3次后程序应能输出每个物体的重量。
PROGRAM EX02;
VAR
S1, S2, S3, p: integer;
BEGIN
P:=0;
write(’请输入1号+2号+3号+4号的重量总和:’); read(s1);
write(’请输入1号+2号+5号的重量总和:'); read(S2);
IF 3*s1<>4*s2 THEN
BEGIN
write('请输入1号+3号的重量总和:’); read(s3);
IF S1+S3=2*S2 THEN
BEGIN P:=1; Writeln(’第1号重’, S3+S2-S1,’其余重’,S2-S3); END;
IF S3+2*S2 =2*S1 THEN
BEGIN p:=1; writen(’第2号重’, 3*S2-2*S1, ’,其余重’,S1-S2); END;
IF 2*S2+3*S3=3*S1 THEN
BEGIN p:=1; writeln(’第3号重’,S3-(S2 div 3),’,其余重’,S2 div 3); END;
IF 2*S2=3*S3 THEN
BEGIN p:=1; writeln(’第4号重’,S1-3*(S3 div 2),’,其余重’,S3 div 2); END;
IF S1 =2*S3 THEN
BEGIN p:=1; writeln(’第5号重’,s2-2*(s3 div 2),’,其余重’, s3 div 2), END;
IF p:=0 THEN writeln('输入的数据不正确!');
END
ELSE IF 3*s1 = 4*s2 THEN
BEGIN write('请输入6号的重量:'); read(s3);
writeln('第6号重',s3, '其余重' ,s2 div 3);
END;
Writeln;
END.
2.打印奇数阶幻方:
方法:M×M 阶奇数幻方,在最后一行(第 M行)的中间(M+1)/2处填上1,左下方向填2, ....,若前方已经有数,在原数的上方填入。 三阶: 2 9 4
7 5 3
程序如下: 6 1 8
program huafang;
var i,j,k,n :integer;
a: array[1..20,1..20] of integer; 五阶:9 2 25 18 11
begin 3 21 19 12 10
for i:= 1 to 20 do 22 20 13 6 4
for j:= 1 to 20 do a[i,j]:=0; 16 14 7 5 23
write('Input n:'); readln(n); 15 8 1 24 17
while (n mod 2=1) and (n<=19) do
begin
i:=n; j:=(n div 2)+1; a[i,j]:=1;
for k:= 2 to n*n do
begin
i:=i+1; j:=j-1;
if i=n+1 then i:=1;
if j=0 then j:=n;
if a[i,j]=0 then a[i,j]:=k
else begin
i:=i-2; j:=j+1;
if i<0 then i:=i+n;
if j=n+1 then j:=1;
a[i,j]:=k;
end;
end;
for i:= 1 to n do
begin
for j:= 1 to n do
write(a[i,j]:4);
writeln;
end;
exit;
end;
write('Error!');
end.
3.13个人编号围成一圈,从1开始,4个一数,数到者出列,打印出列的顺序。
(方法一:)
Program EX1301;
Const m=13;t=4;
Var i,k,p :integer;
A:array[1..m] of integer;
Begin
For i:= 1 to m do a[i]:=1;
I:=0; k:=0; p:=0;
Repeat
I:=i+1;if i=m+1 then i:=1;
K:=k+a[i];
If k=t then
Begin
Write(i:4);a[i]:=0; p:=p+1; k:=0;
End;
Until p=m;
Writeln;
End.
(方法二:链接表)
Program EX1302;
Const m=13;t=4;
Var i,j,k,p :integer;
A:array[1..m] of integer;
Begin
For i:= 1 to m-1 do a[i]:=i+1;
A[m]:=1; i:=m; k:=1; p:=0;
Repeat
i:=a[i]; k:=k+1;
If k=t then
Begin
Write(a[i]:4); a[i]:=a[a[i]]; p:=p+1; k:=1;
End;
Until p=m;
writeln;
End.
出列顺序: 4 8 12 3 9 1 7 2 11 10 13 6 5
计算机的数制、码制及其运算
1. 计算机是智能化的电器设备
计算机就其本身来说是一个电器设备,为了能够快速存储、处理、传递信息,其内部采用了大量的电子元件,在这些电子元件中,电路的通和断,电压高和低,这两种状态最容易实现,最稳定;也最容易实现对电路本身的控制。我们将计算机所能表示这样的状态,用0,1来表示,就形成了用二进制数表示计算机内部的所有运算和操作。
计算机内部是以二进制形式表示数据的(指令、被处理的数据)。
二进制数的运算规则:
0+0=0 0+1=1 1+0=1 1+1=10;
0×0=0 0×1=0 1×0=0 1×1=1
2. 进位基数和位权值
⑴数的进制与基数
计数的进制不同,则它们的基数也不相同,用到的数码也不一样。如表1-1所示。
进制
基数
数码
二进制
2
01
三进制
3
012
四进制
4
0123
八进制
8
01234567
十进制
10
0123456789
十六进制
16
0123456789ABCDEF
进制基数:指的是该进位记数制中可能用到的数码个数。
对于任意计数进制:每一位计满这个基数后,都应向高位进位。
二进制,逢二进一;八进制,逢八进一;
十进制,逢十进一;十六进制,逢十六进一;
R进制(R为任意正整数):数码个数为R个,分别为0~R-1,每一位数当计满R后,应向高位进位。
⑵数的权
不同进制的数,基数不同,其每位上所代表的值的大小也不相同,我们称之为“权”。
如:(219)10=2×102+1×101+9×100 (按权展开式)
2在百位上代表2个100即200;1在十位上代表1个10即10;9在个位上代表9个1即9。
注:以后我们用下标来注明圆括号内数的进制。
(11010)2=1×24+1×23+0×22+1×21+0×20
(273)8=2×82+7×81+3×80
(27B)16=2×162+7×161+11×160
任意R进制S:
S=knkn-1…k0.k-1k-2…k-m
= kn×Rn+kn-1×Rn-1+…k0×R0+.k-1×R-1+k-2×R-2+…k-m×R-m
R为进位基数,Ri是对应的权值。
3. 任意进制的数转换成十进制整数
将任意进制数转换成十进制数的基本方法是按权展开,然后求和——按权相加法。因为在上式中基数我们已经转换成了相应的十进制数,所以展开式即是一个十进制数的表达式。
(11010)2=1×24+1×23+0×22+1×21+0×20=(26)10
(123)8=1×82+2×81+3×80=(83)10
(1AB)16=(427)10
4. 十进制整数转换成任意进制数
⑴将十进制整数转换成任意进制数的基本方法是:将十进制数除以所给定的进制的基数,再反向取余。
例如:将十进制数39用二进制数表示,用除二反向取余法。
(39)10=(100111)2
(245)10=(365)8
⑵减权定位法:把十进制数展开成所指定进制的基数的整数次幂之和,然后找到对应位上取值。
例如:将十进制数123用二进制数表示。
(123)10=64+32+16+8+0+2+1
=1×26+1×25+1×24+1×23+0×22+1×21+1×20
=(1111011)2
5. 十进制小数转换成任意进制数
常用把给定的十进制小数乘以给定进制数的基数,取积的整数部分,得到给定进制小数的小数点的第1位;乘积的小数部分再乘以基数,积的整数部分为小数点后的第2位;一直重复做下去,就可以得到希望的进制小数。
例如:①将十进制小数0.75转换成二进制小数。
0.75×2=1.5
0.5×2=1
(0.75)10=(0.11)2
②(0.315)10=(0..0101)2
不是所有的十进制小数都可以用一个精确的二进制小数表示。
6. 二进制与八进制之间的转换
三位二进制,正好能完全表示八进制的8个数码。
二进制
000
001
010
011
100
101
110
111
八进制
0
1
2
3
4
5
6
7
二进制数转换成八进制数的方法是:从小数点开始,分别向左向右,每3位二进制数为一组,用八进制来书写。若左侧位数不是3的倍数,则最左侧用0补充,若右侧位数不是3的倍数,则最右侧用0补充。
例如:(10110111.01101)2=(267.32)8
反过来,八进制数转换成二进制数的方法:将每个八进制数用3位二进制数来书写。
例如:(1234.45)8=(1010011.100101)2
7. 二进制与十六进制之间的转换
二进制
0000
0001
0010
…
1001
1010
1011
1100
1101
1110
1111
十六进制
0
1
2
…
9
A
B
C
D
E
F
每四位二进制数可以用一位十六进制数表示。
二进制数转换成十六进制数方法:从小数点开始,分别向左向右,每4位二进制数为一组,用十六进制来书写。若左侧位数不是4的倍数,则最左侧用0补充,若右侧位数不是4的倍数,则最右侧用0补充。
例如:(110110111.01101)2=(1B7.68)16
十六进制数转换成二进制数方法:将每个十六进制数用4位二进制来书写,其最左或最右侧的0可以省去。
例如:(7AC.DE)16=(11110101100.1101111)2
综合例子:
①(3/32)10转换成二进制
解:(3/32)10=3×2-5=(11)2×(0.00001)2=(0.00011)2
总之:十进制数与二进制数之间的转换必须用前面讲的繁琐方法进行,因为10不能用2的整数次幂进行表示。也就是不能象八进制或十六进制数那样用几位二进制数表示十进制数的十个数码。
②把十进制数27.625转换成二进制、八进数和十六进制数。
解:(27)10=(11011)2
(0.625)10=(0.101)2
(27.625)10=(11011.101)2=(33.5)8=(1B.A)16
要把一个十进制数转换为八进制数或十六进制,最先把它转换成二进制数,再由二进制数转换成八进制或十六进制。
课后练习:
① 请用等号或不等号联接下列不同进位制数值的大小。
(98.375)10 (142.3)8 (58.5)16 (1011000.0101)2
② 下面四个不同进制的数,最小的数是 。
A (11011001)2 B (75)10 C (37)8 D (A7)16
③ 小张用十六进制、八进制和十进制写了如下一个等式:52-19=33式中三个数是各不相同进位制的数,请问52、19、33,分别为 。
A 八进制,十进制,十六进制 B 十进制,十六进制,八进制
C 八进制,十六进制,十进制 D 十进制,八进制,十六进制
④ 十进制算术表达式:3*512+7*64+4*8+5的运算结果,用二进制表示为( )
A 10111100101 B 11111100101 C 11110100101 D 11111101101
二进数在计算机内的表示
数值数据是用于表示数量的大小,经常用到数值范围和数据精度。数值范围指的是一种类型的数据所能表示的最大值和最小值;数据精度通常用实数所能指出的有效数字位数来表示。与用多少个二进制位表示某类数据,以及怎么对这些位进行编码有关。
机器数与真值
计算机中数的符号用数码表示。一般情况下,用0表示正,用1表示负。且符号位放在数的最高位。
例:X1=(+1011011)2 ————真值数
X2=(-1011011)2
0
1
0
1
1
0
1
1
1
1
0
1
1
0
1
1
————机器数
连同符号位在一起作为一个数,称为机器数。而它的数值部分称为真值数。
一、 数的定点和浮点表示
计算机在处理数据时,要考虑到小数点的位置。如果将小数点固定在某一位置,则称为定点表示;如果小数点可以任意移动,则称为浮点表示。
1. 数的定点表示法——定点小数和定点整数
⑴定点小数格式:小数点的位置固定在最高数据位的左边,小数点前面再设一位符号位。
任何m位二进制小数在计算机中用m+1位二进制表示。
Ns ·
N-1
N-2
…
…
N-m+1
N-m
符号位 小数点 数值部分
由于小数点总是在符号位与最高数据位之间,因此在计算机中不明确表示出来
⑵定点整数格式:小数点位置固定在最低数据位的右边。
整数又分为带符号和不带符号的两类。
带符号的整数,符号位安排在最高(最左)位。
Ns
Nn-1
Nn-2
…
N1
N0·
符号位 n位数值 小数点
由于小数点固定在最低数据右边,因此在计算机中不明确表示出来。n位带符号整数N=NsNn-1…Nn-2N1N0在计算机中用n+1位二进制表示。
对于不带符号的整数,把所有n+1位二进制位全部视为数值。
在不同计算机中,使用多种位数的整数。16位,32位,64位,64位二进制来表示一个整数。
2. 数的浮点表示法
浮点数是指小数点数据中的位置可以左右移动的数。一个数N要用浮点数表示可以写:
N=M*RE
M:浮点数的尾数。
E:浮点数的指数或阶码。
R:浮点数的基数,是常数一般取2、8或16
一旦机器的浮点部件设计好了,基数的大小也就确定了,不能再改变了,基数在浮点数表示中不出现,是隐含的。
⑴浮点数的表示方法:
Es
Em……E2E1
Ms
Mn……M2M1
阶符 阶码 数符 数码
M:尾数。用定点小数表示,表示浮点数的有效位,其位数 n的大小决定了浮点数的精度。
E:阶码。用定点整数表示。阶码用于表示小数点在浮点数中的位置。其位数m的大小反映此浮点数所能表示的数的范围。
⑵浮点数的规格化:规定计算机内浮点数的尾数用纯小数形式给出,而且当尾数的值不为0时,其绝对值应大于或等于0.5,不符合这一规定的浮点数要进行规格化。(通过修改阶码的大小并同时左右移尾数的办法使其满足要求。)
①正数:1/2≤S<1,二进制表示S=0.1 ……
②负数:-1/2≥S>-1,二进制表示S=1.1……
③机器零:尾数为0,不论其阶码为何值。
阶码的值遇到比它所能表示的最小值还小时,不管尾数为何值。
_阶码、尾数全变成0。
④浮点数常用格式:
符号位 阶码 尾数 总位数
短浮点数: 1 8 23 32
长浮点数: 1 11 52 64
临时浮点数: 1 15 64 80
二、 二进制数值数据的编码方法
编码方法是研究在计算机中如何方便的表示定点小数,定点整数和浮点数的正数、负数和零。最常用的编码方法有原码表示法、补码表示法、反码表示法三种。我们以定点小数为例:
㈠原码表示法:
1、定义:用机器数的最高(左)一位代表符号,其余各位给出数值(真值)的绝对值。
X (0≤X<1)
[X]原=
1-X (-1<X≤0)
1+|X|
例:X1=0.1011 X2=-0.1011
[X1]原=01011 [X2]原=11011
符号 数值 符号 数值
2.真值零的原码表示法
[+0]原=00000
[-0]原=10000
3.原码表示的范围
如果用 n位二进制表示定点小数,其中一位符号位。
最大数:+(1-2-(n-1))
最小数:-(1-2-(n-1))
原码编码个数:2n-1 0点两个编码
例n=8
最大数:01111111
对应1-2-(8-1)=1-0.0000001=0.1111111=127/128
最小数:11111111
对应-(1-2-(8-1))=-0.1111111=-127/128
㈡反码表示法
1、 定义:用机器数的最高一位代表符号,数值位是对负数值各位取反的表示方法。
取反0→1 1→0
X (0≤X<1)
[X]反=
(2-2-n)+X (-1<X≤0)
例: X1=0.1011 [X1]反=01011
X2=-0.1011 [X2]反=10100
把任何一个二进制负数的绝对值与它的反码相加,得到的和永远1.1111,若在最后位上加1,恒等于2。
2、 真值零的反码表示法
[+0]反=00000 [-0]反=11111
反码同原码一样,零的表示不是唯一的,有两个。
㈢补码表示法
1、 模的概念
例:11点→6点
①往回拨5格 11-5=6
②往前拨7格 11+7=18 18-12=6
舍掉进位的情况下:从11点中减去5和往11上加7结果是一样的。
例:9-3=6
9+7=16 16-10=6 (十进制)
而7=12-5 →对于12进制计数的基数12(模数)7是5对于12的补码。
7=10-3 →对于10进制计数的基数10(模数)7是3对于10的补码。
在计算机中,机器表示的数据字长是固定的,对于n位数来说,模数大小是n位数全为1,且在最末位再加1。实际上模数的值已超出计算机所能表示的数的范围,因此模数在机器中是表示不出来的,若运算结果大模数,则模数自动丢掉。如果是n位整数(包括符号位),则它的模数是2n,若n位小数,则它的模数总是2。
同理:在二进制定点小数减法运算中,减去一个二进制数,也可以化为加上这个数对于模数2的补码。
2、 定义:用机器数的最高(左)一位表示符号位,其余各位给出负数数值按2取模的结果。
X (0 ≤X<1)
[X]补=
2+X ( -1≤X≤0)
2-|X|
例:X1=0.1011 [X1]补=01011
X2=-0.1011 [X2]补=10101=10-0.1011
3、真值零的补码表示法
[+0]补=00000
[-0]补=10-0.0000=00000
[+0]补=[-0]补
4、在补码表示法中数的表示范围
定点小数:最大:1-2-(n-1)
最小:-1 [-1]补=10-1.0000=10000
n=8 最大:1-2-7=0.1111111 补码01111111
最小:-1 补码10000000
由于在补码表示法中零有唯一的编码,n位二进制能表示2n个补码数。
5、补码的求法
⑴、 从反码求补码
|X|+[X]反+0.0001=10
[X]反+0.0001=10-|X|=[X]补
⑵、从原码→反码→补码
⑶、补码→原码
除符号位外反转,再在未位加1。
小结1、如果真值X为正数,则[X]原=[X]补=[X]反
2、如果真值X为负数,[X]原、[X]补、[X]反表示不同。
3、如果X=0,则[X]补有唯一编码,
[X]原有两个不同表示方法,
[X]反有两个不同表示方法。
4、在定点小数中,原码和反码的表示范围为-1<X<1
补码的表示范围为-1≤X<1
三、 整数的编码方法
可用原码、补码、反码三种方法进行编码。
1、 整数的编码方法与小数的编码方法的区别
⑴小数点位置
⑵表示范围
⑶模数的差别
2、 整数的编码方法
四、 浮点的编码方法
Es
E
Ms
M
M部分采用定点小数形式,可以用原码表示,也可以用补码表示。
阶码多采用整数形式的移码表示。
1、 移码的表示方法
⑴移码定义
[X]移=2n+X -2n≤X≤2n
⑵将这一定义与整数补码相比较
X 0≤X≤2n
[X]补=
2n+1+X -2n≤X≤0
当0≤X≤2n时,[X]移=2n+X=2n+[X]补
当-2n≤X≤0时,[X]移=2n+X=(2n+1+X)-2n
→[X]移是将[X]补的符号位变反。
例:X=+1010101 [X]补=01010101 [X]移=11010101
X=-1010101 [X]补=10101011 [X]移=00101011
2、 移码的特点:符号位在最高位,正用1表示,负用0表示。
五、 ASCII码和BCD码
ASCII码
在人们通常接触和处理信息中,有相当一部分是用字符或字符的组合来表示的。字符是指字母、数字以及其它一些可打印显示的符号。
计算机和外部设备之间进行通讯联系时,还需要一些控制功能的特殊符号。例如,控制打印机的走纸符、换行符等。
在计算机内部,上述字符必须用一种二进制代码来表示。日前,在国际上广泛采用的是美国标准信息交换代码(American Standard Code for Information Interchange),简称ASCII码。
ASCII码是7位二进制编码,它可以表示27=128个字符。
由于标准的7位ASCII码所能表示的字符较少,不能满足有些信息处理的需要,于是在ASCII码地基础上又设计了一种扩充的ASCII码。扩充的ASCII码是一种8位二进制编码,它可以表示256个字符。
BCD码
十进制数在键盘输入和打印时,往往是将各个数字以ASCII码来表示的。但是它在计算机内运算时,是以二进制形式进行的。为了便于转换,设计了一些二进制编码来表示十进制数,称为二—十进制码,即BCD码(Binary Coded Decimal)。BCD码是用四位二进制代码来表示一位十进制数。从16个四位二进制代码0000~1111中,只须选择其中10个作为十进制数的10个数字的代码就可以了。这样就有多种BCD码:如8421码、2421码、余3码和格雷码等。
十进制数字
8421码
2421码
余3码
格雷码
0
0000
0000
0011
0000
1
0001
0001
0100
0001
2
0010
0010
0101
0011
3
0011
0011
0110
0010
4
0100
0100
0111
0110
5
0101
0101
1000
1110
6
0110
0110
1001
1010
7
0111
0111
1010
1000
8
1000
1110
1011
1100
9
1001
1111
1100
0100
由于8421码最常用,因此通常就把它称为BCD码。例如,十进制数315用BCD码表示为001100010101。注意:用BCD码表示的数,形式上像二进制数,但不是真正的二进制数。例如,315转换成二进制数是100111011B。
在计算机中,可以把用BCD码表示的十进制数转化成真正的二进制数后,再进行运算,也可以直接对用BCD码表示的十进制数进行计算。但需要进行“十进制调整”,以符合“逢十进一”的十进制运算规则。
PASCAL程序设计初步
PASCAL从1971年正式推出至今,已成为世界上最广泛使用的程序设计语言之一,PASCAL语言全面地体现了结构化程序设计的概念,具有丰富完备的数据类型、简明灵活的语句和清晰明了的模块结构,书写格式自由,运行效率高,查错能力强,移植性好,程序设计风格优美,有助于养成结构化程序设计的良好习惯。我们选择的是Turbo Pascal 6.0的版本的教材。
要使用计算机解决实际问题,除了会理解题目和设计算法外,关键的一点就是要会编写程序。程序其实就是用计算机语言来表述
展开阅读全文