基本数据类型、运算符和表达式.ppt

上传人:tia****nde 文档编号:8769099 上传时间:2020-03-31 格式:PPT 页数:44 大小:411.86KB
返回 下载 相关 举报
基本数据类型、运算符和表达式.ppt_第1页
第1页 / 共44页
基本数据类型、运算符和表达式.ppt_第2页
第2页 / 共44页
基本数据类型、运算符和表达式.ppt_第3页
第3页 / 共44页
点击查看更多>>
资源描述
第二章基本数据类型 运算符和表达式 2 1C语言的数据类型 2 1 1概述程序设计主要解决两个问题 一个是动作 即怎样做的问题 这由语句来实现 另一个是动作的对象 即数据的存放问题 这由数据类型来决定 世界上著名的计算机科学家沃斯 N Wirth 提出这样一个公式 程序 数据结构 算法为什么要规定数据类型呢 不同数据类型的数据在内存中占据不同长度的存储区 2 一种数据类型对应着一个值的范围 3 一种数据类型对应着一个运算集 2 1 2数据类型 数据类型 1 2 2常量 2 常量 程序运行过程中其值不发生变化的量 三类常量 数值 字符和字符串 2 2 1数值常量一 整数常量的表示1 计数制的通用表示方法A an 1 bn 1 an 2 bn 2 a1 b1 a0 b0 a 1 b 1 a 2 b 2 a m b m基数 b 所含数码的个数权 bx 表明数码所在的位置数码 0 b 1 整数常量 实数常量 数值常量 二进制数 基数 2权 2x数码 0 1例如 1010 11 1 23 0 22 1 21 0 20 1 2 1 1 2 2 10 75二进制数权值 1286432168421注 计算机中使用二进制编码表示数据 且只存在二进制 2 十进制表示基数 10权 10 x数码 0 9例如 123 45 1 102 2 101 3 100 4 10 1 5 10 2 3 八进制表示基数 8权 8x数码 0 7例如 023 2 81 3 80 19注 八进制是二进制的短格式计数法 一位对三位 例如 023对应的二进制数为010011注 C语言中八进制数第一个数字必须为0 八进制标志 例如 0213 030 056 01234 十六进制表示基数 16权 16X数码 0 9 A B C D E F例如 0XBF3C 11 163 15 162 3 161 12 160 48956 注 十六进制是二进制的短格式计数法 一位对四位 例如 0XBF3C对应的二进制数为1011111100111100注 十六进制数前两个数字必须为0X 十六进制标志 例如 0X213 0X30 0X56 0X12A二 整数常量的几种表示方式之间的转换 红色 连续除基数 取余数直到商为零浅蓝 按权值位展开 黄色 借助二进制数转换 1 十进制变八进制或十六进制 红色 1 将139变为八进制数 0213 8139817余382余10余2将3158变为十六进制数 0XC56 2 八进制或十六进制变十进制 浅蓝 1 将0213变为十进制数 139 0213 2 82 1 81 3 80 139 2 将0XC56变为十进制数 3158 3 八进制与十六进制变换 黄色 1 将0X1A3变成八进制数 0643 P19 2 将0334变为十六进制数 0XDC P19 三 整数常量的取值范围短整型数 基本整型数 长整型数 四 溢出整数的值超出了所能表示的范围 有符号短整型 16位 32768 32767 无符号短整型 16位 0 65535 有符号整型 16位 32768 32767 无符号整型 16位 0 65535 有符号长整型 32位 2147483648 2147483647 无符号长整型 32位 0 4294967295 五 实数实数只使用十进制形式表示两种表示方法 小数形式与指数形式1 小数形式 由整数部分 小数点 小数部分组成2 7180 123123 0 123123 0 02 指数形式 整数部分 小数部分 e前部分称为尾数 表示实数的有效值 符号表示整体的正负 e后部分称为阶码 表示小数点在尾数基础上的移动位数 符号表示移动的方向例如 3 14e2 3 14e 2实数的分类 单精度 例如 3 1415f双精度 例如 3 1415长双精度 例如 3 1415L 实数取其值的绝对值范围 当实数超出它的类型所能表示的范围时产生溢出 如果实数的绝对值小于所能表示的最小值则产生下溢 例如 实数1 7e 309和 1 7e 309均产生下溢 因为 1 7e 309 1 7e 308 上溢时将产生错误的结果 实数又分为单精度 float 双精度 double 和长双精度 longdouble 三类 实数的缺省类型为双精度数 double型 在实数后面加后缀字母f或F表示单精度数 float型 例如3 14159F 在实数后面加后缀字母l或L表示长双精度数 longdouble型 例如1 7e 309L 单精度实数具有6 7位十进制有效数字 双精度实数具有15 16位十进制有效数字 长双精度数具有18 19位十进制有效数字 2 2 2字符常量一对单引号括起来的单一字符 例如 A 2 字符常量在内存中占一个字节存放 存放的值为该字符的ASCII码值 美国标准信息交换码ASCII码 AmericanStandardCodeforInformationInterchange 前32个 0 x0 0 x1f为控制字符 是空格 编码为OX20 3 编码为OX33 9 编码为OX39 A 编码为OX41 Z 编码为OX5A a 编码为OX61 z 编码为OX7A 2 2 3转义字符用于表示一些没法表示的字符 例如控制字符 单引号等两种表示形式 1 反斜杠后面跟一个字符例如 0 空字符 n 换行 t 横向跳格 b 退格 r 回车 字符 单引号 双引号2 反斜杠后面跟一个字符的ASCII码 两位十六进制数 xhh或三位八进制数 ddd 例如 换行字符可以表示为 n 012 12 XA 2 2 4字符串常量一对双引号括起来的零个或多个的字符序列 字符序列中的字符个数称为字符串的长度 例如 thisisastring n thisisa c program 长度为0的字符串 即一个字符都没有的字符串 称为空串 表示为 一对紧连的双引号 在存储字符串常量时 由系统在字符串的末尾自动加个空字符 0 作为字符串的结束标志例如 有一个字符串 CHINA 它在内存中的实际存储如下所示 字符串如果有n个字符 则占用n 1个内存空间 字符串必须写成一行 如下写法是错误的 printf Hello howareyou 字符串常数必须写成一行 如果一行写不下 则有两种方法可以将行扩展到下一行 printf hello howareyou 两个字符串中间只有空白字符 分隔符 认为这是一个字符串 2 续行符printf hello howareyou 2 2 5符号常量将一个常量定义为一个标识符 这个标识符可以代替对应的常量 称为符号常量 例如 definePI3 1415926 符号常量名使用大写字母 使用符号常量的优点 1 输入很长的常量可以避免出错 简化输入 2 含义直观 3 修改容易例如 计算相同半径下的圆周长 圆面积和圆球体积 definePI3 14159main main floatl s v r floatl s v r printf inputr printf inputr scanf f 2 3变量及数据类型 2 3 1变量和变量的地址变量 程序运行中可以改变的量 本质是内存中的一块存储区 变量名 是这块存储区的首地址的符号标识 通过变量名找到这块存储区在内存中的位置 找到该块存储区内存储的内容 注 使用变量名表示存储的数据 使用 变量名表示地址 变量类型 表明这块存储区的大小 以及施加在这块存储区内存储的内容上的操作范围 在程序运行时 变量的值存储在一定的存储单元中 为此 须弄清楚变量名和变量值这两个不同的概念 如左图所示 存储某变量值的存储单元的首地址称为变量的地址 如右图所示的单精度实型变量average 是具有4个字节的存储单元 它们分别是单元4000 4003 而4000就称为变量average的首地址 在C语言中 变量的地址用变量名前加 符号表示 即 average 或者说 average的值就是4000 变量名floataverage average 4000sum变量值400140024003存储单元 30 2 3 2基本数据类型变量一 整型变量包括基本整型 短整型和长整型 ANSIC规定long不短于int short不长于int 具体实现取决于计算机系统 1 整型变量的类型标识符有符号短整型 signed short int 无符号短整型 unsignedshort int 有符号基本整型 signed int无符号基本整型 unsigned int 有符号长整型 signed long int 无符号长整型 unsignedlong int 例如 inta 取值范围为 32768 32767unsignedintb 取值范围为0 65535 二 计算机中数的表示无符号数表示00000000 00000000000000000 011111111 2551111111111111111 65535表示有符号数 加正负号 用0和1代表正负 用某种编码方式使符号位也直接参与运算 不用特殊处理并得到正确结果机器数 符号数值化了的数 最高位为符号位 1表示负号 0表示正号 其余为真值 原码表示法 符号 绝对值例如 3 原码 00000011 03H 3 原码 10000011 83H 0 原码 00000000 00H 0 原码 10000000 80H 八位 十六位 补码表示法 计算机中有符号数用补码表示正数的补码 正数的原码负数的补码 该负数相对应的正数的补码按位取反再加一例如 46 补码 46 补码 0010111011010001 按位取反 11010010 D2H 加一 n位补码的表数范围 2n 1 N 2n 1 1n 8 128 N 127n 16 32768 N 32767 三 实型变量实型变量为 单精度型 双精度型和长双精度型 单精度 float 四个字节存储 双精度 double 八个字节存储 长双精度 longdouble 字节数 8 取决于计算机系统 取值范围 单精度型 有6 7位有效数字 范围约为 3 4e 38 3 4e 38 双精度型 有15 16位有效数字 范围约为 1 7e 308 1 7e 308 长双精度型 如TurboC中的长双精度型变量的值在内存中占10个字节 四 字符变量用于存放字符常量 存放的是字符的ASCII码 类型标识符为char 2 3 3变量说明变量遵循先定义 说明 后使用的原则 变量说明的目的 在编译时便于发现未经定义的变量名 2 根据类型信息来检查对变量施加的运算是否合理 3 编译时根据类型为变量分配固定长度的存储单元 并确定数据在内存中的表示方法 变量说明形式 存储类别 存储类别决定变量的存储位置 同时也决定变量的生存期和作用域 数据类型用于指明变量名表中所列变量的数据类型 例如 intnumber score unsignedlongdistance 例2 1 不同整型变量的混合运算 main inta b c d x y unsignedinte a 20 b 15 c 50 d 10 e 25 x a b e y c d e printf na b e d c d e d n x y 运行结果为 a b e 30 c d e 65 例2 2 整型数据的溢出问题 main inta x unsignedintb y a 3 b 65532 x a b y a b printf x d y u n x y 运行结果为 x 1 y 6553500000000000000113 a 111111111111110065532 b1111111111111111 例2 3 字符型数据和整型数的混合运算 main charc1 c2 c3 c1 A 3 c2 65 c3 A printf c c c n c1 c2 c3 printf d d d n c1 c2 c3 运行结果如下 D A A68 65 65 2 3 4变量的初始化变量说明只是指定了变量的名字和数据类型 并没有给它们赋初值 但程序中有些变量在使用前必须赋初值例如 作为计数器 n n 1 使用的整型变量n通常要置初值0在C语言程序中 没有赋初值的变量并不意味着该变量中就没有数值 因为该变量所标识的存储单元中还保留着以前使用该单元时留下的内容 只是尚未对该变量定义特定值 于是 直接引用该变量就会产生莫名其妙的结果 没有赋值的变量内存单元会有随机值存在 变量赋初值的一般形式 例如 intn 0 s 1 doubleprice 35 5 intx y 10 z 2 4运算符和表达式 2 4 1概述运算符 C语言中用于描述数据运算的特殊符号 操作数 运算符的运算对象 常量 变量 函数等 表达式 用运算符将C语言的各种运算对象连接起来 组成符合C语言语法要求的式子 一个常量或变量也可称为表达式 目 对一个运算符而言 参加运算的操作数的个数 单 双 三 例如 a b sin x 2优先级 运算符的优先级 规定表达式中不同运算符相邻出现时 运算符的计算顺序 优先级高的运算符先进行计算 结合性 C语言特有的 用来规定同样优先级的运算符相邻出现时表达式的计算方式 计算方向 例如 a b c d a b c d i i 注 括号可以用来改变表达式的优先级和结合方式 2 4 2算术运算符和算术表达式1 基本算术运算符 加法或正值运算符 减法或负值运算符 乘法运算符 除法运算符 求余数运算符 1 整数除法和实数除法整数除 两个操作数全是整数 商为整数 小数部分被舍弃 例如 5 2 2 10 3 3实数除 两个操作数只要有一个是实数 商为实数 例如 3 0 5 0 0 63 5 0 0 6 2 关于求余数运算 两个操作数必须全为整数 结果为整数 符号与被除数相同例如 53 7 453 7 4 53 7 4 3 混合运算运算符两侧的数据类型可以不同 系统先将两个运算对象转换成相同的数据类型 再进行实际计算 这种由混合运算引起的类型转换是自动进行的 例如 a 2 718 b 10 5 2 a b 设a和b是实型变量 转换原则 表示范围小的类型转换为表示范围大的类型2 自增 自减运算符 和 功能 将一个变量加1或减1 常用来修改计数次数 下标或指针 i ii i例如 intx a 5 x a x a a a 1x a x a a a 1x a a a 1 x ax a a a 1 x a 1 操作数必须是变量 和 运算符的操作数只能是变量 而不能是常量或表达式 例如 25 是不合法的 i j 是不合法的 2 单目运算符 优先级与取负数运算符 相同 结合方向是从右至左 例如 inti 4 printf d i 输出 4 i最终等于5 相当于printf d i 注意 1 优先级和结合性 单目运算符 和 是从右至左结合的 和 是从左至右结合的 2 书写表达式要使用括号使表述清晰例如 i j写成 i j 2 4 3赋值运算符和赋值表达式赋值 把表达式的值存入变量所对应的存储空间1 简单赋值运算符 格式 变量名 表达式 如果 两边的类型不一致 系统会将右边的数据转换为左边变量的类型 截取或扩展 例如 inti j doubled 2 6 charc1 a c2 j c1 c2 102 i d 3 结合性为从右至左 例如 x y 5 x y 5 2 算术复合赋值运算符 3 2 4 4关系运算符和关系表达式关系运算 对两个操作数进行比较的运算 由关系运算符实现 大于 大于等于 小于 小于等于 等于 不等于 1 优先级与结合性 c dx y za x y z例如 intx 2 y 3 求z1和z2的值z1 0 x 9z2 3 1 x 1 y 2 a b c d x y z a x y z z1 0 x 9 z2 3 1 x 1 y 2 2 4 5逻辑运算符和逻辑表达式逻辑运算符用来描述同时满足 只要满足其一 相反的条件等关系 逻辑与 逻辑或 逻辑非 1 逻辑运算真值表 2 优先级与结合性 算术运算 关系运算 赋值运算 是右结合方向 与 是左结合方向 例如 写出下列表达式的执行顺序x y a a c 9 注意 在计算逻辑表达式时 并不是所有的表达式都要被求解 逻辑与 如果第一个操作数被判定为 假 系统不再判定或求解第二操作数 逻辑或 如果第一个操作数被判定为 真 系统不再判定或求解第二操作数 例如 假设n1 n2 n3 n4 x y的值分别为1 2 3 4 1 1 则求解表达式 x n1 n2 y n3 n4 后x和y的值 条件或逻辑表达式用整数 表示结果 逻辑真 用 表示结果 逻辑假 在判断一个数据的 真 或 假 时 却以 和非 为根据 如果为 则判定为 逻辑假 如果为非 则判定为 逻辑真 例如 x 10 y 5 z a 求下列表达式的值 xy z x 010 0 3 2 4 6条件运算符 1 格式 表达式1 表达式2 表达式3 2 运算规则 如果 表达式1 的值为非0 即逻辑真 则运算结果等于 表达式2 的值 否则 运算结果等于 表达式3 的值 3 优先级与结合性仅高于赋值运算符 逗号运算符 右结合性 例如 从键盘上输入一个字符 如果它是大写字母 则把它转换成小写字母输出 否则 直接输出 main charch printf Inputacharacter scanf c 例如 写出下列表达式的计算顺序x 0 1 x0 1 x 0 1 0 2 4 7其它运算符1 逗号运算符 1 格式表达式1 表达式2 2 功能依次计算表达式 以最后一个表达式的值作为逗号表达式的值 该表达式用于只允许出现一个表达式的地方计算多个表达式的值 主要用于循环语句的控制部分 2 求字节运算符 sizeof 1 格式sizeof 数据类型 sizeof 表达式 功能是求表达式的结果或数据类型所占的字节数 x 1 25 x 4 3 6结果为整型值18z x 6 y x 2 y x 10 x y z均为int类型 结果z为整型 int 值28max a b c d 是一个函数调用表达式 这个函数调用表达式用了三个实参 a b c d 例如 sizeof float 的值为4 表明单精度实型占4个字节 sizeof 2 3 的值为2 表明整型占2个字节 2 5运算符的优先级和结合性运算符的优先级和结合性见P48表2 9 2 6数据类型转换不同数据类型的数据或变量进行混合运算时 需要进行数据类型转换转换方式有两种 隐式类型转换 显式类型转换 2 6 1隐式类型转换 语言按照一定的类型转换规则自动进行的转换转换规则 1 运算中将所有char型和short数据都转换成int型 float型转换成double型 提高运算精度 2 低级类型向高级类型 占存储空间大 进行转换 3 赋值运算符右端值的类型向左边变量的类型进行转换 2 6 2显式 强制 类型转换转换方法 类型标识符 表达式例如 x为int型 y为float型 z为char型 求出下表达式的类型x yx int y char x z char x z
展开阅读全文
相关资源
相关搜索

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


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

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


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