算法的表示方法有_范文大全

算法的表示方法有

【范文精选】算法的表示方法有

【范文大全】算法的表示方法有

【专家解析】算法的表示方法有

【优秀范文】算法的表示方法有

范文一:算法的表示方法 投稿:秦唍唎

算法的表示方法

算法的常用表示方法有如下三种:

1、使用自然语言描述算法

2、使用流程图描述算法

3、使用伪代码描述算法

我们来看怎样使用这3种不同的表示方法去描述解决问题的过程,以求解sum=1+2+3+4+5……+(n-1)+n为例。

第1种:使用自然语言描述从1开始的连续n个自然数求和的算法

① 确定一个n的值;

② 假设等号右边的算式项中的初始值i为1;

③ 假设sum的初始值为0;

④ 如果i≤n时,执行⑤,否则转出执行⑧;

⑤ 计算sum加上i的值后,重新赋值给sum;

⑥ 计算i加1,然后将值重新赋值给i;

⑦ 转去执行④;

⑧ 输出sum 的值,算法结束。

从上面的这个描述的求解过程中,我们不难发现,使用自然语言描述算法的方法虽然比较容易掌握,但是存在着很大的缺陷。例如,当算法中含有多分支或循环操作时很难表述清楚。另外,使用自然语言描述算法还很容易造成歧义(称之为二义性),譬如有这样一句话——“武松打死老虎”,我们既可以理解为“武松/打死老虎”,又可以理解为“武松/打/死老虎”。自然语言中的语气和停顿不同,就可能使他人对相同的一句话产生不同的理解。又如“你输他赢”这句话,使用不同的语气说,可以产生3种截然不同的意思,同学们不妨试试看。为了解决自然语言描述算法中存在着可能的二义性,我们提出了第2种描述算法的方法——流程图。

第2种:使用流程图描述从1开始的连续n个自然数求和的算法

从上面的这个算法流程图中,可以比较清晰的看出求解问题的执行过程。在进一步学习使用流程图描述算法之前,有必要对流程图中的一些常用符号做一个解释。

流程图的缺点是在使用标准中没有规定流程线的用法,因为流程线能够转移、指出流程控制方向,即算法中操作步骤的执行次序。在早期的程序设计中,曾经由于滥用流程线的转移而导致了可怕的“软件危机”,震动了整个软件业,并展开了关于“转移”用法的大讨论,从而产生了计算机科学的一个新的分支学科——程序设计方法。

无论是使用自然语言还是使用流程图描述算法,仅仅是表述了编程者解决问题的一种思路,都无法被计算机直接接受并进行操作。由此我们引进了第三种非常接近于计算机编程语言的算法描述方法——伪代码。

第3种:使用伪代码描述从1开始的连续n个自然数求和的算法

1) 算法开始;

2) 输入 n 的值;

3) i ← 1; /* 为变量 i 赋初值*/

4) sum ← 0; /*为变量 sum 赋初值*/

5) do while i

6) { sum ← sum + i;

7) i ← i + 1;}

8) 输出 sum 的值;

9) 算法结束;

伪代码是一种用来书写程序或描述算法时使用的非正式、透明的表述方法。它并非是一种编程语言,这种方法针对的是一台虚拟的计算机。

伪代码通常采用自然语言、数学公式和符号来描述算法的操作步骤,同时采用计算机高级语言(如C、Pascal、VB、C++、Java等)的控制结构来描述算法步骤的执行

范文二:2-数据表示与运算方法 投稿:傅阴阵

计算机组成原理 Principle of Computer Organization (1159006)

第2章 数据表示和运算方法

张惠臻

zhanghz@hqu.edu.cn 2012年 秋季 华侨大学 计算机科学与技术学院

主要内容

1. 数据表示

1.1 无符号数和有符号数 1.2 定点数和浮点数

3. 浮点运算

3.1 浮点加减法 3.2 浮点乘除法

1.3 数的机器码表示

1.4 字符和字符串

3.3 浮点运算器

2. 定点运算

2.1 逻辑运算和算术运算

2.2 移位运算

2.3 定点加减法

2.4 定点乘除法

2.5 定点运算器

2012-9-19

Zhanghz, CS of HQU

2

1.1 无符号数和有符号数

 无符号数

− 存储单元中的每一位都用来存放数值,没有符号位

− 机器字长相同的情况下,无符号数与有符号数的数值范围不同

 设机器字长为16,无符号数的表示范围为0 ~ 65535(216-1),有 符号数的表示范围为-32768 ~ +32767( -215 ~ 215-1 )

 有符号数

− 符号位:放在有效数字前,用“0”表示“正”,“1”表示“负”

有符号数 +0.1011 -0.1011 在机器中表示 0 1011 1 1011 有符号数 +1100 -1100 在机器中表示 0 1100 1 1100

− 真值——指一般书写表示的带正负符号的数

机器数——指真值数在机器中的编码表示的符号“数字化”的数

2012-9-19 Zhanghz, CS of HQU 3

1.2 定点数和浮点数

 数据在计算机中的表示格式

− 定点格式,数值范围有限,硬件实现较简单

− 浮点格式,数值范围较大,硬件实现较复杂

 定点数

− 约定机器中所有数值的小数点位置固定不变

 理论上,小数点位置固定在哪个位置都可以,但通常将数据表示 为纯小数或者纯整数

纯小数表示

Xn Xn-1…X1X0 Xn

纯整数表示

Xn-1…X1X0

符号位

数值部分

符号位

数值部分

小数点位臵

小数点位臵 表示范围:-(1-2-n)~ (1-2-n)

2012-9-19

表示范围:-(2n -1)~ (2n -1)

4

Zhanghz, CS of HQU

1.2 定点数和浮点数(2)

 浮点数

− 两个数的表示

 电子质量:9×10-28 g = 0.9×10-28 g 数值超过定点数 的表示范围

太阳质量:2×1033 g = 0.2×1034 g

− 浮点表示法

 将数的范围和精度分别表示,其小数点位置可以随比例因子在一 定范围内自由浮动

 任意进制数的表示 N = M×Re

M:尾数,一般是纯小数 e:指数,是一个整数 R:基数,计算机中一般为2

2012-9-19 Zhanghz, CS of HQU 5

1.2 定点数和浮点数(3)

 计算机中的浮点数表示

− 尾数:定点纯小数,其有效数字的位数决定了浮点数的表示精度

指数:整数表示,也称为阶码,决定了浮点数的表示范围

基数:固定为2

− 表示形式 Es

阶码 符号

Em-1…E1E0

阶码

Ms

尾数 符号

Mn-1…M1M0

尾数

由阶码E和尾数M两部分组成

阶码为整数,阶符和阶码的位数m反映浮点数的表示范围及小数 点的实际位臵

尾数为

纯小数,位数n反映浮点数的精度 尾数符号代表了浮点数的正负

2012-9-19 Zhanghz, CS of HQU 6

浮点数的表示范围

 浮点数N = M×Re的表示范围

− 设阶码数值位取m位,尾数数值位取n位。在数轴上的表示范围如下:

上溢

m-1)

负数区

下溢

0

正数区

上溢

m-1)

-2(2

×(1-2-n)

-2-(2

m-1)

×2-n

2-(2

m-1)

×2-n

2(2

×(1-2-n)

上溢:浮点数阶码大于最大阶码,此时机器停止运算,进行溢出中断处理

下溢:浮点数阶码小于最小阶码,此时溢出数绝对值很小,通常将尾数强 臵为0,按机器0处理,机器可以继续运行

在浮点数总位数一定的情况下,阶码和尾数位数的分配,直接影响表示范 围和精度

2012-9-19

Zhanghz, CS of HQU

7

浮点数的规格化

 浮点数的规格化

− 将尾数最高位为1的浮点数称为规格化数

(1.75)10→ 1.11×20 0.111×21

规格化数

0.0111×22

− 浮点数表示为规格化形式后,其精度最高

− 不同基数浮点数的规格化

基数

2 4 2n

规格化数

尾数最高位为1 尾数最高2位不全为0 尾数最高n位不全为0

规格化过程

尾数左移1位,阶码减1 尾数右移1位,阶码加1 尾数左移2位,阶码减1 尾数右移2位,阶码加1 尾数左移n位,阶码减1 尾数右移n位,阶码加1

2012-9-19

Zhanghz, CS of HQU

8

浮点数的规格化(2)

上溢

m-1)

负数区

下溢

0

正数区

上溢

m-1)

-2(2

×(1-2-n)

-2-(2

m-1)

×2-n

2-(2

m-1)

×2-n

2(2

×(1-2-n)

规格化

上溢

m-1)

负数区

下溢

0

正数区

上溢

m-1)

-2(2

×(1-2-n)

-2-(2

m-1)

×2-1

2-(2

m-1)

×2-1

2(2

×(1-2-n)

2012-9-19

Zhanghz, CS of HQU

9

浮点数的规格化(3)

 浮点数的基数问题

− 基数一旦确定后,就不再改变,作为隐含数值

− 不同基数的浮点数的表示形式完全相同

− 基数不同,影响数的表示范围和精度

 基数R越大,则可表示的浮点数范围越大,但精度反而下降

R=16的浮点数,由于其规格化的尾数,只要求最高4位不同时 为0即可,则最高三位可能同时为0,那么它与尾数位数相同的 R=2的浮点数相比,后者要比前者多三位精度

2012-9-19

Zhanghz, CS of HQU

10

浮点数表示示例

 例2.1 设浮点数字长为16位,其中阶码5位(含1位阶符), 尾数11位(含1位数符),将十进制数+13/128和-54分别写成 二进制定点数和浮点数。

解:

令x = (+13/128)10 其二进制形式为 x = 0.0001101000 定点数表示 x = 0.0001101000 浮点数规格化表示 x = 0.1101000000×2-11 令x = (-54)10 其二进制形式为 x = -110110 定点数表示 x = -0000110110 浮点数规格化表示 x = -0.1101100000×2110

2012-9-19 Zhanghz, CS of HQU 11

IEEE 754标准

 IEEE 754标准

− IEEE的二进制浮点数算术标准,最广泛使用的浮点数表示和运算标准

− 浮点数表示形式

S

尾数符号

阶码E(含

阶符)

小数点位臵

尾数M

− IEEE标准常见的三种浮点数

31 30 23 22 0

短实数(32位)

S

63 62

E为8位

52 51

M为23位

0

长实数(64位)

S

79 78

E为11位

64 63

M为52位

0

临时实数(80位)

2012-9-19

S

E为15位

Zhanghz, CS of HQU

M为64位

12

IEEE 754标准(2)

 IEEE 754浮点数x的真值表示

x = (-1)S × (1.M) × 2E-偏移量

− 阶码的移码表示:隐含阶符,通过移码方法来表示正负阶码值

浮点数的指数真值e与阶码E的关系为:

E = e + 偏移量 短实数的偏移量:127(0111 1111)

长实数的偏移量:1023 (011 1111 1111)

临时实数的偏移量:16383(011 1111 1111 1111)

− 尾数形式——1.M

 有别于一般的规格化数形式。尾数域的最高位总为1,对这一位一 般不予存储,而作为隐藏位  实际表示中,对短实数和长实数,隐藏位的1省略;但对临时实数 不采用隐藏位方案

2012-9-19

Zhanghz, CS of HQU

13

IEEE 754浮点数表示示例

 例2.2 若浮点数x的754标准存储格式为(41360000)16,求其 浮点数的十进制数值。 解:

将x展开为二进制数格式,为 0 100 0001 0011 0110 0000 0000 0000 0000

M(23位)

S E(8位)

指数e = E – 127 = 10000010 – 01111111 = 00000011 = (3)10 包含隐藏位1的尾数 1.M = 1.01101100000000000000000 = 1.011011 于是有 x = (-1)S × (1.M) × 2E-127 = +(1.011011) × 23 = +1011.11 = (11.375)10

2012-9-19

Zhanghz, CS of HQU

14

IEEE 754浮点数表示示例(2)

 例2.3 将数(20.59375)10转换成754标准的32位浮点数的二进 制存储格式。 解:

分别将20.59375的整数和小数部分转换成二进制数,得到 (20.59375)10 = 10100.10011 移动小数点,使其在第1、2位之间 10100.10011 = 1.010010011×24,e = 4 于是有 S = 0,E = 4+127 = 131 = (10000011)2,M = 010010011 最后得到32位浮点数的二进制存储格式为 0100 0001 1010 0100 1100 0000 0000 0000 = (41A4C000)16

S E(8位) M(23位)

2012-9-19

Zhanghz, CS of HQU

15

特殊的浮点数

 零值

− 阶码E为全0,且尾数M也为全0时,表示真值x为零

− 根据符号位S为0或1,有正零和负零之分

 无穷值

− 阶码E为全1,且尾数M为全0时,表示真值x为无穷大 − 符号位S为0,表示+∞;S为1,表示-∞

在浮点数表示中,要出去E为全0和全1用于表示零和无穷大的特殊情况;

对于规格化浮点数,E的范围变为1到254,指数真值e则为-126到+127

2012-9-19

Zhanghz, CS of HQU

16

定点数与浮点数的比较

 定点数 VS. 浮点数

− 在数的位数相同的情况下,浮点数的表示范围比定点数大得多

− 浮点数为规格化数时,其相对精度比定点数高

− 浮点数的运算步骤比定点运算多,运算速度比定点运算低,运算部件 比定点运算复杂  浮点数分阶码和尾数部分,且运算结果要求规格化

− 溢出判断上,浮点数是

对规格化数的阶码进行判断,而定点数是对数 值本身进行判断

因素 表示范围 形式 浮点数 大

定点数 小

精度 高

溢出处理 优

运算规则

复杂 简单

运算速度

慢 快

硬件成本

高 低

通用的大型机计算机,大多采用浮点数,或者同时采用定、浮点数; 小型、微型及某些专用机,大多采用定点数,而利用软件或者扩展硬件来实 现浮点处理

2012-9-19 Zhanghz, CS of HQU 17

1.3 数的机器码表示——原码

 原码表示法

− 机器数中最简单的表示形式,符号位为0表示正数,为1表示负数,数 值位为真值的绝对值——带符号的绝对值表示 − 整数原码的定义

0x

[x]原 =

0≤x<2n -2n<x≤0

0≤x<1 -1<x≤0

式中x为真值,n为整数位数

2n – x

小数原码的定义

[x]原 = x 1–x

− 例:

x = +1110,[x]原 = 01110; x = -1110,[x]原 = 24 – (-1110) = 11110

x = 0.1101,[x]原 = 0.1101; x = -0.1101,[x]原 = 1 – (-0.1101) = 1.1101

2012-9-19 Zhanghz, CS of HQU 18

1.3 数的机器码表示——原码(2)

 原码中的“0”

− 有正零和负零之分

[+0]原 = 00000 [+0.0000]原 = 0.0000

[ -0]原 = 24 – (-0000) = 10000

[ -0.0000]原 = 1 – (-0.0000) = 1.0000

 原码表示的优缺点

− 优点:简单明了,易于和真值进行转换

− 缺点:加减运算复杂

 两个操作数符号不同而要进行加法运算,以 -45+37为例

1101101 + 0100101

1. 要先判断两个数的绝对值大小,101101 > 100101 (45 > 37)

2. 用绝对值大的数减去绝对值小的数,101101 – 100101 = 1000(45 – 37 = 8 ) 3. 结果符号以绝对值大的数为准,11000( – 8 )

2012-9-19 19

Zhanghz, CS of HQU

1.3 数的机器码表示——补码

 补数的概念

− 从校准时钟说起

 当前时间为7点整,钟表指示为10点

 两种校准方法

1)顺时针拨动时针9格;2)逆时针拨动时针3格  设顺时针方向为正,逆时针方向为负

则上述的校准方法,+9和-3的结果是一致的,是等价的

 时钟一圈指示12个小时,数学上称12为模,记为mod12

对模12而言,+9与-3互为补数,-3 ≡ +9(mod12)

 同理,-4 ≡ +8(mod12), -5 ≡ +7(mod12) 确定了“模”,就可找到一个与负数等价的正数(即该 负数的补数)来代替此负数,这样可把减法运算用加法实现

2012-9-19 Zhanghz, CS of HQU 20

1.3 数的机器码表示——补码(2)

 例2.4 设A=9,B=5,求A-B(mod12)。

解:

A-B = 9-5 = 4 (减法) 对模12而言,-5可以用补数+7代替,所以 A-B = 9+7 = 16 (加法) 对模12而言, 16 = 12 + 4,16与4等价,即4 ≡ 16(mod12) 进一步分析,4点、16点、28点‥‥在时钟上看见的都是4点,即 4 ≡ 4+12 ≡ 4+12×2 ≡ 4(mod12) 负数可用它的正补数代替,这个正补数可以用模数加上负数本身就得

正数和

负数互为补数时,它们的绝对值之和为模数 正数相对于“模”的补数为正数本身

2012-9-19 Zhanghz, CS of HQU 21

1.3 数的机器码表示——补码(3)

 补码的定义

− 整数补码的定义

0x [x]补= 2n+1 + x 0>x≥-2n (mod2n+1) 0≤x<2n 式中x为真值,n为整数位数

− 小数补码的定义

x

[x]补= 2+x 0>x≥-1(mod2)

0≤x<1

x = 0时,[+0.0000]补=0.0000 [ -0.0000]补= (2 – 0.0000)mod2 = 0.0000 [+0]补 = [-0]补 = 0.0000,只有一种0

− 例: x = +1010,[x]补 = 01110;

x = -1010,[x]补 = 25 – 1010 = 100000 – 1010 = 10110 x = 0.1001,[x]补 = 0.1001; x = -0.1001,[x]补 = 2 – 0.1001 = 10.0000 – 0.1001 = 1.0111

2012-9-19 Zhanghz, CS of HQU 22

1.3 数的机器码表示——补码(4)

 补码与真值的关系

− 正数的真值与补码相同

− 已知二进制负整数补码求真值为

x = [x]补 – 2n+1

− 已知二进制负小数补码求真值为 x = [x]补 – 2

 例2.5 已知[x]补=110011011,[y]补=1.0101,求x和y

解: x = 110011011 – 29 = 110011011 –1000000000 = -001100101

= (-101)10

y = 1.0101 – 2 = -0.1011 = (-0.6875)10

2012-9-19

Zhanghz, CS of HQU

23

1.3 数的机器码表示——补码(5)

 原码与补码的转换

− 正数的原码与补码相同,无需转换

− 负数的原码转换为补码:将除符号位外的其他位每位求反,末位加1

 上述规则同样适用于由负数补码转换为原码

 反码表示法

− 整数反码

0x

[x]反= 0≤x<2n 式中x为真值, n为整数位数 式中x为真值, n为小数位数

− 小数反码

[x]反=

(2n+1 -1) + x 0≥x>-2n (mod(2n+1-1)) x

0≤x<1

(2 – 2-n) + x 0≥x>-1(mod(2 - 2-n))

反码的求取:1)将原码除符号位外,每位求反;2)将补码末位减1

2012-9-19 Zhanghz, CS of HQU 24

原码、补码和反码的特点归纳

 三种机器码的特点归纳

− 三种机器码的最高位都为符号位

− 当真值为正时,三种机器码的表示形式相同,符号位用0,数值部分与 真值相同 − 当真值为负时,三种机器码的表示形式不同,符号位都用1,而数值部 分的关系为:补码为原码的“求反加1”,反码为原码的“每位求反”

 例2.5 x=+122, y=-122,求[x]原, [x]反, [x]补, [y]原, [y]反, [y]补

解:

x = (+122)10 = +1111010 y = (-122)10 = -1111010

[x]原 = 01111010

[y]原 = 11111010

2012-9-19

[x]反 = 01111010

[y]反 = 10000101

[x]补 = 01111010

[y]补 = 10000110

Zhanghz, CS of HQU

25

1.3 数的机器码表示——移码

 移码表示法

− 移码的定义

[x]移 = 2n + x (2n>x≥-2n)

x为真值, n为整数位数

− 移码在数轴上的表示

0 2n 2n+1-1

[x]移

− 移码特点

-2n

0

2n-1

真值

 最小真值的移码为全0

利用这一特点,当浮点数 的阶码用移码表示时,能 设n=5,则最小真值为x=-25=-100000, 则[-100000]移=25+x=100000-10000

0=000000 够方便地判断阶码大小

 同一真值的移码和补码仅差一个符号位

2012-9-19

Zhanghz, CS of HQU

26

1.3 数的机器码表示——移码(2)

 例2.6 将十进制真值x=-127, -1, 0, +1, +127表示成二进制数 及原码、反码、补码、移码

解:

真值x 二进制数 [x]原 [x]反 [x]补 [x]移

-127

-1 0 +1

-01111111

-00000001 0000000 +00000001

11111111

10000001 10000000 00000000 00000001

10000000

11111110 11111111 00000000 00000001

10000001

11111111 00000000 00000001

00000001

01111111 10000000 10000001

+127

+01111111

01111111

01111111

01111111

11111111

2012-9-19

Zhanghz, CS of HQU

27

1.4 字符和字符串

 符号数据

− 英文字母、标点符号、货币符号等字符信息,需要表示成二进制数据 存储到计算机中进行处理,其在计算机中的数据表示称为符号数据

 ASCII码

− 国际上普遍采用的一种字符系统 − 用8位二进制数表示,最高位恒为0,余下7位给出128个编码,表示 128个字符  其中95个编码,对应计算机能输入和输出的95个字符,如26个英 文字母的大小写、0-9数字符  另外33个字符,对应编码值为0-31和127,不对应任何可以显示或 打印的实际字符,用作控制码,控制计算机某些外围设备的工作 特性和某些计算机软件的运行情况

2012-9-19

Zhanghz, CS of HQU

28

1.4 字符和字符串(2)

 ASCII字符编码表

2012-9-19

Zhanghz, CS of HQU

29

1.4 字符和字符串(3)

 字符串

− 连续的一串字符,通常占用主存中连续的多个字节,每个字节存放一 个字符 − 存储字长为多字节时,如2个或4个字节,在一个主存单元中

 可以按低位字节到高位字节的顺序存放字符串内容

大、小尾 端问题

 也可以按高位字节到低位字节的顺序存放字符串内容

− 例:字符串IF A>B THEN READ(C)的存放

 主存单元长度为4个字节,每个字节存放相应字符的ASCII值

 空格也是一个字符,占一个字节位置

I > F B A T A F I

T

N

B

E E C

>

H R (

30

H

R (

2012-9-19

E

E C

N

A )

Zhanghz, CS of HQU

D

D

A )

主要内容

1. 数据表示

1.1 无符号数和有符号数 1.2 定点数和浮点数

3. 浮点运算

3.1 浮点加减法 3.2 浮点乘除法

1.3 数的机器码表示

1.4 字符和字符串

3.3 浮点运算器

2. 定点运算

2.1 逻辑运算和算术运算

2.2 移位运算

2.3 定点加减法

2.4 定点乘除法

2.5 定点运算器

2012-9-19

Zhanghz, CS of HQU

31

2.1 逻辑运算和算术运算

 逻辑运算

− 也叫布尔运算,通过逻辑变量进行运算

 二进制数0和1在逻辑上代表“真/假”、“有/无”。具有这种逻辑 属性的变量称为逻辑变量 异或操作也是 − 三种基本运算 一种重要的逻  与,逻辑乘;或,逻辑加;非,逻辑求反 辑运算 − 数的加、减、乘、除及乘方、开方等数

学运算

 算术运算

 计算机中逻辑运算与算术运算的主要区别

− 逻辑运算按位进行,位与位之间不像算术运算有进位和借位的关系

− 逻辑运算一般不涉及正负符号,逻辑量一般没有正负之分

2012-9-19

Zhanghz, CS of HQU

32

2.2 移位运算

 移位运算

− 也叫移位操作,在计算机中有很大的实用价值

 当某计算机中没有乘除法运算电路时,可以采用移位和加法相结 合来实现乘除运算  移位操作的代价要比直接乘除来得小

− 相对小数点位置作移动,分为左移和右移

 左移n位:相当于乘以2n  右移n位:相当于除以2n/乘以2-n 计算机中,机器数的字长是确定的,左移或右移n位后, 必然会在低位或高位出现n个空位,该补0还是补1呢? 算术移位 or 逻辑移位

2012-9-19

Zhanghz, CS of HQU

33

2.2 移位运算(2)

 算术移位

− 有符号数的移位运算

− 不论是正数还是负数移位,符号位均不受移位的影响

− 算术移位的空位添补规则

真值

正数

码制

原码、补码、反码

添补代码

0

原码

负数 补码

0

左移添0 右移添1

反码

1

2012-9-19

Zhanghz, CS of HQU

34

2.2 移位运算(3)

 例2.7 设机器数字长为8位(含1位符号位),若A=±26,写出三种机器 码左移1位和右移2位后的表示形式及对应真值,并分析结果 解:

A = +26 = (+11010)2

机器码

A = -26 = (-11010)2

移位操作 机器码 对应真值

移位操作 移位前 左移1位 右移2位

[A]原=[A]补=[A]反

0 0011010 0 0110100 0 0000110

对应真值 +26 +52 +6

移位前

左移1位 原 码

1 0011010

1 0110100

-26

-52

右移2位

移位前 左移1位 补 码

1 0000110

1 1100110 1 1001100

-6

-26 -52

对于正数,左移时高位丢1,结果出错; 右移时低位丢1,影响精度

右移2位

移位前

1 1111001

1 1100101

-7

-26 -52 -6

负数原码左移时高位丢1,结果出错; 反 1 1001011 左移1位 右移时低位丢1,影响精度; 码 1 1111001 右移2位 负数补码左移时高位丢0,结果出错; 右移时低位丢1,影响精度; 负数反码左移时高位丢0,结果出错;右移时低位丢0,影响精度

2012-9-19 Zhanghz, CS of HQU

35

2.2 移位运算(4)

 算术左移和右移操作的硬件框图

 逻辑移位

− 无符号数的移位

移位前

0

1

0

1

0

0

1

1

− 逻辑移位规则:

0

1

0

1

0

0

1

1

0

0 1

0

1

0

0

1

1

0

 左移时高位移丢,低位添0

逻辑左移

算术左移

 右移时低位移丢,高位添0

2012-9-19

Zhanghz, CS of HQU

36

2.3 定点加减法

 现代计算机中,都采用补码进行加减法运算

 补码加减运算基本公式

− 补码加法基本公式  整数 [A]补 + [B]补 = [A+B]补 (mod2n+1)

补码相加时,把符号位 和数值位同等处理,运 算后对结果取模

 小数 [A]补 + [B]补 = [A+B]补 (m

od2)

− 对于减法  小数 [A–B]补 = [A]补 + [-B]补 (mod2) [-B]补通过[B]补求得:

 整数 [A–B]补 = [A+(-B)]补 = [A]补 + [-B]补 (mod2n+1)

将[B]补包括符号位在内,每位求反,末位加1

2012-9-19

Zhanghz, CS of HQU

37

2.3 定点加减法(2)

 例2.8 已知A=+1011,B=-0101,求A+B

解: [A]补=01011, [B]补=11011 [A]补+[B]补 = 01011 + 11011 100110 = [A+B]补

取模丢弃

所以A+B = +0110 = (6)10

 例2.9 已知A=+0.1011,B=-0.0101,求A+B

解: [A]补=0.1011, [B]补=1.1011 [A]补+[B]补 = 0.1011 + 1.1011 10.0110 = [A+B]补

取模丢弃

所以A+B = +0.0110 = (0.375)10

2012-9-19

Zhanghz, CS of HQU

38

2.3 定点加减法(3)

 例2.10 设机器字长为8位(含1位符号位),若A=+15, B=+24,求A-B的值

解:

A = +15 = +0001111,B = +24 = +0011000

[A]补=00001111, [B]补=00011000, [-B]补=11101000 [A]补+[-B]补 = 00001111 + 11101000 11110111 = [A-B]补

所以

A-B = -0001001 = (-9)10

不论操作数是正或负,做补码 加减法时,只需将符号位和数 值位一起参加运算,并将符号 位产生的进位自然丢弃即可

39

2012-9-19

Zhanghz, CS of HQU

2.3 定点加减法(4)

 例2.11 设机器字长为8位,其中1位为符号位,令A=-93, B=+45,求A-B

解:

A = -93 = -1011101,有[A]补=10100011

B = +45 = +0101101,有[B]补=00101101, [-B]补=11010011 [A]补 + [-B]补 = = 10100011 11010011

[A-B]补

= 101110110 结果出错 因为A-B = -138

40

取模丢弃

所以,[A-B]补 = 01110110 A-B = +1110110 = (118)10 ≠-93 - 45 = -138

2012-9-19 Zhanghz, CS of HQU

溢出判断

 溢出

− 运算过程中出现数值大于字长可表示的范围的现象

 定点数的表示范围:|x|

− 正溢:大于可表示的最大正数值

负溢:小于可表示的最小负数值

 判断定点加减法运算溢出的方法——单符号位法

− 不论是加法还是减法,参加运算的两个数(对于减法,为被减数和减 数“求补”后得到的数)符号相同,而结果又与操作数的符号不同, 则产生溢出

− 硬件实现上,可使用一个异或门完成:对符号位产生的进位Cf和最高 有效位产生的进位C0进行异或操作,若异或结果为1则溢出

Cf=1,C0=0 → 负溢;Cf=0,C0=1 → 正溢

2012-9-19

Zhanghz, CS of HQU

41

溢出判断(2)

 例2.12 已知A=-0.1011,B=-0.0111,求A+B

解: [A]补=1.0101 , [B]补 =1.1001 [A]补+[B]补 = 1.0101 + 1.1001 10.1110 = [A+B]补

丢弃

A+B = +0.1110 = (0.875)10

负数相加变正数,发生了溢出

Cf=1,C0=0 → 负溢

 例2.13 已知A=-0.1000,B=-0.1000,求A+B

解: [A]补=1.1000 , [B]补=1.1000

[A]补+[B]补 = 1.1000 + 1.1000 11.0000 = [A+B]补

丢弃

2012-9-19 Zhanghz, CS of HQU 42

A+B = [A+B]补-2 =1.0000 -2 = -1

结果符号同操作数相同,不溢出

Cf=1,C0=1 → 异或为0,不溢

溢出判断(3)

 判断定点加减法运算溢出的方法——双符号位法

− 变形补码

[x]补’ = 2n+2 + x (mod 2n+2),以4或者4的幂为模

− 变形补码的加法

 2位符号位连同数值位一起参加运算,高符号位产生的进位自动丢 弃,便可得到正确结果 即有 [x]补’ + [y]补’ = [x+y]补’ (mod 2n+2)

− 正数的变形补码的两个符号位都为0,负数的都为1

− 溢出的双符号位法判断规则:

 两个数相加减,其结果的变形补码的符号位不同(“01”表示正溢 ,“10”表示负溢),表示发生溢出;否则无溢出产生

 不论溢出与否,最高符号位永远表示正确结果值的正确符号

2012-9-19 Zhanghz, CS of HQU 43

溢出判断(4)

 例2.14 已知A=+1100,B=+1000,求A+B

解: [A]补’=001100, [B]补’=001000

[A]补’+[B]补’ = 001100 + 001000 010100 = [A+B]补’

结果符号位出现“01”,表示 发生正溢出,结果值大于+24

 例2.15 已知A=-0.1011,B=-0.0111,求A+B

解: [A]补’=11.0101 ,[B]补’=11.1001

[A]补’+[B]补’ = 11.0101 + 11.1001 110.1110 = [A+B]补’

丢弃

2012-9-19 Zhanghz, CS of HQU 44

结果符号位出现“10”,表示 发生负溢出

定点加减运算的控制流程

开始

准备

被加(减)数 → A 加(减)数 → X N 加法? Y 减数求补

相加

(A) + (X) → A (mod 2或mod 2n+1) Y

判溢出

溢出? N 结束

置溢出标志

2012-9-19

Zhanghz, CS of HQU

45

定点加减法的基本硬件组成

V

0

A

n

GA

GS

溢出判断

加法器(n+1位)

求补控制逻辑

0

X

n

A,被加(减)数寄存器 X,加(减)数寄存器 V,溢出标志;GA/GS,加/减法标志

2012-9-19

Zhanghz, CS of HQU

46

基本二进制加/减法器

Si  Ai  Bi  Ci Ci 1  Ai Bi  Bi Ci  Ci Ai  Ai Bi   Ai  Bi Ci

2012-9-19

Zhanghz, CS of HQU

47

2.4 定点乘除法

 从笔算乘法开始

− A=+1101,B=+1011,计算A×B

1011 × 1011 1101 1101 0000 + 1101 10001111

笔算方法不适合计算机使用: 1. 机器字长固定为n,而两个n位数相乘 ,乘积可能为2n位 2. 加法器一般只有两个操作数,难以完 成将n个位积一次相加,需要缓存位积

A ·B = A ·1011 = A· + A· + A· 1 10 000 + A· 1000 = A + 10A + 100 ( 0A + 10A ) = A + 10 [ A + 10 ( 0A + 10A ) ] = A + 21 { A + 21 [ 0A + 21 ( A + 0 ) ] }

两数相乘的过程,可视为多次加法 和移位两种运算的组合 乘数为整数,左移;为小数,右移

计算机实现上,用一个寄存器存放 被乘数,一个寄存器存放乘积高位 ,另一个寄存器存放乘数及乘积低 位,再配上加法器及相关电路,即 可组成乘法器

48

2012-9-19

Zhanghz, CS of HQU

原码乘法

 原码乘法

− 特点:符号位和数值位分开运算

 乘积的符号位由两个乘数原码的符号位异或运算得到

 乘积的数值由两个乘

数值的绝对值原码相乘得到

 原码一位乘

− 设A=-1110,B=-1101,计算A· B [A]原=11110 , [B]原=11101 |A| = 1110,As=1;|B| = 1101,Bs=1

|A| ·|B| = 1110 ×1101 = 10110110

As⊕ Bs= 1⊕1 = 0 A· = 010110110 = +10110110 = (182)10 B

2012-9-19 Zhanghz, CS of HQU 49

原码乘法(2)

 原码两位乘

− 提高原码乘法速度

− 两位两位地使用乘数,以其状 态来决定新的部分积如何产生 − 基于重复相加和移位的思想

乘数的两位 00 01 10 11 新的部分积 新部分积等于原部分积右移两位 新部分积等于原部分积加被乘数后右移两位 新部分积等于原部分积加2倍被乘数后右移两位 新部分积等于原部分积加3倍被乘数后右移两位

− 运算规则

当乘数位数为偶数时,计算前需在乘数的 最高位前添补两个0 当乘数的最高两位为“11”时,需要将Cj臵 为“1”,需要将其与添补的两个0结合为 “001”状态,完成加被乘数绝对值的操作 ,这个时候不移位 减去被乘数绝对值|x|,通过加上[-|x|]补来 实现

2012-9-19

Zhanghz, CS of HQU

50

原码两位乘示例

 例2.16 A=(63)10=+111111,B=(-57)10=-111001,计算A· B

解: |A|=111111,[-|A|]补=1000001,2|A|=1111110,|B|=111001

数值位计算过程: 部分积 000000 + 111111 111111 001111 + 1111110 10001101 100011 + 1000001 1100100 11001 + 111111 111000

2012-9-19

乘数 00111001

Cj 0

符号位计算过程: 0⊕1 = 1

11001110 01110011

0 0

A· = -111000000111 B = -(3591)10 = -(63×57)10

00011100

000111

1

Zhanghz, CS of HQU

51

原码一位乘 VS. 原码两位乘

 原码一位乘与原码两位乘的比较

原码一位乘

乘积符号 操作数 移位 移位次数 最多加法次数 由操作数符号位异或形成 绝对值 逻辑移位 n n

原码两位乘

同 一位乘 绝对值补码 算术移位 n/2(n为偶数) n/2 + 1(n为偶数)

进一步提高乘法运算速度的手段:并行阵列乘法器

2012-9-19

Zhanghz, CS of HQU

52

原码阵列乘法器

 不带符号的原码阵列乘法器

2012-9-19

Zhanghz, CS of HQU

53

原码阵列乘法器(2)

 带符号的原码阵列乘法器

4位算前求补器

2012-9-19

Zhanghz, CS of HQU

54

补码乘法

 补码乘法

− 特点:符号位与数值位一起参加运算

− 排除了较慢的求补操作,大大加速了乘法过程

 补码一位乘

被乘数x 符号任意 乘数y 计算公式 说明 按原码乘法规则运算

符号为正 [x· 补=[x]补· 补=[x]补· y] [y] y

符号为负 [x· 补 = [x]补· 补| + [-x]补 |[y]补| 为去掉符号位的乘数补码 y] |[y]

 补码两位乘

校正法

− 根据补码一位乘比较法的规则,把比较ynyn+1应执行的操作和比较yn1yn应执行的操作合并成一步完成

2012-9-19

Zhanghz, CS of HQU

55

补码乘法(2)

 比较法——Booth算法

− 被乘数和乘数符号任意

− 运算规则

 设被乘数 x

= x0x1x2…xn,y=y0y1y2…yn,x0和y0为符号位

 初始时,yn+1=0,部分积初值[Z0]补为0; 每步乘法由(yi+1- yi) (i=n, n-1, …, 1, 0)决定原部分积是加[x]补或[-x]补 或0,再右移一位得到新的部分积,如此重复n+1步,不过第n+1步( 即y1 – y0时)不移位,即可得到[x· 补 y]

yiyi+1 00 01 10 11

2012-9-19

yi+1 - yi 0 1 -1 0

操作内容 部分积右移一位 部分积加[x]补,再右移一位 部分积加[-x]补,再右移一位 部分积右移一位

56

Zhanghz, CS of HQU

补码比较乘法示例

 例2.17 A=(6)10=+110,B=(-5)10=-101,计算A· B

解: [A]补=0110, [-A]补=1010,[B]补=1011

计算过程: 部分积 0000 + 1010 1010 1101 1110 + 0110 0100 0010 + 1010 1100

2012-9-19

乘数 1011

Cj 0 [A· 补 = 1100010 B]

0101 1010

1 1

A· = -011110 B = -(30)10 = -(6×5)10

0101

010

0

Zhanghz, CS of HQU

57

补码阵列乘法器

2012-9-19

Zhanghz, CS of HQU

58

2.4 定点乘除法(2)——原码除法

 原码除法

− 商的符号由两数的符号位进行异或运算求得,商的数值由两数的绝对 值相除求得 − 计算机中常通过多次“减法-移位”来实现

 利用计数器来控制移位次数

 实现除法时,应避免除数为0或被除数为0

 恢复余数法

− 求商过程中,某一步相除发现余数为负时,需通过加上余数将其恢复 为原来的余数 − 除法过程中步数变得不固定,控制比较复杂,不利于线路结构实现, 也延长了机器除法的时间

2012-9-19

Zhanghz, CS of HQU

59

原码除法(2)

 不恢复余数法(加减交替法)

− 除法过程中出现不够减时,不必恢复余数,而根据余数符号继续运算

− 运算规则

 当余数Ri > 0,上商“1”,做2Ri - |y|的运算

 当余数Ri

解:

[A]原=1.1011,|A|=0.1011, [B]原=0.1101,|B|=0.1101= [|B|]补,[-|B|]补=1.0011 被除数(余数) 0.1011 + 1.0011 1.1110 1.1100 + 0.1101 0.1001 1.0010 + 1.0011

2012-9-19

商 0.0000 0 0

01 01

被除数(余数) 0.0101 0.1010 + 1.0011 1.1101 1.1010 + 0.1101 0.0111

011 011 0110 0110 01101

[A/B]原 =1.1101

60

Zhanghz, CS of HQU

补码除法

 补码除法

− 符号位和数值部分一起参加运算

− 也分为恢复余数法和加减交替法

 补码加减交替法

− 主要解决3个问题

 1)如何确定商值;2)如何形成商符;3)如何获得新余数

− 运算规则

 比较被除数和除数的大小,以确定商值求取规则  商符在求商过程自动形成

 中间过程的新余数的获得方法与原码加减交替法相似

2012-9-19

Zhanghz, CS of HQU

61

2.5 定点运算器

 定点运算器的基本结构

− 主要包括的逻辑部件有:

 算术逻辑单元ALU

 通用寄存器

 多路开关  三态缓冲器

 数据总线

 运算器的设计

− 主围绕ALU和寄存器同数据总线之间如何传送操作数和运算结果进行

− 需考虑的因素:数据传送的便利性、操作速度、制作工作等

2012-9-19

Zhanghz, CS of HQU

62

运算器的三种结构形式

2012-9-19

Zhanghz, CS of HQU

63

算术逻辑单元ALU

 ALU的特点

− 核心部件是加法器和寄存器

− 既能完成算术运算,又能完成逻辑运算

− 具有先行进位逻辑,能实现高速运算

 ALU的基本思想

− 在全加器的基础上进行扩展,以完成多种 算术/逻辑运算 − 先将操作数Ai和Bi,在控制信号S3S2S1S0 控制下得到信号Xi和Yi,再由Xi、Yi和下 一位进位Cn+i通过全加器得到输出结果Fi 和Cn+i+1 − 不同的S3S2S1S0组合取值,决定了ALU 完成不同的算术运算或逻辑运算

i表示集成在一片电路内部的ALU 的二进制位序,如对于4位一片的 ALU,i=0、1、2、3 n表示若干片ALU组成更大字长的 运算器时,每片的进位输入,如4 片组成的16位的运算器,n=0、4 、8、12

2012-9-19

Zhanghz, CS of HQU

64

算术逻辑单元ALU(2)

 控制信号、输入量和输出量的关系

S0S1 Yi S2S3 Xi

00

01 10

Ai

AiBi AiBi

00

01 10

1

Ai+Bi Ai+Bi

11

0

11

Ai

Fi  X i  Yi  Cni Cni 1  X iYi  Yi Cni  Cni X i

Yi  S0 S1 Ai  S0 S1 Ai Bi  S 0 S1 Ai Bi X i  S 2 S3  S 2 S3 ( Ai  Bi )  S 2 S3 ( Ai  Bi )  S 2 S3 Ai

X i  S3 Ai Bi  S 2 Ai Bi Yi  Ai  S0 Bi  S1 Bi Fi  X i  Yi  Cn i Cn i 1  X iYi  Cn i (Yi  X i )  Yi  Cn i X i

2012-9-19

假定S3S2S1S0=0000,代入则有:

X i  S3 Ai Bi  S 2 Ai Bi  0  0  1 Yi  Ai  S 0 Bi  S1 Bi  Ai  0  0  Ai Fi  X i  Yi  Cn i  1  Ai  0  Ai

65

Zhanghz, CS of HQU

4位ALU

问题1:片内是串行进位还是 并行进位? 串行进位,速度慢

问题2:Cn+i与Xi和Yi有关,每 位Xi和Yi是不是同时产生呢?

是,则可以通过Xi和Yi来加速 Cn+i的计算,实现并行进位

Cn 1  Y0  X 0Cn Cn  2  Y1  X 1Cn 1  Y1  Y0 X 1  X 0 X 1Cn Cn 3  Y2  X 2Cn  2  Y2  Y1 X 2  Y0 X 1 X 2  X 0 X 1 X 2Cn Cn  4  Y3  X 3Cn 3  Y3  Y2 X 3  Y1 X 2 X 3  Y0 X 1 X 2 X 3  X 0 X 1 X 2 X 3Cn

 G  PC n

G:进位发生输出;P:进位传送输出 用于实现多片ALU之间的快速进位 同时需要一个配合电路,先行进位发生器CLA

2012-9-19 Zhanghz, CS of HQU 66

ALU集成器件——74181

 74181 芯片

− 完成4位二进制数的算术/逻辑运算

正逻辑:用高电平表示“1”,用低电平表示“0” 负逻辑:用低电平表示“0”,用高电平表示“1” M=0,算术操作;M=1,逻辑操作 S3S2S1S0有16种组合状态,因此正逻辑或负逻辑工作方式下,都有 16种算术运算功能和16种

逻辑运算功能

2012-9-19

Zhanghz, CS of HQU

67

正逻辑工作方式的74181内部逻辑电路图

Cn 4  G  PC n

Fi  X i  Yi  Cn i

X i  S3 Ai Bi  S2 Ai Bi

2012-9-19

Yi  Ai  S0 Bi  S1 Bi

Zhanghz, CS of HQU 68

74181 ALU算术/逻辑运算功能表

在正逻辑条件下,M=0(L), S3S2S1S0=0110(LHHL),Cn=1(H) ,进行算术运算“A减B减1”

74181的算术运算是用补码实现的 ,其中“加”是算术加,需要考 虑进位;“+”是逻辑加;减法中 减数的反码由内部电路形成

ALU是组合逻辑电路,实 际应用时,其输入端口A和B必 须与锁存器相连,在运算过程 中锁存器内容保持不变;其输 出也必须送至寄存器保存

2012-9-19 Zhanghz, CS of HQU 69

快速进位链

 n位并行加法器

− n个全加器级联,就组成了一个n位的并行加法器

− 逐级递进进位很大地影响运算速度,可以将其转换为进位链的方式实 现快速进位

 串行进位链

− 进位信号采用串行传递

Ci 1  Ai Bi   Ai  Bi Ci  di  ti Ci

2012-9-19

Zhanghz, CS of HQU

70

快速进位链(2)

 并行进位链

− 进位信号同时产生,又称先行进位、跳跃进位

− 通常分为单重分组和双重分组两种方案

 单重分组并行进位

− 将n位全加器分成若干组,组内并行进位,组间串行进位

4位并行进位表达式:

C1  d 0  t0C0 C2  d1  t1C1  d1  t1d 0  t1t0C0 C3  d 2  t 2C2  d 2  t 2 d1  t 2t1d 0  t 2t1t0C0 C4  d 3  t3C3  d 3  t3d 2  t3t 2 d1  t3t 2t1d 0  t3t 2t1t0C0

2012-9-19

Zhanghz, CS of HQU

71

16位ALU

16位按4位一片分组,片内并行进位,片间串行进位

2012-9-19

Zhanghz, CS of HQU

72

快速进位链(3)

 双重分组并行进位

− 将n位全加器分成若干大组,每个大组中又包含若干小组,而每个大 组内所包含的各个小组的最高位进位是同时产生的,大组和大组之间 则采用串行进位

 组内并行,组间并行——指小组与小组之间

 小组内的其他进位与小组的最高位进位不是同时产生

D等同于该小组产生 的进位发生输出G T等同于该小组产生 的进位传送输出P

32位并行加法器双重分组并行进位链

2012-9-19 Zhanghz, CS of HQU 73

74181与74182组成的双重分组并行进位链

74182芯片:先行进位发生部件CLA

2012-9-19

Zhanghz, CS of HQU

74

主要内容

1. 数据表示

1.1 无符号数和有符号数 1.2 定点数和浮点数

3. 浮点运算

3.1 浮点加减法 3.2 浮点乘除法

1.3 数的机器码表示

1.4 字符和字符串

3.3 浮点运算器

2. 定点运算

2.1 逻辑运算和算术运算

2.2 移位运算

2.3 定点加减法

2.4 定点乘除法

2.5 定点运算器

2012-9-19

Zhanghz, CS of HQU

75

浮点运算

 机器中浮点数的表示

x  M x  R Ex

M,浮点数尾数,一般

为绝对值小于1的规格化数,用原码或补码表示 E,浮点数阶码,一般为整数,多用补码或移码表示 R,浮点数基数,一般为2、4、8、16

 浮点加减法

x  M x  2 Ex

− 运算规则

y  My R

Ey

z  x  y  (M x  2Ex -t  M y  2

E y -t

)  2t

t  max ( E x , E y )

2012-9-19

Zhanghz, CS of HQU

76

浮点加减法

 浮点加减法的运算步骤

1. 0操作数检查

 若有一个操作数为0,则可以不作后续步骤,节省运算时间

2. 对阶

 阶码不等的两个尾数表示其小数点实际位置不一样,不能直接进 行加减运算,需要对阶  对齐原则:小阶向大阶对齐 3. 尾数求和 为什么?

 对阶后的尾数按定点加减法运算规则进行求和

2012-9-19

Zhanghz, CS of HQU

77

浮点加减法(2)

4. 规格化

 若采用双符号位补码,则规格化数的形式为

[ M z ]补  00.1 

[ M z ]补  11.0 

,M z  0

,M z  0

尾数的最高数值位 与符号位不同时

 左规:尾数出现00.0‥‥或11.1‥‥时,即尾数的第一位数值位 与符号位相同时,需左规,将其左移一位,阶码减1 右规:尾数出现01.‥‥或10.‥‥时,表示尾数溢出,但在浮点 运算中不视为溢出,而通过右规处理,将其右移一位,阶码加1  特殊数的处理:

M=-0.5,[M]补=11.10‥0,为便于硬件判断,规定其非规格化数

M=-1,[M]补=11.00‥0,因小数补码允许-1,故视-1为规格化数

2012-9-19

Zhanghz, CS of HQU

78

浮点加减法(3)

5. 舍入处理——对阶和右规过程,可能会将数值低位丢失,引起误差

方法名称 就近舍入法 (0舍1入法) 朝0舍入法 朝+∞舍入法 朝-∞舍入法 处理规则 说明

尾数右移时,被移去的最高数值位为0,则舍去; 可能又发生尾数溢 被移去的最高数值位为1,则在尾数末位加1 出,需再做右规 无论尾数移去什么数位,都做舍去处理 对正数,移去的位数不为0,则向最低有效位进1 对负数,则简单地做舍去处理 对正数,简单地做舍去处理 对负数,移去的位数不为0,则向最低有效位进1 容易导致误差累积

6. 溢出处理——浮点数是否溢出通过判断其阶码是否溢出进行  阶码符号为“01”,上溢,需做溢出处理  阶码符号为“10”,下溢,按机器零处理

2012-9-19

Zhanghz, CS of HQU

79

浮点加减法运算示例

 例2.19 设A=-0.101000×2-101,B=0.111011×2-100,设阶码 和尾数都采用双符号位,阶数值3位,尾数值6位,求A-B

解:两个数的浮点表示为

[A]补= 11 011, 11.011000

[B]补= 11 100, 00.111011

1)对阶:ΔE = -101+100=-001,A的阶码小,将其尾数右移1位,阶码加1 [A]补=11 100, 11.101100 2)尾数求和 11.101100-00.111011 = 11.101100+11.000101=10.110001 3)规格化:结果尾数符号位出现“10”

,需右规 [A-B]补= 11 011, 11.011000(1) 4)舍入:采用0舍1入法,右规时末位丢1,则末位加1得到 11.011001 5)溢出判断——阶符为11,不溢出

最终结果为A-B= -0.100111×2-101

2012-9-19 Zhanghz, CS of HQU 80

浮点乘除法

 运算规则

− 浮点乘法运算规则 − 浮点除法运算规则

z  x  y  (M x  M y )  2

z  x  y  (M x  M y )  2

Ex  E y 

Ex -E y 

运算过程不存在对阶的问题,但也需考虑规格化、舍入、溢出处理

 运算步骤

1. 0操作数检查 2. 阶码加减操作

浮点加减法对结果的规格化、舍入、 溢出处理同样适用于浮点乘除法

3. 尾数乘除操作

4. 规格化

5. 舍入、溢出处理

2012-9-19

Zhanghz, CS of HQU

81

浮点乘除法示例

 例2.20 已知A=0.0110011×2-101,B=-0.1110010×2011,阶 符采用双符号,阶数值用4位补码,尾数用8位原码,求A×B

解: [A] =11 011, 0.0110011

1)阶码运算 2)尾数相乘 3)规格化处理 4)舍入处理

[B] =00 011, 1.1110010

(11 011)补 + (00 011)补 = (11 110)补 (00.0110011)原×(11.1110010)原 = (11.0101101 0110110)原 需左移1位,变为 11 101, 1.1011010 1101100 舍去尾数低7位,按0舍1入法,得到 1.1011011

5)溢出判断

阶码为“11”,不溢出

最终结果 A×B = (11 101)补, (1.1011011)原 = -0.1011011×2-011

2012-9-19

Zhanghz, CS of HQU

82

浮点乘除法示例(2)

 例2.21 已知A=(9/16)×2101,B=(-13/16)×2011,阶符和尾数 符用双符号,阶数值用3位补码,尾数值用4位补码,求A÷B

解: [A]补 =00 101, 00.1001 [B]补 =00 011, 11.0011

1)阶码相减

2)尾数相除

00101 – 00 011 = 00 101 + 11101 = 00 010

采用补码除法 00.1001 / 11.0011 = 11.0101

已经是规格化数,阶码为“11”,不溢出

所以,[A÷B]补 = 00 010, 11.0101 A÷B = -0.1011×2010 = (-11/16) ×22

2012-9-19

Zhanghz, CS of HQU

83

浮点运算器

 浮点运算所需的硬件配置

− 浮点运算特点:阶码只做加、减运算,尾数则有加、减、乘、除运算

− 浮点运算器主要由两个定点运算部件组成

 阶码运算部件:完成阶码的加减运算以及控制对阶时小阶尾数右 移次数和规格化时阶码的调整  尾数运算部件:完成尾数的四则运算以及判断尾数是否已规格化

− 此外还需有判断运算结果是否溢出的电路等

 浮点运算器实例

− CPU外部浮点运算器  配合CPU而工作,不能单独使用——如Intel 8087/80287 协处理器 − CPU内部浮点运算部件

 流水线设计,有浮点专用的加法器/乘法器/除法器,专门的80位寄 存器堆等——Intel 80486以上CPU中

2012-9-19 Zhanghz, CS of HQU 84

8087浮点运算器逻辑框图

2012-9-19

Zhanghz, CS of HQU

85

范文三:5.如何表示一个算法 投稿:李娽娾

2.1.1用自然语言表示算法

除了很简单的问题,一般不用自然语言表示算法。

2.1.2用流程图表示算法

流程图表示算法,直观形象,易于理解。

【例2.6】将例2.1求5!的算用流程图表示。

2.7】将例2.2的算用流程图表示。 【例

2.1.1三种基本结构和改进的流程图

顺序结构:

选择结构:

循环结构:

三种基本结构的共同特点:

1.

2.

3.

4. 只有一个入口; 只有一个出口; 结构内的每一部分都有机会被执行到; 结构内不存在“死循环”。

2.1.1用N-S流程图表示算法

1973年美国学者提出了一种新型流程图:N-S流程图。

顺序结构:

2.1.1用伪代码表示算法

伪代码使用介于自然语言和计算机语言之间的文字和符号来描述算法。

2.1.2用计算机语言表示算法

1.

2. 我们的任务是用计算机解题,就是用计算机实现算法; 用计算机语言表示算法必须严格遵循所用语言的语法规则。

【例2.20】求1×2×3×4×5用C语言表示。

main()

{int i,t;

t=1;

i=2;

while(i

{t=t*i;

i=i+1;

}

printf(“%d”,t);

}

【例2.21】求级数的值。

main()

{

int sigh=1;

float deno=2.0,sum=1.0,term;

while(deno

{ sigh= -sigh;

term= sigh/ deno;

sum=sum+term;

deno=deno+1;

}

printf(“%f”,sum);

}

2.2结构化程序设计方法

1.

2.

3.

4.

自顶向下; 逐步细化; 模块化设计; 结构化编码。

范文四:第38讲算法的表示方法 投稿:宋箇箈

第38讲

【教学目标】

1) 理解算法的概念

算法的表示方法

2) 掌握使用自然语言和流程图描述算法的表示方法 3) 了解变量和变量的用途 【教学重点】

1) 算法具有的特征 2) 使用流程图形式表示算法 【教学难点】

1) 使用流程图形式表示算法

一、算法的概念

1、用计算机解题前,需要将解题方法转换成一系列具体的、在计算机上可执行的步骤,然后,才能将这些步骤表示成指令代码。这些步骤清楚地反映解题方法一步步“怎样做”的过程,这个过程就是通常所说的算法。

例如:“用铁丝制作一个矩形框”,示意性程序P的处理步骤的全体就构成了解决这一个问题的算法;

2、算法的特征: a)有穷性:

一个算法必须保证它的执行步骤是有限的,即它是能终止。也就是说操作步骤不能是无限的。(有些算法,虽然是有穷的,但它所花费的时间如果超合理的限度,例如,需要一台或一组现代高速计算机运行几十甚至几百年能得到结果,那么这种算法,也不能算是有效的算法。) b)确定性:

算法中的每个步骤必须有确切的含义,而不应当是含糊莫棱两可的。 例如,步骤输出:L/正整数

是无法执行的,因为没有指定L除以哪一个正整数,所以,这个步骤是不确的。 c)能行性:

算法中的每一个步骤都要足够简单,是实际能做的,而且能在有限的时间内完成。 例如,程序P中序号为9的单元中指令 输出:(L+d)/4

是在条件d>=0的前提下才被执行的,式中的求正数的平方根、求和以及计个正数的商,所有这些计算都能在非常短的时间内完成。 d)有0个或多个输入:

所谓输入是指算法在执行时需要从外界获得数据,其目的是为算法建立某些初始状态。如果建立初始状态所需的数据已经包含在算法中了,那就不再需要输入。

例如,解例1的算法需要输人两个数据(铁丝的长度L和矩形框的面积S)。

e)有一个或多个输出:

算法的目的是用来求解问题,问题求解的结果应以一定的方式输出。 例如,求解例1的结果为:

1

LL216SLL216S

两条不同的边长:宽度高度(两个输出);

44

两条相同的边长: 宽度=高度=L/4 (一个输出);

无解: (一个输出)。

“无解”告诉我们在一定的情况下(d

事实上,在日常生活中解决问题经常要用算法,只是通常不用算法这个词罢了。例如,乐谱是乐队指挥和演奏的算法;菜谱是厨师做菜的算法等等。在漫长的岁月中,人们发现了很多算法。例如欧几里得提出的求两个自然数的最大公约数算法,早期希腊学者埃拉多塞尼(Eratosthenes)发现的寻找素数的筛法等都是著名的算法例子。

电子计算机的出现,开创了算法研究的新时代。人们可以将算法编写成程序提交给计算机执行.从而迅速获得解题结果。著名计算机科学家高纳德(D.E.Knuth)认为:计算机科学是算法的科学。

程序按照算法运行,程序是算法的实现!

二、算法的表示

一个算法可以用多种不同的方法来描述,流程图(flowchart)是一种比较直观易用的、用

图形来描述算法的方法。

例2学校上体育课,一般在操场上课,遇到下雨或下雪天,改到室内上课,可用流程图表示如下,见图1.4.1。

2

流程图中所用的符号,应遵循国家颁布的标准(GBl526—89,ISO 5807—1985)来画。这

①处理框

:框中指出要处理的内容,该框有一个入口和一个出口。

②输入输出框

:用来表示数据的输入或计算结果的输出。

③判断框:用来表示分支情况,菱形框的四个顶点中,通常用上方的顶点表

④连接框:用于连接因画不下 ⑤流程线:指出流程控制方向,即动作的次序。 ⑥开始、结束符:用来表示算法的开始和结束。

一个算法只能有一个开始处.但可以有多个结束处。

例3 图1.4.2是用流程图表示的解例1问题的算法:

3

上算法开始演示喽,大家看好了!(分有解和无解两种情况演示)

学生机Flash版本太低,不能播放动画:求矩形框边长.swf,可以拖入打开的SAFlashPlayer.exe窗口运行(演示)

我们也可以使用自然语言,例如汉语,加上一些必要的数学符号,来描述解决问题的算法,如上面图1.4.1描述体育课问题。下面是用自然语言描述的解例1的算法: (1)(输入原始数据)输入:铁丝的长度送变量L, 矩形框的面积送变量S。 (2)(计算d)计算L2—16S,结果送变量d。

(3)(判断是否仅有一个根)如果d=0,那么转到(7)。 (4)(判断是否无根)如果d

宽度w=(L+d)/4 高度h=(L-d)/4

(6)(算法终止)结束。

(7)(方程有一个根)输出:“两条相同的边长” 宽度w=L/4高度h= L/4 (8)(算法终止)结束。

(9)(方程无实数根)输出:“无解”。 (10)(算法终止)结束。

自然语言的主要缺点是有时会存在两义性,这种两义性不是算法本身的问题,是算法表示的工具引起的。例如,“打死老虎”,既可以表示“打的是一只死老虎”,也可以表示“打死了一只老虎”,因此它可能引起某些计算步骤的不确定性。

此外,我们还可以用“伪代码”(pseudo-code)来描述算法。伪代码使用某些程序设计语言中的控制结构及类似语句,来描述算法中各步骤的执行次序和模式,使用自然语言、数学符号或其他符号,来表示计算步骤要完成的处理或需要涉及的数据。使用伪代码可以免去许多绘图的麻烦,但前提是必须熟悉某种程序设计语言。下面是用伪代码描述的解例1的算法。 铁丝的长度,矩形框的面积) 2-16S

if (d=O) write (“两条相同的边长”,L/4) else if (d

else write(“两条不同的边长”,(L+d)/4, (L-d)/4)

在有些讲解算法的大学教材《数据结构》中,用伪代码程序来描述算法。 伪代码模仿一些语言的语句写程序,但不能真正运行,只是描述算法方便而已。

三、练习

1、阅读本讲稿,理解:例3 图1.4.2流程图的表示法(求矩形框边长.swf); 2、执行“用铁丝制作一个矩形框”的例1矩形求解程序P.exe; 3、画出P7:问题与练习2的算法的流程图A;

4、画出求每一班(不知道每班人数n)同学的单课成绩的平均分算法流程图B;

(注意:会考题中有算法流程图填空题,在全国程序员水平考试中也有算法流程图填空题)

4

2010-1-15

“用铁丝制作一个矩形框”,示意性程序P

5

返回

返回

流程图A: (不用公式,用逐项累加法)S=2+4+6+„+2*k (k=1,2,3,„,50);

逐项累加法算法2提示:设每一项为P,则新的一项(后一项)为P+2P,请修改上流程图。

返回练习题目

流程图B:设成绩放入变量d中,总分放入变量Sum中,变量c记有效成绩个数;平均分=Sum/c,

这里用到了最后输入-1数作为结束标志数。上流程图有算法错误,请同学们找出来。

运行本文件夹里的:求平均值.,理解其算法,上算法错误已用判断条件处理了。

返回练习题目

6

范文五:学案191.3算法的表示方法 投稿:董寰寱

学案19

班级

【学习目标】

1. 理解变量及其用途。

2. 知道算法的流程图表示方法。 【要点回顾】

算法有如下几个特征: 【课堂讲练】

1.3算法的表示方法 1、变量:

第1章 计算机和算法

姓名

学号

、 、

①定义:计算过程中要用到的数据的 ②变量赋值:a←1 或 a=1; ③特点:1、取之不尽 2、算法的描述方法有三种:

2、赋值即覆盖

3、算法的流程图表示:

开始、结束符:; 处理框: 输入输出框:; 判断框:; 流程线: 连接框:

例1、求两个整数a、b之和c

【练习】

例:已知矩形的长和宽,求矩形的面积。 算法: 1.输入长到变量a 2.输入宽到变量

b 3.计算:S←a*b 4.输出面积:S

例2

例3

例4

例5

算法执行时输入5 , 10

1

其它算法:

【课后练习】

1. 常用的算法表示方法是。

A.自然语言、机器语言、伪代码 B.伪代码、流程图、机器语言 C.流程图、自然语言、伪代码 D.低级语言、自然语言、流程图 2. 图形符号 在

A.算法的开始或结束 C.处理或运算的功能

算法流程图描述中各表示。

B.输入输出操作

D.用来判断是否满足需求

3. 关于程序中的变量,下面说法错误的是:。

A.一旦将数据存入某变量,读取变量中的值,不会改变变量的内容 B.一旦将数据存入某变量,以后就不能将新的数据存入该变量 C.一旦将数据存入某变量,以后可以将新的数据存入该变量

D.一旦将数据存入某变量,只要不把新的数据存入,变量的内容就不会改变 4. 下列给出的赋值语句中正确的是。

A.4←M B.-M←M C.B←A-3

D.x+y←0

5.

. . . .

6. 输出结果

7. 输出结果

8.运行结果。

2

3

范文六:1.4算法的概念和表示方法 投稿:王摤摥

1.4 算法的概念和表示方法

教学目标

1. 理解算法的基本概念。

2. 初步掌握算法的表示方法。

3. 理解顺序、选择和循环三种基本模式。

学科指导意见:

用生活实例来说明算法,仅限于流程图方式,对具体的程序中涉及的三种基本模式的程序分析(即三种基本模式的实现),建议放在第五章中讲述。1.4.3变量和变量的用途放在第四章进行教学。

教材分析:

算法是本节教学的重点和难点,教学中要和前几节形成一体,所以在教学中建议在以上几节的基础上提出算法的概念,引出算法执行的三种基本模式。然后将以前的问题深化为适用到选择模式和循环模式的问题,再次将算法以流程图方式表示。本节课的教授中要把握好难度,不能全部按教材的内容顺序进行授课,对于指令的类型、变量和变量的用途可视情况,移到第四章第4.1节中进行教学,在学生有一定程序概念后再学习,学生更容易理解。对于三种基本模式只作简单了解,不进行程序实例分析,也不要展开讨论或深入探讨。

教学方法:教授法为主

教学过程:

1、 引入:

在确定了解决问题的方法之后,如何把解题方法转换成计算机能完成的操作步骤呢?如上面“用铁丝制作一个矩形框”示意性程序P中的一系列步骤,这些步骤能清楚的反映解题方法的一步步“怎么做”的过程,这些处理步骤的全体就构成了解决这一问题的算法。

2、 算法的基本概念

算法:解题方法的精确描述。其要求是有有限个步骤组成的,并且每一步骤的含义都是明确的,而且是能行的。

简单的说,算法就是解决问题的方法和步骤。

事实上,在日常生活中解决问题经常要用到算法,只是通常不用算法这个

词罢了。例如乐谱是乐队指挥和演奏的算法;菜谱是厨师做菜的算法等等。

算法的特征:(分析“用铁丝制作一个矩形框”示意性程序P,介绍算法特征,简单快速带过)

有穷性:不论方程有无根,最多只要执行11个操作步骤,广义的说,操作步骤的数量或能在合理的时间范围内完成全部操作,如果要让计算机运行几十年才能完成的算法肯定不是一个有效的算法。

确定性: 每个步骤必须有确切的含义,而不是含糊的、模棱两可的。如L/正整数,但正整数不知道具体的数是不行的。

能行性:每一个步骤都要足够简单,是实际能做的,在非常断的时间内可完成。

有0个或多个输入:如例子中要输入长度L和面积S,以便建立算法的初始状态

有1个或多个输出:算法的目的是用来求解问题,问题的结果应以一定的方式输出。如方程的根有几种结果,即使无解也要有提示输出。

3、 算法的表示方法

(重点介绍算法的表示——流程图,可采用教材中的两个例子,分析两个流程图后,可让学生通过执行“算法执行过程体验”,复习巩固所学算法表示知识。)

算法可以用多种不同的方法来描述,流程图是一种比较直观易用的、用图形来描述算法的方法。

如p8中的例2,根据天气情况判断上课的场地的流程图

介绍流程图中的符号的用途

介绍“求矩形框边长”运行体验的flash中的流程图和使用方法,让学生完成课本P10中的体验。

算法执行过程体验操作步骤如下:

 学生进入“运行体验”文件夹,双击指定文件“求矩形框边长”  单击“自动执行”(或“单步执行”)按钮,进入演示程序,如图1.5

为“求矩形框的边长”演示程序界面

图1.5 用流程图描述“求矩形框边长”的算法

 单击“开始运行”按钮,根据提示输入相关数据

 记录有关输出结果到教材“算法执行过程体验”框中

 重复操作c,完成所有算法体验

我们除了用流程图的方法描述算法之外,还可以用自然语言和伪代码的形式来描述算法,我们不做要求,具体方法见课本P10页。

4、 顺序、选择和循环三种基本模式

算法的执行流程是指算法中各个处理步骤的执行次序和模式。通常算法中含有三种基本模式:顺序、选择和循环。

程序三种基本的控制结构

循环结构 顺序结构 分支结构

(1)顺序模式:一个步骤完成后,顺序执行紧跟着的下个处理步骤。 如电视节目,按先后顺序直线下来。

(2)选择模式:根据情况的不同,在预定的两个模式中,选择一个合理的步骤执行

如根据天气情况,选择体育课场地问题。

(3)循环模式:对某个情况e进行判断,当结果为真时,执行处理步骤step,然后再次判断这个情况e,当结果为真是,再次执行步骤step,并继续判断情况e。总是重复上述过程,直到判断的结果为假。

如某某同学去吃馒头,判断有没有撑死,没有的话,一直吃,直到撑死为止。

算法执行过程体验操作步骤如下:(教师先讲解)

 学生进入“运行体验”文件夹,双击指定文件“计数”

 单击“自动执行”(或“单步执行”)按钮,进入演示程序,为“计数”

演示程序界面

 单击“开始运行”按钮,根据提示输入相关数据

 记录有关输出结果到教材P15“算法执行过程体验”框中

 重复操作c,完成所有算法体验

5、 小结

这节课我们主要学习了算法的概念,用流程图的方法描述算法,最后还简单的学习了算法的三种基本模式:顺序、选择、循环。

6、练习:

体验:求平均值P12和最大数P17的运行,并完成P19页的练习。

教学反思:

1、对于flash式的体验算法的流程图,可以非常生动的感受到流程图的执行,以及让学生很快的理解了算法的含义。前面的课操作内容几乎没有,给学生动手体验的机会,有帮助提高学生的兴趣

2、一定要抓住这节课的重点,算法的概念和流程图描述算法。对于三种结构只做简单的描述。

3、算法的概念的概括一定要精确,让学生简单明白。

4、讲授法一定要生动,多穿插生活中的一些例子,以提高学生的兴趣,同时语言一定要生动。同时多用些提问的形式,提高师生的互动性

范文七:算法的三种表示方法(A版) 投稿:吴僣僤

算法的三种表示方法(A版)

自然语言、程序框图和程序语句是算法的三种表示方法,是算法的形式化表示,且它们是严格对应的.例如,以下是给出三个数求其中的最大数的自然语言算法、框图和程序的对应情况,通过本例体会其严密的对应关系.

例 已知y1(x0),,设计程序输入x的值,输出相应的y的值,写出其

0(x≤0),

算法,画出程序框图并写出其程序.

解:算法步骤为:

第一步:输入x;

第二步:判断x是否大于0,若是,y=1;若不是,y=0;

第三步:输出y.

程序框图为:

程序为:

INPUT “x=”;x

IF x>0 THEN y=1 ELSE

y=0 END IF PRINT y END

点评:本题使用了条件语句“IF„THEN„ELSE„END IF”

范文八:一、算法与算法的表示 投稿:傅韄韅

值得有的资料拥

是自平来时学积习总累结的

有题问地的方肯定的有还请大家批评指

!正班级

名 姓 号 学 一.

vb常控件用、性属1

.V在iuals asBic中添

加一个标签在工具

中要单箱的控击件是

A.  .B C . D

2..在Viusl aaBsic码中代

将个语多合并句一行上在并的符行

是A.撇号() '.B号冒:)(C.叹感号()!D问.号()?3

下.列件中可用控接受用户于输文本入

又可用显于示本的文是

A Label .控件 .B exTBtx o控

件.C Tmeri 控件 D . oCmamndBttoun控件 4

V.isualBasic 规窗定体件的扩展文名是A

..fo rB. . rfm C ..vpb D . .asb5

窗.上有命体按令O钮,K它的击事件单程过为CdmK_Olick()C该按

钮的amNe和Cptioa属n分性为

别A.OK,Cdm BC.d,mK OCC.dOKm,O K.ODK

mCOdK

.6列哪语下句可

使窗口的按C钮ommnad1示"确显定"

   AC mmond1aS.how "=确"定   

B C momna1.Cdatponi="确 定"  

C Commad1.Nane m=确定" "

 D  C omman1dV.sibie l="确"定7

.对n元个进行排素

序用泡冒进行排序法时

需比较共多次少

A n*(.n1) - B.n*(n+) C1.n(*n1-)2 /.nD(n*+1/)2

.8法算特的是:征穷性、(有 )、行能、性0个或多个有输和有入个或一个多出输

A

稳定性. B 确定. 性 .C正常 性.D速性快9.下列分

属于哪别算法:种

  通过需重循多一环列举出解决题问的有可所解能

并逐一列在举的程过中检

验每可能的解个是否是问题的正解(真 )  

要从需际问题实归纳中出学数析解

式就此设计出合适算法(的 ) A.

解析法 .B归递 法C.举枚法 D 查.找法

1.0算法流程图用表来示开始

/结框是用来表示束算的开始法结束和

以哪个下示表开/结始框束A.

. B .C D. 1

1V.isua laBsc是一种面向i象对程的序计语设言构成

象对的要三是素

.A属性事..方件 法 B.控 件属.性.事件C.窗

体.件.控过 程 D窗体.控件.模.块1

2.在程中序用某一到型整量变数据的围范-400为0至400000

则该量类型应该说变为

明.AItneeg B.rBty e C. Long DBoole.na

3.下列1个控每件具都的有性是属A

.aNm e B.Ca ptoi n C.Fon t .IDnertalv

1.程序4三的种基本结是构

A. 支分构结循、结构、树型环结 构

B. 顺结构序分、结构支、循环构结

C .顺结构序循环、构、树型结构 结

D. 树型构、结顺序结构分支、构

.二常、变量、表达量

式.1以下合是法V的suila asBi标识c符是

A.bc a B .Cont s C .a9b c .D#ax2

.表达式2^4\3值的是

A.5 B .6 C. 7 D.8

3.如x果-25

运=行x=bAs(x);xSq=r(x后

x)的值

是.5 A B.5 - .C52 D .2-

54.用

语句Di Am(- To3 ) A3 Isnetegr所定义的数 的组元个素数是

A.6 B . 7 C. 8 .9

5D.下语以句错中的是误A

Co.nts va1=1r2 3.BDmiv ra2a s tSrnig C

.+x y=9 D.Dm d(i1 t o50)0 A Dosblue

6.将本文框extT2内入输的据数送到符型字变量n 中则应

使的语句用是

.A = tnxte B.n = ettx.2extt

C. n va=lte(tx2) D n .= va(ltet2xte.x)t

.7实变量M现的与变量值N的值进行交换

用可语句

.X=AM:MN=:NX= B.M N=:=M

CN.MN= D N.M

8=.果如ab、、、cd一四位整是中千、百、数、十个位的上字数

这四位个在VB数序程可中表为示

A.acb d B. +a+bc+d

Ca*1.00+0b*00+c*11+0d D 以.都不上对

.9在VB中

行IF执4 (*63-)>10T en A=h1 Esel A 0=语后句

量变的A为值

A、 0 B、 C、110 D、 不定一1

.在0BV

中执"A=行1 8ODM "语句4

A的值后

为  A2 、 、B 4 C、 6 D、 8

11.句语Dim sA Intesgre的功能是

A.义定一个整变型s 量 B .义定一个符字型常s量

C.定义一个整型常量s D.定义一 个符字型量变s

1.2列逻下辑运结算为"果Tur"e是的A.f

lse or nato tur e B.f als aednnot ruetC.

trueo rn o trut e .Drtue adn nt oruet

1.3 a设=

b2=3

表达则式 ot(a=b)的值N是:

 . TAru e . FaBsel C-.1 D.1

1.下4面关算于法的述描

误的错( 是 )

A一个.法必须保证算它执行的骤步有限的是B.

算中的法每个步骤须有必切的确义含

C.有个0多或输入

个.有O个D多或输个

出51下列逻.辑达表式中完能正确表示全件 条yea"是r闰"的是年

A.y ae rodm =4 0

B .yea mrdo4 0=0

0. C(yaer mod400= 0 a)dn (yar meod 40) or =y(aremod 100

D. (ear myd 40o=0)0or (y eramo d4 0) =and (eay rmo 1d00) 01

6下列.于F关or. ..nxet语 句的法正确的说是A

.环循变、初量值、终值和长步必须为都数值型

B.sept后步长的能只正数为C.

初值须小于终必值 D

初.值必大须终值于

1.7列各下赋值语句

语不法正确是的

A. xy=5+ B. =yx>

C .aLelb.clatpin =otime D . xx+=y18

下面是各.种不类型的同量

请把常归它类:

  2 "a1sd 3.12 " 0199 Tru e F ales -87 " 计机" 算-1.1

整2常数:量

实数常: 量

字符常量:串

辑常逻量: 19.下

面量变名正确命有的:

  1 2.34 a s dC2 iDm Tru e i_tt W%12 O

   确的正有 : 20.请做

下以量变明:说1

、定义xy为

数整型类的量变:

、2定常量义Pi值为3.的14 :

3、定义ear为y期型的日量变 :4

定义m、双为精实度型数的量:

变、5定一个数义组

使能

之存放一个0人的5班的全机同部学总的分绩成

21写出.列函数下返的值回:1、

Sr(q9) 4返的回为值:

2Ab、s-3.(5) 返的值为:回

、3In(t-.1)4 的回返为值:

4 Fi、(3x.1)5 的返值回为:

、5Ln("eiwdosw")n的 回返值:为

、6iMd("wndoisswecnd",6o4) 的,返值回: 为 7

In、t(10*nd)R1+表:示 __

2.计2算下表达式列的:

值1、+6(64)-(= )

23^2、 + \23=( )

3、 -3 +8 mdo2 =( )

4、5* 2 2 =^( )

53\、/25=(

6、5)8( > )

77、=

、18=0 5md o( 3

)、9""a ( )

0、1100^21 ( )

三.语句顺序(、分支循环)、

.利1用算计机序解决程加问题时累

算计"011+02+.1....+3.00的值"

往往用采

.循环A句语 B.累 加语句 C.件语句 条.顺D序句语

2.V在B序程中

对语句:于

Tex t.1Tex=t"dmian020@so6uh.omc '电"子箱

 "'信后"的部面分为A、

释是可执不代码行B、注

可是执代码

C、程行代序码一的分部

、程D代码的另序种一法写3.以

下序段执行后程整型量变n的值

n=0

为or fi=1 o t02 tesp5 n

=ni+

next

 iA  .05 B. 3 C4 15. D. 21 0  

4.下条以件句语误错是的()

  A

I f XThen Y= Y +1  

 B I Xf= 0 hen Y =T 0

  C I f X> The0nY = 1: P rit Yn

 D  fIX > Y hen PrTnitY E d nfI

.5列下iVusl aasBci程序运行段后

变量axm的值 为a 5:b=1=:max0=a

IF b>mxa Then amxb

A=.5 B 10 . .5和C1 0 .D以上都不是

6下.列Vsiual Basi程序c段行运后

量x变值的 x=3:为=y77

o DhWli xe

r=xx+2 

ooLp

.7A B . 8 C. 9 D1.0

7.有下Vi如usl Basaci序:程

Privtae ubSCo mamnd_lClck(i)S

=O

Ifs

Fr oI1= To 0

S1=+js

ext Nj

ElsePri

n t程序"出"错

Ed If

Prnnit 最后s的"为:值"s;

EdnS u

请b问的控制结它构括包些哪

A.顺结序 构 B 选择.构结C.

序顺选择、和循环构结 D 循.环结构

8.有下如isVaulBas c程序段:iA

=O:l B=0: A=2+A: B=BAB

该程序段-运行后

变量和B的值A

A是1.和002 .3B0和20

  C.03和0 1 D3.和0-019.有如

Vi下usla aBsi程序c:段

=a2

I1 af

a=-2

lEse

rPnti a

Edn if

该序程段运后行

量a的变是

A值8. B10. C.12 .1D41

0下.程列序段计是算个公式的哪 s=0

:=t1for

=i1t 1o0t=t*

is=s+t

extn iA

s.l+2+3=.+.+10 . B.1 !+2+3!!..+10.

C!s=.*2*1*..3*10. D s.=1+ *23+34+**5+4......+*109

12有.如Vis下ua

l Batc程序段:

siD munmAs Int gere num=

3

 Do Whle inum

umN=umn+2

Pritn nmu

L oo p程序

运行后

单击命令按钮

窗则体显示的内上容是

.1 A 5 3 .3B5 7 C .5 97 D 无.数输出据

13.列下是一V个iusla asicB序程

S:ub CmmandloCl_ik()

Xc4=

oFr i1 To=10 tse 3p

I x

i+E

n Idf

Nex tiP

int rx

nd EuSb

该序程行结果是运

.7 A .11B .C1 2 D.5

145有.如Vi下uas lasicB序程:s

=O

Fro=j1 T o0

If3I tn(j/)5=/5 Tjeh

ns=s+j

jj+=6

EndIf

Nxe jt

Pirt sn

该程段序行运

后出输的值是

.A03 B .5 4 C.1 08 .4D56

1.下5程面序行执结的果是 

  P irvat eub FSor_mlCick)(   A

=" 231":B = 4"6"5   C =

ValA( + )Vl(aB)

    rinPt C 10\0

    End Sb

   A.u23 1 B. 3 C5 . D .59

17.6有如程序段

下   x=1

 y  = 4

  Do hWiel y>4

   x   =x * y

     =yy +1  

L op o

  该程序段行后运

的值x为  A

.1 B . 4 C.8 D. 2 0

7、下面1程的序计算是机=s*21+*3+456+7**+8*109下划,中线应填上

 S =0

  orF k1=t o01 tes p___

   =ss+*k(k+)1

  Nextk   

Mgbosx(s)

 E n dsub 

A.  0 B.1 C.2 D k.1

8.窗上体一个命令按有钮Cmomnd1a

如下事编过件程:

PriavteSub ommaCnd_1lCic()k 

Dm a iA strSign :Di m cA stSirng 

a =s"fotawe ard nahdwarre"

  =c Md(ai 1, 8,)

 Tex1.ttxet = c

nEdS ub

在则文框本exT1中t示显的息是信

、Asoftarew ad hadrnarwe Bs、fowtae r

Cha、rwdae r 、D1

19有、如下程段

序 a= 4

  b5=

  a=a^2b+

  =b^2b+a  

a=a+b 该程

序运后

行的a是__值________

20有如、下序程

  x段5=

  fI x>01T hen  

=y*2x 

E lse

   yx=*+x

1  Endi f

  Mgsobx(y)

 该序程行运后y

的是值_________

2_、有1如下序段程

  a1:b==

 2F ori=1 ot

3   b= ba+

a=+ba 

N et xi  

Printb  该程

运序后行b

的是___值_______2

2有、下如程序段 

x= 4

 For  =i1 to 1 st0ep3

    ifx

    x=x+ i  

En dfi 

 exNt i 

 Prnt xi 

该程序行运后

x的是值__________23、

列下程的序功能从是键盘任上输入一个数意

判这个数是正断数负数、还、是零

输出并判结果断

程中序三有处误错

更正请

rPivta eSu Cbommnad1Cl_ikc(

)Dmi as ADuolb:eiDm p Asy tSrniga

Va=(Tlxe1)t

fIa > 0henT yp "=数正"

fIa = 0Tehnp y= 零""

f aI

Text2.Capitno=

and SubE

1)( (2 ) ()3

24、完善下程列序

使能输:出-12+3-45+-6+......+99-100值的

 rPivteaSu b

Comamnd_lCilc()k 

= S  

F o r=I1to

 =s+S((-)^1 ( ))*

I  eNt IxP

intr

sEn dSbu 26、

已一元二次方程的二知次项数、常数系分别为项a、、bc

中其不等a于

求0程的根

方求要如:果程无方数根实

输出则"无数实"根

否则输出两个数实根

rivaPte uSb oCmmadl_Cn1ikc)(

Di ma,b

c

dAs Single

D im lx

x As 2insgelA=Val(

Texlt.Txt)e

=VBl(Taxte2Te.t)xC

=aV(Tlext3T.xte

)=bd2-^*4*ac

If__ _______ T_hn

 e x1(=-+Sbq(dr)/)(2a)*

  x2(-b-=qS(r))/(d*a2)

 L aebll.aCpiot=nxl

  abel2LC.ptaoi=x2n_

_______L

ael3b.aCpitn=o_ ____________End

I f

Edn ubS

四.算

法程序的现

实2将一张面、为1值00的元民人币值等换100张成元、51元和0.5元的钞零

要求每种零不钞于少张1

有哪几问组种?**合**

imDi ,j,k A sI tneerg  

   ' ,i j ,用k于记5元

录1元

.5元的0张数

rPin "t元 5 元1 0.元5

Fo"r i= 1T 2o

0or jF = 1To10 0 - ik = ___

________

If ___________ Thne

rinP it, , j k分别输出i,j'k,三个变量

En Ifd

eNtx

Njxtei 3、

下面程是计算序1~0中,能5被整除的3所整有数之积请在

____________填入适当的内内容

P

iratv Seb Fuom_rlad(o)

Dim As xIntgeer,s A Dosule

bs =___ __F

o r = x 1To 05

I xfMod 3 =0T ehn__ _____

Nextx P

rni "t=s &" s

nE duSb4

、有古算一问题:"术1有0块0瓦

用001匹马驮来

大马驮31

马中驮21

小马21

问驮要大马、马、中马各几小匹(能没有不?")**

rPvaie tSb Coumandm1_lickC)(Dim

x A sIn etegr y A,sI tnegr,e Asz Itener

Fgrox =1 o 33T

Fr y = 1 oT o50z = 10

0 -x - y

If_____________________________The n

rPit x,n,zyE

dnI

Nfetx y

eNx tx

ndES ub

5下、面是个用VB语言一写编将的华氏度温其(值存在名为text放1文本框内的)转为换氏温摄(其值度放存变在量C)的中序

请程完程序善已

华氏温知度转F换摄为温度氏C计的算式是:C公=(-32F)5*9/

Pirvate Sb Commaudn1_Clcik()

FVal=(txt1e.etxt)

= _C________________Pri

t CnEn

dSub

7利用、文框本输一入正个数整N

S=求23/2+4+3+//54+...+(+1N/)

PrivNat Sebuc momnd1_claik(c)Dim

n s, i As ,Itngeers =

0 n

= Vl(aTxte1Tex.)t

For i =_____To _ ________

s = _______________

N_xe ti

Pintrs En

dSbu8

、下面序程用若计于算s=1!+2!+!34++5!!+6 !+!7+8!9+!10+!完

善面的下程序*

*

s= 0 : =t 1Fo

r =i 1oT 10

___________________

s =s+ t

NxteI

9、一有单击按个过钮

其作程用产是生0个60~1500的随机数

统计中其被6整除余2个的

数将并这数输些出

请补充面的程序:下P

irvta euS cbmoanm1dcl_ic(k

Dim)X, N sA Inegtre

Dim cuoner tAs Intgee 'rocnute统r个数计R

nadoimez

N=0

or F = 1 ToN50

X  

= __________+_ it(nRn * d14 )

  随'产生机05个6~0100随机数的

If  X Mod6 = 2ThenLi

t1s.dAItedm trSX(

)_________________________

 Ed Inf

Nxt eN

rintP ocuntre

nE Sdbu1

、以下1序的功能程:从是键上输盘入若个学干的生试考分

数计统并出最输高数分和低分数最

当输入负数时结输束入输

出结果

将程序补请完整充

Pr

vitaeSub orF_Cmilk(c)

im D,x maa, xmian A sinSgle

x Inpu=tBox"(nterE acsor") e

maax =x

main= x

oD Wihel_ ____________ If x

> max Tahe nam a x=x

I f________T ehn amn i x=

x= Inptuox("BEten a srocre" )

Lop o

Text1T.ex=tam ax T

xe2t.extT_=__________

EdnSu b12、火

托运行车

要李根行李的重据按量下列标收费准:

若不超过5千0克按每

千克03.元5费

若收过5超千克0

超部分则过按千克0.每元5费收输

托运行李的重入量

算计输出并运托李的行用费

面下序程若于实用上述目标现

划线处则语的应更句为改______________________

ub Scmoanmd1c_ilkc)

Di(mx As Dubol

e=vxa(Textl.1exT)

Iftx

exTt.T2xteS=tr0.(35x)*

Esl eT

xt2.Texet=St(r.0*5)x

EndI f

nd EubS15、

排、查序综找合习**练**

Co*ns t=n05

Di d(m t1o ) an integer

s'自生动5成0个1【00-200】之间的数

P整irvte Sab Coummna1_dlCic(k)Dim i

s InAegetr

Lsit.1Celr:aisLt.2Claer

Randomize

Fo r =i 1To n

(d) i= _____________________

iLt1.AsdIdemtS rti() +S pcea()6 S+r(t(di)

)Nxt ieEn

d Su

'冒泡b序(排递)增

rPiatv eSbuC ommnda2Cli_k(c)

Di i msAI negter, AjsI tngeer, etmpAs ntIgereFor

i = 1T n o-1

F o j =r Tn o________Ste p-

I1 d(fj)

tem = d(j)

p______________

______________

nd EIf

Netxj

N ext

Fir i =o1 T no

Lits2AddI.etm Stri() +Spa ec(6 )+ Srt(d(i))Nex

ti

End Sbu

选择排'序递(减

P)rvatei Sbu Cmomadn3_Cicl(k

Di)mi As In tger,ej A IntsgeerDim

t mepA s ntIgere m,xa A snItger e

List.C2eal

rFo i = r T1on - 1Max

___=______

or jF__=_______t n

Ifo (jd ) >(mdx) Thean_

_______

_nE Id

fNextj

Ifmax iTenh

etmp =dm(x)

dam(ax )d(i)=

d(iy ) =emt

Epd InfN

exti

Fr oi= 1 oT n

Lsi2.tAdIdtm Str(e)i+ Spae(c) +6Str(d (i)

)ext i

NEn Sdu

b顺序查找'

Private SbuC omamdn_Cl4ikc(

D)i im A Istenegr key, s InteAger

eyk =eTx1t.extT

oF ir_=_____________

If ______________T hne

eTtx.2exT t=" 据数"& eKy& " 第在" & i&" 置位"

Ex

tiF r

Eno Id

fNext i

I fi> nThn

Texte2.Text =" 据数"& key& 不存"!在

"ndEIf

Ed nSu

b'对查找分

PrvitaeS b uommCand5_Clci(k)

Dim iAs nteIeg, j rAs ntegIre

Dmi mA sI tegner, cA IsnetgreK

ye= ext1.TTetxi

=

j =1 nDo

hileW_ __________

________ _'定确中位间置If

__________hTn

Teext.T2et = "x据数 &" Ke &y" 在第 "&m &"位置

"

xit E

Sub

Ed In

ff IKye> d()mThe n

__________

lsEe

___________

nEd I

foLp

oextT2.Tet x "数=不据存!在

E"nd Sub

答案一.

v 常b用控、属性件

15-BBB CB6

-1BCB0CA

1CA1CAB

.二量、常量变表、达式

-15 AAAB

6C-10DCBAA1

11-5AADDC

161-0A9

18.下面是各种不类型同常量的

把它请类归:

  整数常 量:21 0991- 8 7实

常量: -数.11 3.21

字2符串量常:"ads" "计算"机

  辑常逻量T:ru e Fales

19.下面变命量名确正的有 :ad i_stt

2.请做0下变以量明:说

、1义定

xy为数整类型变量: dim的 xs iaternge,ry asin etrerg2、

定常量Pi的值为义.14: 3 cnsotpi=3.13 3

定义y、ae为r日期型的变量: dmi yer asa date4、定

义m双精为实数型的变度:量 imdm as duolbe

5、定义一个数组

使能之存一放5个0人的班机全的部同学总分成的 绩idma a1 (to5 ) 0sasin gel2

.写1出列函下数返的值:回

1、qSr4(9) 的返值为回:7

2A、s(b3.-5)的 回返值:3.为5

3Int、(-.41 的返回值):-5为

4、iF(3.x5)1的 返值为:回3

5、eL("nwidnsow) 的返回值为:"7

、6Mi(d"inwdwssecoond",,46 的)回值返:ws为s

7、eIt(10*nnRd+)1示表1:10之-的随机数

22间计算.下表达列的式值:

16+、(6-4)( =8 )2、3

^2 +3\ =2 10(

)、3- 3 + 8od m2( = -3 )

4、5 *2^2 (= 2 0 )

53、5\2=( / 1 ) 同于3\等(52/)6、5>

8 ( FA SEL ) 7

7、

1、05 m=do 3 F(SLAS E ) 9、"

"a" b(" RUET )

1、10010^2(0 ALFES )三.

句语(序顺分、支、环)循1

-5ABDAB

6-1CBCCB0

1-115C BBC

1620ABB 67- 6221

、182

211、

23、(1 Dim)a As i tnergr e(2a)= V al(Txe1tTe.x)t( 3)Tex 2.Catpion t =trs()a

42

42完善下、列程序

能输使出:1-+2-4+536+.-....+99-.100值

P ivatr Seb Commaudnl_lCick()

  =S0 

F roI=1 t o 001

  =sS+((1-^)(I1+))*I

  exNt IP

inr tsEn

d Su

b6、2

>d0else

无实数根""

算法.的序程现实

、k2100=--I j >k0an 1d00=I5+j**+k1*.053

1、 =ss*x

410、0=3*+2*xyz+ na zd>05、

F-3(2*)/9

571 、 n s+(N+ )1/N

、8tt=*i9、

06 =n+n

11、 x10

21、Str5(*003.5+x(-0)5*0.)5

15、

自动成5生0个1【0-200】0间的之整

1数0+0it(rnd*1n10 ) '冒泡排序

(递增)

+i1

(jd=d(j-))1d(

j1-)t=me

'p择排序选递(减)

1i

Maxj='顺序查找

1 To n

(iD)key=

'对查分

I找

M=i+j)\(2

(Dm=)kyeI

m=+1J

m-=

1

算法与程《设序》综计练合习

1

范文九:怎样表示一个算法 投稿:苏揇揈

怎样表示一个算法

对于算法的描述有很多种方法,如自然语言、流程图、计算机语言和伪代码等,其中使

用最广泛的是流程图。

第一章 程序设计基础知识

1.用自然语言表示算法

2. 传统的流程图

3.N-S流程图

例:键盘输入两个数,求出其中较大的并输出

三种基本结构

1.顺序结构

2.选择结构

3.循环结构

循环结构

算法的概念

一个程序应包括:

对数据的描述。在程序中要指定数据的类型和数据的组织形式,即数据结构(data structure)。

对操作的描述。即操作步骤,也就是算法(algorithm)。

3+5×12-sin(π/6)

数据:3、5、12、π、6

解题步骤:

1.计算 sin(π/6)

2.计算5×12

3.计算3+60

4.计算63+0.5

5.给出结果

算法的特性

算法是解决某一问题的方法和步骤。

程序实际上就是用计算机语言描述的算法。

一.算法的特性和要素

1.算法的特性:

有穷性

可行性

确定性

输入。一个算法可以有0个或多个输入 。

输出。一个算法必须产生一个或多个输出。

2.算法的要素:

操作,即构成算法的操作取自哪个操作集。计算机操作主要包括:算术运算、关系运算、逻

辑运算、函数运算、位运算及I/O操作等。

控制结构,即如何控制算法中的各操作的执行顺序。

例:键盘输入两个数,求出其中较大的并输出

三种基本结构

1.顺序结构

2.选择结构

3.循环结构

循环结构

1.2 C语言特点

(1)语言简洁、紧凑,使用方便、灵活。 32个关键字、9种控制语句,程序形式自由。

(2)运算符丰富。34种运算符 。

(3)数据类型丰富,具有现代语言的各种数据结构。

(4)具有结构化的控制语句 ,是完全模块化和结构化的语言。

(5)语法限制不太严格,程序设计自由度大

(6)C语言 允许直接访问物理地址,可以直接对硬件操作

(7)生成目标代码质量高,程序执行效率高

(8)程序可移植性好

32个关键字

34种运算符:

1.3 C程序格式和结构特点

例1.2 求圆的面积

main( )

{

float r,s ; /*定义实数类型变量r,s*/

r = 2.5 ; /*圆的半径值为2.5*/

s = 3.14159 * r * r ; /*求圆的面积值s*/

printf ("area is : %f \n" , s); /*输出圆的面积值*/

}

程序运行结果是:

area is :19.634937

格式特点

习惯用小写字母,大小写敏感

不使用行号,无程序行概念

可使用空行和空格

常用锯齿形书写格式

结构特点

函数与主函数

程序由一个或多个函数组成

必须有且只能有一个主函数main()

程序执行从main开始,在main中结束,其它函数通过嵌套调用得以执行。

函数的定义分为两部分:函数首部分和函数体。

float area (float r) 函数首部

{ 函数体的开始

float s ; 函数体的声明部分

s = 3.14159 * r * r ; 函数体的执行部分

return(s);

} 函数体的结束

程序语句:C程序由语句组成,用“;”作为语句终止符

注释 /* */为注释

1.4 运行C程序的步骤与方法

程序的调试

二、VC集成开发环境

1、编辑源程序(应用举例)

运行VC++6.0

编辑源程序

保存源程序文件

新建文件

打开文件

退出VC

2、编译生成目标程序

3、连接生成可执行程序

4、运行查看结果

第二章 C语言设计初步知识

2.1C语言的数据类型

2.2 常量与变量

1.常量和符号常量

在程序执行过程中,其值不发生改变的量称为常量。

整型常量:12、0、-3;

实型常量:4.6、-1.23;

字符常量:‘a’、‘b’

符号常量在使用之前必须先定义,其一般形式为:#define 标识符 常量

例:符号常量的使用。

#define PRICE 30

main()

{

int num,total;

num=10;

total=num* PRICE;

printf(“total=%d”,total);

}

变量名的规定:

只能用字母、数字和下划线3种字符组成,且第一个字符必须为字母或下划线。

注意:编译系统将大写字母和小写字母认为是两个不同的字符

习惯:符号常量名用大写,变量名用小写

2.3 整型数据

一、整型常量的表示方法

1.十进制整常数:其数码为0~9

2.八进制整常数:前缀为0,数码取值为0~7

例:015(十进制为13)、0101(十进制为65)

3.十六进制整常数:前缀为0X或0x,其数码取值为0~9,A~F或a~f

例:0X2A(十进制为42)、0XA0 (十进制为160)

课后复习:二、八、十、十六进制的转换

二、整型变量

1.整型数据在内存中的存放形式

int i;

i=10;

2.整型变量的分类

3.整型变量的定义

类型说明符 变量名标识符1,变量名标识符2,...;

例如:

int a,b,c; (a,b,c为整型变量)

long x,y; (x,y为长整型变量)

unsigned p,q; (p,q为无符号整型变量)

4.整型数据的溢出

2.4 实型数据

一、实型常量的表示方法

C语言中,实数只采用十进制,它有二种形式

1.十进制小数形式: 0.0、25.0、5.789、0.13、5.0、300.、-267.8230

2.指数形式 :a E n(a为十进制数,n为十进制整数)

例:2.1E5 (等于2.1*105) 3.7E-2 (等于3.7*10-2) 0.5E7 (等于0.5*107)

二、实型变量

1.实型数据在内存中的存放形式

实型数据一般占4个字节(32位)内存空间。按指数形式存储。

2.实型变量的分类

3.实型数据的舍入误差

4.实型变量的定义

float a1,a2; double b1,b2;

2.5 字符型数据

2.6 变量赋初值

一、变量定义的同时给变量赋以初值

例如:

int a=3;

int b,c=5;

float x=3.2,y=3f,z=0.75;

char ch1='K',ch2='P';

二、变量定义中赋初值的一般形式为:

类型说明符 变量1= 值1,变量2= 值2,„„;

三、注意:在定义中不允许连续赋值,a=b=c=5是不合法的

2.7各类数值型数据之间的混合运算

一、自动转换:

自动转换发生在不同数据类型的量混合运算时,由编译系统自动完成。

二、强制转换:

强制类型转换是通过类型转换运算来实现的。

其一般形式为: (类型说明符) (表达式)

例如: (float) a 把a转换为实型

(int)(x+y) 把x+y的结果转换为整型

三、说明:

转换是为了本次运算的需要而对变量的数据长度进行的临时性转换,而不改变数据说明

时对该变量定义的类型 。

2.8 算术运算符和算术表达式

一、C运算符简介

算术运算符: +、-、*、/、%

赋值运算符: =、+=、-=、*=、/=、%=、

&=、|=、^=、>=

自增自减运算符: ++、--

关系运算符: 、>=、==、!=

逻辑运算符: !、&&、||

条件运算符: ?:

位运算符: ~、&、^、|、>

逗号运算符: ,

其它运算符: ()、[ ]、->、.、(类型名)、*、&、sizeof

2.8 算术运算符和算术表达式

二、算术运算符

+ (加法运算符 例:3+5)

- (减法运算符 例:5-2)

* (乘法运算符 例:3*5 2*x )

/ (除法运算符 例:5/3 (x+y)/(a+b) )

% (求余运算符或称模运算符 例:7%4)

算术运算符均为双目运算符,均具有左结合性。*、/、%的优先级为3级,+、-的优先级为

4级。

2.8 算术运算符和算术表达式

四、自增、自减运算符

++i --i i 自增1或自减1后再参与其它运算

i++ i-- i参与运算后,i的值再自增1或自减1

2.9 赋值运算符和赋值表达式

一、赋值运算符 =

1.用法:变量=表达式

2.作用:先算表达式的值,将值存放在变量所在的单元中。

3.注意:与数学中的等式不同

二、赋值结果与类型转换

如果赋值运算符两边的数据类型不相同,系统将自动进行类型转换。

1.整型变量=实型数 (舍弃小数)

2.实型变量=整数 (以浮点形式存放在变量中)

3.长度相同的无符号与有符号(原样赋值,但有时数据要改变)

4.char int long 类型的互相赋值

长变量=短数 符号扩展

短变量=长数 取低字节

2.9 赋值运算符和赋值表达式

三、复合赋值运算符

形式:+= -= *= /= %=

例如:

a+=5 等价于a=a+5

x*=y+7 等价于x=x*(y+7)

r%=p 等价于r=r%p

四、赋值表达式

变量名=表达式

表达式的值就是被赋值的变量的值

2.10 逗号运算符和逗号表达式

一、逗号运算符

在C语言中逗号“,”也是一种运算符,称为逗号运算符。

二、功能:

把多个表达式连接起来组成一个表达式, 称为逗号表达式。

一般形式为:表达式1,表达式2,„„,表达式i

例:3+5,6+8

a=3*5,a+4

三、表达式的值

分别求各个表达式的值,并以表达式i的值作为整个逗号表达式的值

课堂作业:

2.1 指出下面哪些是合法的变量名:

①123 ②abc ③a+b ④a_b

⑤pad ⑥?12 ⑦Li_Li ⑧*P

2.2 ‘a’在内存中占 个字节,“a”在在内存中占

个字节.

2.3 写出下面程序的运行结果:

main()

{char ch;

ch=‘B’; /*B的ascii码的值为66*/

printf(“%c,%d\n”,ch,ch)

2.5 写出下面程序的运行结果:

main()

{ int a=10, b , c , d ;

int b,c;

a+=6;

b = (c=20, 6, a+2 );

printf("a=%d,b=%d,c=%d\n",a,b,c);

}

第三章 顺序程序设计

3.1C语句概述

一、语句

C语言是通过语句向计算机系统发出操作指令的

C程序是由函数构成的

函数是由若干个语句构成的

二、语句分类

C语句可分为以下五类:

表达式语句

函数调用语句

控制语句

复合语句

空语句

1.表达式语句

2.函数调用语句

3.控制语句

4.复合语句

5.空语句

3.2 赋值语句

赋值语句是由赋值表达式再加上分号构成的表达式语句。

其一般形式为: 变量=表达式;

注意:

1.变量=(变量=表达式);是成立的,例如x=(y=5);

其展开之后的一般形式为:变量=变量=„=表达式;

2.变量说明中给变量赋初值和赋值语句的区别

例:int a=5,b,c; 中a=5 不是赋值语句

3.在变量说明中,不允许连续给多个变量赋初值。

int a=b=c=5 (错误!)

必须写为: int a=5,b=5,c=5;

而赋值语句允许连续赋值 例如:a=b=c=d=e=5;

4.注意赋值表达式和赋值语句的区别

if((x=y+5)>0) z=x;

3.4字符数据的输入输出

引言:

在C语言中,所有的数据输入/输出都是由库函数完成的

在程序开头要有:#include或#include ”stdio.h”

默认的输入设备是键盘,输出设备是显示器

一、putchar 函数(字符输出函数 )

其一般形式为:putchar(c) c是函数参数

功能是在显示器上输出单个字符

C可以是字符型或整型的变量或常量

3.4字符数据的输入输出

二、getchar函数(键盘输入函数)

其一般形式为: getchar( );

功能:从键盘上输入一个字符

通常把输入的字符赋予一个字符变量,构成赋值语句,如:

char c;

c=getchar( )

3.5 格式输入与输出

一、格式输出函数printf

作用:向终端输出若干个类型任意的数据

形式:printf(“格式控制字符串”,输出表列)

格式字符串的一般形式

% - m.n l/h 格式符

2.长度修正

l : %ld %lx %lo %lu %lf

h: %ld %lx %lo %lu (整型)

3.宽度m:在屏幕上输出的宽度

若实际>m,则按实际输出; 若实际

4.精度n:小数位数

二、格式输入函数

格式:scanf(“格式控制字符串”,地址表列);

作用:按用户指定的格式从键盘上把数据输入到指定的变量之中

1.变量地址:地址运算符“&”后跟变量名组成

2.格式控制:

3.输入数据分隔

输入时如何分隔各个数据?

隐含分隔:空格、回车、Tab

根据格式中指定的宽度分隔

采用用户指定的分隔符

4.1关系运算符和表达式

第四章 选择程序设计

在程序中经常需要比较两个量的大小关系,以决定程序下一步的工作。比

较两个量的运算符称为关系运算符。

一、关系运算符

1. >= == !=

小于 小于或等于 大于 大于或等于 等于 不等于

2. 结合性:左结合

3. 优先级: >= == !=

4. 与其它运算符比较:算术运算符 关系运算符 赋值运算符

5.关系表达式:表达式 关系运算符 表达式

6.关系表达式的值:真”和“假”,用“1”和“0”表示

例如:5>0的值为“真”,即为1。

(a=3)>(b=5)由于3>5不成立,故其值为假,即为0

4.2逻辑运算符和表达式

1.逻辑运算符

&& 与运算 || 或运算 ! 非运算

2.优先级

4.逻辑表达式

用逻辑运算符连接的表达式称为逻辑表达式

例如:5>3&&2||!8

(a&&b)&&c

5.结合性:左结合

6.逻辑运算中的短路现象

有时不一定求解逻辑表达式中所有的表达式

例:a=4,b=2,c=1

a0 结果为?

a++0 结果为? a=? b=?

a++>0||++b>0 结果为? a=? b=?

4.3 if语句

一、if语句的三种形式

1.条件执行 if(条件) 语句A;

例:if(A>0)printf(“A is positive.”);

例:if(m>n){ t=m;m=n;n=t;}

2. 分支选择 if(条件) A;else B;

例:if(A>0)printf(“A is positive.”);

else printf(“A is not positive.”);

3.多个分支选择

例:输入一个学生的百分制成绩,输出相应的等级

成绩在 90~100 等级为:A

成绩在 80~90 等级为:B

成绩在 70~80 等级为:C

成绩在 60~70 等级为:D

成绩在 59~ 等级为:E

二. if语句的嵌套

三、条件运算符和条件表达式

1.条件运算符: ? :

它是一个三目运算符,即有三个参与运算的量

2.条件表达式:表达式1? 表达式2: 表达式3

例:a>b?a:b

3.求值规则:如果表达式1的值为真,则以表达式2 的值作为条件表达式的值,否则以表达式3的值作为整个条件表达式的值 .

例如:’a’>’b’?10:20

4.运算顺序:低于关系运算符和算术运算符,高于赋值符

例:max=a>b?a:b 应理解为 max=((a>b)?a:b )

5. 结合方向:自右至左

例如:a>b?a:c>d?c:d 应理解为 a>b?a:(c>d?c:d)

#include

main( )

{

int a,b,max;

printf("\n input a b: ");

scanf("%d%d",&a,&b);

max= a>b?a:b

printf("max=%d",max);

4.4 switch语句

C语言还提供了另一种多分支选择语句switch,用其编写的程序结构清晰,通俗易懂。

一、格式

【例4.4】

#include

main( )

{

int a;

printf("input integer number: ");

scanf("%d",&a);

switch (a)

{

case 1:printf("Monday\n");

case 2:printf("Tuesday\n");

case 3:printf("Wednesday\n");

case 4:printf("Thursday\n");

case 5:printf("Friday\n");

case 6:printf("Saturday\n");

case 7:printf("Sunday\n");

default:printf("error\n");

}

}

【例4.6】计算器程序。用户输入运算数和四则运算符,输出计算结果。

#include

main( )

{

float a,b;

char c;

printf(“input expression: a+(-,*,/)b \n”); /*输入数据时不能有空格*/

scanf("%f%c%f",&a,&c,&b);

switch(c){

case '+': printf("%f\n",a+b);break;

case '-': printf("%f\n",a-b);break;

case '*': printf("%f\n",a*b);break;

case '/': printf("%f\n",a/b);break;

default: printf("input error\n");

}

}

第五章 循环程序设计

5.1 循环概述

循环结构是程序中一种很重要的结构

其特点是,在给定条件成立时,反复执行某程序段,直到条件不成立为止。给定的条件称为循环条件,反复执行的程序段称为循环体。

实现循环的四种语句:

goto语句和if语句构成循环 (不提倡)

while语句 (先判断,后执行)

do-while语句 (先执行,后判断)

for语句 (多功能)

5.2 goto语句以及用goto语句构成循环

一、goto语句

格式: goto 语句标号;

语句标号:用于定义程序中的某个位置

用标识符表示,不能只用数字。

例:goto lable_1 (合法)

goto 123 (不合法)

功能:无条件转移 标号所指的语句

二、 goto语句构成循环

【例5.1】用goto语句和if语句构成循环,求

#include

main( )

{

int i,sum=0;

i=1;

loop: if(i

{

sum=sum+i;

i++;

goto loop;

}

printf("%d\n",sum);

}

5.3 while语句

while语句实现的是当型循环

while语句的一般形式为:

while(表达式)语句

其中表达式是循环条件,语句为循环体

while语句的一般形式为: while (表达式) 语句

例如: i=1;

while(i

例5.1 阅读程序

#include

main( )

{int i,s;

s=0;

i=1;

while(i

{s=s+i; i++; }

printf("s=%d,i=%d\n",s,i);

}

读程序

例: 输入两个任意的正整数,求它们的最大公约数。

5.4 do-while语句

do-while语句实现的是直到型循环

一般形式为:

do 语句

while(表达式);

求:

5.5 for语句

for语句的一般形式:

for(表达式1;表达式2;表达式3) 语句

for语句的其它形式

1.省略了“表达式1”, 应在for循环前给循环变量赋初值。

例: k=1;

for( ;k

2.省略了“表达式2”, 则不做其它处理时便成为死循环。(加break)

例:for(i=1; ;i++)sum=sum+i;

3.省略了“表达式3”, 则不对循环控制变量进行操作,这时可在语句体中加入修改循环控制变量的语句。

例如:for(i=1;i

{sum=sum+i;

i++; }

4.省略了“表达式1”和“表达式3”

例如: i=1;

for( ;i

{sum=sum+i;

i++;}

5.表达式2一般是关系表达式或逻辑表达式,但也可是数值表达式或字符表达式,只要其值非零,就执行循环体。

例如:

for(i=0;(c=getchar() )!=‟\n‟;i+=c);

又如:

for(k=1;k-5;k++)

s=s+k);

6.表达式1和表达式3可以是一个简单表达式也可以是逗号表达式。

例如:for(sum=0,i=1; i

sum=sum+i;

又如:for(i=0,j=100;i

k=i+j;

5.6 循环的嵌套

一个循环体内包含着另一个完整的循环结构,就称为循环嵌套。

内嵌的循环中又可以嵌套循环,构成多重循环。

三种循环可以互相嵌套

说明:

嵌套的循环变量不能相同

内循环变化快,外循环变化慢

例:for(i=1;i

for(j=1;j

printf(“%4d”,i*j); 内循环的循环体

外循环由变量i控制循环2次,内循环由变量j控制循环3次

例:试求满足下列条件的所有三位数

其百位数不大于2

讲个位与百位对换,得到的三位数是原三位数的二倍多

5.7几种循环的比较

1.不提倡用goto型循环

2.关于循环的控制

3.循环体的执行

5.8 break和continue语句

一、break语句

break语句通常用以结束在三种循环和switch结构

二、continue 语句

continue语句的作用是跳过循环本中剩余的语句而强行执行下一次循环

continue语句常与if条件语句一起使用

3. continue语句与break语句的区别:

break语句是结束整个循环,跳到循环外的下一条语句去执行。continue语句只是结束本次循环过程,转而进行下一次循环过程,并不终止整个循环的执行

while(表达式1)

{ ……

if(表达式2)continue;

……

}

第六章 字符型数据

6.1 putchar()函数

作用: 向终端输出一个字符。

用法: putchar(c);

/* c是字符变量或整型变量 */

[例4.1]

#include "stdio.h"

main()

{ char a,b,c;

a = 'B'; b = 'O'; c = 'Y';

putchar(a); putchar(b); putchar(c);

}

程序输出:BOY

6.2 getchar()

输入一个字符

例[6.2]

#include "stdio.h"

main()

{ char c;

c = getchar();

putchar(c);

} 运行时,若从键盘输入字符‘a’,屏幕显示为:a

这是键盘输入的回显。只有在按“回车”键后,字符才从键盘发出,程序getchar才获得键盘的输入a↙

也可这样写: putchar( getchar());

printf(“%c”,gerchar( ) );

第七章 函数

7.1 概述

说明:

1.C程序的执行从main函数开始,完成对其它函数的调用后再返回到main函数,最后由main函数结束整个程序 。

2.在C语言中,所有的函数定义,包括主函数main在内,都是平行的,子函数不属于其它函数。

3.从用户角度看,函数可分为:

标准函数,即库函数

自定义函数

4.从数据传送的角度看,函数可分为:

无参函数

有参函数两种

5.从函数返回值角度看,函数可分为

有返回值函数

无返回值函数两种

7.2 函数定义的一般形式

7.3 函数的参数和函数的值

一个C程序由若干个函数组成,个函数调用时经常需要传递一些数据。即调用函数把数据传递给被调用函数,经被调用函数处理后,得到一个确定的结果,在返回调用函数时,把这结果带回调用函数。

一、形式参数和实际参数

函数参数:用于函数间数据的传递

形式参数:定义函数时使用的参数

实际参数:引用函数时使用的参数

函数max有两个形式参数a和b,形参a和b只在函数max中使用

X和y是在主函数中定义的变量,main函数调用函数max时,x和y为max的实参

说明:

定义函数时,必须说明形参的类型。形参只能是变量或数组。

函数被调用前,形参不占用内存;函数调用结束,形参所占用的内存即刻被收回 实参可以是常量、变量、表达式、函数等

实参和形参在数量上,类型上,顺序上应严格一致,否则会发生类型不匹配”的错误

函数调用中发生的数据传送是单向的 “值传递”。它仅由参数的对应位置确定,与名字无关

二、函数的值

1.函数返回值的方法:

函数的值是指函数被调用之后,执行函数体中的程序段所取得的并返回给主调函数的值。

2.形式:

return 表达式;

或 return (表达式);

如果一个函数有返回值,就必须有return语句

在函数中允许有多个return语句,但每次调用只能有一个return 语句被执行,因此只能返回一个函数值。

函数值的类型和函数定义中函数的类型应保持一致。如果两者不一致,则以函数类型为准,自动进行类型转换。

7.4 函数的调用

一、函数调用的一般形式

函数名(实际参数表)

说明:

如果调用无参函数,实参表列可以忽略,但括号不能省。

实参的个数与形参个数相等。

实参与形参的类型应一一对应,必要时使用类型转换。

注意:不同系统中,实参的计算顺序 不同,微机中一般由右到左。

二、函数调用的方式

1、函数语句

形式为:函数名(实参表列);

例如:printmessage();

printf(“%d”,c);

说明:这种方式不要求函数带返回值,函数仅完成一定的操作。

2、函数表达式

函数的返回值参与运算

例如:c=10+max(a,b);

说明:这种调用方式不能用于void型函数

3、函数实参

函数作为另一个函数调用的实际参数出现

例如:printf("%d",max(x,y)) ;

注意:实参的求值顺序!(微机中一般由右到左)

三、函数调用的执行过程

按从右向左的顺序,计算实参中各表达式的值

按照位置,讲实参的值一一对应地传送给形参

执行被调用函数

但遇到return(表达式)语句时,计算表达式的值,并返回主调函数。

四、函数的原形说明

在程序中调用函数需满足以下条件:

1、被调用函数必须存在,且遵循“先定义后使用”的原则

2、如果被调用函数的定义在主调函数之后位置,可以先给出原形说明 一般形式为:

8.1 指针

一、变量的地址

在计算机中,所有的数据都是存放在存储器中 。

内存可划分为若干个存储单元,每个单元可以存放8位二进制数,即一 个字节,一个字节称为一个内存单元。

内存单元采用线性地址编码,每个单元具有唯一一个地址编码。

1.变量的地址:系统为变量分配的内存单元的地址(一个无符号整数)

第八章 指针

8.2 指针变量的定义和引用

一、定义方法

类型符 *指针变量名

类型符是指针所指向的内存中存放的数据的类型

三、指针变量的应用

1.两个有关的运算符:* &

形式: &任意变量 /*取地址运算符*/

*指针变量 /*指针运算符*/

含义:&a表示变量a所占据的内存空间的首地址

*p表示指针变量p所指向的内存中的数据

应用:通过指针变量访问所指变量

①将指针变量指向被访问的变量

如:int a=5,*p,b;

p=&a;

②访问所指变量

取内容:b=*p;

printf(“%d\n”,*p);

存内容:*p=100;

注意:*p若出现在“=”的右边或其他表达式中则为取内容, *p若出现在“=”的左边则为存内容。

【例8.2】

输入a和b两个整数,按先大后小的顺序输出a和b。 main( )

{ int *p1,*p2,*p,a,b;

scanf("%d%d",&a,&b);

p1=&a;

p2=&b;

printf("a=%d,b=%d\n",*p1, *p2);

if(a

{p=p1;p1=p2;p2=p;}

printf("\na=%d,b=%d\n",a,b);

printf("max=%d,min=%d\n",*p1, *p2);

}

四、指针变量作函数参数

习 题

10.1 指针变量a所指的字符串长度为 ,

这个长度是可以用strlen(a)测出来的。

char *a=“\nMY Name is\”zhang li\”.\n”;

(1)26 (2) 27 (3) 28 (4) 24 (5)23 10.2 下面程序的作用是,将两个变量中的值互换, 请检查程序是否正确,如不正确的,改正之。 main ( )

{int a=3,b=4;

int *p1,*p2,*p;

p1=&a,p2=&b;

p=p1;p1=p2;p2=p;

printf(“a= %d,b= %d\n”,a,b);

}

10.3 已设p1和p2为指针变量,且已指向同一个整 型数组中的元素,a是一个整型变量,问下面 哪一个语句不能正确执行?

(1) a=*p1 (2) a=*p1+*p2

(3) a=*p1-*p2 (4) p1=a-p2

10.4 有一个二维数组a[3,4],2行3列元素的正确表 示方法为 。

(1) &a[2][3] (2)a[2]+3

(3) *(a+2)+3 (4)*(a[2]+3)

10.5 下列程序的输出结果是 A)44 B)22 C)24 D)结果错误 main()

{int a[5]={2,4,6,8,10},*p,**k;

p=a;k=&p;

printf("%d",*(p));

printf("%d\n",**k);

}

10.6 若有语句:int a=4,*p=&a;

下面均代表地址的一组选项是:

1) a,p,&*a 2) *&a,&a,*p

3) &a,p,&*p 4) *&p,*p,&a

10.7 以下程序段的输出结果为:

char a[]=“Program”,*ptr;

ptr =a;

for ( ;ptr

1) Program 2) Porm

3) 有语法错误; 4) Por

10.8下面说明不正确的是:

1) int *a[4]; 2) float (*p)();

2) int **p; 4) char *(*a)[];

上机作业

学生成绩管理(使用指针做):

1.学生姓名与成绩录入;

2.求学生平均成绩并输出;

3.将不及格的学生姓名与成绩输出;

4.按从高到低成绩排序并输出.

第九章 数组

9.1 数组基本概念

一、回顾

我们前面使用的数据类型都属于基本类型,如整型、实型、字符型。

其存储特点是:每个变量单独存储,亦称简单变量。

如:x=`a`;

y1=0

y2=-2*x

各变量之间独立存放,无任何联系。

若在程序中需要有多个变量,如x1,x2,x3,„„x10,怎样处理能更方便呢?

二、构造类型的基本概念

★在C语言中,变量类型除了前面已介

绍的 几种基本类型之外,还有另外一些

复杂 类型,合称为构造类型。

★构造类型:是由基本类型构造而成

的(如数组、结构体、共同体、枚举型)

★构造类型的每一个分量是一个变量,

它可以是一个简单类型或者构造类型。

★构造类型的分量的使用方法与简单

变量相同

★构造类型的分量占用相邻的存储空间

★对于构造类型的变量来说,重点是访

问其分量的方法

三、数组概念

计算机处理数据时,经常出现数据是用某种有序的形式进行组织的情况。

例如:随温度而改变的实验数据

按学号排列的成绩表

这些数据具有共同的特征

①都是由若干个分量组成

②数组的诸分量都是同一类型(可取任何数据类型)

③这些分量是按一定顺序排列的

●数组:按序排列的具有相同类型的变量的集合

●用一符号名(数组名)来表示这一组数

●用数组名后跟下标来唯一地确定数组中的元素

●数组的首地址/数组元素的类型和个数(数组长度)

9.2 一维数组

一、定义一维数组

类型名 数组名1[exp],数组名2[exp],„

其中:exp为常量表达式

如: int a[10],b[5];

char c[8];

float X[20],y[4*M+1], w[5]; (M是符号常量)

1.数组名命名规则和简单变量名相同

2.数组名后只能用方括号括起来的常量表达式(常量和符号常量)。此用法不对:a(10),

3.常量表达式的值确定数组元素的个数(数组尺寸)

定义即提供三方面的信息:名,类型,维数,长度,从而分配空间

x[n]

二、一维数组的存储

C编译程序是怎样管理一个数组呢?

用连续的内存单元存放各个元素

保存数组所需内存量与数组元素的基本类型和数组大小有关

总字节数=sizeof(基本类型)*数组元素个数

如上例:总字节数=2*5=10

三、一维数组的引用

数组必须”先定义后引用”

C语言规定只能逐个引用数组

元素,而不能一次引用整个数组

引用一维数组元素的一般形式:

数组名[下标]

下标可以是整数常量或整型表达式

例如:a[0]=a[5]+a[7]-a[2*3]

9.2 一维数组

四、一维数组的初始化

1.在定义数组时对数组元素赋以初值

2.给一部分元素赋初值

注:对static数组不赋初值,

系统会对所有数组元素

自动赋以0值

3.若对全部数组元素赋初值时,

可以不指定数组长度。

注意:若被定义数组长度与提

供初值的个数不相同,

则数组长度不能省略.

【例9-2】数组的初始化

#include

void main ()

{ int a[5]={1,2,3,4,5};

int b[5]={1,2,3};

int c[ ]={1,2,3,4,5};

static int d[5];

int e[5];

int i;

for(i=0;i

for(i=0;i

for(i=0;i

for(i=0;i

for(i=0;i

}

例9-3 用起泡法对6个数排序(由小到大)

起泡法的思路是:将相邻两个数比较,将小的调到前头。

开始

例9-3 用起泡法对6个数排序(由小到大)

由前面的分析可知:

★要排序的数必须放入数组中

★用二重循环控制排序过程

外循环j控制比较趟数(n-1趟)

内循环i克制一趟比较的次数(n-j次)

9.3 二维数组

在C语言中,数组的元素还可以是数组,这样就构成二维数组,所以二

维数组可以看成是“数组的数组”。照此办法,还可构成三维,四维数组

(称多维数组)等等,二维数组是多维数组中最简单最常用的数组,它

代表多维数组的基本特征。

一、二维数组的定义

类型名 数组名[常量表达式1] [常量表达式2],„„

如:int a[3][4], b[4][M];(M是符号常量)

关于二维数组的讨论

如前面所说,可以把二维数组看作一种特殊的一维数组;它的元素又

是一个一维数组

如:int a[3][4];

可将a 数组看作是一个一维数组,它有3个元素:a[0]、a[1]、a[2]

每个元素又是一个包含4个元素的一维数组

9.3 二维数组

二、二维数组的存储

二维数组从概念上可以理解为行-列矩阵

但存储器是一维的,需按一定规则转换。

在内存中:

二维数组中元素排列的顺序是——按行存放

也就是说:数组元素的实际存放顺序是

右边下标比左边下标变化得快!!!

9.3 二维数组

三、二维数组的引用

二维数组的元素的引用形式为:数组[下标] [下标]

如:int a[2] [4],b[5] [3]

a[2-1] [2*2-1]

b[1] [2] =a[1] [3]/2

下标可以是整数表达式

注意下标的最大值,即:要注意数组定义和数组元素引用的区别

如定义: int a[3] [4]; 则下标下限值是a[0] [0]

下标上限值是a[2] [3]

四、二维数组的初始化(按行存放)

1、按存放顺序赋

如: int x[2] [3]={1,2,3,4,5,6};

结果为: x[0] [0]=1, x[0] [1]=2, x[0] [2]=3

x[1] [0]=4, x[1] [1]=5, x[1] [2]=6

2、按行赋

如: int x[2] [3]={{1,2,3},{4,5,6}};

3、部分赋

如: static int x[2] [3]={1,2,4}; /*以存放顺序赋*/

结果为: x[0] [0]=1, x[0] [1]=2, x[0] [2]=4

x[1] [0]=0, x[1] [1]=0, x[1] [2]=0

如: static int x[2] [3]={{1,2},{4}}; /*以行赋*/

结果为: x[0] [0]=1, x[0] [1]=2, x[0] [2]=0

x[1] [0]=4, x[1] [1]=0, x[1] [2]=0

4、省略第一维长度

如: static int x[ ] [3]={1,2,3,4,5,6,7};

结果为: x[0] [0]=1, x[0] [1]=2, x[0] [2]=3

x[1] [0]=4, x[1] [1]=5, x[1] [2]=6

x[2] [0]=7, x[2] [1]=0, x[2] [2]=0

五、二维数组的输入与输出

一般二维数组的处理用二重循环来实现

用循环变量的值控制数组元素的下标

课堂练习

1.以下对一维数组a的正确说明是:

A) char a(10) ; B) int a[10] ;

C) int k=5,a[k];

D) char a[ ]={„a‟,‟b‟,‟c‟};

2.以下对二维数组a的正确说明是:

A) char a[10][5] ;

B) int a[2][3] ;

C) int k=5,a[k][k-2];

D) char a[4][3]={{“abc”},{“bcd”},{“cde”}};

E) int a[3][4] = {{1},{5},{9}};

上机作业:

编程序完成学生成绩管理系统:

1.学生姓名与成绩录入;

2.求总成绩及平均成绩并输出;

3.按从高到低成绩排序并输出.

熟悉Turbo C在线帮助系统的用法。(F1)

第十章 字符串

10.1 字符数组

一、字符数组的定义

■在C语言中,没有专门的字符串

变量,而是将字符串存入字符数组

来处理

■即用一个一维数组来存放一个

字符串,每个元素存放一个字符

■字符数组是数组的一个特殊情况,

但它的定义方法与上述介绍的类似;

引用方法可以与上述介绍的同,也

有其独特的引用方法

■由于字符串型与整型是互相通用

的,因此上面定义也可改为:

二、字符数组的初始化

1、按元素赋

static char c[10]={„s‟,‟t‟,‟o‟,‟r‟,‟e‟};

注:“\0”表示空字符null。(ASCⅡ为0)

注意: static char c[10]; 则 c[0],c[1],„„,c[9]初值均为’\0’

但若 char c[10]; 则 c[0],c[1],„„,c[9]的值是未知的

注意:

◆在C语言中,将字符串作为字符数组来处理,即用一个一维数组来存放一个字符串。如:c[10]存放字符串“store”。

◆为了测定实际字符串长度,C语言规定了一个“字符串结束标志”,即‘\0’。即遇到字符‘\0’时,表示字符串结束。

二、字符数组的初始化

2、使用字符串常量给字符数组赋初值

例:

char c[6]={“china”); 或

char c[6]=“china”; 或

char c[ ]=“china”;

结果:

注:以字符串方式赋值时,必须保证数组元素个数≥字符个数+1,(字符串后面自动加上一个‘\0’)

由此可知:

●数组初始化后,剩余的元素均为\0

●数组未初始化,则static数组元素的

值为\0,否则元素值是随机的

二、字符数组的初始化

例:用一字符串给字符数组

赋初值,然后打印出各元素的

ASCⅡ编码值

三、字符串的引用与输入输出

※对于字符数组,在程序中既可以逐个引用字符串中的单个字符(数组元素)

※也可以一次引用整个字符串(数组)

1、逐个字符串数组元素输入输出:用%c格式符描述

例:scanf(“%c”,&a[i]);

printf(“%c%c%c”,a[0],a[2],a[3];

2、整个字符串(数组)输入输出:用%s格式符描述

如:char a[10 ];

scanf(“%s”,a); printf(“%s”,a);

注1:用%s输出,无论数组元素有多少个只要遇到“\0”便结束;

如: char star[3][4]={{“*”},{“**”},{“***”}};

printf (“%s\n%s\n%s\n”,star[0],star[1],star[2]);

注2:%s要求的是地址

对一维数组,数组名就是地址,对二维数组,只写行下标时是地址。

四、字符串处理函数

1、gets(字符数组名)

从键盘输入一个字符串(以回车结束)

放到数组中,并且得到一个函数值,该

函数值是字符数组的起始地址

如:gets (str)

2、puts(字符数组名/字符串)

将数组中的字符串(以‘\0’结束的

字符序列)输出到终端上,输完换行

即 puts(str); 与 printf(“%s\n”,str)等价

或puts(“OK”);与 printf(“%s\n”,”OK”)

四、字符串处理函数

3、strcpy(字符数组1,字符串/字符数组2)

将字符串/字符数组2中的字符串

拷贝到字符数组1中

注意:

(1)字符数组1的长度≥字符数字2/字

符串的长度

(2)拷贝时连同‘\0’一起拷贝

(3)不能把字符串或字符数组直接赋

给一个字符数组

如:char str[6];

str=“china”; × str表示一个地址

str[0]=‘C’;str[1]=‘h’; √

strcpy(str,“china”);

四、字符串处理函数

5、strcmp(字符数组1/字符串1,字符数组2/字符串2) 或printf(“OK\n”) 等价

功能:比较两个字符串 结果: 如:

字符串1>字符串2时: 正数 x=strcmp(“abc”,”ABC”); 字符串1=字符串2时: 0 x=strcmp(“AX”,”AX”); 字符串1

对两个字符串的比较,不能用以下形式

str1==str2 或 str1>str2 或 str1

只能用 strcmp(str1,str2)>0或==0或

11.1 局部变量与全局变量

一、局部变量

下列变量是局部变量

在一个函数内部定义的变量

函数的形式参数

在某个复合语句中定义的变量

说明:

局部变量只在自己的范围内有效。

如果局部变量的有效范围有重叠,则有效范围小点优先。

二、全局变量

在函数之外定义的变量(外部变量)是全局变量

全局变量的有效范围是:从定义变量的位置开始到源文件结束

在一个函数中,既可以使用本函数中的局部变量,也可以使用有效的全局变量。 说明:

利用全局变量可以在函数间传递数据。

应尽量减少使用全局变量。

如果全局变量与局部变量同名,则局部变量优先

例11-12:有10个学生的学习成绩,求平均分、最高分和最低分。

分析:

用一个函数返回三个数据,除了用函数值外,可以借助于全局变量。

利用全局变量可以减少函数的参数。

二、全局变量

说明:

1、利用全局变量可以在函数

间传递数据。

2、应尽量减少使用全局变量。

3、如果全局变量与局部变量

同名,则局部变量优先

11.9 变量的存储类别

从变量的作用域(即从空间)角度来分,可以分为全局变量和局部变量。

从另一个角度,从变量值存在的时间(即生存期)角度来分,可以分为静态存储方式和动态存储方式

一、变量的动态存储和静态存储

内存中供用户使用的存储空间包括:

①程序区

②静态存储区:编译时分配空间

③动态存储区:执行时分配空间

二、局部变量的存储类别

1.自动变量

存储在动态存储区,用auto说明,通常将auto省略

如:

int func1(int a)

{ auto int b,c=3;

„„

如:形参a,变量b 、c都是自动变量,调用该函数时,系统给他们分配存储空间,函数调用结束时自动释放存储空间

2、局部静态变量

有时希望函数中的局部变量的值在函数调用结束后不消失而保留原值,这时就应该指定局部变量为“静态局部变量”,用关键字static进行声明 .

说明:

静态局部变量属于静态存储类别,在静态存储区内分配存储单元。在程序整个运行期间都不释放。

静态局部变量在编译时赋初值,即只赋初值一次;

如果在定义局部变量时不赋初值的话,则对静态局部变量来说,编译时自动赋初值0 静态局部变量只能在定义它的函数内被引用(它存在但不能被其它函数引用)

3.寄存器变量

将局部变量得值放在CPU中的寄存器中,这种变量叫“寄存器变量”,用关键字register作声明

4. 外部变量

如果在定义点之前的函数想引用该外部变量,则应该在引用之前用关键字extern对该变量作“外部变量声明”

存储类别小结

12.1 函数的嵌套调用

嵌套调用是指在一个函数的函数体中有调用了其他函数

【例:8-4-6】

#include

int f1( )

{int j;

j=f2( ) ;

printf("%d\n",j);

return(10*j);

}

int f2( )

{int k=10;

printf("%d\n",k);

return(10*k);

}

main( )

{ int i;

i=f1( );

printf("%d\n",i);

}

12.2 函数的递归调用

一个函数在它的函数体内调用它自身称为递归调用。这种函数称为递归函数。C语言允许函数的递归调用。在递归调用中,主调函数又是被调函数。执行递归函数将反复调用其自身,每调用一次就进入新的一层。

例如:

int f(int x)

{

int y=10,z;

z=f(y);

return z;

}

运行该函数将无休止地调用其自身,这当然是不正确的。为了防止递归调用无终止地进行,必须在函数内有终止递归调用的手段。常用的办法是加条件判断,满足某种条件后就不再作递归调用,然后逐层返回。

构造递归函数的关键是寻找递归算法和终结条件。

例:计算阶乘的函数。

n!=1×2×3×...×n

=n×(n-1)×(n-2)……×3×2×1

=n×(n-1)!

1!=1

计算出n!必须算出(n-1)!,计算(n-1)!必须先计算(n-2)!, „由此推到1!=1,返回后可依次计算2!,3!,„(n-1)!,n!。

递归算法:n×(n-1)!

终结条件:1!=1

阶乘计算的递归算法可归纳为:

f(n)=n×f(n-1)

f(1)=1

第13章 预处理命令

13.1 宏定义

13.2 文件包含

13.1 宏定义

在C语言中,宏分为两种:无参数的宏和有参数的宏。

1.无参数的宏定义

宏定义是指用一个指定的标识符来代表程序中的一个字符串。其命令形式为:

#define 宏名 字符串

其中,“#”表示这是一条预处理命令,“define”为宏定义命令,“宏名”为一个合法的标识符,“字符串”可以是常数、表达式或语句,甚至可以是多条语句。

13.1 宏定义

2.带参数的宏定义

宏定义除了允许定义符号常量外,还可以用于定义带有参数的宏。带参数的宏定义一般形式为:

#define 宏名(参数列表) 字符串

在宏定义中的参数称为形式参数,简称形参,它只有参数名,没有数据类型,参数名必须是合法的标识符;在宏调用中的参数称为实际参数,简称实参。

13.2 文件包含

文件包含是指一个源程序文件将另一个指定文件的全部内容包含进来,即将另一个文件包含到本文件之中。这一过程通过预处理命令#include来完成。文件包含预处理语句的一般形式为:

#include

或 #include "包含文件"

其中,包含文件名是磁盘中文本文件名。

第十四章 结构体和共同体

14.1 概述

在实际问题中,一组数据往往具有不同的数据类型 ,需要 将不同的数据组合成一个有机的整体。

例如:一个学生的信息:

学号(num),姓名(name),性别( sex),

年龄( age ),成绩(score),家庭住址( addr)

定义一个结构体类型的一般形式为:

struct 结构体类型名

{成员表列};

14.2 定义结构体变量的方法

一、先定义结构,再定义结构体变量

14.2 定义结构体变量的方法

一、先定义结构,再定义结构体变量

二、定义类型的同时定义变量

14.2 定义结构体变量的方法

一、先定义结构,再定义结构体变量

二、定义类型的同时定义变量

三、直接定义结构体变量

14.2 定义结构体变量的方法

说明:

1.类型与变量的区别:

定义时先定义结构体类型,后定义变量

类型不分配空间,变量分配空间

2.结构体可以嵌套定义

3.结构体成员可以与变量名相同

14.3 结构体变量的引用

引用形式: 结构体变量名.成员名

例如:boy1.month

boy2.year

规则:

1.不能将结构体变量作为一个整体进行赋值、输出,只能对结构体中的各个成员分别进行。 例如:boy1.day=15; boy1.year=1989;boy1.month=7;

2,允许结构体变量之间互相赋值,但类型必须一致

例如:boy2=boy1;

3.如果是嵌套定义,用若干个成员运算符,一级一级地找到最低一级的成员

例如: student1. birthday.month=2

student1. birthday.day=15

14.3 结构体变量的引用

4.结构体成员可以像普通变量一样使用、运算。

例如: student1. score+ student2. score;

student1.age++ ;

++ student1.age;

scanf(“%d”,&student1.num);

14.4 结构体变量的初始化

定义结构体类型的同时定义变量并赋初值。

#include

main()

{struct student

{long num;

char name[20];

char sex;

int age;

float score;

}s={20070001,”Li Na”,‟F‟,19,91.5};

printf(“NO:%ld\nname:%s\nsex:%c\nnage:%d\nscore:%f\n”,s.num,s.name,s.sex,s.age,s.score); }

14.5 结构体数组

结构体数组:数组中每一个元素都是一个结构体类型的数据

一、结构体数组的定义

与定义结构体变量类似,只需说明是数组即可

二、结构体数组的初始化

14.6 指向结构体类型数据的指针

一、指向结构体变量的指针

指向结构体变量的指针:是该变量所占据的内存段的首地址

一般形式:

struct 结构体类型名 *指针名

例如: struct stu student, *p;

p=&student;

通过结构体指针即可访问该结构体变量

其访问的一般形式为:

(*结构指针变量).成员名

例如:(*p).age 括号不能省

或为:

结构指针变量->成员名

例如: p->age

14.6 指向结构体类型数据的指针

一、指向结构体变量的指针

例9.6指向结构体变量的指针的应用

#include

main( )

{struct student

{long num;

char name[20];

char sex;

int age;

float score;

};

struct student s={20070001,”Li Na”,‟F‟,19,91.5};

struct student *p; /*定义一个struct student 类型的指针变量p */

p=&s; /*将s的起始地址赋给指针变量p,即使p指向s */

printf(“NO:%ld\nname:%s\nsex:%c\nage:%d\nscore:%f\n”,

s.num, s.name, s.sex, s.age, s.score);

printf(“NO:%ld\nname:%s\nsex:%c\nage:%d\nscore:%f\n”,

(*p).num,(*p).name,(*p).sex,(*p).age,(*p).score);

printf(“NO:%ld\nname:%s\nsex:%c\nage:%d\nscore:%f\n”,

p -> num,p - >name,p - > sex,p - >age,p - >score);

}

14.6 指向结构体类型数据的指针

一、 指向结构体变量的指针

二、指向结构体数组的指针

14.8 共用体

一、共用体概念

共用体是由用户自己定义的构造类型,组成共用体的若干个数据也称为其成员。 与结构体不同的是:

结构体变量每个成员分别占有其自己的内存单元;

共用体变量各个成员都从同一地址开始存放,即成员间互相覆盖。

1.声明共用体类型的一般格式:

union 共用体名

{ 数据类型 1 成员名1;

数据类型 2 成员名2;

数据类型 n 成员名n;

};

14.8 共用体

一、共用体概念

二、共用体变量的定义

三、共用体变量成员的引用

一般格式如下:

共用体变量名.成员名

14.10 用typedef定义类型

C语言规定,用户可以用typedef声明新的类型名来代替已有的类型名。

一、格式:

typedef 基本类型名 新类型名;

例如:

typedef int INTEGER;

typedef float REAL;

以下两行等价:

int i,j;float a,b;

INTEGER i,j;REAL a,b;

注意,用typedef只是对已经存在的类型增加一个类型名,而没有创造新的类型。

习惯上常把typedef声明的类型名用大写字母表示,以便与系统提供的标准类型标识符相区别。

14.10 用typedef定义类型

二、用typedef定义的步骤

练习

1、指出程序中的错误,并改正之。

main( )

{

struct

{int num;

char name[20]

omt age;

}stud;

struct stud={101,”Li fun”,18};

printf(“%d,%s,%d\n”,stud);

}

2、想输出三个学生的姓名,请对程序填空。

struch student

{ int num;

char name[20]

int age;

};

main ( )

{

struct student stud[3]={{101,”Li”,18},

{102,”wang”,19},{103,”zhang”,21}}

; }

3、要输出结构体变量stud中的成员age的值,不正确的用法是:

main( )

{ struct student

{int num;

char name[20];

int age;

};

struct student *p,stud={101,”Li fun”,18};

p=&stud;

printf(“%d\n”,______);

}

(1) (*P).age (2)stud.age

(3)student.age (4)p->age

15.1 位运算符和位运算

二、位运算

1.“按位与”运算(&)

二、位运算

1.“按位与”运算(&)

2.“按位或”运算(|)

3.“按位异或”运算(^)

15.2 位运算举例

例15.2 取一个整数a从右开始的4~7位,

比如,a: 0000 0000 1101 1001

分析:

1.先使a移4位,使要取出的几位移到最右端,a>>4

2.设置一个低4位全为1,其余为0的数

3.将上面两者进行&运算

第十六章 文件

16.1 C文件概述

文件:指存储在外部介质的数据集合(数据文件)

操作系统以文件为单位对数据进行管理

16.2 文件指针

每个被使用的文件都在内存中开辟了一个区,用来存放文件的有关信息(如文件的名字、文件状态及文件当前位置等)。这些信息是保存在一个结构体变量中的,该结构体类型是由系统定义的,取名为FILE。(Turbo C在stdio.h文件中有该类型的声明)

在C语言中用一个指针变量指向一个文件,这个指针称为文件指针。通过文件指针就可对它所指的文件进行各种操作。

定义说明文件指针的一般形式为:

FILE *指针变量标识符;

例如:FILE *fp

16.3 文件的打开与关闭

要对文件进行读写等操作,要先将其从外存调入内存,即要打开文件,对文件做完操作之后,要将文件保存到外存,即要关闭文件。

一、文件的打开(fopen函数)

1.形式:

文件指针名=fopen(文件名,使用文件方式);

2.使用文件的方式

16.3 文件的打开与关闭

一、文件的打开(fopen函数)

二、文件关闭函数(fclose函数)

fclose函数调用的一般形式是:

fclose(文件指针);

例如:

fclose(fp);

说明:

文件一旦使用完毕,应用关闭文件函数把文件关闭,以避免文件的数据丢失等错误 。 fclose()函数也带回一个值,当文件关闭成功时返回值为0;当文件关闭未成功时返回值为EOF(-1)

16.4 文件的读写

一、 fputc函数和fgetc函数

1.fputc()函数

把一个字符输出到指定文件,一般形式为:

fputc(ch,fp);

其中,ch是要写到磁盘文件上的字符,它可以是一个字符常量,也可以是一个字符变量。fp是文件指针,通过fopen()函数获得,已指向某个打开的可写文件。

2.fgetc()函数

从指定文件读入一个字符,一般形式为:

ch=fgetc(fp);

其中,fp是文件指针,ch是字符变量。

16.4 文件的读写

一、fputc函数和fgetc函数

二、fputs函数和fgets函数

1.fputs函数

向指定文件输出一个字符串。一般形式为:

fputs(str,fp);

其中,str是字符型指针,可以是字符串常量、字符数组名或字符型指针,fp是文件指针。

2.fgets函数

从指定文件读入一个指定长度的字符串。一般形式为:

fgets(str,n,fp);

其中,str是字符型指针,n为要求得到的字符的个数,但只从fp指向的文件输入n-1个字符,然后在最后加一个“\0”,因此得到的字符串共有n个字符。

16.4 文件的读写

一、fputc函数和fgetc函数

二、fputs函数和fgets函数

三、fprintf函数和fscanf函数

1.fprintf函数

一般形式为:

fprintf(文件指针,格式控制字符串,输出表列);

功能是“输出表列”中各项数据按“格式控制字符串”中指定的格式写入到“文件指针”所指向的文件中

2.fscanf函数

一般形式为:

fscanf(文件指针,格式控制字符串,输入表列);

功能是从“文件指针”所指的文件中,按“格式控制字符串”中指定的格式,读取数据依次放入“输入表列”所列出的各项中。

16.4 文件的读写

一、fputc函数和fgetc函数

二、fputs函数和fgets函数

三、fprintf函数和fscanf函数

四、 fread函数和fwrite函数

为整块数据的读写函数。可用来读写一组数据,如一个数组元素,一个结构变量的值等 一般形式为:

fread(buffer,size,count,fp);

fwrite(buffer,size,count,fp);

说明:

buffer 是一个指针,在fread函数中,它表示存放输入数据的首地址。在fwrite函数中,它表示存放输出数据的首地址。

size 表示数据块的字节数。

count 表示要读写的数据块块数。

fp 表示文件指针。

例如:

fread(fa,4,5,fp);

意义:从fp所指的文件中,每次读4个字节(一个实数)送入实数组fa中,连续读5次,即读5个实数到fa中。

16.5 文件的定位

1.rewind函数

文件头定位函数,作用是使位置指针重新返回文件的开头。一般形式为:

rewind(fp);

2.fseek函数

文件随机定位函数,对随机文件读写时要用本函数来定位读写位置。

一般形式为

fseek(文件指针,位移量,起始点);

3.ftell函数

ftell函数用以获得文件当前位置指针的值,函数给出当前位置指针相对于文件开头的字节

数,其值为长整型。 一般形式为: ftell(fp);

范文十:计算机中的数据表示方法 投稿:严窡窢

计算机中的数据表示方法

计算机中的数据表示方法

数据是指能够输入计算机并被计算机处理的数字、字母和符号的集合。平常所看到的景象和听到的事实,都可以用数据来描述。数据经过收集、组织和整理就能成为有用的信息。

1. 计算机中数的单位

在计算机内部,数据都是以二进制的形式存储和运算的。计算机数据的表示经常使用到以下几个概念。

(1) 位

位(bit)简写为b,音译为比特,是计算机存储数据的最小单位,是二进制数据中的一个位,一个二进制位只能表示0或1两种状态,要表示更多的信息,就得把多个位组合成一个整体,每增加一位,所能表示的信息量就增加一倍。

(2) 字节

字节(Byte)简记为B,规定一个字节为8位,即1Byte = 8bit。字节是计算机数据处理的基本单位,并主要以字节为单位解释信息。每个字节由8个二进制位组成。通常,一个字节可存放一个ASCII码,两个字节存放一个汉字国际码。

(3) 字

字(Word)是计算机进行数据处理时,一次存取、加工和传送的数据长度。一个字通常由一个或若干个字节组成,由于字长是计算机一次所能处理信息的实际位数,所以,它决定了计算机数据处理的速度,是衡量计算机性能的一个重要标识,字长越长,性能越好。 计算机型号不同,其字长是不同的,常用的字长有8位、16位、32位和64位。 计算机存储器容量以字节数来度量,经常使用的度量单位有KB、MB和GB,其中B代表字节。各度量单位可用字节表示为:

【例1-18】一台计算机,内存标注2GB,外存硬盘标注为500GB,则它实际可存储的内外存字节数分别如下:

内存容量= 2 × 1024 × 1024 × 1024B

硬盘容量= 500 × 1024 × 1024 × 1024B

2. 计算机中数的表示

在计算机内部,任何信息都以二进制代码表示(即0与1的组合来表示)。一个数在计算机中的表示形式,称为机器数。机器数所对应的原来的数值称为真值,由于采用二进制,必须要把符号数字化,通常是用机器数的最高位作为符号位,仅用来表示数符。若该位为0,则表示正数;若该位为1,则表示负数。机器数也有不同表示法,常用的有3种:原码、补码和反码。下面以字长8位为例,介绍计算机中数的原码表示法,其他表示法可参考相关资料。

原码表示法即用机器数的最高位代表符号(若为0,则代表正数,若为1,则代表负数),数值部分为真值的绝对值的一种表示方法。

【例1-19】表1-2列出了几个十进制数的真值和原码。

表1-2 十进制、真值和原码

用原码表示时,数的真值及其用原码表示的机器数之间的对应关系简单,相互转换方便。

站点地图