c03-数据类型表达式指针.ppt

上传人:max****ui 文档编号:8288711 上传时间:2020-03-28 格式:PPT 页数:70 大小:414KB
返回 下载 相关 举报
c03-数据类型表达式指针.ppt_第1页
第1页 / 共70页
c03-数据类型表达式指针.ppt_第2页
第2页 / 共70页
c03-数据类型表达式指针.ppt_第3页
第3页 / 共70页
点击查看更多>>
资源描述
1 举例 例 已知三条边a b c 求三角形面积 计算三角形面积的海伦公式 其中 设定义 整型变量a b c实型变量s area 2 程序如下 include math h main inta b c floats area scanf d d d 程序运行情况如下 3 4 5 area 6 000 3 本章主要内容 本章介绍C语言的基础 包括 数据类型运算符和表达式均是程序设计的基本知识为什么讨论这些知识 通常程序要对数据进行操作处理 处理的对象是数据通过运算符和表达式进行操作 4 例如 例 计算圆的面积 半径为5cm 程序如下 main floatr area r 5 area 3 14 r r printf f n area 运算结果是输出圆的面积 78 500000 程序中用到的数据 r area 5 3 14对数据进行的运算 5 C语言的数据类型 C数据类型 本章讨论基本类型数据 6 2 2 1整型数据 1 整型数据的类型基本整型数据int 分配2Byte短整型数据shortint 分配2Byte长整型数据longint 分配4Byte整型数据均以二进制补码形式存储 问题 为什么要采用补码 如何表示 7 计算机中正 负数的表示 例如 109 1101101 2要区别 109和 109方法是 将符号也数码化即 正的符号 用0表示负的符号 用1表示 计算机中的数表示方法是 符号位 二进制数值 以8bit为例 109 1101101 01101101 109 1101101 11101101 8 问题 计算机计算复杂化 例如计算 19 22 10010011 00010110 解决的方法是 使用反码或补码的表示方法 按前述表示的编码称为原码 即能将减法一律转换为加法 需要判断符号是否相同 如果相同 结果符号不变 并进行绝对值相加如果不同 结果取绝对值大的数的符号 并进行绝对值相减 9 原码 反码和补码 正数 原码 反码 补码相同符号位为0 数值为对应的二进制数 109 01101101 原 01101101 反 01101101 补负数 原码符号位为1 数值为绝对值的二进制数 109 11101101 原反码符号位为1 数值为绝对值的二进制数各位变反 109 10010010 反补码符号位为1 数值为绝对值的二进制数各位变反加1 109 10010011 补 10 2 有符号和无符号整型数据 有符号的整型数据signedint无符号的整型数据unsignedint区别是将最高位看作符号位还是数据位 例如 1111111110101000作为有符号数使用时 最高为符号位为负数 值是 88 再求一次补 作为无符号数使用时 最高为数据位为无符号的数 值是 65448 11 例如 main unsignedintm m 65448 printf nm d n m printf m u n m 输出结果 m 88m 65448 按有符号数输出 按无符号数输出 12 整型数据的类型及规定 方括号表示可选项int分配2Byte long分配4Byte 13 2 2 2实型数据 1 实型数据的类型单精度实型数据float 分配4Byte双精度实型数据double 分配8Byte2 实型数据的存储 单精度实型 指数部分 小数部分 小数的符号位 指数的符号位 14 实型数据的类型及规定 C标准并未具体规定各种实型数据所占字节数 也不规定具体小数和指数部分的位数 一般而言 小数部分位数多 数据表示的有效数字多 精度就高 而指数部分位数多 则表示的数据范围更大 有效数字的意义 15 2 2 3字符型数据 字符型数据char 分配1Byte字符型数据是指字母 数字 各种符号等用ASCII值表示的字符例如 a 是一个char类型数据 称作字符常量 存储 01100001 16 2 3常量 变量与标准函数 主要内容 常量变量 17 2 3 1常量 在运行程序的过程中值保持不变的量1 整型常量十进制 0 9八进制 0 7 以0开头十六进制 0 9 A F a f 以0 x或0X开头 例如 100 80 12301002401000730 x380 x100X100XFF0 x0a 18 1 整型常量 整型常量的类型 根据值大小默认类型 整型常量后面加l或L 则认为是longint型例如 123L 0L 432l 0 x100l 注意 十六进制常量中可以使用大写字母A F 也可以使用小写字母a f 八进制常量中不能出现数字8或9例如 018 0921非法 19 2 实型常量 十进制形式1 01 12 0 12 00 0指数形式1e31 8e 3 123E 6 1E 3 指数只能是整数 而尾数则可以是整数也可以是小数 无论指数或尾数均不能省略例如 1e E 5 E 3非法实型常量的类型 默认为double型 后面加F 或f 则强调表示该数是float类型例如 3 5f 1e2F 20 3 字符型常量 可视字符常量单引号括起来的单个可视字符例如 a A 3 等转义字符常量单引号括起来的 与可视字符组合 例如 21 4 字符串常量 用双引号括起的一个字符序列例如 ABC 123 a n t nGoodmorning 字符串常量的长度 所包含的字符个数字符串常量的存储方式 所占存储单元数 串长度 1例如 字符串结束标记 22 5 符号常量 以标识符来代表的常量事先编译预处理命令define定义编译时先由系统替换为它所代表的常量 再进行编译例如 defineLEN2 5main floata b a 2 3 14 LEN b 3 14 LEN LEN printf a f b f n a b 编译前系统进行替换 23 5 符号常量 main floata b a 2 3 14 2 5 b 3 14 2 5 2 5 printf a f b f n a b define是编译预处理命令 必须以 开头编译预处理命令在第7章讨论 替换为 24 2 3 2变量 1 变量的有关概念在程序运行过程中 其值改变的数据 称为变量 变量用标识符表示 称为变量名 变量必须 先定义后使用 系统为变量分配存储单元 存储变量的值 编写程序时通过变量名来存 取变量值 例如 有变量a它的值是510 25 2 变量定义 变量定义的一般格式 数据类型说明符变量列表 例如 inti j longk m floatx y charch1 ch2 必须使用合法的标识符作变量名不能使用关键字为变量命名 26 3 变量的初始化 允许在说明变量的时候对变量赋初值 例如 inta 5 b 10 2 doublex 23 568 y charch1 a ch2 66 ch3 142 表示定义变量并对变量存储单元赋值 错误的初始化 inta 3 b b 5 floatm n 23 16 27 2 5运算符和表达式 主要内容 算术运算符和算术表达式赋值运算符和赋值表达式关系运算符和关系表达式逻辑运算符和逻辑表达式位运算符和位运算表达式条件运算符和条件表达式逗号运算符和逗号表达式其他运算符及其运算 28 运算符的有关概念 作用 对运算对象完成规定的操作运算类型 按运算对象分 单目 双目 三目按功能分 算术 赋值 关系 逻辑条件 逗号 位 其他 29 运算符的优先级和结合性 优先级指各种运算符号的运算优先顺序例如 算术运算优先于关系运算算术运算中先 后 结合性指运算符号和运算对象的结合方向分为 从左向右 左结合 和从右向左 右结合 例如 算术运算符为左结合a b 4赋值运算符为右结合a b 5 C语言规定见教材P41表2 5 30 本章涉及的运算符 sizeof 数据类型标识符 31 表达式的有关概念 什么是表达式由运算符将运算对象连接成的式子 它描述了一个具体的求值运算过程 计算表达式的值按照运算符的运算规则求值求值时注意运算符的优先级和结合性表达式值的类型自动转换强制转换 32 例如 表达式 150 b 2 12 456b a 2a a a 2 f a b c a b c max a b a ba 3 a 3 a a1 float a 6 33 算术运算 算术运算符的优先级 没有乘方运算符 要计算a3要写作a a a的连乘 或用标准库函数pow a 3 的运算对象可为各种类型数据 但是当进行两个整型数据相除时 运算结果也是整型数据 要求运算对象必须是整型数据 功能是求两数相除的余数 余数的符号与被除数的符号相同 34 自增自减运算 是单目运算符有前缀和后缀两种形式前缀形式 先自增 自减 再引用 后缀形式 先引用再自增 自减 功能 前缀形式 a等价于a a 1 a等价于a a 1后缀形式a 等价于a a 1a 等价于a a 1 表达式的值会不同 35 例如 当a 5时 a表达式的值为6 且a 6 a 表达式的值为5 且a 6 b a等价于a a 1 b a表达式的值为6 且a 6 b 6 b a 等价于b a a a 1表达式的值为5 且a 6 b 5 36 说明 和 的运算对象只能是变量 或运算结果是变量的表达式 不能是常量 或运算结果是数值的表达式 例如 5 a 2 不合法 具有右结合性 结合方向为从右到左 例如 a 等价于 a 如果有多个运算符连续出现时 C系统尽可能多的从左到右将字符组合成一个运算符例如 i j等价于 i j i j等价于 i j 37 1 自增 自减运算只能用于变量 不能用于常量或表达式 2 自增 自减运算比等价的赋值语句生成的目标代码更高效 3 自增 自减运算常用于循环语句中 使循环控制变量自动加或减1 还可用于指针变量 使指针指向下一个或上一个地址 4 表达式中包含有自增 自减运算时 特别容易出错 务请小心 请特别注意 38 例如 i 1 i i i 的值为多少呢 可能计算出是9 2 3 4 其实这是错误的 实际上计算时先对整个表达式扫描 i先自增3次 由1 2 3 4 因此计算结果应为12 4 4 4 i i i 的值又是多少呢 分析同上 应为3 当然表达式计算完成后i的值同样改变为4 39 include stdio h main inti j i j 5 printf i d j d n i j printf i d j d n i j printf i d j d n i j printf i d j d n i j printf i d j d n i j 40 main inta 5 printf d d n a a 说明 续 对函数参数的求值顺序 TurboC系统先计算最右边的参数值 再依次计算左面的参数值 例2 5 有多个函数参数且为同一变量自增的运算处理 输出结果 65 41 说明 续 例 有多个函数参数且为同一变量多次自增的运算处理 main inta 5 printf d d n a a a 输出结果 711 42 赋值运算 赋值运算符 右结合 赋值表达式将表达式的值存入变量对应的内存单元中m 12b a 2m 3 n等价于m m 3 n x x 5 43 说明 赋值号左边必须是变量 右边可以是C语言任意合法的表达式例如 n t 210等价于 a b b c 10 赋值号与数学中的等号含义不同例如 数学中a b等价于b aC语言中a b不等价于b a 44 关系运算 关系运算符 左结合 c等价于a b c 与 a b c不等价关系运算符优先于赋值 低于算术 45 说明 关系运算的结果应该是逻辑值 C语言用数值用1表示逻辑真 0表示逻辑假例如 7 5的值是1 5 7的值是0 a b 的值是0 a b 的值是1即关系表达式的值 0或1实型数可进行大于或小于比较 但通常不进行 或 的关系运算 46 逻辑运算符 逻辑运算符 逻辑运算符的运算规则 47 逻辑表达式 逻辑表达式用逻辑运算符将运算对象连接成的式子例如 0 b a b c da b 5 c 4 x y z逻辑运算符的优先级和结合性 是单目运算符 右结合 高于算术 和 是双目运算符 左结合 高于赋值运算符 低于关系运算符 48 逻辑运算规则 从左到右依次进行逻辑计算运算对象为非0表示逻辑真运算对象为0表示逻辑假逻辑运算的结果为0或1例如设 a 15 b 0 c 2a b c结果为0a b c结果为1 a c b c结果为1 49 逻辑运算规则 续 运算按照从左至右的顺序进行 一旦能够确定逻辑表达式的值 就立即结束运算 逻辑运算的短路性质例如设 a 1 b 0 c 2a b c a b c 为0 运算终止 表达式值为0 为非0 运算终止 表达式值为1且a为2 b为0 c为 2 b c保持原值 50 关系与逻辑运算符的应用 表示数学公式a b c判断a b c三条线段能否组成一个三角形a b不同时为负 a b c a c b b c a a 0 b 0 a 0 a 0 b 0 b 0 a b b c 51 位运算符 位运算符的运算对象只能是整型数据或字符型数据 不能是实型数据运算对象一律按二进制补码参加运算 并按位进行运算位运算的结果是一个整型数据 低于单目 算术运算符 高于其他运算符 低于单目 算术和关系运算符 高于其他运算符 52 位逻辑运算符的运算规则 假设ai和bi均是一个二进制位 bit 例如 假设a 10 b 010求a b a b a b a 53 程序如下 main inta 10 b 010 printf d d n a 输出结果 8102 11 0000000000001010 00000000000010000000000000001000即 a b的值是8 54 移位运算 例如 a b 1等价于 a 8 b 1 例如 假设a 10 b 2 求a b 1 main inta 10 b 2 printf d d n a b 1 输出结果 409 请自行分析运行结果 55 条件表达式运算 条件运算符 条件表达式的一般形式表达式1 表达式2 表达式3例如 m 10 b 20 a bx 3 a 5 100 200 C语言中唯一的三目运算符 要正确区分用 和 分隔的表达式涉及条件运算符的优先级与结合性 56 条件运算符优先级 条件运算符优先级高于赋值 逗号运算符 低于其他运算符例如 m 10 b 20 a b x 3 a 5 100 200 等价于 m n x a 3 等价于 a 10 b 20 a b 等价于 x 3 a 5 100 200 57 条件运算符的结合性 条件运算符具有右结合性当一个表达式中出现多个条件运算符时 应该将位于最右边的问号与离它最近的冒号配对 并按这一原则正确区分各条件运算符的运算对象 例如 w x x w x y x y与w x x w x y x y 等价与 w x x w x y x y不等价 58 逗号表达式运算 逗号表达式的一般形式表达式1 表达式2 表达式n逗号表达式的值从左向右 依次对表达式求值 最后得到表达式n的值就是逗号表达式的值 例如 a 5 a a 3表达式值为18 且a 6 t 1 t 5 t 表达式值为1 且t 2 x a 3 5 a 4 赋值表达式的值为60 且x 60 a 15 59 取地址运算符 为单目运算符运算对象只能是变量运算结果是变量的存储地址例如有定义 inta student charch 可以对变量a ch student进行 运算 a ch student 60 长度运算符sizeof 为单目运算符运算对象只能是变量名或数据类型标识符运算结果为该变量或该数据类型的长度 main inta 5 doublex printf d d sizeof int sizeof a printf d d sizeof double sizeof x printf d d n sizeof float sizeof char 输出结果 228841 61 运算中数据类型的转换 1数据类型的自动转换转换原则 自动将精度低 表示范围小的运算对象类型向精度高 表示范围大的运算对象类型转换 例如有定义 inta charch 表达式 a ch 2 35La ch 2 35 62 赋值运算中的类型转换 小数部分自动补0 自动舍去实型表达式的小数部分 注意不进行四舍五入 自动截取表达式值的低字节赋值 舍去高字节 自动给高字节补0或补1 63 数据类型的强制转换 强制转换的一般形式 类型名 表达式例如 int b 3 x 31 float a 6 注意 float 22 5与 float 22 5 不同错误的类型转换 int b a 5b int 3 a 64 2 4指针和指针变量 main floatx inty 2 4 1指针和指针变量的概念 变量的两个物理意义 变量的内容 变量的地址 65 2 4指针和指针变量 main inta b c a 5 b 3 c a b 2 4 1指针和指针变量的概念 200020012002200320042005 abc 8 利用变量名存取数据的方式称为 直接存取 方式 66 C语言还提供了对内存单元的 间接存取 方式 5 3 2004 a和b相加的结果 p a b 存放到变量p所指向的内存单元中去 此时c称为指针变量p的目标变量 p c 8 main inta 5 b 3 c p p 2 4指针和指针变量 2 4 1指针和指针变量的概念 变量的地址称为变量的指针 存放地址的变量称为指针变量 67 main inta p 2004 2 4指针和指针变量 2 4 2指针变量的定义 2000 指针变量初始化 68 main inta p 间接存取运算 2004 2 4指针和指针变量 2 4 3指针的基本运算 2000 p 5 69 方法1 目标变量值不变 改变指针变量的指向求解 main inta b p1 p2 p p1 a 6 b 8max 8 min 6 2 4指针和指针变量 例 输入a b两个整数 使用指针变量按大小顺序输出这两个整数 70 方法2 利用指针变量直接改变目标变量的值求解 main inta b t p1 p2 p1 a 8 b 6max 8 min 6 2 4指针和指针变量 6
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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


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

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


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