- 1、本文档共24页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第3讲运算符表达式
第3讲 运算符、表达式
教学过程设计
新课引入
使用C语言编程解决问题时,需要对所涉及的各种类型的数据(包括常量和变量)进行操作,那么对不同类型的数据可以进行什么样的操作呢?C语言把除去输入和输出操作之外的几乎所有对数据的操作都看作是一种运算,规定了34种运算符用于表示对数据进行的操作,并规定了表达式的组成规则(即表达式的书写规则)、运算求值规则。
讲授新课
C中运算符、表达式的概念
C语言把除去输入和输出操作之外的几乎所有对数据的操作都用运算符来表示。
类别 运算符 运算符名称 () 函数调用运算符 [] 数组的元素选取运算符 结构(或联合)类型对象的成分选取运算符类 . 圆点运算符 - 箭头运算符 取地址运算符 * 指针运算符
或
间接引用(取内容)运算符 sizeof 求字节数运算符 (数据类型名) 强制类型转换运算符 算
术
运
算
符
类 + 正值运算符 - 负值运算符 ++ 加1运算符 -- 减1运算符 * 乘法运算符 / 除法运算符 % 取余运算符 + 加法运算符 - 减法运算符 位
运
算
符
类 ~ 按位求反运算符 按位与运算符 ^ 按位异或运算符 | 按位或运算符 左移运算符 右移运算符 逻
辑
运
算
符
类 ! 逻辑非运算符 逻辑与运算符 || 逻辑或运算符 关
系
运
算
符
类 小于运算符 大于运算符 = 小于等于(不大于)运算符 = 大于等于(不小于)运算符 = = 相等运算符 ! = 不等运算符 ? : 条件运算符 赋
值
运
算
符
类 = 基本赋值运算符 *= /= %= += -= = = = ^= |= , 逗号运算符 当需要使用运算符表示对操作对象(数据)进行的操作时,C语言规定操作对象(数据)和运算符必须按照一定的规则连接成表达式。C语言中的表达式是个递归定义:
如何计算出表达式的值?
C语法规定:
基本表达式的值:
常量表达式的值是常量值本身;
变量表达式的值是变量值本身;
函数调用表达式的值是函数的返回值。
复杂表达式的值:
复杂表达式的值需要计算,其求值规则为:
自左向右依次扫描复杂表达式中的操作数,当操作数左右两边的运算符的优先级不同时,则将操作数与高优先级的运算符结合;当操作数左右两边的运算符的优先级相同时,则按照结合性来进行结合。在从左向右扫描的过程中,一旦某个运算符需要的操作数已经齐备了,就可以进行该运算,直到整个表达式的值都求出来为止。
在具体进行一个运算时,若参加运算的操作数的类型不同,则先自动(由编译器在编译阶段完成)进行类型转换,后求值。
【例】 求表达式1+3*6-5的值。
分析:① 先从左到右扫描表达式1+3*6-5,先扫描第一个操作数:1,它左边无运算符,右边是+,因此1和+结合,而+需要2个操作数,因此+还无法运算;
② 再扫描第二个操作数:3,它左边是+,右边是*,*比+优先级高,因此3和*结合,而*需要2个操作数,因此*还无法运算;
③ 再扫描第三个操作数:6,它左边是*,右边是-,*比-优先级高,因此6和*结合;
④ 至此:*的两个操作数都已找到,进行3*6运算,参加运算的2个操作数的类型一致,子表达式3*6的值为18,将子表达式3*6用其值18替换,表达式1+3*6-5变为:1+18-5;
⑤ 再从左到右扫描表达式1+18-5,可以看到:1与+结合;18它左边是+,右边是-,+和-的优先级相同,结合性是左结合,因此18和+结合;
⑥ 至此:+的两个操作数都已找到,进行1+18运算,子表达式1+18的值为19,将子表达式1+18用其值19替换,表达式1+18-5变为:19-5 ;
⑦ 再从左到右扫描表达式19-5,进行19-5的运算,最后,整个表达式的值为:14。
整个过程如下:
1+3*6-5→1+3*6-5→1+18-5→1+18-5→19-5→19-5→14
【例】 设x=2.5,a=7,y=4.7,求表达式x+a%3*(int)(x+y)%2/4的值。
求值过程 注解 x+a%3*(int)(x+y)%2/4 从左到右扫描表达式x+a%3*(int)(x+y)%2/4:
① 先扫描第1个操作数x,它左边无运算符,右边是+,因此x和+结合,而+需要2个操作数,因此+还无法运算;
② 再扫描第2个操作数a,它左边是+,右边是%,%比+优先级高,因此a和%结合,而%需要2个操作数,因此%还无法运算;
③ 再扫描第3个操作数3,它左边是%,右边是*,%和*的优先级相同,结合性是左结合,因此3和%结合,至此%需要的2个
文档评论(0)