C程序设计第6章选择结构程序设计.ppt_第1页
C程序设计第6章选择结构程序设计.ppt_第2页
C程序设计第6章选择结构程序设计.ppt_第3页
C程序设计第6章选择结构程序设计.ppt_第4页
C程序设计第6章选择结构程序设计.ppt_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

第6章 选择结构程序设计 选择结构的N-S流程图如图6.1所示。 图6.1 选择结构的N-S流程图 P为选择的条件,对于执行A还是B要根 据条件P的判断结果来决定,如果条件P的结 果为真则执行A,如果条件P的结果为假则执 行B。这里条件P的结果就成为执行A还是B 的关键所在。P是一个判断的条件,其结果 为真或者假,将其称为“逻辑量”。C语言中 没有提供逻辑型变量,可以使用整型数据去 描述1表示真,0表示假。在C语言中任意确 定的值都可作为逻辑量处理,当作为逻辑量 处理时,如果该值为非0,则表示真(1), 如果该值为0,则表示假(0)。下面讲述条 件P的逻辑量表示方法。 6.1 逻辑量的表示方法 6.2 if语句 6.3 switch语句 6.4 选择结构程序设计举例 6.1 逻辑量的表示方法 C语言中逻辑量是用整型数据来表示 的,用来表示真或成立,用来表示假 或不成立。逻辑量的表示是非常灵活的, 具体表示方法有以下几种方式。 6.1.1 关系表达式 1关系运算符 关系运算是一种比较运算符两侧运算对象大 小的运算,完成两个运算对象比较,运算结果为 成立与不成立,用1和0表示。 关系运算符有以下6种: ,=,b,3+7!=10,aa a+(b=a+) 都是合法的C语言关系表达式。 关系表达式的求解遵循表达式求解规则,关 系运算的结果只有两种可能,要么关系成立为真 (1),要么关系不成立为假(0)。 例如有整型变量a,b,且a3,b5, 求解表达式:aba 算术运算符“”的优先级高于关系运算符 “”,因此先计算ab的值为8,之后运算8a ,而a参加运算时需转换为整型数97运算,实 际运算的是897,判断后其结果为不成立,表 达式的运算结果为0。 若有关系表达式0n) else printf(The max is %dn,n); 图6.7 例6.2的流程图 使用if语句要注意以下几点。 (1)if语句是一条语句。 (2)逻辑量是if语句选择判断的条件,C语言中任 意确定的值都可以作为逻辑量处理。 (3)逻辑量为1和为0的分支都只能是单条语句, 如果要执行多个操作的话,应该将多个操作复合为 单条语句才能出现在if的分支结构中。 (4)分支中出现的语句1是复合语句的时候,后 不应该有“;”。 (5)语句中语句1是条件语句中必不可少的部分。 (6)正确理解if语句和N-S选择结构流程图的对应 关系。 嵌套主要用于处理多条件的题目。设计 嵌套选择结构时,应清晰描述各条件之间的 约束关系。嵌套的if语句可以简单描述如下: 嵌入的if语句是在当外围的if语句的条件 p1的逻辑量值为1时才可以执行,即其作为外 围if语句的条件成立时的执行语句,嵌入在外 围if内。当然语句1、语句2、语句3也可以是 if语句,具体的嵌套形式和具体题目中的多条 件是密切相关的, if语句的嵌套形式应建立 在对具体问题的分析上。 6.2.2 if语句的嵌套及多条件结构的实现 例6.4 求函数中x为任意值时 y 的值。 由于if选择结构仅有两个分支,而此分段 函数x的定义域为三分支,因此当确定x的关 系表达式时,其中必然有一个分支包含另外 两部分定义域,需在此基础上作进一步的条 件判断。 根据流程图得到如下程序: main() main() float x,y; float x,y; scanf(%f, scanf(%f, if(x0) y=1/x; if(x0) y=1/x; else if(x=0) y=0; else if(xb)?a:b 的 求解过程如下:此表达式右边为一条件表达式, 由于条件运算符的优先级高于赋值运算符,应先 计算条件表达式的值,再通过赋值运算符把得到 的值赋给max。在条件表达式中,首先计算表达 式ab的逻辑量值,根据题意,ab表达式的逻辑 量值为1,则a为条件表达式的结果,为5,那么条 件表达式的值为5,可得max的值为5。 6.3 switch语句 如果题目中的多条件是有规律的,则可以采用switch语句 来实现。switch语句称为分支语句,又称为开关语句。 switch的具体形式如下: switch(表达式) case 整型常量表达式1:语句组1 break case 整型常量表达式2:语句组2 break case 整型常量表达式n:语句组n break default :语句组n+1 switch,case,default和break都是构成多分支语句的关 键字。 表示break可有可无。 其中表达式是任意类型的表达式,但运算 结果会自动转换为整型。整型常量表达式只 能由整型常量构成。break语句的作用是结束 switch语句,执行switch的后续语句。语句组 可以是单条语句,也可以是多条语句,多条 语句无需用复合语句去表示。而在ifelse结 构中的语句1和语句2只能是单条语句。 switch语句中的一对花括号是必须书写 的,是switch语句构成的必要部分。 switch语句的具体执行过程为:根据switch表 达式的值,寻找switch语句的执行入口。自上而下 和case后的整型常量表达式的值进行比较,如果 相等则执行其后的语句组,假定入口是整型常量 表达式2,那么该语句执行语句组2,当语句组2执 行完毕后,若有break语句,则中断switch语句的 执行,否则继续执行语句组3;如果没有和表达式 的值相匹配的整型常量表达式,则执行default后 的语句组。 case后的整型常量表达式的值实际上就是 switch后括号内的表达式的各种可能的取值。如果 能穷尽表达式各种可能的取值,则语句中可省去 default分支;否则最好不要省略default,因为 default表示的是switch语句在没有找到匹配入口时 的语句执行入口。 例6.6 输入一同学的成绩,判断其成绩等级。 等级范围为: 90 以上 等级为A 8980 等级为B 7970 等级为C 6960 等级为D 60 以下 等级为E 假定成绩为score,可以得到表达式(int)(score/10)。当表 达式的值为10和9时,对应于90分以上的条件分支,为8时对应 于8980分段的条件分支,以下的取值和对应的分支可以依次 类推。60分以下可用switch中default分支来描述。程序如下: main() float score; scanf(%f, switch(score/10) case 10: case 9 : printf(Your score is An); break; case 8 : printf(Your score is Bn); break; case 7 : printf(Your score is Cn); break; case 6 : printf(Your score is Dn); break; default : printf(Your score is En); score/10中score得到的结果为浮点型, 系统会自动转换为整型。常量表达式为10 的分支,由于与9的分支均为A级,利用 switch的特点可以不写值为10的分支对应的 语句。 使用switch语句应注意以下几点。 (1)switch 语句中表达式可为任意类型,但运算结 果为整型。case后的表达式必须是整型常量表达式。 (2)每个case后的常量表达式的值不能相同,否则 会自相矛盾,无法判断。 (3)case及default的顺序对运行结果不产生影响。 (4)若无break语句进行switch语句的强制跳出,则 从该处顺序执行其余语句,直至跳出或执行结束。 (5)case和其后的整型常量表达式中间应有空格 6.4 选择结构程序设计举例 例6.10 批发钢材,每吨批发金额为1000元,计算批发金 额,批发折扣如表6-3所示。 表6-3 例6.10折扣表 表6-4 例6.10折扣规律表1 批发量(吨 ) 折扣金额( %) 批发量(吨 ) t/50相除结 果(取整) 500 500 1005 1001 2508 2502、3、4 50010 5005、6、7、8 、9 50015 500其他 main() float t,d,m; scanf(“%f“, else if(t100) d=5./100; else if(t250) d=8./100; else if(t500) d=10./100; else d=15./100 m=t*1000*(1-d); printf(%.0fx9dn,m); /*x9d是字符¥的ASCII码*/ main() float t,d,m; scanf(%f, switch(t/50) c

温馨提示

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

评论

0/150

提交评论