数据类型、运算符.ppt_第1页
数据类型、运算符.ppt_第2页
数据类型、运算符.ppt_第3页
数据类型、运算符.ppt_第4页
数据类型、运算符.ppt_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

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

文档简介

第三章数据类型 运算符与表达式 Types operatorsandExpressions 3 1数据与数据类型 3 1 1什么是数据和数据类型数据是程序加工 处理的对象 也是加工的结果 数据类型是程序语言中具有同样的性质的数据集合 整型int integer的缩写 字符型char character的缩写 单精度型float基本类型实型 浮点型 双精度型double数组类数据类型构造类结构体struct共用体union枚举类enum指针类空类型void 3 2C语言的基本数据类型及其表示 3 2 1常量与变量1 常量 在程序运行中其值不能被改变的量 常量区分为不同类型 如123 456 整型常量 a A b 1 0 字符常量123 0 3 5 实型常量 123 A 字符串常量 例3 1已知圆半径r 求圆面积和周长的值 define 3 14159main intarea perimeter intr r 3 area r r perimeter 2 r printf area d n area printf perimeter d n perimeter 符号PI代替常量3 14159 称为符号常量符号常量的定义是在编译预处理语句里进行的 称为宏定义符号常量一般用大写符号常量在其作用域内值不能改变 不能被赋值 PI 35 符号常量在编译时被常量替换 2 符号常量 用一个标识符代表一个常量 提高程序的可修改性和灵活性 定义格式 define标识符常量 3 变量 1 变量 其值可以改变的量 在内存中占据存储单元 在该单元中存放变量的值 必须先定义 后使用 程序里的一个变量可以看成是 个存储数据的容器 它的功能就是可以存储数据 变量的定义格式 类型说明符变量名表 定义的变量名称最好和存放数据的意义对应 例 inta b c 说明a b c为整型变量 charcc 说明cc为字符变量 doublex y 说明x y为双精度实型变量 definePRICE30main intnum total num 3 total num PRICE printf total d n total num 4 total num PRICE printf total d n total 90 num total 对变量的基本操作有两个 1 赋值 向变量中存人数据值 2 取值 取得变量当前值 以便在程序运行过程中使用 3 4 120 同一个变量一旦重新赋值 原来的值就不再存在 3 2 2整型数据及其表示 1 整型类型 取值范围 2 整型常量 十进制 123 456 0八进制 以0开头 零 01 0120123 123 8 83 10十六进制 以0 x开头 0 x123 123 16 291 100 xF f 16 15 10长整型常量 123L 456l 二进制位 bit 计算机中最小的存储信息单位字节 Byte 八个二进制位组成的存储单元 是计算机中最小存取信息单位机器字 word 计算机中存取信息的基本单位 不同的计算机系统它的长度是不同的 补充 数的存放形式 补码 1 正数不变2 负数各位取反后 1 符号位置1 34 10 00100010 2 34 10 1011101 2 1 11011110 2 4bytes数据x补码 4294967295 x 1 34 10补码 4294967295 34 1 10 4294967262 10 ffffffdf 16 11111111111111111111111111011110 2 2bytes数据x补码 65535 x 1 34 10补码 65535 34 1 10 65502 10 ffdf 16 1111111111011110 2 变量的定义格式 类型说明符变量名表 3 整型变量 问题1 c没有定义便使用 intc 问题2 c应为32770 但实际为 32766 发生溢出 问题3 c应为longint类型 longintc 3 2 3实型数据及其表示 1 实型类型 实型数据是以浮点数形式存储的 在计算机中按指数形式 如图例 0 123456 10 2 float double longdouble 2 实型常量十进制形式 由数字和小数点组成 如 0 123 0 0 54 0指数形式 由十进制小数形式 指数 如 123e3 123E 2注 e或E的前后面须有数字不合法的指数形式 e3 2 1e3 5 e3 e在实数常量尾部用后缀符f F 代表单精度实数 7位有效位 l L 代表双精度实数 18 19位有效位 例 2 3f 0 123f 2e 3f 1 5e4f为单精度实常量1256 34L 0 123l 2e3L为双精度实常量 3 实型变量 4 实型数据应用中的误差问题 由于机器存储限制 会使实数产生误差 理想输出 a 12345 6789 b 0 1234567891234567899e15 实际输出 a 12345 678711 b 123456789123456 797000 3 2 3字符型数据及其表示 1 字符型数据字符型数据在计算机中存储的是ASCII码 占用1byte 字符 A 的存储形式实际上就是一个整型数65 它可以直接与整型数据进行算术运算 混合运算 与整型变量相互赋值 字符型数据以字符或整数两种形式输出 以字符形式 先将ASCII码值转换为相应的字符 再输出 以整数形式 直接将ASCII的值作为整数输出 n换行 LF t横向跳格 HT b退格 BS v竖向跳格 f走纸换页 FF r回车 CR 单引号 反斜杠字符 双引号 0 空 不是 0 101字符 A 八进制 x41字符 A 十六进制 2 字符型常量 用单引号括起来的一个字符 普通字符 a A 1 等 大小写不同 转义序列 将反斜杠 后面的字符转变为另外的含义 是一种特殊的字符常量 3 字符型变量 类型名称 char 错误的字符常量表示 015 n A ab Howdoyoudo CHINA 123 45 a 4 字符串常量 一对双引号括起来的字符序列 注意 C规定 每个字符串结尾加一 字符串结束 0 系统自动加上的 CHINA 字符串如果需要存放在变量中 需用字符数组来存放 第7章 a 与 a 不同 5 字符数据的应用举例 main inti charc i a c 97 printf c d n c c printf c d n i i 输出结果 a 97a 97 注意 在一定范围内通用 0 127 3 2 5指针型数据及其表示 变量与地址的概念 程序中 inti 12 floatk 内存中每个字节有一个编号 地址 内存 编译或函数调用时为其分配内存单元 变量是对程序中数据存储空间的抽象 变量的地址 12 指针型数据 是一个变量在内存中所对应的存储单元的地址值 如2000 2002等 指针变量 用来存放另一存储单元的地址值 2 指针变量的定义 合法标识符 指针的目标变量的数据类型 表示定义指针变量不是 运算符 例int p1 p2 float q staticchar name 注意 1 int p1 p2 与int p1 p2 2 指针变量名是p1 p2 不是 p1 p23 指针变量只能指向定义时所规定类型的变量4 指针变量定义后 变量值不确定 应用前必须先赋值 格式 类型说明符 变量名 3 6 1 与 运算符 含义 取指针变量所指向单元的内容 取内存变量的地址互为逆运算 特性 单目运算符优先级为2自右向左结合 inti int pc pc 指针变量 它的内容是地址量 pc 指针的目标变量 它的内容是数据 pc 指针变量占用内存的地址 3 2 6变量的初始化通常一个变量是先说明 然后再赋值给它 例 intx y x 10 b 20 C规定 可以在定义变量的同时使变量初始化 例 floatx 123 45 说明x为实型量且赋初值为123 45 inta c 10 说明整型变量a c 并仅给c赋初值10 inta1 10 b1 6 说明整型变量a1 b1 分别赋不同初值 doublePai 3 14 说明Pai为双精度实型变量为赋初值为3 14 charch a 说明字符变量ch 并赋初值为 a 注意 对几个变量赋同一个值 必须分别赋值例 inta b c 3 errorinta 3 b 3 c 3 ok说明 变量初始化不是在编译阶段完成的而是在程序执行阶段执行本函数时赋以初值的例 inta 3 inta a 3 例 inta b c 5 inta b c c 5 变量初始化的应用举例 main inta intb b a 2 printf d d n a b 注意 定义的变量在没有初始化之前有一个不确定值 a 3 3 3算术运算与赋值语句 3 3 1c语言中的运算规则1 运算符分类 按操作数个数分 单目运算 一个运算符连接一个运算对象 a a a 双目运算 一个运算符连接两个运算对象 23 12 三目运算 一个运算符连接三个运算对象 a b a 1 a 1 分类 作用 算术运算符 自增自减运算符 赋值与赋值组合运算符 关系运算符 条件运算符 逗号运算符 指针运算符 求字节数运算符sizeof强制类型转换运算符 类型 分量运算符 下标运算符 其它 2 表达式 算术表达式a b c自增自减表达式i i关系表达式a b a b a b 逻辑表达式a b c a字位表达式a 2a b赋值表达式a 3a 2a b 6逗号表达式 a b a b 3 优先级和结合性 附录A 优先级 同一表达式中不同运算符进行计算时的先后次序结合性 针对同一优先级的多个运算符而言 指同一表达式中相同优先级的多个运算应遵循的运算次序 表达式运算时的关键问题 1 算符优先极问题 不同级别算符的计算次序 2 算符结合次序 优先级平级时的计算次序 3 算符操作数个数 一目或二目算符 4 算符对应操作数类型 3 3 2算术运算符和算术表达式1 算术运算符 说明 运算符 单目运算 取正 负值运算 优先级高双目运算 加 减运算 优先级低 除法运算 整数 字符 相除结果是整型 商 小数部分全部舍去实数相除 所得的商也为实数 例如 1 3 0只取结果的整数部分0 舍去0 33333315 4 3只取结果的整数部分3 舍去0 751 0 3 0 33333313 4 0 3 250000整数相除时 若不能整除将造成误差 要避免整数直接相除 模运算 也称为求余运算 要求两个运算对象都为整型 其结果是整数除法的余数 例如 5 10 510 3 1 10 3 1 算术运算符的优先级及结合性如下 例如表达式x 67 12 y a 的运算顺序是 2 算术表达式c语言的算术表达式由算术运算符 常数 变量 函数和园括号组成 其基本形式与数学上的算术表达式类似 例如 3十512 34 23 65 2 5 18 4 6 x 67 12 y a 带函数调用的算术表达式 以数学函数的调用为例 c语言把数学计算中常用的计算公式 或算法 抽象定义为一个个的函数 这些函数的集合构成了C语言的数学库 见附录c 在程序中用到相应的函数时只要直接调用即可 例如 数学表达式 sin x cos y 2 c语言算术表达式 sin x cos y 2 函数库 include 3 3 3自增 自减运算符 1 i和i 最后都使i i 1 但顺序不同 意义不同例 inti 3 j 对于j i 相当于 i j i 对于j i 相当于 j i i 2 只能用于变量 不能用于常量和表达式 3 a b x 5 i i 先将i的值加 减 1 然后使用ii i 先使用i 然后将i的值加 减 1 开始 结果 3 用于 运算的可以是有序类型的变量 4 的结合性是自右向左的 例题1 inti 3 k k i i i 则 k i 相当于 k i i i k 9 i i i i 6 例题2 inti 3 k k i i i 则 k i 相当于 i i i i 6 k i i i k 18 例题3 若i 3则printf d i 则 打印 i 输出 3 然后 i增值为4 例题4 若i 3则printf d i i 则 打印 i 1 i i 取i的地址2 i i i值加1为43 i i 1的值 4 2的值 4 得3的值8 输出 84 表达式计算完成后 求1 i 的i自加1 i增值为 5一般写为 i i 3 3 4赋值运算符和赋值表达式 1 赋值运算符 计算赋值运算符 右边表达式的值 并将计算结果赋给 左边的变量 2 赋值表达式 变量 表达式 计算赋值运算符右边 表达式 的值 将计算结果赋值给赋值运算符左边的 变量 赋值表达式的值就是赋值运算符左边 变量 的值 3 赋值运算符按自右至左结合顺序 右结合 例1 inta 2 b 3 c 4 a b c 51 a b c 5 c 5 表达式c 5值为52 a b c 5 b 5 表达式b c 5值为53 a b c 5 a 5 表达式a b c 5值为5例2 a b 4 c 5 1 a b 4 c 5 c 5 表达式c 5值为52 a b 4 c 5 表达式4 c 5 值为93 a b 4 c 5 b 9 表达式b 4 c 5 值为94 a b 4 c 5 a 9 表达式a b 4 c 5 值为9 4 赋值时的类型转换当赋值运算符两侧类型不一致 赋值时要进行类型转换 其转换工作由c编译自动完成 转换原则是以 左边的变量类型为准 即将 右边的值转换为与 左边的变量类型 致 类型转换 例intb 32769 inti 256 floata 3 5 a1 charc A a1 i i a c i 则i 3a 3 500000b 32767a1 256 000000c 0 float int直接舍去浮点数地小数部分 存储空间缩小 int float按浮点数相应有效位数补小数点后地有效0 扩大 double float截取前7位double数据给float变量 缩小 int char截取int数据地低8位给char变量 缩小 3 3 5组合赋值运算符和组合赋值表达式 1 组合赋值运算符在赋值符 之前加上其它运算符构成组合运算符 运算符 10种 2 组合赋值表达式格式 变量名组合赋值运算符表达式功能 变量名 变量名运算符表达例 a 3a a 3x y 8x x y 8 右边为一整体 而不等于x x y 8 5a 55c 5 b c 5 a b 5 11c 6 a 11 5 6 10b 4 c 6 a b c 4 6 1024 12a a a a 3 3 3 6 a 6 a a a 12 3 赋值运算符按自右至左结合顺序 表达式表达式值各变量值求解过程 a 5a b c 5a 5 c 6 a b 4 c 6 a 3 5a a a a inta 3 b c a b d x y a c 课后作业例 inta 3 b d 012 charc floatx y 表达式各变量的值 1 a 2 82 b 3 d 3 x 3 6 3 54 y d 4 d 2 d 5 a a a a6 c d 2 7 数学表达式 用C语言表达式表达正确的是 1 a b c d 2 a b c 1 d 3 a c b d 4 a d b c a b c d 3 4 1关系运算符与关系表达式1关系运算符 3 4关系运算符和关系表达式 大于 大于等于 等于 不等于 关系表达式格式 表达式1关系运算符表达式2例 3 45 4x x 1关系表达式的值 真 条件满足 用1表示 假 条件不满足 用0表示 例 若a 3 b 2 c 1a b a b cb cbf a b c c d 值 真 1 真 1 假 0d 1f 0 假 0 例 c a b c a b a b c a b ca bc a b c 如何表示 0 x 20 3 4 2逻辑运算符和逻辑表达式 1逻辑运算符和逻辑表达式 逻辑与 双目运算符例 a b x y 逻辑或 双目运算符例 a b x y 逻辑非 一目运算符例 a b 逻辑运算 真值表 a和b可以是一个变量 常量或运算表达式 运算符种类优先次序 非算术运算符关系运算符 赋值运算符 1 1 1 1 1 0 a b x y a b x y y b y b y b y b a a ba 10 b x a 10 b x a y x 例 inta 3 b 1 x 2 y 0 逻辑表达式值 1 1 2 逻辑表达式中的运算对象 操作数 可以是0 假 或任何非零的数值 真 例 5 3 2 8 4 0 3 逻辑表达式求解并非一定要所有的逻辑运算符都被执行 会出现 短路 现象 例 设a 1 b 2 c 3 d 4 m 1 n 1 m a b n c d 例 inta 2 b 3 c 0 d 4 a a 3b 40c 1d 4 例 inta 2 b 3 c 0 d 4 a b c d a 3b 31c 1d 5 4 逻辑表达式的应用例1 判别某一年year是否闰年 能被4整除 但不能被100整除 或 能被400整除 闰年条件 例2 写出判断变量C的值是否为 的条件表达式小写字母数字字符被3除余2且被5除余1奇数偶数 c a c 0 c 9 c 3 2 c 5 1c 2 1或c 2c 2 0或 c 2 year 4 0且year 100 0 year 400 0 year 4 0 year 100 0 year 400 0 例3 写出判断点在图形内的条件表达式 答案 x 1 x 1 y 1 答案 x 4 答案 x4 例4 把下面的数学表达式转化成C语言表达式 x 4 x 4 0 x 20 答案 x 0 x 20 3 4 3条件运算符与条件表达式 2 执行顺序 先计算条件表达式的值 若值为非0 则计算表达式1的值 并将表达式1的值作为整个条件表达式的结果 若条件表达式的值为0 则计算表达式2的值 并将表达式2的值作为整个条件表达式的结果 max a b a b a b a b a b 4 结合方向 自右至左a b a c d c d等同于a b a c d c d 若a 1 b 2 c 3 d 4 有 4 例 求一个数的绝对值 例 将小写字母转换成大写 x x 0 x x c c a 3 5位运算 应用 许多计算机硬件设备的状态信息通常是用二进制串表示的 则对硬件设备进行操作 也要送出一个二进制位串的方式发出的命令 3 5 1位运算符一个二进制位只能取值为0或者1 位运算的运算对象只能是整型 int 或字符型 char 的整数 位运算是对运算量的每一个二进制位分别进行操作的 操作符和优先级 同级左结合 按位求反 按位右移 按位与 按位异或 按位或 3 5 2按位逻辑运算 1 按位与 1 格式 x y 2 规则 对应位均为1时才为1 否则为0 3 9 1 例 c a ba 1010100101010111 b 0000000011111011c 0000000001010011 3 用途 将指定位 0 实现清0以屏蔽原先的数据 例3 11 将指定位 1 保留原数据对应位 例3 12 2 按位或 1 格式 x y 2 规则 对应位均为0时才为0 否则为1 3 9 11 例 c a ba 1010100101010111 b 1111111111111011c 1111111111111111 3 用途 将指定位 1 实现置1 例3 13 3 按位异或 1 格式 x y 2 规则 对应位相同时为0不同时为1 0 0 0 0 1 1 1 0 1 1 1 1例 c a ba 1010100101010111 b 0110000011111011c 1100100110101100 3 用途 将指定位 1 实现使特定位翻转其余位不变 例3 14 4 按位取反 1 格式 x 2 规则 各位翻转 即原来为1的位变成0 原来为0的位变成1 例 c a a 00000000000001117c 1111111111111000 8的补码 特点 按位求反 整数求负 1注意 对c a有对c a有 c 7c 0 3 5 3移位运算1 按位左移 1 格式 x 位数 2 规则 使操作数的各位左移 低位补0 高位溢出 例 5 2 20即 00000101左移2位 0000010100 2 按位右移 1 格式 x 位数 2 规则 使操作数的各位右移 移出的低位舍弃 高位 1 对无符号数和有符号中的正数 补0 2 有符号数中的负数 补1 例 5 2 1即 00000101右移2位 0000000101例 5 2 2即 11111011右移2位 1111111010 3 5 4位运算赋值运算符除按位取反运算外 其余5个位运算符均可与赋值运算符一起 构成复合赋值运算符 如 x y相当于 x x yx 3x x 3x 5x x 5 例1a 3 5 a 4a 3 5 a 4 a 5例2x a 3 6 3 y x 123 x x x 100 x 例3a 1 b 2 c 3 printf d d d a b c printf d d d a b c b c a 15 表达式值60 a 15 表达式值20 赋值表达式 表达式值18 x 18 表达式值100 y 100 1 2 3 3 2 3 3 6 1逗号运算符和表达式形式 表达式1 表达式2 表达式n计算 先求解表达式1 再求解表达式2 结合性 从左向右优先级 15逗号表达式的值 等于表达式n的值用途 常用于循环for语句中 3 6其他运算 3 6 5强制类型转换运算符 type 表达式用括号括起来 类型转换方式 自动转换 2 3 5 a 强制转换 其作用是进行数据类型的强制转换 type 是单目算符 强制转换形式 类型名 表达式 注意 若为表达式 应该用括号括起来 例 double a int x y f

温馨提示

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

评论

0/150

提交评论