程序设计基础课件第03章 数据的存储表示_第1页
程序设计基础课件第03章 数据的存储表示_第2页
程序设计基础课件第03章 数据的存储表示_第3页
程序设计基础课件第03章 数据的存储表示_第4页
程序设计基础课件第03章 数据的存储表示_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

v程序设计基础——从问题到程序(第3版)

第3章数据的存储表示基本数据类型

常量

变量

存储数据的载体

程序设计的首要问题是数据表示(即数据的存储表示),其主要任务是将待处理的数据存储在计算机的存储器(内存)中——冯·诺依曼体系结构的特点。本章基本内容【问题】给定圆的半径,求圆的面积。算法需要处理哪些数据——常量π、常量2、变量radius和变量area,这些数据在计算机内如何存储呢?【引例3.1】计算圆的面积1.给定半径值radius;2.根据式3.1计算圆的面积area;3.输出area;【算法】设变量radius存储(表示)圆的半径,变量area存储(表示)圆的面积。

【想法】设圆的半径为radius,圆的面积为area,则根据下式求圆的面积:area=π×radius2(式3.1)【程序】如何编程实现呢?②首先考虑数据表示!①算法与程序设计语言无关!【程序】定义符号常量表示π,定义int型变量radius和area分别存储圆的半径和面积#include<stdio.h>#definePI3.14

/*定义符号常量PI*/

intmain(){intradius;

/*定义radius为整型变量,存储半径*/doublearea;

/*定义area为实型变量,存储圆的面积*/radius=10;

/*给变量radius赋值*/area=PI*radius*radius;

/*给变量area赋值*/printf(“radius=%d,area=%6.2f\n”,radius,area);

/*输出结果*/return0;}程序中涉及到新的语法?【引例3.1】计算圆的面积

计数方法:当某一位的值达到某个固定量时,就要向高位产生进位。不同的进制以基数来区分,若以r代表基数,则:

r=10为十进制,可使用0,1,2,…,9共10个数码;r=2为二进制,可使用0,1共2个数码;r=8为八进制,可使用0,1,2,…,7共8个数码;r=16为十六进制,可使用0,1,2,…,9,A,B,C,D,E,F共16个数码。3.1存储数据的载体进位计数制(简称进制)r进制数通常写作(an…a1a0.a-1…a-m)r,例如:(1101)2,(689.12)10

位权值计数:每个位置对应一个位权值。对于r进制数(an…a1a0.a-1…a-m)r,小数点左面的位权值依次为r0,r1,…,rn,小数点右面的位权值依次为r-1,…,r-m。每个位置上的数码所表示的数值等于该数码乘以该位置的位权值。(198.63)10=1×102+9×101+8×100+6×10-1+3×10-2(1101.11)2=1×23+1×22+0×21+1×20+1×2-1+2×2-2进位计数制(简称进制)3.1存储数据的载体1.二进制数转换为十进制数:将二进制数按位权值展开然后求和。二进制数与十进制数之间的转换例3.1将二进制数1101.11转换为十进制数。解:1101.11=1×23+1×22+0×21+1×20+1×2-1+1×2-2=13.75则:(1101.11)2=(13.75)102.十进制数转换为二进制数十进制整数转换为二进制整数:除基取余,逆序排列。十进制小数转换为二进制小数:乘基取整,正序排列。3.1存储数据的载体例3.2将十进制数46.375转换为二进制数。解:除数商余数

4623

02311

1115

152

121

010

1逆序排列

乘数积整数0.3750.75

00.751.5

10.51.0

1正序排列则:(46.375)10=(101110.011)23.1存储数据的载体计算机的工作是在程序控制下进行的,其过程是连续不断地从内存中取出指令予以分析和执行,从内存中读取数据进行处理再存储到内存中。中央处理器CPU读取指令和数据

执行指令,存储结果内

存学习程序设计的一个关键是要深刻理解内存计算机的工作过程3.1存储数据的载体

内存储器的最小存储单位是位(bit),每个位可以存储一位二进制数。

存储单元是可管理的最小存储单位,典型的存储单元是一个字节(Byte)。每个存储单元的编号称为地址,地址一般从0开始连续编号——线性编址。地址存储单元存储单元的信息1110001110001101101010101110100000110010FFFFFFFE000200010000……内存储器任意时刻存储单元的内容都不会是空的!一定是0和1的编码!3.1存储数据的载体访问(存取):读出/写入信息,对存储器的正确访问需要两个条件:(1)存储单元的起始地址;(2)所占存储单元的个数。000000000000100000101000000010000010100000001000十进制数1024800000000000010000010100000001000十进制数534536起始地址地址增加方向内存储器3.1存储数据的载体

数据通常以某种特定形式(整数、实数、字符串)存在,不同形式的数据其处理规则不同。高级程序设计语言根据数据对象的不同使用规则,在二进制形式存储的基础上引入了整型、实型、字符型、逻辑型等基本数据类型。回避了存储器的概念(二进制、字节、存储单元、地址等)

…010101111101011110000110111001…程序基本数据类型:整型、实型、字符型、逻辑型3.2

基本数据类型数据类型——回避存储器C语言中,整型数据的基本类型说明符是int(integer的简写)。1.存储格式:在微型计算机中,整型数据的存储格式一般采用补码表示。

0011000000111001符号12345的补码高字节

低字节

1100111111000111符号-12345的补码高字节

低字节存储高地址低地址00110000001110013.2

基本数据类型基本数据类型——整型存储1100111111000111高地址低地址例3.4

X=+1000101,则[X]补=01000101X=-1000101,则[X]补=10111010+1=10111011[X]补=01000101,则X=+1000101[X]补=10111011,则X=10111011-1=10111010=-1000101

补码表示法的编码规则:采用1位二进制表示整数的符号(称为符号位),正数的补码其符号位为0,其余各位与数的绝对值相同,负数的补码其符号位为1,其余各位是数的绝对值取反然后在最末位加1。3.2

基本数据类型基本数据类型——整型2.取值范围:抽象地讲,整型数据的值域是全体整数,但计算机内存和其他硬件设备只能存储和操作一定量的数据,因此,每种计算机能表示的整数都在某一范围之内。位串01110110010101000011001000010000数值76543210位串111111101101110010111010100111000数值-1-2-3-4-5-6-7-88位二进制数表示的整数集合是多少?16位呢?32位呢?3.2

基本数据类型基本数据类型——整型例如,4位二进制数表示的整数集合如下:C语言根据取值范围的不同,将整型数据进一步分为基本整型(int)、短整型(修饰符short)和长整型(修饰符long)。类型名类型说明符二进制位数取值范围基本整型int16-32768~32767即-215~(215-1)短整型shortint16-32768~32767即-215~(215-1)长整型longint32-2147483648~2147483647即-231~(231-1)3.2

基本数据类型基本数据类型——整型C标准没有规定int型数据的位数,只是要求short的位数不大于int的位数,long的位数不大于int的位数,这部分由实现定义(a)有符号最大正整数32767(b)无符号最大正整数655350111111111111111符号位1111111111111111数据位无符号整型unsignedint160~65535即0~216-1无符号短整型unsignedshortint160~65535即0~216-1无符号长整型unsignedlongint320~4294967295即0~(232-1)类型名类型说明符二进制位数取值范围无符号整数主要用于系统编程和低级、与机器相关的编程。一般情况下,将整数定义为有符号整数,通常是int型。3.2

基本数据类型基本数据类型——整型3.运算集合:可以进行基本的算术运算(加、减、乘、除、求余)和逻辑运算(关系运算、与、或、非等逻辑运算)。

例3.7假设整数用1个字节表示,计算68+61的值。解:68=+1000100[68]补=0100010061=+0111101[61]补=00111101

01000100[68]补

+

00111101[61]补

10000001[-127]补由于整型数据能够表示的整数是有限的,如果运算的结果超过了系统能够表示的整数范围,这种错误现象称为溢出。3.2

基本数据类型基本数据类型——整型

实型数据在计算机中一般采用浮点形式存储,C语言提供了两种浮点数格式:单精度(float)和双精度(double)。1.存储格式:浮点表示法,阶码&尾数。an…a1a0.

a-1…a-m尾数(有效数字)阶码(小数点位置)阶符

尾符

假想小数点阶码

尾数存储3.2

基本数据类型基本数据类型——实型(浮点型)例3.6假设某编译系统的float型数据占32位二进制,其中24位表示尾数,8位表示阶码,给出68.625在内存中的存放形式。解:(68.625)10=(1000100.101)2=(0.1000100101×2111)第4字节

第3字节

第2字节

第1字节存储00000111010001001010000000000000高地址低地址0

0000111

0

10001001010000000000000阶符阶码111

尾符尾数0.1000100101

3.2

基本数据类型基本数据类型——实型(浮点型)2.取值范围:根据IEEE标准,float型数据占32位,其中尾数占24位,阶码占8位,而double型数据占64位,其中尾数占52位,阶码占12位。类型名类型说明符二进制位数取值范围精度单精度浮点型float323.4×10-38~3.4×10388位有效数字双精度浮点型double641.79×10-308~1.79×1030816位有效数字3.2

基本数据类型基本数据类型——实型(浮点型)3.运算集合:基本的算术运算(加、减、乘、除),需要注意精度和溢出问题,要保证运算结果在系统能够表示的实数范围。实型数据一般不进行关系运算和逻辑运算。1.存储格式:微型计算机一般采用ASCII码。在C语言中,字符型的类型说明符是char,char型数据在内存中需要一个字节。存储01100001a的ASCII码为972.取值范围:由实现定义,大多数编译系统将字符型数据作为无符号整数,则char型数据的取值范围是ASCII码值为0~255对应的字符。3.2

基本数据类型基本数据类型——字符型3.运算集合:不同的程序设计语言为字符型数据提供的运算集合不同。在C语言中,由于字符存储的是其ASCII码,因此具有数值特征,可以像整数一样参加数值运算,此时,相当于对字符的ASCII码进行运算。但是,对两个字符型数据执行加、乘和除等算术运算没有实际意义。几个有用的运算:假设ch是小写字母,则ch

-

32是对应的大写字母;假设ch是大写字母,则ch+32是对应的小写字母;假设ch是数字字符,则ch–'0'是对应的数值;假设整型变量ch的值是0~9,则ch+'0'是对应的数字字符。3.2

基本数据类型基本数据类型——字符型1.存储格式:不同的程序设计语言对逻辑型数据的表示有所不同,同一程序设计语言的不同编译器对逻辑型数据的表示有所不同,甚至同一编译器的不同版本对逻辑型数据的表示也有所不同。2.取值范围:该类型的数据只有两个可能的取值:真和假。3.运算集合:可以进行逻辑运算,C语言中将整型作为逻辑型,因此,逻辑型数据也可以进行算术运算。3.2

基本数据类型基本数据类型——逻辑型(布尔型)例如:

(5>3)+(3+7<5)的值是1。

常量:在程序的运行过程中其值不能被改变的量,即不接受程序修改的固定值,例如程序中的具体数字、字符等。程序设计语言中一般提供两种类型的常量:1.字面常量:常量本身的字面意义就是它所代表的常量值。

2.符号常量:用标识符来代表常量,为字面常量起个名字。什么是常量?常数

数据处理中都有哪些常数呢?3.3常量整型常量(如123,默认为int型)实型常量(如3.14,默认为double型)为什么程序设计语言中的常量要区分数据类型?3.3常量字面常量常量数值型常量字符型常量字符常量(如'a')字符串常量(如"abc")1.整型常量。一般用来表示数学中的整数。示例进制合法的整型常量表示不合法的整型常量表示十进制123(十进制整数123)0123(不能有前导0)-123(十进制整数-123)12A(不能含有非十进制数码)+123(十进制整数123)-123,456(不能含有逗号)3.3常量字面常量默认情况下,如果整型常量属于int型的取值范围,则编译器将其作为基本整型来处理,否则作为长整型处理。为了强制编译器把常量作为长整型处理,需要在常量后面加上字母L(或l),例如123L。

1.整型常量。一般用来表示数学中的整数。示例进制合法的整型常量表示不合法的整型常量表示八进制0123(十进制整数83)123(无前导0)-0123(十进制整数-83)087(不能含有非八进制数码)+0123(十进制整数83)O123(前导不能是字母O或o)十六进制0x123(十进制整数291)0x9G7(不能含有非十六进制数码)0x9F(十进制整数159)5A(无前导0x或0X)-0X1AF0(十进制整数-6896)OX12A(前导不能是字母O或o)为什么要表示八进制数和十六进制数?3.3常量字面常量十进制10八进制012十六进制0xA存储0000000000001010高地址低地址符号

10的补码

0000000000001010高字节

低字节补码不同进制的表现形式对应的同一个二进制存储。3.3常量字面常量1.整型常量。一般用来表示数学中的整数。2.

实型常量。一般采用十进制,有小数形式和指数形式。

示例形式合法的实型常量表示不合法的实型常量表示小数形式12.3,12.0,0.12.3(小数点前没有数字)-12.0,-0.123.(小数点后没有数字)指数形式1E2,12.3E5,12.3E-51.2E1.5(E之后是小数)-12.3E5,-12.3E-5E5(E之前没有数字)3.3常量字面常量

默认情况下,实型常量以双精度double型存储,为了强制编译器以单精度float型存储实型常量,需要在常量后面加上字母F(或f),例如0.12F。3.字符常量。通常指的是单个字符,在C语言中用单引号将单个字符括起来,例如'a'、'b'、'c'。'abc',''','"','王'×如何表示’、”、/

等特殊意义的符号?如何表示不可见字符(例如换行符)?3.3常量字面常量转义字符:用于描述不可见字符或特殊字符,以反斜线“\”开头,其含义是将反斜线后面的字符转换成另外的含义。转义字符含义转义字符含义\a\b\f\n\r\t\v响铃(BEL)退格换页换行回车水平跳格(tab)垂直跳格\\\?\'\"\0\ddd\xhh反斜杠问号单引号双引号空字符(NULL)1~3位八进制数所代表的字符1~2位十六进制数所代表的字符为什么八进制数是三位,而十六进制数是两位?3.3常量字面常量4.字符串常量(简称串)。通常指的是字符序列,在C语言中用双引号将字符序列括起来,如"abc"、"ghj"。

C语言对字符串的存储方式为:串中的每个字符(转义字符被看成是一个字符)以ASCII码值的二进制形式连续存储,并在最后一个字符的后面存放一个终结符'\0'(ASCII码值为0)。

Thisisastring\001100001字符'a'的存储方式:a的ASCII码为97a的ASCII码为97\0的ASCII码为00110000100000000字符串"a"的存储方式:3.3常量字面常量在C语言中,定义一个符号常量需要使用预处理指令#define。【语法】用#define定义符号常量的一般形式为:

其中,#define是预处理指令,因此,行尾不能有分号;符号常量是一个标识符;常量值可以是一个字面常量,也可以是一个表达式。【语义】将符号常量的值定义为常量值,在对程序进行预处理时,预处理器把每一个符号常量用其表示的常量值进行替换。#define符号常量常量值行尾没有分号3.3常量符号常量3.3常量符号常量#definePI3.14area=PI*radius*radius;area=3.14*radius*radius;定义符号常量:程序中的语句:预处理后:#definePI3.14;area=PI*radius*radius;area=3.14;*radius*radius;定义符号常量:程序中的语句:预处理后:×预处理不进行语法检查新的C标准提倡采用const定义符号常量。【语法】用const定义符号常量的一般形式如下:

其中,类型名是任意合法的数据类型,包括基本数据类型和自定义数据类型;符号常量是一个标识符;常量值可以是一个字面常量,也可以是一个表达式,但是其值的数据类型必须与类型名兼容;const是一条语句,因此要以分号结尾。【语义】定义一个符号常量并指定常量值。const类型名符号常量=常量值;以分号结尾3.3常量符号常量使用符号常量有如下好处:1.程序的可读性好——见名知意。2.程序的可修改性好——改一处避免处处改。3.避免误操作——采用统一值。3.3常量#definePI3.14constdoublePI=3.14;符号常量为什么要定义符号常量呢?

大多数程序在执行时都需要从外界接收一些输入,在得到结果之前往往需要执行一系列运算,产生一些中间结果。因此,在程序的执行过程中需要用存储单元来存储这些数据,这类存储单元就是变量。

变量代表内存中存储某类数据的存储单元,对变量进行的运算处理,实质上就是对该存储单元中的数据进行运算处理。深刻理解变量是编写程序的重要基础!3.4变量变量的概念变量具有如下属性:1.地址(起始地址):变量所在存储单元的编号;2.变量名:变量所在存储单元的助记符;3.变量值:存储在相应存储单元中的数据,即该变量的值;4.类型:变量所属的数据类型。地址变量名类型

变量所占存储单元变量值F003F000radius10在程序中对变量进行存取操作,实际上是通过变量名找到相应的存储地址,将数据存入该存储单元,或从该存储单元中读取数据。3.4变量变量的概念【语法】变量定义的一般形式如下:

其中,类型说明符必须是有效的数据类型,包括基本数据类型和自定义数据类型;变量名列表是一个变量名或由逗号分隔的多个变量名;最后用分号表示结束变量定义。【语义】将变量名列表的各个变量定义为类型说明符的类型,编译器为各变量分配相应的存储单元。类型说明符变量名列表;以分号结尾3.4变量变量的定义和初始化在变量定义中引进变量并规定该变量的属性。定义变量后编译器会给该变量分配一块存储空间,但是从程序开始执行到给变量赋值之前,该变量没有确定值,这时称该变量为“值无定义的”,严格来说,该变量的值是一个随机数。intradius,area;floatlength,width;radiusarealengthwidth随机数随机数随机数随机数3.4变量变量的定义和初始化本书中变量的命名方法?变量的初始化:在定义变量的同时为其赋初值,使该变量成为“值有定义的”。【语法】变量初始化的一般形式如下:

其中,类

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论