第5章 判断与循环_第1页
第5章 判断与循环_第2页
第5章 判断与循环_第3页
第5章 判断与循环_第4页
第5章 判断与循环_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2020 4 16 1 第5章判断与循环一般复杂问题的程序设计方法 张克军 2020 4 16 2 目录 1条件描述与选择结构程序设计 2重复操作问题与循环语句 3典型例题解析 4本章小节 第5章判断与循环 2020 4 16 3 思考题 给定圆的半径 计算圆的面积 输入三个边值 计算三角形的面积 输入三个系数 计算二次方程的实根 思考 上述每一个问题是否都有条件限制 要求什么条件 如何描述条件 如何使用条件 2020 4 16 4 思考题续 计算1到100相加之和 计算多项式1 2 3 4 5 99 100的值 输入某班50名学生C语言考试的成绩 求平均分 思考 上述每一个问题是否又有条件限制 要求什么条件 如何描述条件 如何使用条件 顺序结构可以实现吗 不能实现又如何编写程序 2020 4 16 5 5 1 1程序中限定条件的表示 关系运算和逻辑运算经常作为条件语句和循环语句中的条件 其结果为一逻辑值 半径大于0 如何用C语言描述 三个边值大于0并且任意两边之和大于第三边 二次项系数不为0并且要求b2 4ac 0 关系运算是一种比较运算 将两个值 表达式 进行比较 判断比较的结果是否符合给定的条件 符合结果为1 否则结果为0 关系运算逻辑运算 2020 4 16 6 大于 大于等于 小于 不等 小于等于 恒等 1 关系运算符 的优先级低于其余四个 2 优先级 关系运算的优先级高于赋值 低于算术运算 区别赋值 3 结合性从左向右 a b c 1 关系运算符和关系表达式1 关系运算 2 关系表达式的结果是一个逻辑值 根据关系是否满足 分别取值 1 关系运算符与运算分量构成关系表达式 inti 1 j 7 a a i j 4 0 a的值 结果 a 2 3 使用关系表达式注意事项 A 数学上 判断x是否在区间 a b 时 习惯上写成a x b 但在C中 必须写成a x x b B 字符是按ASCII存储的 因此 a 0的值为逻辑1 2 关系表达式 满足为真 取1否则为假 取0 例如 1 0 3 0 3 0 1 0的逻辑值为0 C 当判断两个浮点数是否相等时 由于存储上的误差 可能会有错误的结果 例如 数学上恒等式 1 0 3 0 3 0 1 0 但在C语言中 D 在数学中 5 2 7 8无效 但C中是允许的 E 关系表达式的结果可以当成整型数 例如 inta 3 b 5 c 7 d 求 d ac 逻辑1 1 7 逻辑0 d的值为0 使用关系表达式注意事项 2020 4 16 9 特别思考 C语言是如何判别一个表达式是关系式还是其他表达式 如果一个表达式结果为0 可以认为是 假 吗 如果一个表达式结果为1或非0 可以认为 真 吗 是否只能用关系式描述判断条件 任何类型的合法表达式都可以看作判断条件 对其它类型的表达式 若表达式运算结果 非零 就认为 真 结果为 零 认为 假 给条件表达带来灵活性 提高程序编写效率 举例 写出描述 变量num不是偶数 的表达式关系式 num 2 0算术式 num 2二者完全等价 2020 4 16 10 1 有三个 与 两边为1 结果为1 或 两边有一个为1 结果为1 非 非1为0 非0为1 1 0 0 1 2 优先级 的优先级高于 和 逻辑运算与其他运算相比 非 的优先级最高 与 和或 的优先级低于其他 3 结合性 与和或是从左向右 非是从右向左 2 逻辑运算符与逻辑表达式1 逻辑运算符 2020 4 16 11 逻辑运算符的真值表 逻辑值用1和0表示 2020 4 16 12 B 逻辑运算 0 假 1 真 逻辑变量有两种状态 研究事物的逻辑关系时 用逻辑变量代表各个事件 逻辑运算符连接逻辑变量 构成逻辑表达式 结果为逻辑值 开为1关为0 A 逻辑变量 2020 4 16 13 两个条件中只要有一个成立 结果就成立 锁打开 1锁关闭 0有钥匙 1无钥匙 0 逻辑或真值表 ABC000011101111 逻辑或 加 V 或者 2020 4 16 14 开关合 1开关开 0灯亮 1灯灭 0 两个条件都个成立结果才成立 两个开关A B控制一盏灯C A B C 逻辑与真值表 ABC000010100111 逻辑与 乘 并且 2020 4 16 15 2 表达式的值为逻辑的1和0 表示真与假 任何非零实数均可作为逻辑上的1 例 a 5 b 7 c 4 d 3x a b c d d a 先做算术运算 再做关系判断 将最后结果赋给x 1 用逻辑运算符将关系运算表达式或逻辑量连接起来构成逻辑表达式 5 2 7 8 从左向右运算 5 2 逻辑值为1 1 7 逻辑值为0 0 8 逻辑值为0 整个表达式的值为0 2 逻辑表达式 结果 x 12 7 0 1 0 0 求逻辑表达式的值1 173 23 2 5 5 4 6 3 7 如何表示闰年 3 逻辑运算举例 逻辑表达式结果1 171 0 03 23 2 5 0 15 4 6 3 7 1 0 课堂作业 2020 4 16 17 要判别用year表示的某一年是否闰年 闰年的条件是符合下面二者之一 1 能被4整除 但不能被100整除 如2008 2 能被400整除 如2000 上面两个条件可以用一个表达式来表示 year 4 0 year 100 0 year 400 0 例5 2 写出判读某年为闰年的条件 假设年份用变量year表示 第一个条件的表达式是 year 4 0 year 100 0 第二个条件的表达式是 year 400 0 在逻辑表达式中 并不是所有的逻辑运算都必须执行 如果 的一边已经为0 结果一定为0 如果 的一边已经为1 结果一定为1 1 aa b均为非0 再判断c 若a为0时 不必判断b和c 结果一定为0不必判断b和c 结果一定为1 2 a b c 若a为非0 不必判断b和c 结果一定为1 已知 a 1 b 2 c 3 d 4 m 1 n 1执行 m a b n c d 之后 m n 由于a b的值为0 m 0不再判断 n c d 的值 因此 n维持原有的值 m 0n 1 4 逻辑运算的特点 短路行为 2020 4 16 19 用C语言描述 1 a小于b或小于c2 a和b都大于c3 a和b中有一个大于c4 a是非正奇数5 a是偶数6 a不能被b整除7 a是正奇数 且b是负偶数 逻辑运算举例 用C语言描述 1 ac b c3 a c b c4 a 0 a 2 0 5 a 2 06 a b 07 a 0 a 2 0 b 0 b 2 0 课堂作业 1 条件运算符 是C语言中唯一的一个三目运算符 表达式1 表达式2 表达式3 功能 将条件语句化成赋值语句 格式 判断表达式1的值 若为非0 将表达式2的值作为结果 否则 将表达式3的值作为结果 2 功能 x a b a b 当a 9 b 5时 x 9 条件运算要求有三个运算分量 并且不论条件是否成立 都必须是为同一个变量赋值 3 条件运算符与条件表达式 2 条件表达式 1 格式 表达式1 表达式2 表达式3 3 条件运算符的优先级 高于赋值 低于其他 4 结合性 从右向左 z a b a a d c d 5 数据类型可以不同 x y a b 执行 intx 10 y 9 inta b c a x y x y b x c y 后a b c a b cA 9 9 9B 8 8 10C 8 10 9D 1 11 10 X为9y为10 X为8 3 条件运算的特点 2020 4 16 22 若w x y z m均为int型变量 则执行下面语句后的m值为 w 1 x 2 y 3 z 4 m w x w x m m y m y m m z m z A 1B 2C 3D 4 若w 1 x 2 y 3 z 4 则表达式w x w y z y z的值是 A 4B 3C 2D 1 练习 4 条件运算举例 2020 4 16 23 执行以下语句后 输出结果是 intw 3 z 7 x 10 printf d x 10 x 100 x 10 printf d w z printf d w z printf d wA 0 1 1 1B 1 1 1 1C 0 1 0 1D 0 1 0 0 算术运算关系运算逻辑运算条件运算 综合举例 2020 4 16 24 编程应用举例 例5 3 输入一个字符 判断是否是大写字母 若是则转换成小写字母 不是不转换 要求输出最后得到的字符 请用条件表达式解决 问题分析 分如下4步解决问题 输入字符 判断是否是大写字母 是则转换成小写字母 不是不转换 最后输出字符 编写程序 大写字母转换小写字母 includeintmain charch scanf c 2020 4 16 25 5 1 3程序中问题条件的处理if else语句 1 单分支判断执行语句 1 语句格式if 条件表达式 语句 2 功能先计算条件表达式的值 然后进行真假逻辑判断 若 条件表达式 成立 结果为真 执行后面的语句 语句执行完后或者条件不成立时 都顺序执行下条语句 2020 4 16 26 应用举例 例5 4 编写程序 输入一个字符 若是字母 则输出Yes 顺序步骤 先输入 后判断 再输出 流程图描述 程序编写 includeintmain return0 charch ch getchar if ch a 2020 4 16 27 应用举例 例5 5 结合第4章例4 2 输入三个一般整数 找出最大值并输出 顺序步骤 先输入 后判断 再输出 流程图描述 程序编写 includeintmain return0 inta b c max scanf d d d 2020 4 16 28 应用举例 例5 6 编写程序 给定一个整型自变量x 计算并输出下面分段函数的值 顺序步骤 先输入 后判断 再计算 最后输出 流程图描述 程序编写 includeintmain return0 intx y 5 scanf d 2020 4 16 29 5 1 3程序中问题条件的处理if else语句 2 双分支判断执行语句 1 语句格式if 条件表达式 语句1else语句2 2 功能先计算条件表达式的值 然后进行真假逻辑判断 若 条件表达式 成立 结果为真 执行后面的语句1 否则执行语句2 2020 4 16 30 应用举例 例5 7 输入一个一般整数 若是偶数 显示偶数evennumber 否则显示奇数oddnumber 顺序步骤 先输入 后奇偶判断 再输出 流程图描述 程序编写 includeintmain return0 intx scanf d 条件是否有其它形式 若修改 程序如何表达 2020 4 16 31 应用举例 例5 8 输入三个整数作为边构成三角形 计算三角形的面积并输出 若不能构成三角形则显示输入错误信息 顺序步骤 先输入 后判断是否构成三角形 再相应处理 最后输出 流程图描述 程序编写 include includeintmain return0 为什么用2 0而不用2 inta b c floats area scanf d d d 2020 4 16 32 5 1 3程序中问题条件的处理if else语句 3 多分支判断执行语句 1 语句格式之一if 条件表达式1 if 条件表达式2 语句1else语句2elseif 条件表达式3 语句3else语句4 2 功能先计算条件表达式的值 然后进行真假逻辑判断 若 条件表达式 成立 结果为真 继续执行后面的判断语句 否则执行另一判断语句 层层判断下去 2020 4 16 33 多分支 格式if 表达式1 语句1elseif 表达式2 语句2elseif 表达式3 语句3 else语句n 表达式1 表达式3 表达式2 语句1 语句2 语句3 语句n Y Y Y N N N 3 多分支的if结构 2020 4 16 34 多分支的其它形式 if 条件表达式1 if 条件表达式2 语句1else语句2else语句3 if 条件表达式1 语句1elseif 条件表达式2 语句2else语句3 if 条件表达式1 语句1elseif 条件表达式2 语句2elseif 条件表达式3 语句3 else语句n if 条件表达式1 if 条件表达式2 if 条件表达式3 if 条件表达式n 语句1else语句2else语句3 else语句n 提示 C语言规定 else总是与它上面最近的且没有配对的if语句进行匹配 2020 4 16 35 多分支应用举例 例5 9 实型变量a b中放有两门课程的考试成绩 如果两门成绩都及格 成绩 60 则显示 pass 如果a成绩不及格 则显示 fail 如果a成绩及格而b成绩不及格则不做任何处理 请用多分支语句描述 A if a 60 if b 60 printf pass elseprintf fail B if a 60 printf pass C if a 60 b 60 printf pass elseif b 60 printf fail D if b 60 if a 60 printf pass elseprintf fail 2020 4 16 36 多分支应用举例 例5 10 根据学生的成绩 将学生划分为A B C D E五个等级 其对应的关系已如下 其中整型变量result存放学生成绩 字符型变量grade存放学生等级 编写程序 includeintmain intresult chargrade scanf d if result100 printf inputError n return 1 elseif result 60 grade E elseif result 70 grade D elseif result 80 grade C elseif result 90 grade B elsegrade A 2020 4 16 37 选择结构程序应用实例 输入两个整数 若它们的平方和大于100 则输出平方和百位以上的各数字 否则输出两个整数的和 对于一个整数 取前几位 百位以上 用除法 取后几位 百位以下 用取模运算 例如 当K 12345时 前三位 K 100 123 后两位 K 100 45 应用实例流程图 2020 4 16 38 main inta b c d printf Pleaseinputa b n scanf d d 输入 11 10输出 221 2输入 3 2输出 a b 5 应用实例程序 2020 4 16 39 5 当if后有多个执行语句时 必须用 将多个语句括起来 构成一个复合语句 而 之外不必有分号 1 if语句中进行条件判断的 表达式 必须用 括起来 且不可省略 2 条件后面不加分号 3 语句之后有分号 4 else不是语句 不能单独使用 有关if语句的说明 2020 4 16 40 目录 1条件描述与选择结构程序设计 2重复操作问题与循环语句 3典型例题解析 4本章小节 第5章判断与循环 2020 4 16 41 思考题续 计算1到100相加之和 计算多项式1 2 3 4 5 99 100的值 输入某班50名学生C语言考试的成绩 求平均分 思考 上述每一个问题在操作处理上有什么特点 重复操作 顺序结构可以实现吗 不能实现又如何编写程序 2020 4 16 42 5 2 1循环问题导引 对于重复操作问题 程序设计者必须考虑这些问题的规律并加以总结 从程序功能结构层面上实现循环 循环结构 方法是通过控制程序执行的顺序 确保某些语句被反复执行 直到规定的次数或满足某种条件为止 2020 4 16 43 5 2 2while语句 while语句的格式为 while 循环条件 循环体语句 执行过程为 首先计算描述循环条件的表达式的值 当值为 真 即非0 时 执行循环体语句 然后再回到循环条件进行判断 当值为 真 时 再次执行循环体语句 如此重复 直到循环条件不成立为止 2020 4 16 44 例5 11 分析阅读下面的程序 写出程序执行后的结果 intmain intn 0 while n 2 n printf d n return0 注意变量n的变化 程序的运行结果为 123 循环5要素 循环条件循环控制变量初值循环控制变量终值循环控制变量变化值循环体 2020 4 16 45 循环应用举例 例5 12 用while语句求s 1 2 3 100的值 问题分析 此题是求一组数的累加和问题 要累加的数从1到100是有规律的 后一个数比前一个数大1 因此 可在循环中使用一个整型变量n 开始的初值是1 每累加一次使n增1 直到n的值大于100为止 编写程序 计算1到100相加之和 includeintmain intn 1 sum 0 while n 100 sum sum n n printf sum d n sum 2020 4 16 46 循环应用举例 例5 13 统计从键盘输入一行字符的个数 输入完一行字符后以回车键结束 程序如下 统计一行字符个数 includeintmain intn 0 printf inputastring n while getchar n n printf d n 是否循环问题 如何控制结束 2020 4 16 47 循环问题总结 1 待解决的问题必须有重复操作的特性 这是选定循环结构的前提 2 分析问题 找出重复操作的部分 并用C语言语句描述 3 分析设计控制循环的办法 一般有如下两种 已知重复次数 用次数控制循环 如例5 12 已知结束条件 用结束条件控制循环 如例5 13 4 对于利用循环次数控制循环 要明晰循环控制的初始值 变化情况和结束条件 确保循环控制变量由初值向循环终值变化 并达到结束条件 5 对于利用结束条件控制循环 应确保输入的结束条件能被发现执行导致循环结束 对于这一类 还有一种方法 就是循环条件永远成立 但在循环体中加入结束循环结束条件判别 includeintmain intn 0 printf inputastring n while 1 循环条件永远为真 if getchar n break 满足条件跳出循环 关键字break表示中断循环并跳出elsen printf d n 2020 4 16 48 应用举例 例5 15 输入任意一个一般整数 判断其是否是素数 编写程序实现 什么是素数 如何检验是否为素数 编写程序1 includeintmain intm n k 1 变量k为标识量 初值为1代表是素数printf ninputanintegertom scanf d include includeintmain intm n k printf ninputanintegertom scanf d 2020 4 16 49 目录 1条件描述与选择结构程序设计 2重复操作问题与循环语句 3典型例题解析 4本章小节 第5章判断与循环 2020 4 16 50 例5 16 输入一年份 编写程序判断是否为闰年 includeintmain intyear printf ninputayear scanf d includeintmain intyear leap printf ninputayear scanf d 2020 4 16 51 例5 18 有一类数 被称为 水仙花数 它是一个三位数 其各位数字立方和等于该数本身 例如153是水仙花数 因为153 13 53 33 请输入一个三位数 编程判断是否为水仙花数 问题

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论