C课件2数据类型与表达式.ppt

上传人:max****ui 文档编号:8314700 上传时间:2020-03-28 格式:PPT 页数:63 大小:1.57MB
返回 下载 相关 举报
C课件2数据类型与表达式.ppt_第1页
第1页 / 共63页
C课件2数据类型与表达式.ppt_第2页
第2页 / 共63页
C课件2数据类型与表达式.ppt_第3页
第3页 / 共63页
点击查看更多>>
资源描述
第二章数据类型与表达式 C 的数据类型常量变量C 的运算符算术运算符与算术表达式赋值运算符与赋值表达式逗号运算符与逗号表达式 2 1C 的数据类型 includeusingnamespacestd intmain 求园的周长和面积 doubler girth area constdoublepi 3 1415 cout r girth 2 pi r area pi r r cout radius r endl cout girth girth endl cout area area endl return0 程序设计主要完成两方面工作 数据描述数据处理 C 可以使用的数据类型 短整型 shortint 整型整型 int 长整型 longint 字符型 char 单精度型 float 基本类型浮点型双精度型 double 长双精度型 longdouble 布尔型 bool 空类型 void 数据类型枚举类型 enum 数组类型type 非基本类型结构体类型 struct 共用体类型 union 类类型 class type 指针类型 程序中的数据必定属于某种数据类型 了解各类型数据 1 描述方式 2 存储格式 数据在内存中存储示意图 一个二进制位 bit 存储阵列 数据在内存中存储示意图 存储阵列 8位一个字节 byte 一个字符型数据 char 占1个字节 数据在内存中存储示意图 存储阵列 对16位的计算机 16位一个字 word 一个短整型数据 short int 占2个字节 数据在内存中存储示意图 存储阵列 对32位的计算机 32位一个字 word 一个整型数据 int 或单精度型数据 float 占4个字节 表2 1数值型和字符型数据的长度和取值范围 1 3 3基本类型 整型数据不写unsigned 默认带符号signed 以2个字节的整型数为例讨论数据的取值范围 2个字节的无符号整型数的取值范围 取值范围 0 65535 216 1 65536 1 65535 unsignedshort或unsignedshortint数据 将最高位作为符号位 0 正 1 负 用后15位表示数值大小 整数 0 32767 2个字节的有符号整型数的取值范围 最高位均为1 表示负整数 32768 1 short或shortint数据的取值范围 32768 1 0 32767 常量 其值不能改变包括两大类数值型常量整型常量浮点型 实型 常量字符型常量 2 2常量 intmain doubler girth area constdoublepi 3 1415 cin r girth 2 pi r area pi r r cout radius r endl cout girth girth endl cout area area endl return0 常量中没有unsigned型 但一个非负的整型常量可以赋给unsigned型的变量 整型常量亦有长短之分 若一个常量定义为长整型数 则在其后加l或L进行区分 如 32l32L564L等 内存为其分配4个字节存储 整型常量 整型常量 整型常量即是没有小数点的整数范围 231 231 1 有三种形式十进制 默认方式 43134587654八进制以0开头043056011十六进制以0 x开头0 x120 xa30 xdf includevoidmain void intint10 int8 int16 定义3个整型变量int10 10 默认为十进制int8 010 八进制int16 0 x10 十六进制cout int10 int10 endl cout int8 int8 endl cout int16 int16 endl 输出int10 10int8 8int16 16 includevoidmain unsignedshorta shortintb 1 a b cout a a endl 结果显示 a 65535 不同类型的整型数据间的赋值归根到底就是一条 按存储单元中的存储形式直接传送 a b unsignedshorta 注意 单精度float提供7 8位有效数字双精度double提供15 16位有效数字 C 中实型数据只有十进制形式小数形式和指数形式 1 3 3基本类型 实型数据 Digits Digits F f L l 只允许省略其中一个数字串 1 3 3基本类型 十进制小数形式 实型常量 F f float型L l double型 例如 2 343 141629 00 2378 0 23 2 34f3 1416L29 00 23f78 L0 23 Digits Digits Exponent F f L l 指数部分的表示形式 e E Digits 1 3 3基本类型 1 3C 的基本数据类型与存储形式 指数形式 实型常量 例如 1 23E100 23E 445 e 23 23 68E121 23E10F0 23E 4f45 e 23L 23 68E12L F f float型L l double型 实型常量 实型常量在内存均以指数形式存放N S RJS 尾数 小数 它决定有效数字 即精度 J 指数 整数 它决定数的范围R 基数 可取2 4 8 16等当计算机中出现小于机器所能表示的最小数时 机器只能当零来处理 当出现超过机器所能表示的最大数时 就会出现溢出现象 此时机器就会停止运算 2 2 3字符常量 1 普通的字符常量用单引号括起来的单个字符 a D 注意只包括一个字符 如 AB 是不合法的 区分大小写字母 如 A 和 a 是两个不同的字符常量 cout a 输出一个字母a 而不是3个字符 a 2 2 3字符常量 2 转义字符常量有些ASCII的字符代表某些操作 不能打印出来 如回车 退格等 可用转义字符表示这些字符转义字符 字符序列以 为前缀 表示改变后面字符序列使其成为控制符或字符值 2 2 3字符常量 3 字符数据在内存中的存储形式如 字符常量 a 和 b 内存存放的是 a 的ASCII码97 61H b 的ASCII码98 62H 可见 字符数据的存储形式与整数的存储形式类似 例2 1 将字符赋给整型变量 includeusingnamespacestd intmain inti j i和j是整型变量i A 将一个字符常量赋给整型变量ij B 将一个字符常量赋给整型变量jcout i j n 输出变量i和j的值 n 是换行符return0 执行时输出6566 2 2 3字符常量 可见 在一定条件下 字符型数据和整型数据是可以通用的 但应注意字符数据只占一个字节 它只能存放0 255范围内的整数 例2 1 将字符赋给整型变量 includeusingnamespacestd intmain charc1 c2 c1和c2是字符型变量c1 65 将一个数值常量赋给字符型变量c1c2 B 将一个字符常量赋给字符变量c2cout c1 c2 n 输出c1和c2的值return0 执行时输出AB 2 2 3字符常量 改程序 2 2 3字符常量 4 字符串常量用双引号括起来的若干个字符 如 Hello a b Li ping 字符串常量在内存中的存储形式 abc 在内存中占4个字节 编译系统会在每个字符串之后自动加一个 0 作为字符串结束标志 0 的ASCII码值为0 字符串常量举例 以下字符串常量在内存中各占多少字节 hello 101ab n cd 区分字符常量与字符串常量一个字符 a 一个字符串 a path d math ex1 c 6个字节 最后1个是 0 8个字节 最后1个是 0 includeusingnamespacestd intmain cout x07operation tsystem n cout 101 t A 012 return0 1 3 3基本类型 转义字符举例 ASCII码 x07 是响铃 可写成 a 字符 A 的ASCII码 与 A 等价 operationsystemAA 执行结果 用一个符号名代替一个常量 称为符号常量 definepi3 14159 没有分号intmain floatr girth area cout r girth 2 pi r area pi r r cout radius r endl cout girth girth endl cout area area endl return0 2 2 4符号常量 符号常量的作用 含义清楚 可 一改全改 2 3变量 变量 在程序运行期间其值可以改变的量 一个变量有变量名 由程序员定名 不同数据类型的变量在内存中占据不同字节数的存储单元 在该存储单元中存放变量的值 变量名必须遵循的命名规则 只能由字母 数字和下划线3种字符组成第一个字符必须为字母或下划线 避开关键字 系统函数名和类名 下列是合法的变量名 ax1no 1 a2csumNamename下列是不合法的变量名 2ax y a ba bintfloat区分大小写 Name name不同 2 3 2变量名定名规则 变量的使用原则 先定义 后使用如 inta a 3 变量定义的一般形式 变量类型变量名表列 floata b d e charc1 c2 一旦定义的变量 系统会为它按数据类型开辟指定的空间 2 3 3定义变量 变量在内存中 inta0X0066FDF4 doubleb0X0066FDEC 例如 inta doubleb 内存分配 变量a的地址 变量b的地址 对于任一变量 编译程序为其分配若干个字节 连续的 的内存单元 以便保存变量的取值 可以在定义变量时指定它的初值 初值可以是常量 也可以是一个有确定值的表达式 如 floata 83 5 d 81 2 3 4 b intm 2 3 在定义变量的同时给变量赋值 即在内存中开辟出一个空间后马上给此空间赋值 但这个空间的值并不是固定不变的 在程序的运行中一样可以改变 未赋初值的变量 其初值是一个不可预测的值 ints 2 3 4为变量赋初值 加上关键字const 则变量的值在程序运行期间不能改变 这种变量称为常变量 在定义常变量时必须同时对它初始化例 constinta 3 b 3 6 constdoublepi 3 1415 2 3 5常变量 intmain doubler girth area constdoublepi 3 1415 cin r girth 2 pi r area pi r r cout radius r endl cout girth girth endl cout area area endl return0 区别符号常量和常变量 符号常量 definepi3 1415只是用一个符号代替一个字符串 它没有类型 在内存中没有以它命名的存储单元常变量constdoublepi 3 1415 它具有变量特征 有具体类型 在内存中有以它命名的存储单元二者实现方法不同 但在使用方面相同 运算符是以简洁的方式表达对数据操作的符号 2 4C 的运算符 运算规则优先级结合性 基本算术运算符有 2 5算术运算符与算术表达式 两个整数相除结果为整数1 2 05 2 2整数求余的余数符号与左边数的符号相同 3 2 1 3 2 13 2 1 3 2 18 4 0 操作数可以是整型数 实型数或字符型数 操作数只能是整型数或字符型数 注意 算术表达式用算术运算符连接起来的式子运算对象包括常量 变量 函数等 a b c 1 5 abs 1 a 算术运算符的优先级先乘除 后加减 算术运算符的结合性同级自左至右 2 5 2算术表达式和运算符的优先级与结合性 例 定义以下不同类型的变量charc a inti 3 folatf 3 5 g 1 2 doubled 5 6 10 3 b 2c 1 a b c i ff c d b 3 14 C 中以下式子均合法 2 5 3表达式中各类数值型数据间的混合运算 不同类型数据混合运算 系统自动将不同类型转换成同一类型 例 定义以下不同类型的变量charc a inti 3 folatf 3 5 g 1 2 doubled 5 6 10 3 b 2c 1 a b c i ff c d b 3 14 C 中以下式子均合法 2 5 3表达式中各类数值型数据间的混合运算 转换规则 向高看齐 int int int double double 1 1 6 1算术表达式 2 5 4自增和自减运算符 程序设计中 常对变量进行如下操作 i i 1i i 1此时 变量i称为计数器定义 inti 0 1 i i 1 C 提供的自增和自减算符 2 5 4自增和自减运算符 1 6 1算术表达式 2 5 4自增和自减运算符 3 inti j i 3 j i i 4j 4 在前 先运算 后赋值 inti j i 3 j i i 4j 3 在后 先赋值 后运算 4 4 3 3 4 1 6 1算术表达式 注意 自增 自减运算符只能用于整型变量 不能为常量或表达式 例 5 a x y i 均为错误 2 5 4自增和自减运算符 运算符的结合方式 前置时 自右至左例 已知 inta 0 b 0 c c a 等价于c a a a 1 c a b等价于c a b等价于c a b a a 1 后置时 自左至右C a等价于a a 1 c a 1 6 1算术表达式 2 5 4自增和自减运算符 注意 编译扫描器优先向左识别算符 2 5 4自增和自减运算符 注意滥用自增 自减运算符的副作用 如已知 inta 3 b c cout a a 结果 43 前置 系统从右到左扫描 最后a 5 b a a b 6 前置 系统以3作为 a 的值 得b 最后a 5 c a a c 10后置 系统自左至右扫描后 得a 5 并将它作为式中 a 的值 两个 a 相加得10 总之 不要写出别人看不懂 自己也不知道系统会怎样执行的程序 程序编制者利用强制类型转换运算符将一个表达式转换成所需类型 例如 double 将a的值转换成double类型 float 5 3 将5 3的值转换成float型 int 5 5 2 int x y int x y 将x y的值转换成整型 int x y 只将 的值转换成整型 然后与 相加 x的类型不变 强制类型转换适用于自动类型转换不能实现而又必须类型转换的场合 如 的运算对象 2 5 5强制类型转换运算符 变量 表达式 2 6赋值运算符与赋值表达式 赋值运算符 功能 将运算表达式的值赋给左边的变量 左边必须是变量名 若 两边变量类型不同或同类型不同长度时 系统自动进行转换 隐式转换 转换原则 根据左边变量的类型转换 赋值过程中的隐式类型转换 例2 5将有符号数据传送给无符号变量 includeusingnamespacestd intmain unsignedshorta shortintb 1 a b cout a a endl return0 运算结果 a 65535 赋值过程中的自动类型转换 整型 实型 取整inta longb floatx 2 3 doubley 3 5 实型 整型 数值不变 以浮点形式存储 a x a 2b y b 3a y a 3 a 赋值运算符两边不同类型 b 赋值运算符两边同类型 不同长度 float double 在取值范围内截取相应的有效位数floatx doubley y 1 23456789e12x y y 1 23456789e56x y 数据溢出 实型 长 实型 短 以长实型表示并存储 实型 赋值过程中的自动类型转换 少字节 多字节1 若多字节变量为unsigned 则转换后多余字节补零 unsigned shortinta 1 unsignedlongb b a a b 整型数赋值过程的自动类型转换 有符号型 符号扩展 shortinta 1 longb b a 少字节 多字节2 若多字节变量为有符号型 则转换后扩展少字节的最高位 转换后 数据的符号不变 a b 整型数赋值过程的自动类型转换 多字节 少字节 低位照搬 高位截断 inta 1 shortintb b a b 1 inta 65535 shortintb b a b 1 b a 整型数赋值过程的自动类型转换 复合赋值运算 双目算符op的表达式 A AopB可以缩写成 Aop B c c k c k x x y 8 x y 8 x x 3 x 3 x x 3 x 3 例 2 6 3复合的赋值运算符 赋值运算符的结合性为自右至左 2 6 4赋值表达式 a b c 5等价于 a 5 b 5 c 5a b 4 c 6 等价于 b 4 c 6 a 4 6 10a b 等价于 a a b 等价于 a a b b b 1 a 12 a a a a 12 a a a a 12 12 12 132 a a 132 132 132 264 132 264 2 6 4赋值表达式 赋值运算符的结合性为自右至左 1 inti 0 j 0 2 inti 0 j 1 i 3 j i i j 3 3 inti 1 j 0 4 inti 1 j 1 j i i 3 2 i j 2 i 3 j 1 i 3 j 3 i 6 j 6 i 4 j 3 下列语句中表达式中i j的值各为多少 2 7逗号运算符和逗号表达式 逗号表达式格式 表达式1 表达式2 表达式3 表达式n其中 称为逗号运算符 运算级别最低 功能 顺序执行表达式1 表达式2 表达式3 表达式n 最后获得逗号表达式的值 逗号表达式示例 1 a 3 5 a 4 2 a 3 5 a 4 a 5 3 b a 3 6 3 4 b a 3 6 a 15 a 15 60 60 15 a 15 60 60 20 20 3 a 3 18 18 b 18 3 a 3 b 3 18 18 2 7逗号运算符和逗号表达式
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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


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

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


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