第4章-选择结构程序设计-C语言课件.ppt
《第4章-选择结构程序设计-C语言课件.ppt》由会员分享,可在线阅读,更多相关《第4章-选择结构程序设计-C语言课件.ppt(59页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 安 庆 师 范 学 院 计 算 机 与 信 息 学 院 4.1 4.1 4.1 4.1 关系运算符与关系表达式关系运算符与关系表达式关系运算符与关系表达式关系运算符与关系表达式4.2 4.2 4.2 4.2 逻辑运算符与逻辑表达式逻辑运算符与逻辑表达式逻辑运算符与逻辑表达式逻辑运算符与逻辑表达式4.3 if4.3 if4.3 if4.3 if语句语句语句语句4.4 switch4.4 switch4.4 switch4.4 switch语句语句语句语句4.5 4.5 4.5 4.5 程序举例程序举例程序举例程序举例第第4章章选择结构程序设计选择结构程序设计 安 庆 师 范 学 院 计 算 机
2、 与 信 息 学 院 4.1.1 关系运算符关系运算符 小于小于=大于大于=大于或等于大于或等于 =等于等于!=!=不不等于等于 优先级:优先级:、=、=优先级相同优先级相同 =和和!=的优先级相同,低于前四种的优先级相同,低于前四种关系运算符的优先级低于算术运算符,高于逻辑运关系运算符的优先级低于算术运算符,高于逻辑运算符算符&和和|,介于移位与双目位逻辑运算符之间。,介于移位与双目位逻辑运算符之间。结合性:左结合。若有多个关系运算同时进行,按优结合性:左结合。若有多个关系运算同时进行,按优先级从高到低次序运算,优先级相同从左向右计算。先级从高到低次序运算,优先级相同从左向右计算。4.1关系
3、运算符与关系表达式关系运算符与关系表达式 安 庆 师 范 学 院 计 算 机 与 信 息 学 院 4.1.1关系运算符关系运算符 关系运算符都是双目运算符,要求两个关系运算符都是双目运算符,要求两个操作数是同一种数据类型,其结果为逻辑值操作数是同一种数据类型,其结果为逻辑值(真和假真和假)。在。在C语言中:语言中:逻辑值逻辑值“真真”:运算结果系统用:运算结果系统用1表示表示,参与参与运运 算时用非算时用非0值值(数值类即可数值类即可)表示;表示;逻辑值逻辑值“假假”:用:用0表示。表示。安 庆 师 范 学 院 计 算 机 与 信 息 学 院 关系表达式是用关系运算符连接两个数值表达式关系表达
4、式是用关系运算符连接两个数值表达式形成的式子。例如:。例如:3+2 3+2=2*3 /*2*3 /*判断判断3+23+2和和2*32*3的结果是否相等的结果是否相等*/*/a+=a+=-b /*b /*判断判断a+a+的值是否大于或等于的值是否大于或等于-b*/b*/注:数值表达式一般是算术表达式,也可以是关系注:数值表达式一般是算术表达式,也可以是关系表达式、逻辑表达式、赋值表达式、字符表达式等。表达式、逻辑表达式、赋值表达式、字符表达式等。关系表达式的一般形式为:关系表达式的一般形式为:表达式表达式 关系运算符关系运算符 表达式表达式4.1.2关系表达式关系表达式 安 庆 师 范 学 院
5、计 算 机 与 信 息 学 院 安 庆 师 范 学 院 计 算 机 与 信 息 学 院 逻辑运算的真值表ab!aa&ba|b真真(非非0)0)真真(非非0)0)假假(0)(0)真真(1)(1)真真(1)(1)真真(非非0)0)假假(0)(0)假假(0)(0)假假(0)(0)真真(1)(1)假假(0)(0)真真(非非0)0)真真(1)(1)假假(0)(0)真真(1)(1)假假(0)(0)假假(0)(0)真真(1)(1)假假(0)(0)假假(0)(0)安 庆 师 范 学 院 计 算 机 与 信 息 学 院 逻辑表达式类似于关系表达式,是用逻辑运逻辑表达式类似于关系表达式,是用逻辑运算符把两个表达式
6、连接起来的式子。算符把两个表达式连接起来的式子。例如:例如:a+b&aa+b&a;判断判断a+ba+b和和a a的值是否都为真,若都为真,则的值是否都为真,若都为真,则表达式为真,否则为假。表达式为真,否则为假。逻辑表达式的一般形式为:逻辑表达式的一般形式为:!表达式表达式 表达式表达式&表达式表达式 表达式表达式|表达式表达式4.2.3逻辑表达式逻辑表达式 安 庆 师 范 学 院 计 算 机 与 信 息 学 院 【例【例4-1】分析下面程序段的运行结果分析下面程序段的运行结果 main()int a=123,b=456,x;char c=a;x=(a|b)&(cb);printf(a=%d,
7、b=%dn,a,b);printf(x=%dn,x);安 庆 师 范 学 院 计 算 机 与 信 息 学 院 安 庆 师 范 学 院 计 算 机 与 信 息 学 院 基本规律基本规律(设设a a为一合法表达式,结果为逻辑值为一合法表达式,结果为逻辑值):0&a0&a结果为结果为0(0(不计算不计算a)0|a a)0|a 结果为结果为a(a(计算计算a a逻辑值逻辑值)1&a1&a结果为结果为a(a(计算计算a a逻辑值逻辑值)1|a)1|a 结果为结果为1(1(不计算不计算a)a)a&aa&a结果为结果为a(a(逻辑值逻辑值)a|a)a|a 结果为结果为a(a(逻辑值逻辑值)a|!aa|!a结
8、果为结果为1 a&!a1 a&!a结果为结果为0 !(!a)0 !(!a)结果为结果为a(a(逻辑值逻辑值)【注意】逻辑运算符的【注意】逻辑运算符的“短路短路”现现象象 安 庆 师 范 学 院 计 算 机 与 信 息 学 院 组合规律组合规律(设设a a、b b、c c均为合法表达式均为合法表达式):a&b&c自左向右运算,遇自左向右运算,遇0停止运算,停止运算,表达式值为表达式值为0a|b|c自左向右运算,遇自左向右运算,遇1停止运算,表停止运算,表达式值为达式值为10&a|b不计算不计算a但要计算但要计算b1&a|b计算计算a,a=0要计算要计算b,a=1不计不计算算b0|a&b计算计算a
9、,a=0不计算不计算b,a=1要计要计算算b1|a&b不计算不计算a和和b,表达式值为,表达式值为1 安 庆 师 范 学 院 计 算 机 与 信 息 学 院 安 庆 师 范 学 院 计 算 机 与 信 息 学 院 单分支单分支ifif语句的基本形式为:语句的基本形式为:if(if(表达式表达式)语句;语句;其语义是:首先判断表达式的值其语义是:首先判断表达式的值是否为真是否为真(非非0),若表达式的值为,若表达式的值为真,则执行其后的语句;真,则执行其后的语句;否则不否则不执行该语句。无论是否执行该语执行该语句。无论是否执行该语句,接着都执行句,接着都执行ifif语句后面的语语句后面的语句。句
10、。4.3.1单分支if语句表达式表达式语句语句非非00 安 庆 师 范 学 院 计 算 机 与 信 息 学 院 安 庆 师 范 学 院 计 算 机 与 信 息 学 院 4.3.2双分支双分支ifif语句语句双分支双分支ifif语句是语句是ifif语句基本形式,语句基本形式,即即if-elseif-else形式,语句的结构为:形式,语句的结构为:if(if(表达式表达式)语句语句1 1;else else 语句语句2 2;语义:当表达式的值为真,则执语义:当表达式的值为真,则执行语句行语句1 1,否则执行语句,否则执行语句2 2。然后。然后执行执行ifif语句后面的语句。语句后面的语句。单分支单
11、分支ifif语句相当于双分支语句相当于双分支ifif语语句缺省句缺省elseelse子句。子句。非非0表达表达式式语句语句1语句语句20 安 庆 师 范 学 院 计 算 机 与 信 息 学 院 main()float a,b,max;printf(input the two numbers:);scanf(%f,%f,&a,&b);if(ab)max=a;else max=b;printf(max=%fn,max);【例【例4-3】从键盘输入两个整数,输出其中最大者从键盘输入两个整数,输出其中最大者 安 庆 师 范 学 院 计 算 机 与 信 息 学 院 安 庆 师 范 学 院 计 算 机 与
12、 信 息 学 院 【注意】【注意】(2)(2)在在ifif语语句句中中,条条件件表表达达式式必必须须用用括括号号括括起起来来。在在每每一个子句之后必须加分号。例如:一个子句之后必须加分号。例如:if(ab)max=a;else max=b;elseelse子子句句是是ifif语语句句的的一一部部分分,和和ifif子子句句配配对对使使用用,不不能单独使用。能单独使用。(3)(3)在在ifif语句的各种形式中,所有的语句应为单个语句,语句的各种形式中,所有的语句应为单个语句,如果想将单个语句换成一组语句,则必须把这一组语句如果想将单个语句换成一组语句,则必须把这一组语句用花括号用花括号“”“”括起
13、来组成一个复合语句。括起来组成一个复合语句。安 庆 师 范 学 院 计 算 机 与 信 息 学 院 4.3.3多分支选择结构多分支选择结构多分支选择结构的多分支选择结构的if语句语句if(表达式表达式1)语句语句1;else if(表达式表达式2)语句语句2;else if(表达式表达式3)语句语句3;else if(表达式表达式n)语句语句n;else 语句语句n+1;语义语义:依次判断表达式的值,当某个表达式的值为真依次判断表达式的值,当某个表达式的值为真时,时,则执行其对应的语句。然后跳到整个则执行其对应的语句。然后跳到整个if语句之后语句之后继续执行程序。继续执行程序。如果所有的表达式
14、均为假,则执行语如果所有的表达式均为假,则执行语句句n+1。然后继续执行后续程序。然后继续执行后续程序。安 庆 师 范 学 院 计 算 机 与 信 息 学 院 多分支if语句的控制流程 安 庆 师 范 学 院 计 算 机 与 信 息 学 院 【例【例4-4】分段函数 输入任意输入任意输入任意输入任意x x,求,求,求,求y y值。值。值。值。main()float x,y;printf(input one number:);scanf(%f,&x);if(x=0|x=2)y=0;else if(x0)y=(x+1)/(x-2);else y=(x-1)/(x-2);printf(y=%fn,y
15、);安 庆 师 范 学 院 计 算 机 与 信 息 学 院 【例【例4-5】判别键盘输入字符的类别:控制字符、数字、判别键盘输入字符的类别:控制字符、数字、判别键盘输入字符的类别:控制字符、数字、判别键盘输入字符的类别:控制字符、数字、大写字母、小写字母、其他字符。大写字母、小写字母、其他字符。大写字母、小写字母、其他字符。大写字母、小写字母、其他字符。#includevoidmain(void)charc;printf(Inputacharacter;);c=getchar();if(c=0&c=A&c=a&c=z)printf(Thisisasmalllettern);elseprintf
16、(Thisisanothercharactern);安 庆 师 范 学 院 计 算 机 与 信 息 学 院 安 庆 师 范 学 院 计 算 机 与 信 息 学 院 嵌套if语句的层次划分问题 由于嵌套的复杂情况,怎么划分嵌套的层由于嵌套的复杂情况,怎么划分嵌套的层次就成了问题。其方法为:寻找次就成了问题。其方法为:寻找ifelse配对。配对。C语言语言ifelse配对的规定:配对的规定:从最前面的从最前面的else开始,使每个开始,使每个else与其前与其前面最近的尚未配对的面最近的尚未配对的 if 匹配。匹配。安 庆 师 范 学 院 计 算 机 与 信 息 学 院 嵌套if语句的层次划分问题
17、 可能存在的问题:当内层为单分支可能存在的问题:当内层为单分支if语句时,可能产生语句时,可能产生ifelse配对错误配对错误(内层内层if语句为双分支时无此问题语句为双分支时无此问题)。例如内层单分支例如内层单分支if语句嵌套在外层语句嵌套在外层if子句中:子句中:按按ifelseifelse配对原则应写成:配对原则应写成:if(if(表达式表达式)if(if(表达式表达式)语句语句11;11;else else 语句语句1212;按原意应该写成:按原意应该写成:if(if(表达式表达式)if(if(表达式表达式)语句语句11;11;else else 语句语句2 2;原意:原意:if(if
18、(表达式表达式)if(if(表达式表达式)语句语句11;11;else else 语句语句2 2;安 庆 师 范 学 院 计 算 机 与 信 息 学 院 嵌套if语句的层次划分问题 然而,单分支内层然而,单分支内层if语句嵌套在外层语句嵌套在外层else子句中子句中 if(表达式表达式)语句语句1;else if(表达式表达式)语句语句21;这种写法内层这种写法内层 if 语句不加花括号也不会出现语句不加花括号也不会出现ifelse配对错误。配对错误。多分支多分支 if 语句其实就是多层嵌套的语句其实就是多层嵌套的 if 语句,其每语句,其每一层都是嵌套在一层都是嵌套在else子句中子句中 安
19、 庆 师 范 学 院 计 算 机 与 信 息 学 院 安 庆 师 范 学 院 计 算 机 与 信 息 学 院 【例【例4-6】求符号函数求符号函数的值的值#includemain()intx,y;scanf(”%d”,&x);if(x0)y=-1;elseif(x=0)y=0;elsey=1;printf(”x=%d,y=%dn”,x,y);安 庆 师 范 学 院 计 算 机 与 信 息 学 院 4.3.5条件运算符和条件表达式条件运算符和条件表达式1 1、条件运算符、条件运算符 条件运算符由条件运算符由“?”和和“:”组合而成,是三组合而成,是三目运算符,要求有目运算符,要求有3 3个操作对
20、象,并且三个操作对个操作对象,并且三个操作对象都是表达式。象都是表达式。优先级优先级:条件运算符的运算优先级低于关系运算符条件运算符的运算优先级低于关系运算符 和和算术运算符,高于赋值运算符算术运算符,高于赋值运算符 结合性结合性:自右至左自右至左 安 庆 师 范 学 院 计 算 机 与 信 息 学 院 安 庆 师 范 学 院 计 算 机 与 信 息 学 院 3 3、由条件表达式组成的选择结构、由条件表达式组成的选择结构 在在ifif语句中,若各分支都只执行单个赋值语句,语句中,若各分支都只执行单个赋值语句,我们常使用条件运算来表示,如:我们常使用条件运算来表示,如:if(ab)max=a;e
21、lsemax=b;用条件表达式可以表示为:用条件表达式可以表示为:max=(ab)?a:b;安 庆 师 范 学 院 计 算 机 与 信 息 学 院 【例例4-7】用用条条件件运运算算符符对对【例例4-34-3】重重新新编编程程,输出两个整数中的最大者输出两个整数中的最大者#includemain()floata,b,max;printf(inputthetwonumbers:);scanf(%f,%f,&a,&b);max=ab?a:b;printf(max=%fn,max);安 庆 师 范 学 院 计 算 机 与 信 息 学 院 例:用条件表达式求例:用条件表达式求x x的绝对值的绝对值 p
22、rintf(|%d|=%dn,x,x=0?a+b:a-b);当当b=0,输出,输出a、b、a+b的值的值当当b0,输出,输出a、b、a-b的值的值 安 庆 师 范 学 院 计 算 机 与 信 息 学 院 floatx,y;scanf(“%f”,&x);y=x0?1.0:(x0?-1.0:0);按运算符的优先级,先计算嵌套的条件表达式然后按运算符的优先级,先计算嵌套的条件表达式然后赋值。由于条件运算符的右结合性,嵌套的条件表达赋值。由于条件运算符的右结合性,嵌套的条件表达式外面的括号可以不用。式外面的括号可以不用。例:用条件表达式的嵌套表示符号函数:例:用条件表达式的嵌套表示符号函数:安 庆 师
23、 范 学 院 计 算 机 与 信 息 学 院 注意:条件表达式的短路现象注意:条件表达式的短路现象例:例:#includemain()inta,b;scanf(“%d,%d”,&a,&b);printf(“%d”,(-a=b+)?-a:b+);printf(“,%d,%dn”,a,b);运行时输入运行时输入5,4 输出输出3,3,5(:后的后的b+没有计算没有计算)运行时输入运行时输入5,5 输出输出6,4,7(:前的前的-a没有计算没有计算)安 庆 师 范 学 院 计 算 机 与 信 息 学 院 【问题】【问题】前面我们所说的前面我们所说的ifif语句通常用于解决分支较少语句通常用于解决分支
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 选择 结构 程序设计 语言 课件
限制150内