第5章选择结构程序设计.ppt
《第5章选择结构程序设计.ppt》由会员分享,可在线阅读,更多相关《第5章选择结构程序设计.ppt(101页珍藏版)》请在三一文库上搜索。
1、第5章 选择结构程序设计,5.1 选择结构的概念,56-3,5.1 选择结构的概念,到目前为止,所介绍的程序都属于顺序结构,顺序结构 程序中的所有语句都将被按照书写的顺序执行一次。但是在 实际应用中,常常需要根据不同情况选择不同的执行语句, 这时需要设计分支结构。 例如:在第4章例4.11中,我们介绍了用海伦公式求三条边 长a、b、c分别为3、4、5的三角形的面积s。这个程序的局限 性很大,它不能判别三边长度是否满足构成三角形的条件。 为此,将该问题的算法用流程图和N-S图描述如图5.1所示。,56-4,5.1 选择结构的概念,56-5,基于图5.1编写的程序如下: #include #inc
2、lude void main() float a,b,c,p,s; printf(“input a,b,c=“); /*输出提示字符串input a,b,c= */ scanf(“%f,%f,%f“, ,5.1 选择结构的概念,56-6,程序运行结果: input a,b,c=3,4,5 s= 6.00 input a,b,c=0,2,3 data error! input a,b,c=9,2,4 data error!,5.1 选择结构的概念,56-7,此程序在执行时,由用户键入三角形的三边长度,通过程 序第7行“if()”判断输入数据是否满足构成三角形的条件:所有 的边长大于0,并且所有两
3、边之和均要大于第三边。若满足, 则计算并输出结果;反之,只要其中有一个条件不满足,就不 能构成三角形,程序输出“data error!”出错信息。 在图5.1和上述程序中包含有分支结构。在C语言中,当需 要根据选择条件来确定程序的执行流程,选择某一个分支来执 行,这样的程序结构被称为选择结构(分支结构)。C语言提 供了两种控制语句来实现这种选择结构:if条件语句和switch开 关语句。,5.1 选择结构的概念,5.2 关系运算符和关系表达式,56-9,5.2 关系运算符和关系表达式,在选择结构中,需要根据选择条件进行判断,然后执行 不同的分支。而选择条件在C语言中一般是由关系表达式组 成的。
4、所谓“关系运算”实际上是“比较运算”,那么比较两个 量的运算符称为关系运算符,由关系运算符组成的式子称为 关系表达式。 关系表达式有且只有两个值:“真”或“假”。由于C语言 中没有逻辑型数据,因此用数值1代表逻辑真,用数值0代表 逻辑假。,56-10,5.2 关系运算符和关系表达式,5.2.1 关系运算符及其优先次序 C语言提供了以下6种关系运算符,这些关系运算符分成两 个优先级。 (大于) = (大于等于) ,=,=)。 后两种关系运算符的优先级别相同(=,!=)。 前四种关系运算符的优先级高于后两种关系运算符。 关系运算符的优先级低于算术运算符。 关系运算符的优先级高于赋值运算符。,56-
5、11,5.2 关系运算符和关系表达式,算术运算符、关系运算符和赋值运算符的运算次序为: 算术运 算符关系运算符赋值运算符 例如: xa+b 等价于 x(a+b) x=a=b 等价于 x=(a=b) x=y53,在C语言中,先计算85的结果为1,也 就是为真,接着再来计算13的结果为0,也就是为假。当然这 个计算过程与原式在数学中的含义(85并且53)是不一样的, 这一点值得我们注意。,56-12,5.2 关系运算符和关系表达式,5.2.2 关系表达式 用关系运算符将两个表达式连接起来的表达式,称为关系 表达式。表达式可以是算术表达式、关系表达式、逻辑表达式 、赋值表达式以及字符表达式。 其一般
6、形式为:表达式 关系运算符 表达式 例如: a+bc+d ab=cd x!=d (x=2)=(b=a) 等都是合法的关系表达式。,56-13,5.2 关系运算符和关系表达式,关系表达式的值是一个逻辑值,即“真”或“假”。C语言中 没有逻辑型数据,以1表示“真”,0表示“假”。C语言在判断一 个量是否为真时,只要不是0就认为是真,只有等于0才认为是 假。 例如:a=1,b=2,c=3, 则:cba : “cb”是真的,值为1,1a是假的,值为0, 因此整个表达式的值为0。 a-b=b-c : 表达式的值为1。a90+3*c : a的ASCII码 值是97,因此表达式的值是0。,56-14,5.2
7、 关系运算符和关系表达式,例5.1 输出各表达式的值。 #include void main() char ch=k; int a=1,b=2,c=3; float x=1E+2,y=6.5; printf(“%d %d %dn“,a+5=c+1,ch-10=97); printf(“%d %dn“,2E+2x=y+0.5); ,56-15,5.2 关系运算符和关系表达式,程序运行结果: 1 0 1 1 0 程序说明: 在程序中计算并输出了各种关系运算符的值。字符变量 是以它对应的ASC码参与运算的,97+5=c+1,根 据运算符的从左向右结合性,先算数后关系,而算数运算符 也要按照先乘除,后
8、加减,即-1-2*2=-5,该式不成立,其值 为0。而2E+2x1E+2值为1,然后13值为1。,5.3 逻辑运算符和逻辑表达式,56-17,5.3 逻辑运算符和逻辑表达式,选择条件在C语言中不仅是由关系表达式组 成的,还可 以由逻辑表达式组成。逻辑运算与关系运算结果相同,有且 只有两个值:“真”或“假”,分别是“1”和“0”。当某一事件由 两个或两个以上条件来约束时,就得使用逻辑运算。 例如:显示班级里总平均成绩大于80的男生,这就有两 个条件约束,既得总平均成绩大于80,而且是男生的人。,56-18,5.3 逻辑运算符和逻辑表达式,5.3.1 逻辑运算符及其优先次序 C语言提供了3种逻辑运
9、算符: &(与运算符)、|(或运算符)、!(非运算符)。 &相当于AND、 |相当于OR、 !相当于NOT。 与其他运算符的优先次序如下: !(非运算符) 算术运算符 优先级别由高到低 算术运算符 &(与运算符)、|(或运算符) 赋值运算符 逗号运算符,优先级别由高到低,56-19,5.3 逻辑运算符和逻辑表达式,例如: (a+b)c)&(x+y)c&x+y7) 可以写成 x7 (!x)&y=z) 可以写成 !x&y=z “&”和“|”是双目运算符,要求有两个运算量(操作数)。具有从左向右的结合性。如,(y%=440) & (y%100!=0)。 非运算符“!”是单目运算符,具有从右向左的结合
10、性。 例如,!a。,56-20,5.3 逻辑运算符和逻辑表达式,5.3.2 逻辑表达式 用逻辑运算符连接起来的表达式,称为逻辑表达式。其一 般形式为: 表达式 逻辑运算符 表达式 其中的表达式又可以是逻辑表达式,从而组成了嵌套的情形 例如:(a&b)|(!c&d) 逻辑表达式的值是一个逻辑值,即1或0。逻辑运算符两侧 的运算对象不但可以是0或1,或者是0或非0的整数,也可以是 任何类型的数据。可以是实型、字符型和指针类型的数据。系 统最终以0和非0来判断它们属于“真”或“假”。例如:a & d ,a和d的ASCII码值均不是0,按“真”处理,因此表达式的值 为1。,56-21,5.3 逻辑运算
11、符和逻辑表达式,5.3.3 逻辑表达式的求值规则 1与运算求值规则 与运算“&”参与运算的两个量都为真时,结果才为真,否则为假。 例如:逻辑表达式53&85,由于53为真,85也为真,其结 果也为真。逻辑表达式53&59,由于53为真,510为假,其结 果为假。 2或运算求值规则 或运算“|”参与运算的两个量只要有一个为真时,结果就为真。 两个量都为假时,结果才为假。 例如:逻辑表达式515,由于515也为假,其结 果也就为假。 3非运算求值规则 非运算“!”参与运算量为真时,结果为假;参与量为假时,结果为真 。例如:逻辑表达式!55的结果为假,因为55的值为真,所以!55的值 为假。,56-
12、22,5.3 逻辑运算符和逻辑表达式,这3种逻辑运算符的运算规则,可用表5-1表示。 表5-1 逻辑运算真值表,56-23,5.3 逻辑运算符和逻辑表达式,由逻辑表达式的求值规则可以总结如下: (1)逻辑运算符两侧的运算对象,除可以是0和非0的整数外, 也可以是其他任何类型的数据。如是实型和字符型等。 (2)在计算逻辑表达式时,只有在必须执行下一个表达式才能 求解时,才求解该表达式,即并不是所有的表达式都被求解。 逻辑与运算表达式中,只要前面有一个表达式被判定为“假”系统不再判定或求解其后的表达式,整个表达式的值为0。 逻辑或运算表达式中,只要前面有一个表达式被判定为“真”系统不再判定或求解其
13、后的表达式,整个表达式的值为1。,例如:对于逻辑表达式: a|&b|c 当a=1(非0)时,表达式的值为1,不必计算判断 b、c; 当a=0时,才判断b,如b=1,则表达式的值为1, 不必计算判断c; 只有当a=0、b=0时,才判断c。,56-24,5.3 逻辑运算符和逻辑表达式,例5.2 输出各逻辑表达式的值。 #include void main() char c=k; int i=1,j=2,k=3; float x=3e+3,y=0.95; printf(“%d, %dn“,!x*!y,!x); printf(“%d, %dn“,x|i 程序运行结果: 0,0 1,0 0,1,56-2
14、5,5.3 逻辑运算符和逻辑表达式,程序说明: 在程序中计算并输出了各种逻辑运算符的值。!x和!y分别为“0”,!x*!y也为“0”,因此输出的值为“0”。由于x为“非0”,所以!x的逻辑值为“0”。对x|i&j-3式,先计算j-3的值为非“0”,再求i&j-3的逻辑值为“1”,所以x|i&j-3的逻辑值为“1”。对ij&xy式,由于ij的值为“1”,而xy为“0”,即表达式的值为“1”和“0”相与的结果,最后为“0”。 对于i=5&c&(j=8)式,由于i=5为假,即值为“0”,该表达式由两个与运算组成,所以整个表达式的值为“0”。对于x+y|i+j+k,由于x+y的值为“非0”,所以整个或
15、表达式的值为“1”。,56-26,5.3 逻辑运算符和逻辑表达式,例5.3 分析下面程序执行后的输出结果 #include void main() int a=1,b=1,c=1; printf(“%dn“,+a|+b ,56-27,5.3 逻辑运算符和逻辑表达式,程序运行结果: 1 2 1 1 1 3 2 1 1 2 2 1 0 1 1 0 0 0 0 0,56-28,5.3 逻辑运算符和逻辑表达式,分析: 根据在计算逻辑表达式时,只有在必须执行下一个表达式才能求解时,才求解该表达式的方法,在第一个printf()函数中,首先计算“|”的左边部分。如果“|”的左值为非0,则不再求右值。因此,
16、+a的值为2,所以不再求+b&+c的值了,因而,不执行+b和+c。 由此得知,整个逻辑表达式的值为1,a、b、c的值分别为2、1、1。故第一个printf()函数的输出结果为:1,而第二个printf()函数的输出结果为:2 1 1。按照此法,可以求出其他的结果。,5.4 if语句,56-30,5.4 if语句,选择结构程序设计中条件语句的作用是,使程序按某种条件有选择地执行一条或多条语句。用if语句可以构成选择(分支)结构。它根据给定的条件进行判断,以决定执行某个分支程序段。C语言的if语句有3 种基本形式。,56-31,5.4 if语句,5.4.1 if语句的3种形式 1 第一种形式(单分
17、支选择结构) 语句格式: if(表达式) 语句; 语句功能:首先计算表达式的值,若表达式的值为非0 ,则执行语句;若表达式的值为0,则该语句不起作用,继 续执行下面的语句。,56-32,5.4 if语句,56-33,例5.4 任意输入两个整数,输出其中的大数。,5.4 if语句,56-34,5.4 if语句,#include void main() int a,b,max; printf(“input a,b=“); scanf(“%d %d“, ,程序运行结果: input a,b=5 3 max=5,56-35,5.4 if语句,2第二种形式(双分支选择结构) 语句格式: if(表达式)
18、语句1; else 语句2; 语句功能:首先计算表达式的值,若表达式的值为非0, 则执行语句1,否则执行语句2。,56-36,5.4 if语句,56-37,5.4 if语句,例5.5 任意输入两个整数,输出其中的大数。,56-38,5.4 if语句,#include void main() int a,b; printf(“input a,b=“); scanf(“%d %d“, 程序运行结果: input a,b=33 55 max=55,56-39,5.4 if语句,3 第三种形式(多分支选择结构) 前两种形式的if语句一般用于两个分支的情况。当有多个分支选择时,可采用下列多分支选择结构。
19、 语句格式: if(表达式1) 语句1; else if(表达式2) 语句2; else if(表达式n) 语句n; else 语句n+1;,语句功能: 首先计算表达式1的值,若表达式1的值为非0,则执行语 句1,否则计算表达式2的值,若表达式2的值为非0,则执行语句2,否则计算表达式3的值,若表达式3的值为非0,则执行语句3,所有的表达式的值都是0时,执行语句n+1。,56-40,5.4 if语句,56-41,5.4 if语句,56-42,5.4 if语句,例5.6 晨光小区要举行跳棋比赛,比赛要根据居民的岁数分组。 编写程序输入一个居民的岁数,然后根据表5-2将其分组,输出分组的结果(姓名
20、用编号代替)。,56-43,5.4 if语句,56-44,5.4 if语句,56-45,5.4 if语句,#include void main() int age,numb; char group; printf(“input Number:“); scanf(“%d“, ,程序运行结果: input Number:3 input age:61 The No.3 is in the group 4 input Number:55 input age:26 The No.55 is in the group 2,56-46,5.4 if语句,说明: 1、表达式一般为关系表达式或逻辑表达式,C语言
21、在判断时只要不 是0,就认为是真,只有0时才认为是假,因此表达式可以是任意 类型的表达式,这是C语言与其它高级语言的不同之处。 例如: if(c=getchar( ) printf(“%c”,c); 输入一个字符,赋给变量c只要输入的不是0,就输出输入的字符。 2、分号是C语句必备的成分,因此if和else后面的语句都必须有分号。 例如: if(ab) printf(“%d,%dn”,a,b); else printf(“%d,%dn”,a,b);,56-47,5.4 if语句,3、语句可以是一个简单语句,也可以是复合语句。当条件成立或 不成立时,执行的语句不止一条语句时,必须使用复合语句。
22、例如:将变量a,b中大的放到a中,小的放到b中。 a=5,b=9或a=9,b=5 if(ab) t=a; a=b; b=t; 执行后都可得到:a=9,b=5 如果写成: if(ab) t=a;a=b;b=t; a=5,b=9执行后可得到:a=9,b=5 a=9,b=5执行时“ab”为假,“t=a”不执行,但“a=b”和“b=t”要执行,若t没有赋过值,则会出错。,56-48,5.4 if语句,例5.7 任意输入两个整数,按代数值从小到大的顺序输出这2 个整数。 #include void main() int a,b,t; printf(“input a,b=“); scanf(“%d %d“
23、, 程序运行结果: input a,b=55 33 33 55,56-49,5.4 if语句,例5.8 任意输入三个整数,按代数值从小到大的顺序输出。 #include void main() int a,b,c,t; printf(“input a,b,c=“); scanf(“%d %d %d“, 程序运行结果: input a,b=55 33 66 33 55 66,56-50,5.4 if语句,5.4.2 if语句的的嵌套 在if语句中又包含一个或多个if语句,称为if语句的嵌套。 一般形式如下: 1. if(表达式) if(表达式) 语句1; else 语句2; else if(表达
24、式) 语句3; else 语句4;,2. if(表达式) if(表达式) 语句1; else 语句2; else 语句3;,56-51,5.4 if语句,3. if(表达式) 语句1; else if(表达式) 语句2; else 语句3; 注意:else 总是与它上面最近的尚未与else匹配的if配对。 一般情况下,if与else的数目相同。如果if与else的数目不相同,为实现程序设计者的目的,可以用花括号来确定配对关系。 例如:if(表达式1) if(表达式2) 语句1; else 语句2; 这时 限定了内嵌的if语句的范围,因此else与第一个if匹 配。如果没有 ,则else与第二个
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 选择 结构 程序设计
链接地址:https://www.31doc.com/p-2535545.html