基本数据类型与表达式.ppt

上传人:tia****nde 文档编号:8769095 上传时间:2020-03-31 格式:PPT 页数:51 大小:474.36KB
返回 下载 相关 举报
基本数据类型与表达式.ppt_第1页
第1页 / 共51页
基本数据类型与表达式.ppt_第2页
第2页 / 共51页
基本数据类型与表达式.ppt_第3页
第3页 / 共51页
点击查看更多>>
资源描述
第二章 基本数据类型与表达式 第二章基本数据类型与表达式 本章内容主要有 C 数据类型符号常量与常值变量数值 逻辑表达式自定义类型修饰符表达式的副作用与表达式语句 学习的目标了解C 基本数据类型了解符号常量与常值变量了解自定义类型修饰符掌握数值 逻辑表达式掌握表达式的副作用与表达式语句 第二章基本数据类型与表达式 2 1C 数据类型概述 数据类型是指定义了一组数据以及定义在这一组数据的操作 它是程序中最基本的元素 在程序设计中类型具有重要的意义 C 预定义了丰富的数据类型 也允许用户自定义数据类型 C 数据类型分为 基本数据类型和构造数据类型 2 1C 数据类型概述 基本数据类型 1 整型类 包括整型 int 短整型 short 长整型 long 还有与整数兼容的数据类型 包括字符型 char 枚举型 enum 和逻辑型 布尔型bool 2 实型类 浮点型 包括单精度 float 双精度 double 和长双精度 longdouble 2 1C 数据类型概述 构造数据类型 1 指针类 包括指针和应用2 数组 3 记录类 包括结构struct和联合 union 2 1C 数据类型概述 为什么要区分数据类型 1 规定了不同数据类型在内存中的存储格式不同 C 语言中的整型数和实型数与数学中的整数和实数有区别 2 对不同的类型数据所能实施的操作不同 如两个整型数据可以相加 而两个记录数据不能相加 2 1C 数据类型概述 数据最常用的表现形式 1 常量 在程序运行中不变 其数据类型可分为整型 123 实型 12 4 字符型 s 和字符串型 Hello 你们好 2 变量 在程序运行中可变 变量名必须实合法的标识符 区分大小些 即只能是数字 字母和下划线 而且第一个字符不能是数字 2 2 1 各种整型数据的基本情况 课本表2 1 整型前面可以加上signed 有符号型 或unsigned 无符号型 long 长整型 或short 短整型 来修饰 其中signed和unsigned不能同时出现 long和short也不能同时出现 在三种不同的规格中短整型 short unsignedshort 中用空间最少 表示的范围也最少 长整型 long unsignedlong 表示的范围最大 占用的空间也最大 2 2整型数据 2 2整型数据 2 2 2 短整型常量表示方法短整型常量是借助整型常量来表示的 短整型无条件的转换为整型 2 整型常量表示方法 1 十进制 2 八进制整型常量 必须以0打头 其后有0 7之间的数字组成 如0123 十六进制整型常量 以0 x或0X打头 其后0 9之间的数和英文字母a f 或A F组成 如0X32 0 xA8等 3 整型常量加后缀 以区分各种不同类型的整数1 后缀L 或l 表示长整型常量 longint型 如 56L 4562l 2 后缀U 或u 表示无符号整型常量 unsignedint型 如85U 20u 3 后缀L 或l 和U 或l 组合 表示无符号长整型常量 unsignedlongint型 如464LU 586Lu 4645lU 123lu 2 2整型数据 2 2 3整型变量的定义和初始化 变量是用来存放数据的 因此应具有相应的类型 C 中每个变量都属于一个特定的类型 变量类型决定了它在内存中的存储形式及取值范围 引用一个变量名之前必须先声明变量的类型 限定用法和操作 保证不会进行非法的操作 2 2整型数据 2 2整型数据 C 中 变量必须先定义 后使用 不一定先定义 随定随用 变量定义使用一个声明语句 格式 类型变量名 或类型变量名1 变量2 变量n 变量名的命名要遵守以下规则 不能是C 关键字 C 的关键字如下表所所示 第一个字符必须是字母或下划线 中间不能有空格 变量名除了使用26个英文大小写字母和数字外 只能使用下划线 一般不要超过31个字符 变量名不要与C 中的库函数名 类名和对象名相同 例如 下列变量名是合法的变量名 a123c3bfile 1 例如 语句intx y 定义了一个整型变量charch 定义了一个字符型变量 2 2整型数据 表2 1C 的标准关键字 变量声明后类型就确定了 编译器就为该变量在内存中开辟了存储单元 变量可以在定义时初始化 也即个变量赋一个初值 例如 inta 3 b 7 也可以先定义 后赋值inta b a 3 b 7 doublearea 67 31 则变量a b area分别被赋予初值 3 7 67 31 并一直保留改值直到被修改为止 2 2整型数据 注意 1 若一个变量没有被初始化 则系统会为该变量规定一个默认值或无效值 直到被修改 2 初始化数据的类型与所规定的类型不一致 自动进行隐含转换 数据将转换成变量类型 如inta 3 14 允许 但会丢失小数部分 3 在同一个块中或复合语句中 不允许定义同名变量 而在不同的块中可以 如 intk 块1 intk 块2 是合法的 2 2整型数据 2 3字符型数据 2 3 1字符型数据的基本情况 课本表2 2 类型修饰符char有可能表示有符号字符 也可能表示无符号字符 2 3 2字符型常量的表示字符又分为可显示的和不能显示的 可显示的用符号图形来表示 即用引号括起来的单个字符 如 k 等 不能显示的 产生某些控制 用转义序列来表示 两种形式 1 用反斜杠 加上该字符的ASCII码来构成 ASCII码可采用八进制 十六进制 2 另一种称为转义字符 由一个反斜杠后跟一个字符来表示 如下表所示 3 转义字符只代表一个字符 可显示字符也可以用转义字符来表示 2 3字符型数据 2 3 3字符型变量的定义和初始化与整型类似 如charc1 c2 A 上面定义了两个字符型变量 其中c2被初始化为字符A 2 3 4字符型与整型的关系字符用代码表示 代码就是一个整数 在表达式求值中 字符被转换成与其代码等值的整数 因此能对字符实施算术运算 如 charch1 A ch2 a 也可以写成charch1 65 ch2 97 2 3字符型数据 2 4 1枚举型数据的基本情况 课本表2 3 不是系统预定义的 而是用enum关键字 保留字 是系统预定义有的特殊含义的单词 自定义的数据类型 它的值域由用户定义的一组符号常量限定的 目的是提高程序的可读性 2 4枚举型数据 2 4 2枚举类型的定义和枚举变量的定义格式 enum枚举类型名 枚举常量名1 枚举常量名2 枚举变量 在定义枚举类型的同时定义枚举变量 例如 enumWeekDay Sunday Monday Tuesday Wednesday Thursday Friday Saturday today 2 4枚举型数据 也可以在枚举类型定义后 再定义枚举变量格式 如 WeekDaytoday Monday tomorrow Tuesday 并赋初值 枚举变量只能在枚举常量集合中取值 不能进行算术运算 只能赋值 比较和输出 2 4枚举型数据 2 4 3枚举型与整型的关系C 编译程序为每个枚举常量分配一个整数型数值 默认时第一个枚举元素的值为0 依次类推 第n个为n 1 也可以显示的指定枚举常量的值 后面逐个增1取值 如重新定义WeekDay如下 enumWeek Sunday 1 Monday Tuesday Wednesday Thursday Friday Saturday 0 Week和WeekDay枚举常量有相同的取值 C 语言不允许枚举类型有相同的枚举常量 C 不识别枚举符号 2 4枚举型数据 2 5 1各种实型数据的基本情况 课本表2 4 实数又称浮点数 与数学中的浮点数的区别 1 数学中的实数值域从无穷小到无穷大 计算机中实数的值域有限 2 数学中的实数精度是任意的 计算机中精度有限 C 提供了单精度 双精度 长双精度3种实型类型 2 5实型数据 2 5 2实型常量的表示浮点数只能以十进制表示 可以采用科学记数法和一般表示方法 科学记数法常用于表示很大或很小的浮点数 如1 2E8 即1 2 108 5 731E 9 即 5 731 10 9 浮点数的整数部分和小数部分如果为零可以省去 但不能两者都省去 例如 34456 5 E3 89E2 都合法 2 5实型数据 浮点数还可以带后缀 以区分不同的类型的实数 1 没有后缀 表示双精度 double型 如73 23 2 后缀为F 或f 表示单精度的 float 如4 266F 或 1 2f 3 后缀为L 或l 表示长双精度 longdouble 如8 5l 2 07L 2 5 3实型变量的定义和初始化与整型类似 2 5实型数据 符号常量的定义 如 definePI3 1416表在程序中用PI表示3 1416 好处 1 提高程序的可读性 有意义的名词作为符号常量 2 提高数据的一致性3 提高数据的可维护性 达不到预期的精度 只需重新定义 常值变量的定义格式 const数据类型常量标识符 表达式如 constdoublePI 3 1416 常值变量定义时必须初始化 在程序中不允许改变 上述两者等价 2 6符号常量和常值变量 2 7 1无操作符的表达式 简单表达式常量 变量和函数调用是三种最简单的表达式 简单表达式依据数据类型可分整型 长整型 双精度表达式等 数值表达式是整型类表达式和实型类表达式的统称 2 7数值表达式 2 7数值表达式 2 7 2算术运算C 算术运算符包括一元运算符 取负值 取正值 和二元运算符 加 减 乘 除 取余数 其中 只用于int整型 如10 3 1 int 其余可以用于既可以用于int又可以用于float和double类型数据 用算术符号联起来的表达式称算术表达式 除法运算用于整型和实型是不同的 用于整数 表示整除 如5 2 2 int 10 3 3 int 而用于浮点数 5 0 2 0 2 5 float 8 0 5 0 1 6 float 2 7数值表达式 2 7 3位操作符 看书本 2 7 4赋值操作符 1 赋值运算符 的一般格式为 变量 表达式 表示将其右侧的表达式求出结果 赋给其左侧的变量 例如 inti i 3 4 5 i的值变为27 2 赋值表达式本身的运算结果是右侧表达式的值 而结果类型是左侧变量的数据类型 例如 inti 1 2 3 结果为3 而不是3 6 3 赋值运算符的结合性是从右至左的 因此 C 程序中可以出现连续赋值的情况 例如 下面的赋值是合法的 inti j k i j k 10 i j k都赋值为10 2 7数值表达式 2 7 5复合赋值操作符复合操作符如书本P 28所示 从左到右结合 它们的含义如下 a b等价于a a ba b等价于a a ba b等价于a a ba b等价于a a ba 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 2 7数值表达式 2 7 6自增 自减运算符 1 自增 自减 运算符为变量的增1和减1提供了紧凑格式 2 自增 自减运算符都是单目运算符 其作用是使变量的值增1或减1 不可过分的使用 使程序难以理解并降低其可移植性 3 自增 自减运算符有四种应用格式 inta 3 b a 等价于b a a a 1 inta 3 b a 等价于b a a a 1 运算符后置用法 代表先使用变量 然后对变量增值 inta 3 b a 等价于a a 1 b a inta 3 b a 等价于a a 1 b a 运算符前置用法 代表先对变量增值 再使用变量 2 7数值表达式 4 C 编译器在处理时尽可能多的自左向右将运算符结合在一起 例如 a b表示为 a b而不是a b 5 在调用函数时 实参的求值顺序一般为自右向左 而不是PASCAL语言那样自左向右 例如 inta 1 printf d d d a a a 输出的结果为3 2 1而不是1 2 3 2 7数值表达式 例2 1 引用前增量和后增量运算 includeintmain 显示m 和 m的区别intm n m 44 n m 前操作符m m 1 n mcout m m n n endl m 44 n m 后操作符n m m m 1cout m m n n endl 上面程序执行结果在屏幕上显示 m 45 n 45m 45 n 44语句 n m 先将m增加为45 在赋给n 语句 n m 先将m值赋给n后 才将m增加为45 所以下一条语句打印时 n为44 2 7数值表达式 2 7 7sizeof操作符用于获得一数据或数据类型所占空间的字节数 使用格式 sizeof 类型修饰符 或sizeof 表达式 2 7数值表达式 例2 2 使用sizeof运算符 includevoidmain cout Numberofbyteused n cout tchar sizeof char endl cout tshort sizeof short endl cout tint sizeof int endl cout tlong sizeof long endl cout tunsignedchar sizeof unsignedchar endl cout tunsignedshort sizeof unsignedshort endl cout tunsignedint sizeof unsignedint endl cout tunsignedlong sizeof unsignedlong endl cout tunsignedchar sizeof unsignedchar endl cout tfloat sizeof float endl cout tdouble sizeof double endl cout tlongdouble sizeof longdouble endl Numberofbyteused char 1short 2int 4long 4unsignedchar 1unsignedshort 2unsignedint 4unsignedlong 4unsignedchar 1float 4double 8longdouble 8可以看出int和long相同 unsignedint和unsignedlong相同 double和longdouble相等 2 7数值表达式 2 7 8操作符的优先级和结合性在C 程序中 当一个表达式中有多个运算符时 它的优先级和结合性就决定了各运算的顺序 优先级越高的先做运算 低的后作运算 相同时由结合性决定运算次序 运算符的结合性分左到右计算和右到左计算 如 和 左结合 表达式45 94 23 而赋值右到左 x y 56 有关操作符的优先级和结合性参考书本附录A 从表可以看出C 的优先级有如下规律 一元 二元 除赋值 三原 赋值 逗号 而二元运算符又有如下规律 算术 关系 逻辑 逻辑又有如下规律 2 7数值表达式 例2 3其分析表达式的求值顺序假定 intx 5 y 4 z 6 w 2 chara s b t 表达式1 z y2 z 4 03 z y z x4 a b y z5 a b z 66 a b y z 7 a b y z8 x 1 z9 x 1 z 10 x y x y z z 3 0书写表达式时 应注意的表达式与数学中的表达式的区别书本P 31 2 7数值表达式 2 7 9类型的自动转换 隐式转换 与强制转换1 隐式转换是由系统自动进行的类转换 C 对表达时求值时 表达式中有不同类型的操作数时 要进行类型转化 再求表达式的值 通常发生在二元运算时 它要求两个操作数一致 隐式转换的原则 1 赋值运算符 左右两边不同类型时 总是右边表达式类型转换成左边变量的类型 再赋值给左边的变量 如 inta 6 doubleb 3 5 a b cout a a b b n 输出a 3 b 3 5 上机实验 2 short型 signedshort型和所有的chart型在运算前无条件的转换为int型 3 除了上述情外 一个二元运算符的两边数就不同 则将较小类型值向较大的类型值转换 运算结果同高类型一致 可保证数据的进度不受损 类的高低次序依次 int unsigned long unsignedlong float double longdouble 4 在函数调用时 实参类型先转换成形参类型 改函数有返回值时 该值的类型与该函数类型一致 例2 4分析下面程序的运行结果 includevoidmain intx charch a x ch 200 cout x x n cout ch ch n cout ch 200 ch 200 n 上面程序执行结果在屏幕上显示 x 297ch ach 200 297强制转换 指定某种类型的数据强制性转换为另一种类型 而不必准循隐式转换的规则 有两种形式 类型名 表达式 或 类型名 表达式 2 8逻辑型数据与逻辑表达式 2 8 1逻辑型数据的基本情况使用bool为类型修饰符 值域只有两个值false 或0 表示逻辑假和true 或非零 表示逻辑真 逻辑变量的定义和初始化与整型 实型的方法相识 2 8逻辑型数据与逻辑表达式 2 8 2逻辑表达式1 无操作符的逻辑表达式逻辑常量 逻辑变量和逻辑型函数的调用2 关系操作符和关系表达式C 的关系运算符都是二元的 有 由关系运算符联起来的表达式就称为关系表达式 它只有两个值 1和0 1表示真 即关系表达式成立 0表示假 即关系表达式不成立 如 6 4的值为1 而67 67的值为0 2 8逻辑型数据与逻辑表达式 3 逻辑操作符和逻辑表达式C 的逻辑运算符包括3个 一元运算符 逻辑非 和二元运算符 逻辑与 逻辑或 逻辑非的优先级最高 逻辑与次之 逻辑或最低 用逻辑运算符连起来的表达式称为逻辑表达式 其结果只能取1或0 逻辑运算真值表如下表所示 注意 C 在计算逻辑表达式的值时 若从左到右计算到某处就已经能够确定表达式的值 则就不用继续后面部分的求值 如表达式 e1 e2 e1为0 就可以确定表达式的值 就不用求表达式e2的值了 同样 e1 e2 e1为真 就知表达式的值 不用求e2 2 8逻辑型数据与逻辑表达式 2 8 3复合条件逻辑与 和逻辑或 都用于构造复合表达式 其左右两边的操作对象称为子对象 子对象1 子对象2表示两个子条件同时成立时这个复合条件成立 子对象1 子对象2表示两个子条件有一个成立时这个复合条件成立 2 8逻辑型数据与逻辑表达式 2 8 4相反条件6个操作符可以分为3对 和 和 利用这种配对关系 可以构造出一个条件相反的条件 如x y和xy的相反条件 x y 2 8逻辑型数据与逻辑表达式 2 8 5等价条件若两个表达式在任何情况下同为true或同为false 则称这两个表达式为等价表达式 分三组情况 相反条件的相反条件等价于原条件 对于 和 起到分配率的作用 注意 和 的相互调换 交换律适用于逻辑与和逻辑或这两种操作 2 8逻辑型数据与逻辑表达式 2 8 6永假条件和永真条件条件表达式永为真称为永真条件 条件表达式永为假称为永假条件 如书本例子所示 2 8 7逻辑型与其他数据类型的关系反映在以下几点 如书所示 总之一句话 0就是假 1就是真 注意 数值型数据与逻辑型数据同时出现在同一表达式中 逻辑型数据将无条件的转化为数值型数据0和1 任何非零数值对逻辑型变量赋值都转化成1 如书上例子所示 2 8逻辑型数据与逻辑表达式 2 8 8条件运算符条件运算符 是C 中为唯一的一个三元运算符 其表达形式 e1 e2 e3 其中e1 e2和e3都为表达式 条件操作符执行的操作 先计算e1的值 若非0 则计算e2的值作为整个表达式的值 e1的值为非0 计算e3的值作为整个表达式的值 如 wqp x y 10 20 2 9自定义类型修饰符 自定义类型修饰符就是用一个自定义的标识符来代表一个特定的数据类型 自定义格式 typedef修饰符类型新的标识符如 typedefintshijian好处 1 提高程序的可靠性 2 提高程序的可维护性 3 避免类型使用上的不一致 2 10表达式的副作用与表达式语句 表达式分为无副作用和有副作用的表达式两类 在C 表达式中 需要提取参与表达式计算的变量的值 但通常不会改变它们的值 这就是无副作用 如k m 2 10表达式的副作用与表达式语句 2 10 1表达式的副作用在C 表达式中 在其求值过程中不但要提取变量的值 还可能改变它们的值 这就是副作用 相应副作用的操作符有 如书所示 它只能用于变量 它们的特点 除了后增1和后减1以外 作为操作结果的表达式的值就是所作用的变量所获得的值 操作结果 表达式的值 存放在变量中 注意 作用于变量的操作只能施加于变量对象 当若干个作用于变量的操作施加于同一个变量时 除了最后一个外 不得有后增1和后减1 2 10表达式的副作用与表达式语句 2 10 2表达式副作用的应用 逗号操作符与逗号表达式 逗号操作符为 格式 表达式1 表达式2 由逗号操作副构成的表达式称为逗号表达式 上式表达式的值为表达式2 其类型与表达式2相似 2 10 3表达式副作用的应用 表达式语句C 中任何一个表达式都可以作为一个语句来使用 称为表达式语句 表达式作为语句使用时 它的值被舍弃不用 其语句通过它的副作用体现出来 因而把没有副作用的表达式作为语句使用毫无意义
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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


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

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


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