C课件第2章基本数据类型与表达式.ppt

上传人:max****ui 文档编号:10964327 上传时间:2020-04-16 格式:PPT 页数:46 大小:231.66KB
返回 下载 相关 举报
C课件第2章基本数据类型与表达式.ppt_第1页
第1页 / 共46页
C课件第2章基本数据类型与表达式.ppt_第2页
第2页 / 共46页
C课件第2章基本数据类型与表达式.ppt_第3页
第3页 / 共46页
点击查看更多>>
资源描述
第2章基本数据类型与表达式 2006 04 01 C 程序设计 第2章基本数据类型与表达式 2 1C 数据类型概述2 2C 的基本数据类型2 3常量与变量2 4运算符与表达式2 5数值运算符与数值表达式2 6赋值运算2 7关系与逻辑运算2 8条件运算符与逗号表达式2 9sizeof运算符2 10表达式的副作用和表达式语句 2006 04 01 C 程序设计 2 1c 数据类型概述 1 基本数据类型 基本数据类型 整型int 字符型 实型 逻辑型 单字符型char 宽字符型wchar t 单精度型float 双精度型double bool 2006 04 01 C 程序设计 2 数据类型修饰符signed 有符号unsigned 无符号short 短型long 长型说明 1 类型修饰符可以修饰除void bool类型以外的其他类型 2 上述修饰符均可用于整型和字符型 3 long修饰符还适用于双精度浮点数 2006 04 01 C 程序设计 2 2C 的基本数据类型 2006 04 01 C 程序设计 说明 1 表中的 int 可以省略 既在int之前有修饰符出现时 可以省略关键字int 2 单精度类型float 双精度类型double 长精度类型longdouble统称浮点类型 3 char型和各种int类型统称整型类型 char型变量在内存中以字符的ASCII码值的形式存储 4 字宽 字节 取决于操作系统和编译器的实现 可用sizeof验证 2006 04 01 C 程序设计 ch2 1 cpp测试计算机中数据类型的字节长度 includevoidmain cout char类型的长度是 sizeof char endl cout 宽char类型的长度是 sizeof wchar t endl cout int类型的长度是 sizeof int endl cout long类型的长度是 sizeof long endl cout float类型的长度是 sizeof float endl cout double类型的长度是 sizeof double endl cout longdouble类型的长度是 sizeof longdouble cout endl 2006 04 01 C 程序设计 2 3常量与变量 2 3 1变量变量是指程序在运行时其值可改变的量 每个变量由一个变量名惟一标识 同时 每个变量又具有一个特定的数据类型 不同类型的变量在内存中占有存储单元的个数不同 2006 04 01 C 程序设计 变量定义 1 命名变量名每个变量都必须有一个名字 变量名 变量命名遵循标识符命名规则 2 标识符命名规则 1 有效字符 只能由字母 数字和下划线组成 且以字母或下划线开头 Num1 8NUM NUM8 2 有效长度 随系统而异 但至少前 个字符有效 如果超长 则超长部分被舍弃 例如 由于student name和student number的前 个字符相同 有的系统认为这两个变量 是一回事而不加区别 2006 04 01 C 程序设计 3 C 的关键字不能用作变量名 注意 C 对英文字母的大小敏感 即同一字母的大小写 被认为是两个不同的字符 习惯上 变量名和函数名中的英文字母用小写 以增加可读性 标识符命名的良好习惯 见名知意 即通过变量名就知道变量值的含义 通常应选择能表示数据含义的英文单词 或缩写 作变量名 或汉语拼音字头作变量名 例如 name xm 姓名 sex xb 性别 age nl 年龄 salary gz 工资 4 命名风格 my car myCar iMyCar dMyCar 2006 04 01 C 程序设计 3 变量定义方式 例如 inta b c doublex y z 4 变量赋值与初始化数据类型标识符1 初始值1 标识符n 初始值n 数据类型标识符1 初始值1 标识符n 初始值n 例如 doubleprice 15 5 intsize 100 5 typedf用typedef可以为一个已有的类型名提供一个同义词 例如 typedefdoubleprofit typedefintINT integer INTa profitd 2006 04 01 C 程序设计 2 3 2常量 1 整型常量10进制表示 例 132 3458进制表示 例 010 053616进制表示 例 0 x7A 0X3de2 实型常量 1 定点数形式 它由数字和小数点组成 如 0 123 234 0 0等 2 指数形式 如 123e5或123E5都表示123 105 要注意E或e的前面必须要有数字 且E后面的指数必须为整数 2006 04 01 C 程序设计 3 字符常量 1 由一对单引号括起的一个字符表示 2 其值为所括起字符在ASCII表中的编码 3 转义序列表示方法 以反斜线 开头 后跟字符的ASCII码值 2006 04 01 C 程序设计 C 中常用转义序列符 2006 04 01 C 程序设计 字符串常量一对双引号括起的字符序列 字符序列可以包含空格 转义序列或任何其他字符 这些字符不一定是C 字符集中的字符 只要C 编译器支持即可 例如 Thisisastring Howdoyoudo Iamastudent 2006 04 01 C 程序设计 串常量与字符常量的区别 2006 04 01 C 程序设计 5 布尔常量布尔常量仅有两个 false 假 和true 真 或 1 真 0 假 2006 04 01 C 程序设计 6 枚举常量枚举声明 enum 由若干个枚举符组成 多个枚举符之间用逗号分隔 枚举符是用标识符表示的整型常量 又称枚举常量 枚举常量的值默认为最前边的一个为0 其后的值依次加1 枚举常量的值也可显式定义 未显式定义的则在前一个值的基础上加1 例如 enumday Sun Mon Tue Wed Thu Fri Sat enumday Sun 7 Mon 1 Tue Wed Tur Fri Sat 2006 04 01 C 程序设计 2 3 3常量定义 定义方法 使用类型说明符const 例如 constintsize 80 定义的符号常量必须初始化 一个符号常量可看作是一个只读变量 由const定义的常量的值不可以改变 2006 04 01 C 程序设计 2 3 4宏定义的使用 例 definepi3 14 说明 define在c 中不常用 已经被const所取代 2006 04 01 C 程序设计 2 4运算符与表达式 在程序中 表达式是计算求值的基本单位 它是由运算符和运算数组成的式子 运算符是表示进行某种运算的符号 运算数包含常量 变量和函数等 C 语言的运算符按其在表达式中与运算对象的关系 连接运算对象的个数 可分为 单目运算 一元运算符 只需一个操作数 双目运算 二元运算符 需两个操作数 三目运算 三元运算符 需三个操作数 2006 04 01 C 程序设计 按其在表达式中所起的作用又可分为 算术运算符 关系运算符 逻辑运算符 位运算符 自增自减运算符 赋值运算符 及其扩展 等 条件运算符 指针运算符 和 逗号运算符 分量运算符 函数调用运算符 下标运算符 求字节运算符sizeof强制类型转换运算符 type 2006 04 01 C 程序设计 2 左值和右值左值 leftvalue 缩写为lvalue 是能出现在赋值表达式左边的表达式 左值表达式具有存放数据的空间 而且存放是允许的 例如 inta 3 a是变量 所以a是左值constintb 4 b是常量 所以b不是左值显然常量不是左值 因为c 规定常量的值一旦确定就不能更改 2006 04 01 C 程序设计 右值 rightvalue 缩写为rvalue 只能出现在赋值表达式的右边 左值表达式也可以作为右值表达式 例如 inta b 6 a b b是变量 所以是左值 此处作为右值 a 8 8是常量 只能作右值 不能作为左值 表达式可产生左值 右值或不产生值 例如 inta a 4 28 a 4是左值表达式 可以被赋以值28 28是右值表达式 而a 4是左值表达式 C 的语法规定 所以可以放在赋值语句的左边 该语句表示a的值使用28代替刚刚赋给的值4 2006 04 01 C 程序设计 2 5数值运算符与数值表达式 加法运算符 或正值运算符 如1 2 3 减法运算符 或负值运算符 如1 2 3 乘法运算符 如1 2 除法运算符 如1 2 两整数相除 结果取整 如 5 2结果为2 1 2为0浮点数参与除法运算 结果是浮点数 如 5 0 2 0结果为2 5 1 0 2 0为0 5 模运算符或称求余运算符 如7 3 1 只能对整数进行操作 2006 04 01 C 程序设计 算术类型转换 数据类型转换C 中数据类型转换有两类 即隐式类型转换和显式类型转换 1 隐式类型转换隐式类型转换是由编译器自动完成的类型转换 当编译器遇到不同类型的数据参与同一运算时 会自动将它们转换为相同类型后再进行运算 赋值时会把所赋值的类型转换为与被赋值变量类型一样 隐式类型转换按从低到高的顺序进行 如图2 1所示 2006 04 01 C 程序设计 2006 04 01 C 程序设计 2 显式类型转换显式类型转换是由程序员显式指出的类型转换 转换形式有两种 类型名 表达式 类型名 表达式这里的 类型名 是任何合法的C 数据类型 例如float int等 通过类型的显式转换可以将 表达式 转换成适当的类型 例如 doublef 3 6 intn int f 这样n为3 2006 04 01 C 程序设计 2 6赋值运算 2 6 1赋值运算符 1 赋值运算符 的一般格式为 变量 表达式 表示将其右侧的表达式求出结果 赋给其左侧的变量 例如 inti i 3 4 5 i的值变为27 2 赋值表达式本身的运算结果是右侧表达式的值 而结果类型是左侧变量的数据类型 例如 inti 1 2 3 结果为3 而不是3 6 2006 04 01 C 程序设计 3 赋值运算符的结合性是从右至左的 因此 C 程序中可以出现连续赋值的情况 例如 下面的赋值是合法的 inti j k i j k 10 i j k都赋值为10 4 复合赋值运算符 加赋值 减赋值 乘赋值 除赋值 取模赋值 右移赋值 与赋值 异或赋值 或赋值 2006 04 01 C 程序设计 它们的含义如下 a b等价于a a ba b等价于a a ba b等价于a a ba b等价于a a ba b等价于a a b例如 inta 12 a a 表示a a a 12 12 24 又例如 inta 12 a a a a 表示a a a a 12 12 144a a a a 144 144 0a a a a 0 0 0 2006 04 01 C 程序设计 2 6 2溢出 进行算术运算和赋值运算时 很可能溢出结果 发生溢出的原因 是由于一个变量被赋予一个超出其数值类型表示范围的数值 数值溢出不会引起编译错误 但会使运行结果发生偏差例如 在16位机器上进行如下操作 intweight 42896 变量weight将得不到42896 而是得到 22640 因为有符号整数的表示范围是 32768 32767 所以它只能得到42896的补码 22640 42896 65536 2006 04 01 C 程序设计 思考如下的问题 在16位机器中 做如下操作 intx 142896 变量x将会得到什么数 如果x是2个字节的整数 得到的值为 11824因为 142896 2 65536 11824 2006 04 01 C 程序设计 2 6 3自增 自减运算符 1 自增 自减 运算符为变量的增1和减1提供了紧凑格式 2 自增 自减运算符都是单目运算符 其作用是使变量的值增1或减1 3 自增 自减运算符有四种应用格式 b a 等价于b a a a 1 b a 等价于b a a a 1 运算符后置用法 代表先使用变量 然后对变量增值 b a 等价于a a 1 b a b a 等价于a a 1 b a 运算符前置用法 代表先对变量增值 再使用变量 2006 04 01 C 程序设计 2 7关系与逻辑运算符 2 7 1关系运算符1 关系运算符用于两个值进行比较 运算结果为true 1 或false 0 C 中的关系运算符如下 大于 大于等于 等于 不等于 2 关系运算符都是双目运算符 其结合性是从左到右 运算符的优先级相同 和 运算符的优先级相同 前者运算的优先级高于后者 3 关系运算符的优先级低于算术运算符 例如 a b c等价于 a b ca b c等价于a b c 2006 04 01 C 程序设计 2 7 2逻辑运算符 逻辑与 逻辑或 逻辑非 逻辑表达式的结果为真则为1 结果为假则为0 逻辑非 是单目运算符 逻辑与 与逻辑或 为双目运算符 逻辑非的优先级最高 逻辑与次之 逻辑或最低 逻辑运算真值表如表2 3所示 2006 04 01 C 程序设计 表2 3逻辑运算真值 真为非0 假为0 2006 04 01 C 程序设计 如果多个表达使用输出结果为 m 6由于n 4的比较值为0 所以整个表达式的值不用看后面就知道为0 因此 后面的表达式不被执行 这样 m的值是6而不是7 2 7 3短路表达式 2006 04 01 C 程序设计 同理 如果多个表达式用 连接 则第一个表达式为真 整个连接都为真 例如 t 10 If t80 cout endl 2006 04 01 C 程序设计 2 8条件运算符与逗号表达式 2 8 1条件运算符 1 条件运算符 是C 中惟一三目运算符 其形式为 表达式1 表达式2 表达式3它的运算方式为 先计算表达式1的值 如果其值为非0 真 则表达式2的值就是整个表达式的值 否则表达式3的值就是整个表达式的值 例如 max a b a b 上面例子定义了一个求两个数a和b中最大值 其中决定哪一个是最大值用了条件运算符 2006 04 01 C 程序设计 2 条件运算符的结合性是自右向左 例如条件表达式 a b a c d c d相当于a b a c d c d 3 条件运算符的优先级别高于赋值运算符 低于关系运算符和算术运算符 例如条件表达式 a b a b b a相当于a b a b b a 2006 04 01 C 程序设计 2 8 2逗号表达式 1 逗号表达式的语法为 表达式1 表达式2 表达式nC 顺序计算表达式1 表达式2 表达式n的值 例如 inta b c a 1 b a 2 c b 3 由于按顺序求值 所以能够保证b一定在a赋值之后 c一定在b赋值之后 该逗号表达式可以用下面3个有序的赋值语句来表示 a 1 b a 2 c b 3 逗号表达式是有值的 这一点是语句所不能代替的 2006 04 01 C 程序设计 2 逗号表达式的值为第n个子表达式的值 即表达式n的值 例如 inta b c d d a 1 b a 2 c b 3 cout d endl 输出结果为 6上例中输出的结果d即为c的值 逗号表达式还可以用于函数调用中的参数 例如 func n j 1 j 4 k 该函数调用3个参数 中间的参数是一个逗号表达式 括号是必须的 否则 该函数有4个参数了 C 中 如果逗号表达式的最后一个表达式为左值 则该逗号表达式为左值 例如 a 1 b c 1 d 5 ok 即d 5 2006 04 01 C 程序设计 2 9sizeof运算符 求字节运算符 1 sizeof运算符是单目运算符 用于计算运算对象在内存中所占字节的多少 它有两种形式 sizeof 类型标识符 sizeof表达式 2 sizeof可以接受的类型标识符很多 如sizeof int 表示求整型数据在内存中所占字节数 例如 inta 则sizeof a 表示求变量a在内存中所占字节数 例如 inta 10 则sizeof a 表示求数组a在内存中所占字节数 2006 04 01 C 程序设计 2 10求值次序与副作用 1 不同的编译器求值顺序不同 2 求值顺序使交换律失去作用 加法操作我们都知道a b b a 也就是说 交换律成立 而在C 中 对简单的表达式 交换律是成立的 但对复合表达式 交换律未必成立 例如 当inta 3 b 5 c 时c a b b 与 c b a b 在VC中 运行结果前者为21 后者为24 3 求值顺序使括号失去作用在表达式中 括号的优先级是最高的 C 中 简单的表达式括号优先可以做到 但复合表达式未必如此 例如 inta 3 b 5 c c b a b 2006 04 01 C 程序设计 实际在VC中得数为54而不是48 这是因为先将括号外面的表达式求值 4 消除副作用在我们举的例子中 b是引起副作用的主要操作 b具有变量b的修改 副作用 和它所提供的表达式值两个操作 同样赋值表达式也会引起副作用 例如 inta b 20 a b 25 b 解决表达式副作用的方法是分解表达式语句 即将复合表达式语句写成几个简单的表达式语句 例如 前面有副作用的表达式语句可以分解为下面的两个表达式 c b a b b 或者 b c b a b
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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


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

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


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