C语言之逻辑运算ppt课件

上传人:资****亨 文档编号:135534370 上传时间:2020-06-16 格式:PPT 页数:37 大小:104.50KB
返回 下载 相关 举报
C语言之逻辑运算ppt课件_第1页
第1页 / 共37页
C语言之逻辑运算ppt课件_第2页
第2页 / 共37页
C语言之逻辑运算ppt课件_第3页
第3页 / 共37页
C语言之逻辑运算ppt课件_第4页
第4页 / 共37页
C语言之逻辑运算ppt课件_第5页
第5页 / 共37页
点击查看更多>>
资源描述

《C语言之逻辑运算ppt课件》由会员分享,可在线阅读,更多相关《C语言之逻辑运算ppt课件(37页珍藏版)》请在金锄头文库上搜索。

1、 1 第四章逻辑运算和判断选取控制 4 1关系运算符和关系表达式关系运算是逻辑运算中比较简单的一种 所谓 关系运算 实际上是 比较运算 将两个值进行比较 判断比较的结果是否符合给定的条件 例如 a 3是一个关系表达式 大于号 是一个关系运算符 如果a的值为5 则满足给定的 a 3 条件 因此关系表达式的值为 真 即 条件满足 如果a的值为2 不满足 a 3 条件 则称关系表达式的值为 假 2 4 1 1关系运算符及其优先次序C语言提供6种关系运算符 1 大于 4 大于或等于 5 等于 6 不等于 关于优先次序 1 前4种关系运算符 的优先级别相同 后两种也相同 前4种高于后2种 例如 优先于

2、而 与 优先级相同 2 关系运算符的优先级低于算术运算符 3 关系运算符的优先级高于赋值运算符 高 低算术运算符关系运算符赋值运算符例如 c a b等效于c a b a b c等效于 a b ca b c等效于a b c 3 4 1 2关系表达式用关系运算符将两个表达式 可以是算术表达式或关系表达式 逻辑表达式 赋值表达式 字符表达式 连接起来的式子 称关系表达式 例如 下面都是合法的关系表达式 a b a b b c a 3 b 5 a b a b b c 关系表达式的值是一个逻辑值 即 真 或 假 例如 关系表达式 5 3 的值为 假 5 0 的值为 真 C语言没有逻辑型数据 Pascal

3、语言以True表示 真 以Fa1se表示 假 PASCAL和FORTRAN等语言都有逻辑型变量和逻辑型常量 以1代表 真 以 0 代表 假 例如 若a 3 b 2 c 1 则 a b的值为 真 表达式的值为1 a b c的值为 真 因为a b的值为1 等于c的值 表达式的值为1 b c a的值为 假 表达式的值为0 如果有以下赋值表达式 d a bd的值为1 f a b cf的值为0 因为 运算符是自左至右的结合方向 先执行 a b 得值为1 再执行关系运算 1 c 得值0 赋给f 4 4 2逻辑运算符和逻辑表达式用逻辑运算符将关系表达式或逻辑量连接起来就是逻辑表达式 下面介绍C语言中的逻辑运

4、算符和逻辑运算 4 2 1逻辑运算符及其优先次序C语言提供三种逻辑运算符 1 逻辑与 相当于其它语言中的AND 2 逻辑或 相当于其它语言中的OR 3 逻辑非 相当于其它语言中的NOT 和 是 双目 元 运算符 它要求有两个运算量 操作数 如 a b x y a b x y 是 一目 元 运算符 只要求有一个运算量 如 a b 逻辑运算举例如下 a b若a b为真 则a b为真 a b若a b之一为真 则a b为真 a若a为真 则 a为假 5 下表为逻辑运算的 真值表 用它表示当a和b的值为不同组合时 各种逻辑运算所得到的值 ab a ba ba bTTFFTTTFFTFF在一个逻辑表达式中如

5、果包含多个逻辑运算符 如 a b x y c优先次序 高 低 算术运算符 关系运算符 赋值运算符 a b x y c a b x y c a b x y 可写成 a b x y a b x y 可写成 a b x y a a b 可写成 a a b 6 4 2 2逻辑表达式如前所述 逻辑表达式的值应该是一个逻辑量 真 或 假 C语言编译系统在给出逻辑运算结果时 以数值1代表 真 以0代表 假 但在判断一个量是否为 真 时 以0代表 假 以非0代表 真 即将一个非零的数值认作为 真 例如 若a 4 则 a的值为0 因为a的值为非0 被认作 真 对它进行 非 运算 得 假 假 以0代表 若a 4

6、b 5 则a b的值为1 因为a和b均为非0 被认为是 真 因此a b的值也为 真 值为1 a b值同前 a b的值为1 a b值同前 a b的值为1 4 0 2的值为1 通过这几个例子可以看出 由系统给出的逻辑运算结果不是0就是1 不可能是其它数值 而在逻辑表达式中作为参加逻辑运算的运算对象 操作数 可以是0 假 或任何非0的数值 按 真 对待 如果在一个表达式中不同位置上出现数值 应区分哪些是作为数值运算或关系运算的对象 哪些作为逻辑运算的对象 7 例如5 3 2 8 4 0表达式自左至右扫描求解 首先处理 5 3 因为关系运算符优先于 在关系运算符两侧的5和3作为数值参加关系运算 5 3

7、 的值为 1 再进行 1 2 的运算 此时1和2均是逻辑运算对象 均作 真 处理 因此结果为1 再往下进行 1 8 4 0 的运算 根据优先次序 先进行 0 运算得1 因此 要运算的表达式变成 1 8 4 1 即 1 8 3 关系运算符 两侧的8和3作为数值参加比较 8 3 的值为0 假 最后得到 1 0 的结果1 实际上 逻辑运算符两侧的运算对象不但可以是0和1 或者是0和非0的整数 也可以是任何类型的数据 可以是字符型 实型或指针型等 系统最终以0和非0来判定它们属于 真 或 假 例如 c d 的值为1 因为 c 和 d 的Ascii值都不为0 按 真 处理 在逻辑表达式的求解中 并不是所

8、有的逻辑运算符都被执行 只是在必须执行下一个逻辑运算符才能求出表达式的解时 才执行该运算符 例如 1 a b c只有a为真 非0 时 才需要判别b的值 只有a和b都为真的情况下才需要判别c的值 只要a为假 就不必判别b和c 此时整个表达式已确定为假 如果a为真 b为假 不判别c 8 2 a b c只要a为真 非0 就不必判别b和c对 运算符只有a 0 才继续进行右面的运算 对 运算符来说 只有a 0才继续进行其右面的运算 因此 如果有下面的逻辑表达式 m a b n c d 当a 1 b 2 c 3 d 4 m和n的原值为 时 由于a b的值为0 m 0 而n c d不被执行 因此n的值不是0

9、而仍保持原值1 这点请读者注意 熟练掌握C语言的关系运算符和逻辑运算符后 可以巧妙地用一个逻辑表达式来表示一个复杂的条件 例如 判别某一年year是否闰年 闰年的条件是符合下面二者之一 能被4整除 但不能被100整除 能被4整除 又能彼400整除 可以用一个逻辑表达式来表示 year 4 0 year 100 0 year 400 0 当year为某一整数值时 上述表达式值为真 1 则year为闰年 否则为非闰年 可以加一个 用来判别非闰年 year 4 0 year 100 0 year 400 0 若表达式值为真 1 year为非闰年 也可以用下面逻辑表达式判别非闰年 year 4 0 y

10、ear 100 0 year 400 0 表达式为真 year为非闰年 请注意表达式中右面的括弧内的不同运算符 的运算优先次序 9 4 3if语句if语句是用来判定所给定的条件是否满足 根据判定的结果 真或假 决定执行给出的两种操作之一 4 3 1if语句的三种形式C语言提供了三种形式的if语句 1 if 表达式 语句例如 if x y printf d x 这种if语句的执行过程见图 10 2 if 表达式 语句1else语句2例如 if x y printf d x elseprintf d y 见图 11 3 if 表达式1 语句1elseif 表达式2 语句2elseif 表达式3 语

11、句3elseif 表达式m 语句melse语句n流程图 12 例如 if number 500 cost 0 15 elseif number 300 cost 0 10 elseif number 100 cost 0 075 elseif number 50 cost 0 05 elsecost 0 说明 三种形式的if语句中在if后面都有 表达式 一般为逻辑表达式或关系表达式 例如 if a b x y printf a b x y 系统对表达式的值进行判断 若为0 按 假 处理 若为非0 按 真 处理 执行指定的语句 假如有以下语句 if 3 printf ok 是合法的 执行结果输出

12、 ok 因为表达式的值为3 按 真 处理 由此可见 表达式的类型不限于逻辑表达式 可以是任意的数值类型 包括整型 实型 字符型 指针型数据 例如 下面的语句也是合法的 if a printf d a 执行结果 输出a的AscII码97 13 2 第二 第三种形式的讨语句中 在每个else前面有一分号 整个语句结束处有一分号 例如 if x 0 printf f x elseprintf f x 这是由于分号是C语句中不可缺少的部分 这个分号是让语句中的内卧语句所要求的 如果无此分号 则出现语法错误 但应注意 不要误认为上面是两个语句 if语句和else语句 它们都属于同一个if语句 else子

13、句不能作为语句单独使用 它必须是if语句的一部分 与if配对使用 3 在if和else后面可以只含一个内嵌的操作语句 如上例 也可以有多个操作语句 此时用花括号 将几个语句括起来成为一个复合语句 如 if a b carea sqrt s s a s b s c printf area 6 2f area elseprintf itisnotatrilateral 注意在 外面不需要再加分号 因为 内是一个完整的复合语句 不需另附加分号 14 例4 1输入两个实数 按代数值由小到大次序输出这两个数 example4 1atpage53 main floata b t scanf f f 运行情

14、况如下 3 6 3 2一3 20 3 60 15 例4 2 输入三个数 按大小顺序输出 main floata b c t printf Inputa b c n scanf f f f 运行情况如下 3 7 11 O0 3 00 7 00 16 4 3 2语句的嵌套在if语句中又包含一个或多个if语句称为if语句的嵌套 一般形式如下 if if 语句1else语句2elseif 语句3else语句4应当注意if与else的配对关系 从最内层开始 else总是与它上面最近的 未曾配对的 if配对 假如写成 1f if 语句1elseif 语句2else语句3编程序者把else写在与第一个if

15、外层if 同一列上 希望else与第一个if对应 但实际上else是与第二个if配对 因为它们相距最近 因此最好使内嵌if语句也包含else部分 这样if的数目和else的数目相同 从内层到外层一一对应 不致出措 17 如果if与else的数目不一样 为实现程序设计者的企图 可以加花括弧来确定配对关系 例如 if if 语句1 else语句2这时if限定了内嵌if语句的范围 因此else与第一个让配对 例4 3 有一函数 1 x0 编一程序 输入一个x值 输出y值 有以下几种写法 请读者判断哪些是正确的 18 程序1 main intx y scanf d x if x 0 if x 0 y

16、1 elsey 0 elsey 一1 19 程序3 将上述if语句改为 y 一1 if x 0 if x 0 y 1 elsey 0 程序4 y 0 if x 0 if x 0 y 1 elsey 1 只有程序1和2是正确的 一般把内嵌的if语句放在外层的else子句中 如程序1那样 这样由于有外层的else相隔 内嵌的else不会和外层的if配对 而只能与内嵌的让配对 从而不致搞混 如像程序3 4那样就容易混淆 20 4 3 3条件运算符若if语句中 在表达式为 真 和 假 时 且都只执行一个赋值语句给同一个变量赋值时 可以用简单的条件运算符来处理 例如 若有以下if语句 if a b max a elsemax b 可以用下面的条件运算符 来处理 max a b a b 其中 a b a b 是一个 条件表达式 它是这样执行的 如果 a b 条件为真 则条件表式取值a 否则取值b 条件运算符要求有三个操作对象 称三目 元 运算符 条件表达式的一般形式为表达式1 表达式2 表达式3它的执行过程见图4 7 21 说明1 条件运算符的执行顺序 先求解表达式1 若为非0 真 则求解表达式2

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号