北京科技大学《C语言》第4章.ppt

上传人:xt****7 文档编号:5367383 上传时间:2020-01-27 格式:PPT 页数:52 大小:1.40MB
返回 下载 相关 举报
北京科技大学《C语言》第4章.ppt_第1页
第1页 / 共52页
北京科技大学《C语言》第4章.ppt_第2页
第2页 / 共52页
北京科技大学《C语言》第4章.ppt_第3页
第3页 / 共52页
点击查看更多>>
资源描述
第4章选择结构程序设计 北京科技大学计算机系 C语言程序设计 2020 1 27 2 提出问题 自然语言 如果 那么 否则 C语言 分支语句 问题1 如何根据收入 确定他的纳税比例及纳税额 问题2如何根据学生的分数判断是否及格 2020 1 27 3 本章主要内容 4 0关系 逻辑与条件运算符4 1if语句4 1 1if语句的一般形式4 1 2if语句的嵌套4 2switch语句4 2 1switch语句的一般形式4 2 2break语句4 3选择结构程序设计举例 4 关系运算 关系运算符 左结合 c等价于a b c 与 a b c不等价 5 关系运算说明 关系运算的结果应该是逻辑值 C语言用数值用1表示逻辑真 0表示逻辑假例如 7 5的值是1 5 7的值是0 a b 的值是0 a b 的值是1即关系表达式的值 0或1实型数可进行大于或小于比较 但通常不进行 或 的关系运算 关系运算 关系运算符优先于赋值 低于算术inta 3 b 2 c 1 a cf a b c两边操作数的数据类型不同时 系统自动将它们转换成相同的数据类型左结合性 注意与数学式的区别00 x 6 6 7 逻辑运算符 逻辑运算符 逻辑运算符的运算规则 8 逻辑表达式 逻辑表达式用逻辑运算符将运算对象连接成的式子形式 例如 0 b a b c da b 5 c 4 x y z 9 逻辑表达式 逻辑运算符的优先级和结合性 是单目运算符 右结合 高于算术 和 是双目运算符 左结合 高于赋值运算符 低于关系运算符 的优先级高于 例如 a b c d a b c 10 逻辑运算规则 逻辑表达式的运算规则 从左到右依次进行逻辑计算运算对象为非0表示逻辑真运算对象为0表示逻辑假逻辑运算的结果为0或1例如设 a 15 b 0 c 2a b c结果为0a b c结果为1 a c b c结果为1 11 逻辑运算规则 续 运算按照从左至右的顺序进行 一旦能够确定逻辑表达式的值 就立即结束运算 逻辑运算的短路性质例如设 a 1 b 0 c 2a b c a b c 为0 运算终止 表达式值为0 为非0 运算终止 表达式值为1且a为2 b为0 c为 2 b c保持原值 逻辑表达式 例 x 1 y 1 z 0 x x y 12 k x y z 1 0 5 5 13 关系与逻辑运算符的应用 表示数学公式a b c判断a b c三条线段能否组成一个三角形a b不同时为负 作业 14 条件表达式运算 条件运算符 条件表达式的一般形式表达式1 表达式2 表达式3例如 m 10 b 20 a bx 3 a 5 100 200 C语言中唯一的三目运算符 要正确区分用 和 分隔的表达式涉及条件运算符的优先级与结合性 条件表达式运算 条件表达式的值 表达式1 表达式2 表达式3表达式1的值非0 则计算表达式2的值作为整个表达式的值 表达式1的值为0 则计算表达式3的值作为整个表达式的值 表达式2和3的类型不一致时 结果为精度较高的类型 如 m n 2 2 5 15 16 条件运算符优先级 条件运算符优先级高于赋值 逗号运算符 低于其他运算符例如 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 17 条件运算符的结合性 条件运算符具有右结合性当一个表达式中出现多个条件运算符时 应该将位于最右边的问号与离它最近的冒号配对 并按这一原则正确区分各条件运算符的运算对象 例如 w x x w x y x y与w x x w x y x y 等价与 w x x w x y x y不等价 2020 1 27 18 本章主要内容 4 0关系 逻辑与条件运算符4 1if语句4 1 1if语句的一般形式4 1 2if语句的嵌套4 2switch语句4 2 1switch语句的一般形式4 2 2break语句4 3选择结构程序设计举例 2020 1 27 19 简单分支语句 语句一般格式if 表达式 语句 功能 计算表达式的值 如果是一个非0值 即逻辑真 就执行内嵌语句 否则 即逻辑假 跳过内嵌语句 顺序执行后续语句 2020 1 27 20 简单分支语句的算法 例如 if x 0 m if a b c a a b b c 2020 1 27 21 双重分支语句 语句一般格式if 表达式 语句1else语句2功能 计算表达式的值 如果它的值是一个非0值 逻辑真 就执行内嵌语句1 之后跳过内嵌语句2 执行后续语句 否则跳过内嵌语句1 执行内嵌语句2 之后执行后续语句 2020 1 27 22 双重分支语句的算法 例如 if x 0 m elsem if ch a 2020 1 27 23 多重分支语句 语句一般格式if 表达式1 语句1elseif 表达式2 语句2 elseif 表达式m 语句melse语句n功能 依次计算并判断表达式i 为非0时执行后面的语句 都为0时 执行语句n无论执行完那个语句分支 都转到后续语句 2020 1 27 24 多重分支语句的算法 流程图 表达式m 2020 1 27 25 多重分支语句的算法 N S结构图 例如 if a 0 x 1 elseif a 0 x 0 elsex 1 2020 1 27 26 if语句的简单应用 例4 1 输入一个字符 如果是大写字母 则将其转换为小写字母输出 否则直接输出 输入 用getchar或scnaf函数ch是否为大写字母 ch A ch 65 ch 90 大写字母转换为小写字母 ch ch 32输出 用putchar或printf函数 思路 2020 1 27 27 程序 include stdio h main charch ch getchar if ch A 程序运行情况如下 G g 运行jc4 1 可使用条件表达式代替 putchar ch A putchar n 2020 1 27 28 4 1 2if语句的嵌套 如果if的内嵌语句中又使用了一个if语句 则构成if语句的嵌套 例4 a 比较两个整数的关系 includemain intx y printf EnterintegerXandY scanf d d 应该正确判断 if的内嵌语句if和else的配对 运行jc4 a if x y if x y printf X Y n elseprintf X Y n elseprintf X Y n 提倡缩格书写有利于阅读程序 2020 1 27 29 双重 或多重 分支if语句的嵌套形式if 表达式 if语句elseif语句 if语句嵌套的形式 简单if语句的嵌套形式if 表达式 if语句 可以是各种形式的if语句 可以是各种形式的if语句 如果是简单if语句 必须用 括起 2020 1 27 30 if c 50 printf 50150 n if c 50 printf 50 c 100 n elseprintf c 50 n 例如 if c 50 printf 50 c 100 n 与哪个if配对 2020 1 27 31 再例如 if a b 1 if a c 2 if a d flag 1 3 elseflag 2 4 elseflag 3 5 问题 第4行和第5行的else和哪一个if相匹配 分析 匹配方案可以有很多种 2 4 1 5 3 4 2 5 1 4 匹配规则 在嵌套的if else语句中 else总是与上面的 离它最近的 在同一复合语句中还没有配对的if配对 2020 1 27 32 等价于 if a b if a c if a d flag 1 elseflag 2 elseflag 3 if a b if a c if a d flag 1 elseflag 2 elseflag 3 flag 3的条件 flag 3的条件 当c a b时 当a b时 2020 1 27 33 举例 例4 4 输入一个数 判断它是奇数还是偶数 如果是奇数则进一步判断它是否为5的倍数 x 2等于0 x 5等于0 2020 1 27 34 程序 main intx scanf d 等价于if x 2 等价于if x 5 2020 1 27 35 学习if语句的难点 正确用表达式描述条件例如 当x大于5小于10时令x自增if 5 x 10 x if else语句的配对正确判断内嵌语句例如 if x y x x 3 y y 2 elsex x 3 y y 2 if x 5 2020 1 27 36 熟悉常用的if表达式形式 例如有定义 inta b 0 a等于什么值时 执行b 2 语句 if a 0 b 2 if a 1 b 2 if a 0 b 2 if a 1 b 2 if a 0 b 2 if a b 2 if a b 2 等价于if a 0 b 2 等价于if a 0 b 2 2020 1 27 37 2020 1 27 38 4 2switch语句 switch语句的一般形式switch 表达式 case常量表达式1 语句序列1case常量表达式2 语句序列2 case常量表达式n 语句序列ndefault 语句序列n 1 功能 计算表达式的值 与常量表达式的值比较 等于第i个值时 顺序执行语句序列i i 1 n 1若与所有常量表达式值都不相等 执行语句序列n 1 2020 1 27 39 switch语句的算法描述 N S结构图 例如 switch a case5 printf 当a等于5 输出 当a等于2 输出 当a是其他值 输出 2020 1 27 40 说明 case常量表达式i 等价于语句标号 计算出的表达式值等于哪个语句标号 就从哪个位置开始顺序向下执行语句序列 语句位置影响运行结果 例如 switch a case2 printf default printf case5 printf 当a等于2 输出 当a是其他值 输出 当a等于5 输出 switch与break语句结合才能实现程序的分支 break break break break语句 形式 break 功能 终止switch语句 循环语句的执行 继续执行switch语句 循环语句后面的语句break语句可以改变case的语句标号作用 终止后续case语句序列的执行 switch语句和break语句结合 可以实现程序的选择控制 break语句还可以在循环语句中使用 2020 1 27 41 2020 1 27 42 switch语句的简单应用 例4 3 已知x 100 y 15 要求输入一个算术运算符 或 并对x和y进行指定的算术运算 思路 设x和y为float型变量并赋初值 输入的运算符op为char型变量 根据op的值 为 进行x和y的相加 相减 相乘 相除运算 选择分支 还要考虑到输入字符不是 或 时的情况 2020 1 27 43 程序 include stdio h main floatx 100 y 15 z charop op getchar switch op case z x y break case z x y break case z x y break case z x y break default z 0 if int z 0 printf f c f f n x op y z elseprintf cisnotanoperator n op 运行jc4 3 实型数通常不使用z 0或z 0的比较可用if int z 代替 2020 1 27 44 注意 switch语句的书写格式 语句体本身必须用花括号括起 case和default后面如果有多条语句 则可以不必使用花括号 case和常量表达式之间必须有空格 default可以写在语句体的任何位置 也可以省略不写允许switch嵌套使用 但同一个switch语句中 任意两个case的常量表达式值不能相同 2020 1 27 45 4 3选择结构程序设计举例 例4 6 求一元二次方程ax2 bx c 0的根 思路 一元二次方程的根取决于系数a b c求根公式 判别式d b2 4ac当d 0时 方程有两个相等的实根 x1 x2 b 2 a 当d 0时 方程有两个不相等的实根 x1 b sqrt d 2 a x2 b sqrt d 2 a 当d 0时 方程有两个虚根 x1 jp ipix2 jp ipi 实部jp b 2 a 虚部ip sqrt d 2 a 2020 1 27 46 算法 ax2 bx c 0 2020 1 27 47 程序 include math h main floata b c d x1 x2 lp ip scanf f f f 2020 1 27 48 程序 续 elseif d 1e 6 不相等的实根 x1 b sqrt d 2 a x2 b sqrt d 2 a printf hastworealroots n printf x1 8 4f x2 8 4f n x1 x2 else 虚根 lp b 2 a ip sqrt d 2 a printf hastwocomplexroots n printf x1 8 4f 8 4fi n lp ip printf x2 8 4f 8 4fi n lp ip 运行jc4 6 2020 1 27 49 举例 续 例4 b 输入年份 判别该年是否为闰年 思路 年份year为闰年的条件为 能够被4整除 但不能被100整除的年份 能够被400整除的年份 只要满足任意一个就可以确定它是闰年 例如 1996年 2000年是闰年1998年 1900年不是闰年 设定标志变量leap 只要符合其中一个条件的就是闰年 令leap 1 否则令leap 0 2020 1 27 50 算法 year 4 0 year 100 0 2020 1 27 51 程序 main intyear leap scanf d 运行jc4 b 总结 运算符if语句if语句的形式 简单 双重分支 多重分支 if语句的嵌套switch语句switch语句的形式break语句 2020 1 27 52
展开阅读全文
相关资源
相关搜索

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


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

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


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