C语言程序设计第02章-数据类型、运算符和表达式.ppt

上传人:max****ui 文档编号:8304408 上传时间:2020-03-28 格式:PPT 页数:102 大小:961.50KB
返回 下载 相关 举报
C语言程序设计第02章-数据类型、运算符和表达式.ppt_第1页
第1页 / 共102页
C语言程序设计第02章-数据类型、运算符和表达式.ppt_第2页
第2页 / 共102页
C语言程序设计第02章-数据类型、运算符和表达式.ppt_第3页
第3页 / 共102页
点击查看更多>>
资源描述
C语言程序设计 第2章基本数据类型 1 第2章基本数据类型 2 1C的数据类型2 2常量与变量2 3整型2 4字符型2 5浮点型 FloatingPoint 数据2 6字面值常量2 7变量赋初值 Initialization 2 8各类数值型数据间的混合运算小结 作业及实验 C语言程序设计 第2章基本数据类型 2 第2章基本数据类型 在实际问题中 可能会遇到各种各样的数据 这些数据都以某种特定的形式存在着 年龄 22整数工资 2381 85实数姓名 HusseinSadam字符串为了方便地表示这些不同种类的数据 C语言提供了丰富的数据类型 本章仅介绍基本数据类型 C语言程序设计 第2章基本数据类型 3 2 1C的数据类型 DataTypes 数据类型 C语言要求 必须为出现在程序中的所有数据指定数据类型 由于C语言把程序中的数据又分为变量和常量两大类 因此 不论是常量数据还是变量数据 都要指定数据类型 C语言根据什么把数据分为变量和常量 返回目录 C语言程序设计 第2章基本数据类型 4 2 2常量与变量 计算机处理的数据都要存储 存储就要有空间 若空间中的数据被可以修改 这个空间就称为变量空间 简称变量 若空间中的数据不能被修改 这个空间就称为常量空间 简称常量 空间的大小和数据的存储格式由数据类型来决定 若需要一个变量空间 一般需要通过定义来要求系统分配 定义时要指出变量 空间 的类型 并给出变量 空间 的名称 也称变量 空间 标识符 这个名称由用户指定 但要符合命名规则 通过变量名读写变量空间数据的方式称为直接引用方式 变量定义的格式为 数据类型标识符变量名 intm n 定义两个普通整型变量m和nfloatx 定义一个单精度浮点实型变量xcharch 定义一个字符型变量ch C语言程序设计 第2章基本数据类型 5 标识符 Identifier 标识符变量名 符号常量名 函数名 类型名 标识符命名规范由字母 数字 下划线 Underscore 组成第一个字符必须为字母或下划线C语言标识符是大小写敏感的关于标识符应注意以下方面 大小写敏感 sum Sum SUM是3个不同的标识符 关键字不能作为标识符 一般不要使用以下划线开头的标识符 ANSIC未规定标识符的最大长度 TC最多允许32个字符 应尽量做到 见名知意 C语言程序设计 第2章基本数据类型 6 标识符示例 正确的标识符student num1 SUM 1 2 3MyName myname my name错误的标识符room3 1包含了其他字符 减号 2men以数字开头long与关键字重复Mr Zhu包含了其他字符 小数点 C语言程序设计 第2章基本数据类型 7 常量 Constants 常量程序运行过程中 其值不能被改变的量例如 12 6 7 a 常量不仅能以字面常量的形式出现在程序中 还能以符号常量的形式出现在程序里 常量与变量举例inta floatb a 90 b 3 14 2 1 C语言程序设计 第2章基本数据类型 8 常量示例 例2 补 1 c definePRICE30 defineNUM12voidmain total NUM PRICE total2 84 PRICE2 printf total d total 不会被替换 total 12 30 常量 符号常量 C语言程序设计 第2章基本数据类型 9 符号常量 SymbolicConstants 概念符号常量 就是用符号 标识符 代表的一个常量 定义方式 define符号名常量值作用相当于把标识符用一个常量简单替换下来标识符是一个整体 不要试图拆开来替换在程序中 适当使用符号常量的好处 能起到 见名知意 的作用 比直接写个常量直观 能做到 一改全改 关于符号常量再强调以下几点 符号常量名习惯上常用大写 符号常量是常量而不是变量 不允许用赋值运算等改变它的值 C语言程序设计 第2章基本数据类型 10 符号常量 所谓符号常量 就是用符号代表的一个常量 符号常量的定义方式为 define符号名常量值 definePI3 14 defineSNO1001 L 2 PI 1 5 s PI 0 6 0 6 file1 c 如果在程序中某处定义了符号常量 以PI为例 从此往后 本文件中凡是出现PI的地方都代表3 14 PI可以和常量3 14一样参加运算 为什么要用符号来表示一个常量呢 这样做有什么好处 C语言程序设计 第2章基本数据类型 11 符号常量 在程序中 适当使用符号常量的好处在于 能起到 见名知意 的作用 比直接写个常量直观 能做到 一改全改 关于符号常量再强调以下几点 符号常量名习惯上常用大写 符号常量是常量而不是变量 不允许用赋值运算等改变它的值 definePI3 14 defineSNO1001 L 2 PI 1 5 s PI 0 6 0 6 C语言程序设计 第2章基本数据类型 12 变量 Variables 内存 memory 每台计算机都要有内存 程序只有装入内存中 才可能被执行 从逻辑上看 内存是由一个个的字节构成的 每个字节可以容纳8位二进制数 每个字节都有唯一的内存地址 内存 一个字节 34 一个二进制位 C语言程序设计 第2章基本数据类型 13 变量 所谓变量 就是在程序执行过程中 其值可以被改变的量 通俗地讲 变量就像高档饭店的房间 这体现在以下几个方面 对某个房间来说 一拨客人走后 另一拨客人可以进来 虽然房间不变 但里头吃饭的人在变 在C程序中 变量就是建立在内存里的房间 它用来存储不断变化的信息 存放在变量中的信息称为变量值 为了区分不同的房间 人们为每个房间起一个名字 比如百合厅 玫瑰厅等 每个变量也有变量名 房间有大小 档次之分 变量有类型之分 变量的数据类型决定了可以容纳的信息种类 也决定了所占单元的大小 每个房间有自己的房间号 而且房间名与房间号有对应关系 每个变量有自己的存储地址 而且变量名与存储地址有对应关系 总之 变量具有名字 类型 值 地址等属性 C语言程序设计 第2章基本数据类型 14 下面结合例子来理解变量的这些属性 includevoidmain inta a 10 a 50 a a 2 printf a d n a 在C程序中 变量都是先定义 后使用变量的定义格式 数据类型变量名 对于程序中定义的每个变量 TC会根据变量的数据类型 为它分配一定大小的存储单元 同时 也在变量名与变量的内存地址之间建立了对应关系 该赋值语句会把10存放到变量a中 于是a的值变为了10 变量 Variables 下面结合例子来理解变量的这些属性 C语言程序设计 第2章基本数据类型 15 程序举例2 1 定义变量 检验变量空间大小和地址 给变量赋值 并在显示器上显示变量的值 参见演示 include 包含printf的原型intmain intm n 定义两个整型变量floatx 定义一个单浮点型变量charch 定义一个字符型变量printf d d d n sizeof m sizeof x sizeof ch 按十进制输出变量值printf x x x x n 4 4 112ff7c 12ff78 12ff74 12ff7070 70 3 140000 Am 70 n 70 x 3 140000 ch A C语言程序设计 第2章基本数据类型 16 说明 主函数框架intmain 一组程序语句return 0 main是主函数名 相当于机器语言程序的入口地址 一对大括号是函数体 包括一组程序语句 简称语句 语句相当于机器语言指令 每条语句以分号结束 是注释部分 说明语句功能 便于理解 它不是程序语句 如果一个注释有多行 每行前都要加 例如 注释行也常常采用 的形式 一条语句可以同时定义几个变量 变量名彼此用逗号分隔 例如 intm n 一行可以书写几条语句 例如 intm n floatx charch 一条语句如果很长 可以分几行书写 但是变量名或函数名不能分行写 C语言程序设计 第2章基本数据类型 17 说明 变量初始化变量可以在定义的同时赋值 称为初始化 intm 70 初始化变量初始化与赋初值是不同的 初始化是在变量定义的同时赋值 赋初值是指变量定义之后的第一次赋值 初始化等于赋初值 但是赋初值不等于初始化 下面的例子是赋初值 但不是初始化 intm n m 70 给m赋初值n m 给n赋初值 C语言程序设计 第2章基本数据类型 18 说明 赋值操作符变量位于赋值操作符 左端 表示给变量赋值或写入 位于右端 表示从变量取值或读取 文件包含命令 include是文件包含命令 stdio h是库文件 含有包括系统函数printf在内的输入输出函数的原型 如果不包含这个命令而调用printf函数 系统视为非法 系统报错 printf undefined printf没有定义 C语言程序设计 第2章基本数据类型 19 格式输出函数printf 前面的例题中我们已多次用过这个函数 函数的一般形式 printf 格式控制字符串 输出表列 函数功能 对于任意类型数据按用户指定的数据格式输出到显示器屏幕上 返回值若成功 返回输出的字节数 包括换行符若失败 返回EOF EndofFile 参数说明 见下一页 C语言程序设计 第2章基本数据类型 20 函数printf的参数说明 格式控制字符串 由包括 格式说明 和 普通字符 组成 用于指定输出格式 格式说明 由 和 格式字符 组成 以说明输出数据的类型 形式 长度 小数位数等 普通字符 在输出时原样照印 在显示中起提示作用输出列表给出了需要输出的数据项可以是变量 常量 表达式 函数调用等输出数据项与 格式说明 在数量和类型上应该一一对应 printf 格式控制字符串 输出表列 C语言程序设计 第2章基本数据类型 21 函数printf的格式举例 printf a db d a b 输出结果 a 3b 4 格式字符串其一般形式为 标志 输出最小宽度 精度 长度 类型其格式符和意义如下所示 C语言程序设计 第2章基本数据类型 22 表2 1格式字符 C语言程序设计 第2章基本数据类型 23 表2 1格式字符 C语言程序设计 第2章基本数据类型 24 函数printf格式举例说明 1 d格式符 例2 补 8 c 作用 按整型数据的实际长度输出 基本格式 d格式一 mdm为指定的输出字段的宽度 若数据的位数小于m 则左端补以空格 若数据的位数大于 则按实际位数输出 例1 a 123 b 12345 printf 4d 4d a b 则输出结果为123 12345格式二 ld输出长整型数据 例2 若longa 135790 printf ld a 则输出为 135790 C语言程序设计 第2章基本数据类型 25 函数printf格式举例说明 2 o格式符 例2 补 8 c 作用 以八进制数形式输出整数 基本格式 o说明 由于将内存中的各位值 0或1 按八进制形式输出 则输出的数值不带符号 将符号位也一起输出 例1 inta 1 printf d o a a 1在内存中的形式 补码 为 1111111111111111输出结果 1 177777不会输出带负号的八进制整数 格式一 lo输出对长整数 long型 格式二 mo指定输出数据的字段宽度 例2 inta 1 printf 8o a 输出结果 177777 C语言程序设计 第2章基本数据类型 26 函数printf格式举例说明 3 x格式符 例2 补 9 c 作用 以十六进制数形式输出整数 基本格式 x不会出现负的十六进制数 原理同上 例1 inta 1 printf x o d a a a 输出结果 ffff 177777 1格式一 lx输出长整型数 如longa 2000 printf lx a 格式二 mx指定输出字段的宽度 如 12x C语言程序设计 第2章基本数据类型 27 函数printf格式举例说明 4 u格式符 例2 补 8 c 作用 用来以十进制形式输出无符号 unsigned型 整数 基本格式 u例1 inta 567 printf u a 输出结果567 main 例4 4 c unsignedinta 65535 intb 2 printf a d o x u n a a a a printf b d o x u n b b b b 运行结果为 a 1 177777 ffff 65535b 2 177776 fffe 65534 说明 一个有符号整数 int型 也可以用 u格式输出 一个unsigned型数据也可以用 d格式输出 按相互赋值的规则处理unsigned型数据也可用 o或 x格式输出 C语言程序设计 第2章基本数据类型 28 整型数据的输出小结 整型数据可以有以下的输出格式供选择 按有符号的十进制形式输出整型数据 使用格式说明 d 按无符号的八进制形式输出整型数据 使用格式说明 o 另外 通过在 与格式字符之间加上修饰符l 就能按相应形式输出长整型数据 例如 按无符号的十进制形式输出整型数据 使用格式说明 u 按无符号的十六进制形式输出整型数据 使用格式说明 x 按有符号的十进制形式输出长整型数据 使用格式说明 ld 按无符号的十六进制形式输出长整型数据 使用格式说明 lx C语言程序设计 第2章基本数据类型 29 函数printf格式举例说明 5 c格式符 例2 补 10 1 c 作用 用来输出一个字符 基本格式 c例1 charc a printf c c 输出结果 a说明 c 中的c是格式符 逗号右边的c是变量名 不要混 一个整数 只要它的值在0 255范围内 也可以用字符形式输出 输出前 系统将该整数作为ASCII码转换成相应字符 反之 一个字符数据也可以用整数形式输出 格式一 mc指定输出字数宽度例2 charc B printf A 3c c 输出 A a main 字符数据的输出 charc a inti 97 printf c d n c c printf c d n i i 运行结果为 a 97a 97 C语言程序设计 第2章基本数据类型 30 函数printf格式举例说明 6 s格式符 例2 补 10 2 c 作用 用来输出一个字符串 基本格式 s例1 printf s china 输出结果 china 没有双引号 格式一 ms输出的字符串占 列 若字符串本身长度大于m 则突破 的限制 将字符串全部输出 若字符串本身长度小于m 则左补空格 格式二 ms如果串长小于 则在 列范围内 字符串向左靠 右补空格 格式三 m ns输出占 列 但只取字符串中左端n个字符 这n个字符输出在 列的右侧 左补空格 格式四 m ns在 列范围的左侧输出字符串左端的n个字符 右补空格 如果n 则 自动取n值 即保证n个字符正常输出 main 例4 5 2 c字符串的输出 printf 3s 7 2s 4s 5 3s n china china china china 输出结果 china ch chin chi C语言程序设计 第2章基本数据类型 31 字符型数据的输出小结 输出单个字符 使用格式说明 c 字符型数据输出有两种方式 输出字符串 使用格式说明 s C语言程序设计 第2章基本数据类型 32 函数printf格式举例说明 7 f格式符 例2 补 11 c 作用 用来以小数形式输出实数 包括单 双精度 基本格式 f不指定字段宽度 由系统自动指定 使整数部分全部如数输出 并输出6位小数 注意 并非全部数字都是有效数字 单精度实数的有效位数一般为7位 格式一 nf指定输出的数据共占 列 其中有n位小数 如果数值长度小于 则左端补空格 格式二 nf与 nf基本相同 只是使输出的数值向左端靠 右端补空格 C语言程序设计 第2章基本数据类型 33 函数printf格式举例说明 7 f格式符应用举例 例2 补 11 1 c输出实数时有效位数 main floatx y x 111111 111 y 222222 222 printf f x y 输出结果 333333 328125 例2 补 11 2 c输出双精度数有效位数 main doublex y x 1111111111111 111111111 y 2222222222222 222222222 printf f x y 输出结果 3333333333333 333010 例2 补 11 3 c输出实数时指定小数位数 main floatf 123 456 printf f 10f 10 2f 2f 10 2f n f f f f f 输出结果 123 456001123 456001123 46123 46123 46 C语言程序设计 第2章基本数据类型 34 函数printf格式举例说明 7 e格式符 例2 补 12 c 作用 按规范化指数形式 小数点前有且只有1位非零数字 输出实数 基本格式 e说明 不指定输出数据所占的宽度和数字部分的小数位数 有的c编译系统自动指定6位小数 指数部分占5位 如e 002 其中 e 占1位 指数符号占1位 指数占3位 printf e 123 456 输出 1 234560e 002 不同系统略有不同 格式一 m ne和 m ne n和 字符含义与前相同 此处n指拟输出的数据的小数部分 又称尾数 的小数位数 例如 f 123 456 printf e 10e 10 2e 2e 10 2e f f f f f 结果 1 234560e 0021 234560e 0021 23e 0021 23e 0021 23e 002 C语言程序设计 第2章基本数据类型 35 函数printf格式举例说明 9 g格式符 作用 用来输出实数 它根据数值的大小 自动选f格式或e格式中输出宽度较小的一种 且不输出无意义的零 基本格式 g例1 若f 123 468 则printf f e g f f f 输出 123 4680001 234680e 002123 46810列13列10列说明 用 f格式输出占10列 用 e格式输出占13列 用 g格式时 自动从上面两种格式中选择短者 故占10列 按 f格式输出 最后3个小数位 0 为无意义的0 不输出 因此输出123 468 然后右补3个空格 g格式用得较少 C语言程序设计 第2章基本数据类型 36 实型数据的输出小结 实型数据的输出常采用两种方式 按十进制小数形式 使用格式说明 f 这种输出方式除输出整数部分外 还会输出6位小数 按规范化的指数形式 使用格式说明 e 这种输出方式会按规范化的指数形式输出 关于实型数据输出强调以下几点 在输出单精度数据和双精度数据时 使用相同的格式说明 在输出的数字中 并非所有的数字都是有效数字 系统在输出单精度数据时 一般前6 7位是有效数字 双精度数据是15 16位 可以用 m nf指定数据的最小输出宽度以及小数部分的位数 可以用修饰符 如 m nf 实现左对齐的效果 C语言程序设计 第2章基本数据类型 37 格式输出函数printf小结 上面介绍了主要的格式字符 关于格式输出再强调以下几点 转义字符可以出现在格式控制串中 例如 printf nabc t d i 在格式控制串中 除格式说明之外的字符均作为普通字符输出 例如 printf c cf fs s A 32 3 14 BYE 在格式控制串中 要输出字符 必须用 表示 例如 printf 2f 5 126 会输出5 13 要根据被输出表达式的数据类型以及希望的格式 选用合适的格式说明 C语言程序设计 第2章基本数据类型 38 程序中常见错误 变量必须先定义或声明 后使用 否则就是一个错误 出现这种错误的原因大多是拼写有误 例如 inttemp tmp 5 把temp错写为tmp系统报错 tmp undeclaredidentifier tmp是没有声明的标识符即名称 如果变量没有赋初值 它的值是一个不可预测的值 例如 inttemp printf d temp 变量a没有赋初值 结果是一个不可预测的值系统警告 localvariable temp usedwithouthavingbeeninitialized 局部变量temp没有初值 C语言程序设计 第2章基本数据类型 39 程序中常见错误 语句之后丢失分号 例如 inta b 丢失分号 正确的书写是 inta b a 3 b 4 系统报错 missing beforeidentifier a 标识符a之前缺少分号 而且系统的错误标志指向的是第2条语句 而不是第1条语句 这是为什么呢 因为语句可以换行 定义语句 inta b 可以分两行书写 其中的分号可以单独出现在第2行 所以系统是在语句 a 3 之前还没有遇到分号时才报错 在格式控制字符串之后丢失逗号 printf d n 正确的书写是 printf d n 系统报错 missing beforen n之前丢失右括号 系统按最简单的形式处理 C语言程序设计 第2章基本数据类型 40 程序中常见错误 整型数和浮点型数的存储格式不同 整型数不能按浮点格式显示 反之亦然 例如 inta 12 floatf 12 5 printf a f n a 错 整型数不能按浮点格式显示printf f d n f 错 浮点型数不能按整型格式显示系统没有报错 但是显示结果都是0 对程序语句中出现的中文输入方式下的逗号 分号 小括号等分隔符 系统都要报错 unknowncharacter 0 xa3 返回目录 C语言程序设计 第2章基本数据类型 41 2 3整型 Integer 数据 数制和数制之间的转换整型常量的表示方法整型变量整型数据在内存中的存放形式整型变量的类型整型变量的定义整型数据的溢出整型常量的类型 C语言程序设计 第2章基本数据类型 42 整型常量的表示方法 整型常量可以以三种形式出现在C程序中 十进制 Decimal 例如 123 456 0八进制 Octal 为避免与十进制混淆 八进制以0开头 不得含有8或9例如 0123 8 1 82 2 81 3 80 83 10 0456错例 0138 0912十六进制 Hexadecimal 以0 x或0X开头 用a f或A F表示10 15例如 0 x123 16 1 162 2 161 3 160 291 10 0X45 0 x3AB 0 xabc C语言程序设计 第2章基本数据类型 43 整型变量的表示方法 首先 定义整型变量 其形式为 int变量名 例如inti TC系统会在内存中为变量I分配2字节的存储单元 共计16个二进制位 其次 用赋值语句把整型数据存放到变量i中 例如 i 10 可以把10存放到变量i中 也就是把10存放到变量i的2字节的存储单元中 再次 在变量中有值以后 我们可以用 d格式符来输出整型变量值 例如 printf d i 会输出10 内存 201 202 203 204 205 206 207 10 整型数据10在存储单元中是如何存放的呢 C语言程序设计 第2章基本数据类型 44 整型数据在内存中的存放方式 整型数据在存储单元中是如何存放的呢 即 如何用16位二进制数来表示整型数据呢 分两种情况 1 若数据 0 数据直接以其二进制形式存放由于10的二进制形式是1010 所以10的存放情况如图所示 如果把两个字节画在同一行上 就有 C语言程序设计 第2章基本数据类型 45 整型数据在内存中的存放方式 2 若数据 0 数据以其补码形式存放 求负数的补码的方法 将负数的绝对值的二进制形式按位取反 再加1由于 10的补码为1111111111110110 所以 10的存放情况如图所示 C语言程序设计 第2章基本数据类型 46 补码举例 举例inti 50 int类型占2字节 50的原码 50的补码 补码 Complement 正数 与原码一致 首位为0负数 绝对值取反加一 首位为1零 各位全为0 C语言程序设计 第2章基本数据类型 47 整型数据在内存中的存放方式 注意 在10的存储表示中 其最左面的一位为0 在 10的存储表示中 其最左面的一位为1 10的存储表示 10的存储表示 实际上 在整数的16位中 最左面的一位是表示符号的 也称为符号位 该位为0 表示数据为正 该位为1 表示数据为负 这样一来 一个int型变量值最大为 即为215 1 32767 类似地 一个int型变量值最小为 即为 215 32768 C语言程序设计 第2章基本数据类型 48 整型变量的分类 在TurboC中 一个int型变量值的范围为 32768 32767 即 一个int型变量仅能存放这个范围之间的整数 但在有些场合 这个范围太小 无法容纳某些整型数据 例如 全国人口数 汽车数等 另外 在有些情况下 这个范围又显得过大 造成内存的浪费 例如年龄 月份等 于是 C语言又对整型变量作了进一步的分类 按占用存储空间的大小细分为三种 基本整型int 如intsum 短整型short int 如shortage 长整型long int 如longpopul C语言程序设计 第2章基本数据类型 49 整数的长度 整数的类型与长度short 占2字节 16bit取值范围 32768 32767long 占4字节 32bit取值范围 231 231 1 int 占2或4字节 16或32bit取值范围 32768 32767 16bit 若需要精确的长度 可选用short或long各类型的变量可以容纳的整数范围取决于为各类型的变量所分配的存储单元的大小 ANSIC并未具体规定各类整型变量的存储单元的大小 具体由各厂家自行决定 但要符合以下原则 长整型的存储单元 基本整型的存储单元 短整型的存储单元一般 2Bytes short int long 4Bytes例如 BorlandC3 1 int长度为2BytesMicrosoftC int长度为4Bytes C语言程序设计 第2章基本数据类型 50 整型变量的定义 Definition 定义形式 signed inta b unsignedc signed longd unsignedshorte 变量的定义一般放在一个函数开头的声明部分 关于变量定义的具体内容在以后相关章节里详细介绍有符号数二进制补码表示 首位为符号位指定signed或缺省情况 即为有符号数无符号数没有符号位 只能表示非负数无符号数类型必须指定为unsigned若把负数赋值给无符号数 则把该负数的补码当作无符号数进行处理 为什么需要无符号数 程序举例 C语言程序设计 第2章基本数据类型 51 整型变量的定义与使用举例 voidmain inta 定义有符号基本整型变量a unsignedb 定义无符号基本整型变量b longc 定义有符号长整型变量c a 23 a的值为 23 b 45 b的值为45 c a b c的值为22 C语言程序设计 第2章基本数据类型 52 无符号整型变量 在有些应用场合 涉及的整数均为非负整数 如学号 年龄 人口数等 在这种情况下 可以使用无符号整型变量 无符号整型变量也有三种类型 符号基本整型 unsigned int 例unsignedstu no 无符号短整型 unsignedshort int 例unsignedshortage 无符号长整型 unsignedlong int 例unsignedlongpopulation 另外 无符号整型与对应的有符号整型所需存储单元大小相同 C语言程序设计 第2章基本数据类型 53 无符号整型变量和有符号整型变量的区别 有符号整型变量b的存储单元中最左一位代表符号 0为正 1为负 无符号变量a只能表示非负整数 下面以如下定义的变量a b为例来加以说明 unsignedinta intb 无符号整型变量a的存储单元中所有二进制位都用来存放数据本身 并无符号位 最大值 216 1 65535 最小值 0 最大值 215 1 32767 最小值 215 32768 一般地说 无符号整型变量所能表示的最大值比有符号整型变量所能表示的最大值扩大一倍 有符号整型变量b正负均可 a的取值范围为0 65535 b的取值范围为 32768 32767 符号位 C语言程序设计 第2章基本数据类型 54 有符号数与无符号数举例 例2 补 2 cvoidmain inti unsignedj i j 50 i i 2 25 j j 2 32743 C语言程序设计 第2章基本数据类型 55 整型数据的取值范围 C语言程序设计 第2章基本数据类型 56 整型数据的溢出 Overflow 溢出数据超出了变量能够存储的范围 造成数据丢失或数值改变等 例2 补 3 cvoidmain inta 32767 a 32768 32767的补码 32768的补码 C语言程序设计 第2章基本数据类型 57 整型常量的类型 常量的类型后缀 Suffix l L表示常量是一个长整型u U表示常量是一个无符号整型数两种后缀可以一起使用举例123l长整型常数123456U无符号整型常数456789ul无符号长整型常数789101Lu无符号长整型常数101 C语言程序设计 第2章基本数据类型 58 整型常量使用中的类型问题 对整型变量赋值常量的值不要超过变量的取值范围直接使用常量带有l L u U等后缀的整型常量一般用于函数调用不带有后缀的整型常量的类型 是根据其数值大小所处的范围来确定的 C语言程序设计 第2章基本数据类型 59 整型变量总结 下面列出了C语言中提供的六种整数类型 基本整型 int短整型 short int 长整型 long int 无符号基本整型 unsigned int 无符号短整型 unsignedshort int 无符号长整型 unsignedlong int 虽然ANSIC并未统一规定各类整型变量的存储单元所占字节数 但每个C系统都有自己的明确规定 TurboC系统的规定见P43表3 1 在定义整型变量时 应根据可能的取值范围来确定变量的类型 有符号整型 C语言程序设计 第2章基本数据类型 60 编写程序2 2 将一个整数在显示器上逆序显示 参见演示 基本方法 反复使用整型的基本操作 整除和求余 步骤 用10对该整数求余 结果是该整数在十进制下的个位数 然后显示 用10对该整数进行整除 结果是该整数在十进制下的十位数降为个位数 然后求余显示 用100对该整数进行整除 结果是该整数在十进制下的百位数降为个位数 然后求余显示 依次类推 C语言程序设计 第2章基本数据类型 61 程序2 2将3位整数按逆序输出 参见演示 includeintmain inti n 578 re i n 10 步骤 求n的个位数 i 8printf d i re n 10 步骤 降位 re 57i re 10 求n的个位数 i 7printf d i re n 100 步骤 降位 re 5i re 10 求n的个位数 i 5printf d n i return 0 875 C语言程序设计 第2章基本数据类型 62 说明 整型常量前加符号0 x 表示十六进制数 包括数字0 9和a f A F 其中a f表示10 15 例如0 x12fe 表示12fe是十六进制整数 整型常量前加符号0 表示八进制数 包括数字0 7 例如0127 表示127是八进制整数 在整型常量后面加符号L或U l或u 表示长整型或无符号整型 例如52388L表示长整数 40000U表示无符号整数 如果编译系统中普通整型 int 和长整型 long 的长度相同 后缀L就可以省去 但是加上后缀 有利于程序 移植 C语言程序设计 第2章基本数据类型 63 编写程序2 3 根据数值的特征 设计变量名称 参见演示 include 包含printf的声明intmain intA HexA OctalA 普通整型变量longLongA LongHexA 长整型变量unsignedUnsignedA 无符号整型变量A 12 普通整数HexA 0 x12 十六进制整数OctalA 012 八进制整数printf d x o n A HexA OctalA 显示十进制十六进制和八进制printf d d d n A HexA OctalA 以十进制显示LongA 52388L 长整数LongHexA 0 x4fea2L 长整型十六进制数UnsignedA 40000U 无符号整数printf Ld Lx d n LongA LongHexA UnsignedA return 0 12 12 1212 18 1052388 4fea2 400002 3 返回目录 C语言程序设计 第2章基本数据类型 64 2 4字符型 Character 数据 字符型常量字符型变量字符型数据在内存中的存放形式字符型数据的使用方法字符串常量 C语言程序设计 第2章基本数据类型 65 字符型 Character 数据 字符类型是C语言中的基本数据类型 字符数据包括大小写字母 数字 标点符号及特殊字符 在字处理 文本输入输出和数据通信中 应用最广泛的是128个标准字符 ASCII字符集 标准字符分为可见字符和控制字符 控制字符用于数据通信和设备控制 例如 换行 响铃 128个标准字符和数值0至127一一对应 这种对应使字符型数据能以一个字节的整数形式存储 只用7位 27 128 后者称为字符的代码 常见ASCII字符代码见表2 3 C语言程序设计 第2章基本数据类型 66 表2 3ASCII代码字符集 注 表示空格 C语言程序设计 第2章基本数据类型 67 ASCII代码字符集的特点 所有在程序中可以使用的字符 每个字符都有一个编码 称为ASCII码 通过分析 不难发现ASCII码有以下规律 相邻字母或数字的ASCII码差1对应大小写字母的ASCII码差32 C语言程序设计 第2章基本数据类型 68 编写程序2 4 测试字符和字符代码 大写字符和小写的关系 参见演示 includeintmain charch1 ch2 ch1 A 或ch1 65 字符型常量也可以用代码表示ch2 ch1 32 ch2的值为小写字符aprintf c c n ch1 ch2 显示字符printf d d n ch1 ch2 显示字符代码ch1 ch1 1 ch1的值改为Bch2 ch2 1 ch2的值改为bprintf c c n ch1 ch2 显示字符return 0 A a65 97B b C语言程序设计 第2章基本数据类型 69 字符型常量 与整型 实型类型数据一样 字符数据也分为字符常量和字符变量 字符常量是用单引号括起来的单个字符 举例 a A 1 D n 101 错例 abc 我 需要注意的是 要用字符 构成字符常量 不能写为 应写作 要用字符 构成字符常量 不能写为 应写作 C语言程序设计 第2章基本数据类型 70 字符变量 首先 定义字符型变量 其形式为 char变量名 例如 charc TC系统会在内存中为每个字符变量分配1字节的存储单元 其次 用赋值语句把字符型数据存放到变量c中 例如 c A 可把字符A存放到变量c中存储单元中实际存放的是字符A的ASCII码65 且以二进制形式 再次 在变量中有值以后 我们可以用 c格式符来输出字符型变量值例如 printf c c 会输出A 它会按c中存的ASCII码输出相应字符 内存 201 202 203 204 205 206 207 A c 字符变量中只能存放一个字符 C语言程序设计 第2章基本数据类型 71 字符型数据在内存中的存放形式 一个字符型数据占一个字节的空间字符型数据以其ASCII码形式存放字符型数据的存放形式与只占一个字节长度的整型数据完全相同 C语言程序设计 第2章基本数据类型 72 字符数据与整型数据可以通用 由于字符数据在内存中以ASCII码存放 而且其存储形式和整数的存储形式类似 所以C语言中字符数据与整型数据之间可以通用 这体现在三方面 1 字符数据可以参加算术运算例如 100 A 该式的值为100 65 352 可以把整数赋值给字符变量例如 c 66 3 字符数据既能按字符形式输出 也能按整数形式输出 当以字符形式输出时 使用 c格式符 系统输出的是存储单元中的ASCII码所对应的字符 printf c c 当以整数形式输出时 使用 d格式符 直接将ASCII码作为整数输出 printf d c c C语言程序设计 第2章基本数据类型 73 字符型数据的使用方法 可以把字符型数据视作一种长度为1字节的整型数据处理当使用字符型数据时 与使用这个字符的ASCII码 一个8位整数 是完全一样的字符型数据的用法与整型数据完全一样 包括运算 赋值 输入 输出等字符型数据使用过程中 同样需要注意溢出 符号等问题是字符还是整数 只有在输出时才有意义 C语言程序设计 第2章基本数据类型 74 字符型数据使用举例2 补 5 c voidmain charc inti j c 97 c a i c 20 i 117 j 2 j 50 printf c d n c c a 97 C语言程序设计 第2章基本数据类型 75 字符型数据使用举例2 补 6 c includevoidmain charab ab A printf c ab printf d ab ab ab 32 printf c ab printf d ab includevoidmain charc1 c2 c1 a c2 b c1 c1 32 c2 c2 32 printf c c c1 c2 C语言程序设计 第2章基本数据类型 76 字符型变量的符号 字符型变量与整型变量一样 也分为有符号数与无符号数无符号字符unsignedcharc 举例 表示一个班级的人数 256 赋值和使用中需要注意的问题 与整型变量相同 C语言程序设计 第2章基本数据类型 77 字符串 String 常量 表示形式一对双引号括起来的字符序列引号内可以包括0个 1个或多个字符字符序列中的特殊字符用转义字符表示举例 abc a 我 举例 12 4 C HOME 存放方式输出形式可用printf CHINA 或者printf s CHINA 来输出字符串 C语言程序设计 第2章基本数据类型 78 字符串在内存中的存放方式 在内存中每个字符按顺序存放字符串结尾有一个空字符 ASCII 0 0 作为字符串结束标志字符串结束标志 0 是不能显示的 在字符串常量中 也不用显式写出来举例 TEST a C语言程序设计 第2章基本数据类型 79 字符常量和字符串常量的区别 1 从形式上看 字符常量是单个字符用单撇号括起来 例如 A n 0 字符串常量是若干个字符用双撇号括起来 例如 USA A 2 从存储上看 为保存一个字符常量只需1字节的内存 为保存字符串常量 除了要为串中的每个字符分配1字节外 还要多分配一个字节用来存放字符串结束符即 0 例如 为保存 CHINA 需要6个字节的内存 设置字符串结束符的目的在于 方便函数判断字符串是否结束 例如 在用printf CHINA 输出时 是一个字符一个字符的输出 直到遇到 0 为止 C语言程序设计 第2章基本数据类型 80 字符常量和字符串常量的区别 3 字符变量可以用来保存字符常量的值 例如 charc c A 但是 字符变量不能用来保存字符串常量 例如 c A 是非法的 字符串常量可以保存在字符数组中4 字符 可以直接出现在字符串中 例如 I m 是合法的字符串 但是 字符 不能直接出现在字符串中 而应以 的形式出现在字符串中 例如 不能写为 abc d 应写为 abc d C语言程序设计 第2章基本数据类型 81 转义字符 理论上讲 ASCII码表中字符都可出现在C程序中 字母 数字等字符可以直接从键盘上输入 图形字符 控制字符 如换行 回车 换页 响铃 换页 以及一些特殊字符 如单引号用作字符常量界限符 无法直接从键盘上输入 在程序中如何表示它们呢 转义字符 把反斜杠 后面的字符转换为别的意义C语言用以 开头的字符序列来表示任意特殊字符例如 n表示 换行符 ASCII码为10 b表示 退格符 ASCII码为8 常见的转义字符如表2 5所示 C语言程序设计 第2章基本数据类型 82 表2 5常用转义字符 C语言程序设计 第2章基本数据类型 83 转义字符 转义字符的表示 八进制格式 ddd ddd表示字符的ASCII码1到3位8进制形式例如 101代表ASCII码为65 101 8的A 十六进制格式 xhh hh表示字符的ASCII码1到2位16进制形式例如 x41代表ASCII码为65 41 16的A 举例 n t 123 x3A 例2 补 4 c includevoidmain printf abc tde rf tg n printf h ti b bjk n f gdeh jk C语言程序设计 第2章基本数据类型 84 编写程序2 5 检测字符常量的多种表示法 参见演示 includeintmain charch1 ch2 ch3 ch4 ch5 ch6 ch1 N 字符常量Nch2 78 78是字符常量N的十进制代码ch3 0 x4e 0 x4e是字符常量N的十六进制代码ch4 0116 0116是字符常量N的八进制代码ch5 x4e x4e 表示十六进制整数代表的字符常量Nch6 116 116 是八进制整数代表的字符常量Nprintf c t c t c t n ch1 ch2 ch3 t表示按水平制表格式输出字符printf a a代表一声铃响printf c t c t c t n ch4 ch5 ch6 printf a return 0 NNNNNN 返回目录 C语言程序设计 第2章基本数据类型 85 2 5浮点型 FloatingPoint 数据 浮点型常量的表示方法浮点型变量浮点型数据在内存中的存放形式浮点型变量的类型浮点型数据的舍入误差浮点型常数的类型举例 C语言程序设计 第2章基本数据类型 86 2 5浮点型 FloatingPoint 数据 首先来了解一下关于有效数字的概念 一个数的有效数字是指从该数最左边不为0的数字位起至最右边不为0的数字位止之间的每一个数字位 而这些数字位的个数称为该数的有效数字位数 另外 若一个数带有指数部分 它不影响该数的有效数字位数 C语言程序设计 第2章基本数据类型 87 浮点型常量的表示方法 十进制小数形式由符号 数字和小数点 必须 组成整数和小数部分都可省略 但不能同时省略举例 12 3 123 123 0 0 0 0指数形式由整数 或小数 e 或E 整数顺序组成e或E之前必须有数字 之后必须是整数举例 123 4e 5表示123 4 10 5错例 e1 12e 1 2e3 4 e5 e 1E一个实数可以用多种指数形式表示出来 123 45可表示为 1234 5e 1 123 45e0 1 2345e2 0 12345e3 C语言程序设计 第2章基本数据类型 88 规范化指数形式 规范化指数形式类似于 科学计数法 e或E之前的小数中 小数点前面有且仅有一个非零数字举例 123 456规范化形式 1 23456e2 1 23456E 002非规范化形式 123 456 12 3456e1 12345 6e 2 0 123456e3 12345600e 5 C语言程序设计 第2章基本数据类型 89 浮点型变量 定义实型变量形式 float变量名 例如floatf TC系统在内存中为它分配4字节的存储单元 共计32个比特 用赋值语句把实型数据存放到变量f中 例如f 123 456 可以把123 456存放到变量f中 在变量中有值以后 我们可以用 f e格式符来输出实型变量值可按小数形式或按规范化的指数形式输出实型变量值 例 printf f f 输出123 456000printf e f 输出1 23456e 02 内存 201 202 203 204 205 206 207 123 456 实型数据在存储单元中是如何存放的呢 C语言程序设计 第2章基本数据类型 90 浮点型数据在内存中的存放方式 二进制规范化指数形式小数部分长度与能表示的精度有关指数部分长度与能表示的数值范围有关ANSIC标准并没有规定每一部分各占多少二进制位 显然 在总位数一定的前提下 小数部分占的位数越多 则可表示数的更多有效数字位 数值的范围就越小 反之 指数部分占的位数越多 则数值的范围就越大 可表示的有效数字位就更少 C语言程序设计 第2章基本数据类型 91 几个特殊的数 无穷大 Infinition Inf举例 1 0 0 0 Inf举例 1 0 0 0NaN NotaNumber NaN举例 sqrt 1 开平方 NaN举例 sqrt 1 零 Zero 浮点数用特殊的形式表示零 C语言程序设计 第2章基本数据类型 92 浮点型变量的类型 为适应不同应用场合 C语言把实型变量分类为 单精度float例floatx 双精度double例doubley 长双精度longdouble例longdoublez TurboC中各类实型变量长度和取值范围的规定 C语言程序设计 第2章基本数据类型 93 浮点型数据的舍入误差 由于浮点型变量能够表示的有效数字有限 将有效位以外的数字舍去造成误差例如 float型变量的有效数字位数为6 7 这意味着float型变量最多只保证接收7位有效数字 因此 若定义floata a 123456 789 那么 由于float型只能接收7位有效数字 所以最后两位将被舍去 这样就会造成舍入误差 例2 补 7 Cfloata 123456 789e5 b b a 20 b 12345678920 printf a f nb f n a b 思考 1 0 3 3 运行结果 a 12345678848 000000b 12345678848 000000 C语言程序设计 第2章基本数据类型 94 浮点型常量的类型 通常 无后缀的浮点型常量被认为是双精度型的 例如 floata a 1 23 0 456 系统会把1 23和0 456作为双精度数据存储和运算 得到一个双精度的乘积 然后取前7位有效数字赋给变量a 这样做的好处是提高了精度 但也降低了运算速度类型后缀加f F 表示把某实型常量按单精度型浮点数处理例如 1 23f 10 836F 365f和365 等价 对浮点型变量赋值一个浮点型常量可以赋值给任何类型的浮点型变量 根据变量类型截取常量的相应有效数字例如 floata doubleb a 123456 789 接收7位 b 123456 789 9位全接收 注意防止出现溢出 C语言程序设计 第2章基本数据类型 95 编写程序2 6 检测实型变量的各种输出格式 includeintmain doublex 3 14159E4 或doublex 3 14159 104printf f n x 按小数形式输出printf g n x 按小数形式输出 省去无效0printf e n x 按指数形式输出return 0 31415 90000031415 93 141590e 004 C语言程序设计 第2章基本数据类型 96 编写程序2 7 检测实型常量的表示法 includeintmain floatx1 314 159F 单精度doublex2 314 159 双精度longdoublex3 3 14159E2L 长精度 指数格式printf g n x1 按小数形式输出 舍去无效0printf e n x2 按指数形式输出printf f n x3 按小数形式输出 小数6位return 0 314 1593 141590e 002314 159000 返回目录 C语言程序设计 第2章基本数据类型 97 2 6字面值常量 若空间中数据不能被修改 该空间称常量空间 简称常量 最常使用的常量是字面值常量 简称字面量 字面值常量的特点 它由常量值和表示该
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!