基本数据类型剖析.ppt_第1页
基本数据类型剖析.ppt_第2页
基本数据类型剖析.ppt_第3页
基本数据类型剖析.ppt_第4页
基本数据类型剖析.ppt_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

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

文档简介

第2讲 基本数据类型剖析 变量与常量内储存器的组织数据类型基本数据类型整数类型字符浮点类型 数据 Data 程序需要使用数据 数据是信息的载体 数据有多种形式 数 字符 图片等 常量 Constants 在程序运行之前可以预先设定 并在整个运行过程中没有变化的数据 例如引例中的圆周率3 14 变量 Variables 在程序运行过程中可能变化或被赋值的数据 例如引例中的半径和面积 数据类型 数据类型的作用决定数据的存储方式和占用的存储空间的大小 决定可以进行的操作 C语言的数据类型基本类型整型 integer 字符型 character 浮点型 floating point 枚举类型 enumeration 构造类型结构体 structure 共用体 union 数组 array 指针类型 pointer 空类型 void 位 字节和字 内存储器的组织 位 bit 最小的存储单位 可以容纳两个值之一 即0或1 2000 2001 2002 字节 Byte 基本的存储单位 8位 字 word 自然的存储单位 包含若干个字节 例如32位机的一个字就是32位 地址 以字节为单位从0开始编号 整数的存储方式 有符号的正整数在内存中以二进制补码形式存放 正整数的补码与原码相同 例如 10 符号位 数轴 0 215 1 32767 可表示的数的范围 215 32768 整数的存储方式 有符号的负整数在内存中以二进制补码的形式存放 例如 10 符号位 整数的存储方式 无符号整数所有二进制位都存放数值 例如 65535 0 216 1 65535 可表示的数的范围 整数的类型 C语言提供多种整数类型为程序员提供了针对不同用途的多种选择 C标准只规定 short int long最大最小值参考 仅供参考 实际值与所使用的操作系统 编译系统 机器有关 整型常量 整型常量有三种形式 十进制 decimal 整数126565535八进制 octal 整数 带前缀0 zero 01401010177777十六进制 hexadecimal 整数 带前缀0 x或0X0 xc0 x410 xffff默认类型是int 即有符号的基本整型 可以加上后缀u或U表示无符号整数 或者l或L表示长整数 0 xb5Lu 整型变量 声明变量 Declaration 变量在使用之前必须被声明 声明语句的格式 举例 intcounter intwidth height shortx y longnumber 变量声明创建了变量 为变量分配了存储空间 height 整型变量 初始化 Initialize 变量为变量赋一个初始值 可以在声明语句中初始化变量 举例变量获得值的方法直接赋值输入初始化 intcounter 0 intwidth 352 height 288 初始化式 288 height 整型变量 输出变量的值可以使用printf 函数 与int类型对应的格式说明符是 d 举例 includevoidmain inta b a 32767 b 32768 printf a d b d n a b a 32767 b 32768 整数的溢出 溢出整数太大 超出了整数类型的数值范围 使用printf 时与unsignedint类型对应的格式说明符是 u 举例 includevoidmain inta b unsignedc d a 2147483647 b a 1 c 4294967295 d c 1 printf a d b d n a b printf c u d u c d a 2147483647 b 2147483648c 4294967295 d 0 整数的溢出 溢出结果分析结论a 1的结果 2147483648 超出了基本整型变量b所能容纳 表示 的数值范围 2147483648 2147483647 请分析d的结果 01111111 1111111 10000000 0000000 a 2147483647 10000000 0000000 a 1 2147483648 b 2147483648 12 加正数 减正数 字符的存储方式 字符编码计算机使用一种数字编码 整数 来表示字符 每一个字符都对应一个特定的整数 常用的编码是ASCII 美国信息交换用标准码 7位二进制数 十进制码值范围从0到127 一般用一个字节保存 最高位为0 字符的存储方式与整数相同举例字母A的ASCII码值为65 那么在内存中以65的二进制形式存储 且占一个字节 01000001 字符的类型和字符变量 C语言的字符类型 char占一个字节 可视为一个有符号的整数 举例 includevoidmain charc1 c2 声明字符变量c1 97 把一个整数赋值给字符变量c2 c1 32 字符变量可以进行算术运算printf c1 c c2 c n c1 c2 printf c1 d c2 d n c1 c2 c1 a c2 Ac1 97 c2 65 字符常量 字符常量用单引号括起来的一个字符 x 9 C语言将字符常量视为int类型 举例 cw02 04 c 如果int类型为16位 char类型为8位 那么对于 bc 将把 b 和 c 的ASCII码值存储在两个字节中 并把 c 赋值给变量c2 注意 不同系统处理方式不同 结果不同 charc1 c2 c1 a c2 bc 01100001 c1 01100011 c2 01100011 01100010 bc L H 97 99 99 98 字符常量 转义字符 escapecharacter 指代一些特殊的字符 打印不出来的字符 举例 a警报 反斜杠 b退格 问号 f走纸 单引号 n换行 双引号 r回车 ooo八进制值 o表示一个八进制数字 t水平制表符 xhh十六进制值 h表示一个十六进制数字 v垂直制表符 includevoidmain printf a tb nc bd 100 x40 n a bd 浮点数的存储方式 浮点数浮点型数据在内存中按指数形式存放 例如 314 15 3 1415 102 由此可见 尾数部分的宽度决定了有效数字的个数 即精度 阶码部分的宽度决定了数值范围 科学计数法允许使用少量的数字表示很大范围的数和很小的数 浮点数的类型 浮点数也有多种类型类型名称及典型大小 S 1参考 仅供参考 实际值与所使用的操作系统 编译系统 机器有关 数轴 0 可表示的正数 可表示的负数 浮点型常量 浮点型常量有两种形式 十进制形式12 3 650 指数形式 1 2e 2 1E57E01 2 10 20 1 1057 0 100默认类型是double 可以加上后缀f或F表示float类型 或者l或L表示longdouble类型 否则该常量是double类型 2 3f1 2L 1E5f 浮点型变量 浮点型变量的声明和初始化举例 floatradius doublex 0 0 y 0 0 不能写成 doublex y 0 0 浮点型变量 浮点数的输出使用printf 函数float和double对应的格式说明符为 f e 举例 includevoidmain floatf doubled f 33333 33333f d 33333 3333333333 printf f f nd f f d f 33333 332031d 33333 333333 有效数字位数是有限的 在可表示的有效位之外的数字被舍去 因此可能会产生误差 浮点数的舍入误差 浮点数的舍入误差举例 includevoidmain floata b a 123456 789e5 b a 20 printf a f nb f a b a 12345678848 000000b 12345678848 000000 浮点数的舍入误差 浮点数的舍入误差结果分析 a 123456 789e5 b a 20 a 20的理论值应该是 12345678920但是 一个实型变量能够保证的有效数字是7位 后面的数字将被舍去 是没有意义的 因此 最后得到b 12345678848 000000 应当避免一个很大的数和一个很小的数直接相加或相减 否则就会 丢失 较小的数 浮点数的溢出 上溢举例若某系统中的最大float值为3 4e38 进行如下操作得到结果下溢举例 假设 10是最小的指数 能够保留四位有效数字如果把数0 1234e 10除以10 将得到结果0 0123e 10 但损失了一位有效数字 floattoobig 3 4e38 100 0f printf toobig f toobig inf 无穷大 infinity 小结 C语言有多种数据类型 基本的数据类型包括两大类 整数类型浮点类型开发程序时 应当注意所需变量及其类型的选择 一般使用int和float表示数 用char表示字符 在使用变量的函数的可执行语句之前声明该变量 并为它选择有意义的名字 初始化变量使用的常量应当与变量的类型相匹配 作用范围和存储类别 简介 变量定义的完整格式 数据类型占据存储空间的大小取值范围存储类别在内存中持续的时间 生存期 在硬件中存放的位置其它属性作用范围可以被引用的程序部分 可见性 作用范围 程序中的所有标识符构成了名字空间 标识符的作用范围能够引用该标识符的程序部分 四种作用范围 文件作用范围函数作用范围程序块作用范围函数原型作用范围 作用范围 文件作用范围在函数外声明的标识符 可以在所有函数中被引用 包括 全局变量 函数定义 函数原型 inttotal intmax int int voidmain intlimit intmax intx inty 作用范围从声明的位置开始 到文件的末尾 作用范围 函数作用范围在函数体内定义的标识符 只能在函数体内被引用 包括 语句标号 voidmain loop gotoloop 作用范围 程序块作用范围在程序块内声明的变量 在程序块内被引用 包括 程序块内的变量 局部变量 函数的参数 intmax intx inty voidmain inta inta 作用范围从声明的位置开始 到程序块的右大括号 覆盖同名变量 内部变量 覆盖了 外部变量 作用范围 函数原型作用范围函数原型中的参数 intmax intx inty voidmain intmax intx inty 关于声明和定义 定义声明定义一个标识符 同时也是声明 对于变量 定义意味着创建 即为其分配内存 引用声明只是声明一个需要引用的标识符 存储类别 四种存储类别说明符autoregisterexternstatic两种存储时期自动存储时期autoregister静态存储时期externstatic 自动存储类别 自动存储程序执行到变量所在的程序块内时创建它 退出时销毁 不会被自动初始化 auto 自动变量 局部变量的缺省类别 程序块中声明的变量 函数的参数 register 寄存器变量 建议编译器把变量放进高速的寄存器 只适用于自动变量 autointa b registerintcount 1 静态存储类别 静态存储程序开始执行时创建 在程序执行期间 变量一直存在 自动被初始化 缺省初值 0或 0 static 静态变量 可以用于在程序块中定义的变量 退出程序块后依然存在 并保留值 但不改变其作用范围 即只能在所在的程序块内被使用 extern 外部变量 用来声明在 外部 定义的全局变量 仅用于声明变量 staticinta b externinttotal 案例分析 存储类别 读下面的程序 写出结果 voidtry inta autointb 10 staticintc 10 b c printf a d tb d tc d n a b c voidmain inti for i 1 i 3 i try i a 1b 11c 11a 2b 11c 12a 3b 11c 13 案例分析 存储类别 结果分析 c a b a b a b 1 2 3 FF00 2208 2206 2206 2204 2204 2202 a 1b 11c 11a 2b 11c 12a 3b 11c 13 C语言程序的内存映像 C语言程序的内存映像 案例分析 外部变量 includevoidmain externinta intc 3 printf a d n a externintc c 4 printf innerc d n c printf c d n c inta 1 intc 5 a 1innerc 4c 3 案例分析 作用范围与存储类别 includevoida void functionprototype voidb void functionprototype voidc void functionprototype intx 1 globalvariable voidmain intx 5 printf localxinouterscopeofmainis d n x startnewscope intx 7 printf localxininnerscopeofmainis d n x endnewscope printf nlocalxinouterscopeofmainis d n x 案例分析 作用范围与存储类别 a b c a b c printf localxinmainis d n x voida intx 25 initializedeachtimeaiscalled printf nlocalxinais dafterentering n x x printf localxinais dbeforeexiting n x 案例分析 作用范围与存储类别 voidb staticintx 50 staticinitializationonly firsttimebiscalled printf nlocalxinbis dafterentering n x x printf localxinbis dbeforeexiting n x voidc printf nglobalxis donenteringc n x x 10 printf globalxis donexitingc n x 案例分析 作用范围与存储类别 localxinouterscopeofmainis5localxininnerscopeofmainis7localxinouterscopeofmainis5localxinais25afterenteringalocalxinais26beforeexitingalocalxinbis50afterenteringblocalxinbis51beforeexitingbglobalxis1onenteringcglobalxis10onexitingc 案例分析 作用范围与存储类别 localxinais25afterenteringalocalxinais26beforeexitingalocalxinbis51afterenteringblocalxinbis52beforeexitingbglobalxis10onenteringcglobalxis100onexitingclocalxinmainis5 包含多个源文件的程序 每个函数的定义必须在一个文件内 不能被分割 全局变量可以被同一文件内的函数访问 如果需要被其他文件内的函数访问 则必

温馨提示

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

最新文档

评论

0/150

提交评论