第三章选择结构

上传人:仙*** 文档编号:243946506 上传时间:2024-10-01 格式:PPT 页数:42 大小:795.50KB
收藏 版权申诉 举报 下载
第三章选择结构_第1页
第1页 / 共42页
第三章选择结构_第2页
第2页 / 共42页
第三章选择结构_第3页
第3页 / 共42页
资源描述:

《第三章选择结构》由会员分享,可在线阅读,更多相关《第三章选择结构(42页珍藏版)》请在装配图网上搜索。

1、,单击此处编辑母版标题样式,,单击此处编辑母版文本样式,,第二级,,第三级,,C,语言程序设计,选择结构,第三章,主要内容,,第一节 关系运算与逻辑运算,,第二节,if,语句,,第三节 条件运算符和条件表达式,,第四节,switch,语句,,第五节,goto,语句,本章学习目标,,掌握关系运算和逻辑运算,,掌握,if,语句的几种形式和使用技巧,,熟悉,switch,语句的基本使用技巧,第一节 关系运算与逻辑运算,一、,C,语言中的逻辑值,,,C,语言中的逻辑值只有两个:“真(,true,)”,“假(,false,)”,.,用,非零,来代表“,真,”,用零来代表“假”。,,只要值不是零,,

2、不管是正数还是负数,整型数还是实型数,都代表一个“,真,”值。,,二、关系运算符,,C,语言提供了,6,种关系运算符,,表,3-1 6,种关系运算符及优先级,,优先级相同(高) 优先级相同(低),,>(,大于,) >=,(大于等于),= =,(等于),,<(,小于,),,<=,(小于等于) !,=,(不等于),,说明:,,(,1,)(,>,、,>=,、,<,、,<=,)的优先级相同,(,= =,、,!=,)的优先级相同,,前四种,关系运算符的,优先级高于后两种,关系运算符。,,(,2,)算术运算符,>,关系运算符,>,赋值运算符,,三、关系表达式,,,1.

3、,用关系运算符将两个表达式连接起来的表达式,成为关系表达式。,,,例如:,a(b=20), (a>10)>(b>20),等都是合法的关系表达式。,2.,关系运算的,结果,有两个:,0,和,1,。其中“,0”,代表“假”,用“,1”,代表“真”。,,,例如:关系表达式,(a=10)<(b=20),值为“真”,即为,1,。,,,四、逻辑运算符,,C,语言提供了三种逻辑运算符,如表,3-2,所示。,,表,3-2 3,种逻辑运算符及其优先级,,,低,,高,,||(,逻辑,“,或,”,),,&&(,逻辑,“,与,”,),!,(,逻辑,“,非,”,),,,说明:,,(,1,)!,> && > ||(,优先

4、级,),,(,2,),!(单目),>,算术运算符,>,关系运算符,>&&>||>,赋值运算符,>,逗号运算符,,,五、逻辑表达式及其值,,&&(,逻辑“与”,),和,||,(逻辑“或”)的运算操作对象有两个,故它们都是,双目运算符,,而!(逻辑“非”)的运算对象只有一个,因此它是,单目运算符,。逻辑运算举例如下:,,(1)a&&b,当运算对象,a,和,b,的值,都为“真”,时,,a&&b,的值才为“真”。,,(2)a||b,当运算对象,a,和,b,的值,有一个为“真”,时,,a||b,的值就为“真”,,(3),!,a,当运算对象,a,的值为“真”时,!,a,的值为“假”;当运算对象,a,的值为

5、“假”时,,a,的值为“真”。,,a,b,a||b,,,,,,,,,,,,,a,b,a&&b,,0,0,,0,1,,1,0,,1,1,,0 0,0,1 0,1,0 1,1,1 1,1,0,,0,,0,,1,a,!a,0,1,1,0,,例,3,.,1,设有定义:,int a=2,b=3,c=4;,则以下选项中值为,0,的表达式是,,。,,A,),(,,!a= =1)&&(b- =2),,B,),(a

6、算对象的值为,0,,则,不再对右边的运算对象进行运算,,直接得出整个表达式的值为,0,;,,b.,若,“,||,”,的左边的运算对象为,1,,则,不再对右边的运算对象进行运算,,直接得出整个表达式的值为,1.,短路现象,,,例,3.2,:有以下程序:,,main(),,{,,int i=1,j=2,k=3;,,if(i++==1&&(++j==3||k++==3)),,printf("%d,%d,%d",i,j,k);,,},i=1,i=i+1,,,i=2,j=j+1,,,j=3,,表达式为真(,1,),,不需计算,2 3 3,第二节,if,语句,一、,if,语句结构,,格式:,if,(表达式

7、)语句,,执行过程:,例如,:,if(x>y)printf("%d",x);,,又如,:,if(x>y),,,{,,m=x;,,printf("m=%d",m);,,,},,如果,if,语句后面有多个子句,应将它们 用,{},括起来,,例,3.3,:,main(),,{,,int a;,,scanf("%d",,,if(a>50) printf("%d",a);,,if(a>40) printf("%d",a);,,if(a>30) printf("%d",a);,,},输入58,输出结果将为:,,585858,例,3.4,若有以下程序,main(),,{ int a=4,b=3,c=

8、5,t=0;,,if(a

9、式,),,,语句,1,,else,,,语句,2,,执行过程:,例如,:,if (x>y),,printf (,",%d,",,x);,,,else,,printf ("%d",y);,,例,3.7,程序运行后的输出结果是:,,main(),,{,,int a=1,b=2,c=3;,,if(c=a ) printf(“%d\n”,c);,,else printf(“%d\n”,b);,,},,,,1,【,练习,】,编写程序实现下述功能:从键盘上输入两个整数,输出其中较大数。,解题思路:定义两个整型变量,num1,、,num2,,用来存放键盘输入的两个整数;再定义一个整型变量,max

10、,,用来存放两个数中较大数。,,具体操作步骤如下:,,(,1,)显示提示信息;,,(,2,)从键盘输入,num1,、,num2,的值;,,(,3,)如果,num1>num2,,则,max,=,num1,,否则,max,=,num2,;,,(,4,)输出,max,的值。,,,#include ,,void main(),,{,,int num1,num2,max;,,,printf(",请输入两个整数:,");,,,scanf("%d,%d",,,,if (num1>num2) max=num1;,,else max=num2;,,printf(",两个数

11、中的最大数为:,%d\n",max);,,},三、,if-else-if,语句,1.if-else-if,格式:,,if (,表达式,1),语句组,1,,else if (,表达式,2),语句组,2,,else if (,表达式,3),语句组,3,,,……,,else if (,表达式,n,),语句组,n,,else,语句组,n,+1,执行过程:,,例如:,,,if(number>500)cost=0.15;,,else if(numbe>300)cost=0.10;,,else if(number>100)cost=0.075;,,else if(number>50)cost=0.05

12、;,,else cost=0;,,,例,3.8,从键盘上输入,x,的值,并通过如下的数学关系求出相应的,y,值。,,,-1 x<0,,y= 0 x=0,,1 x>0,,用,if-else-if,结构可以很方便地完成上述要求。,,具体程序如下:,,,main(),,{ int x,y;,,scanf(“%d”,,,if(x<0) y=-1;,,else if(x==0)y=0;,,else y=1;,,printf(“%d\n”,y);,,},,if,语句,说明:,,(,1,),if,后面的,括号不能省略,。,,(,2,),e

13、lse,语句是,if,语句的子句,它是,if,语句的一部分。,else,子句不能作为一个语句单独使用,。,,(,3,)在,if,语句的三种形式中,如果语句多于一条即两条及两条以上时,应使用花括号,{},将其括起来,成为一个复合语句;,只有一条语句时,可以不使用花括号,{},。,但是为了提高程序的可读性和防止程序的书写错误,,建议,在,if,和,else,之后的语句不管有多少,,都加上花括号,{},。,四、,嵌套的,if,语句,,if,嵌套结构就是,将整个,,if,块插入另一个,if,块中,,标准格式为:,,if (,表达式,1 ),,if (,表达式,2 ),语句,1,,,else,语句,2,

14、,,else,,if (,表达式,3 ),语句,3,,,else,语句,4,,,if (x > 0),,if (y > 1),,z = 1;,,else,/*,这个,,else,部分属于哪个,,if,?,*,/,,z = 2;,,选择结构程序设计,-,if,嵌套,C,语言规定,每个,else,部分总属于,前面最近的那个缺少对应的,else,部分的,,if,语句,。,,,提倡使用大括号括起来以避免看起来有二义性。,?,,例,3.11,设变量,a,、,b,、,c,、,d,和,y,都已经正确定义并赋值。,,若有以下,if,语句,,if(a

15、;,,该语句所表示的含义是,,,0 a

16、 D) y=,,,1 a

17、出,“表达式,3”,的值,作为整个条件表达式的值,,4.,条件运算符的,优先级,:,>,赋值运算符,,,<,关系运算符和算术运算符,,例如,有如下的,if,语句,,if(a>c) max=a;,,else max=c;,,可以用下述的条件运算符来处理,,,max=,a>c? a:c;,5.,条件运算符的,结合性,:自右向左,例如:,a>b?a:c>d?c:d,例如:,a>b?a:,c>d?c:d,switch,语句是一种选择结构,第四节,,switch,语句,switch (,表达式,),,{,,,case,常量,1,:,,,语句,;,,,[,break;,],,,case,常量,,

18、2,:,,,语句,;,,,[,break;,],,,,default:,,,语句,;,,,[,break;,],,},计算表达式的值,,如果等于常量,1,,如果等于常量,2,,如果没有找到匹配的值,,,,,switch,语句需要注意的地方,a.,在,case,后的,各常量表达式的值不能相同,,否则会出现错误;,,b.,在,case,后,允许有多个语句,可以不用,{},括起来;,,c.,各,case,和,default,子句的,先后顺序可以变动,,而不会影响程序执行结果;,,d.default,最多只能有一个,,通常出现在,switch,的最后部分,但也可以出现在,case,之间或所有,c

19、ase,之前。,default,子句,可以省略,;,,e.,在执行过程中如果遇到,break,语句,则跳出,switch,语句。如果执行完某一个,case,或者,default,语句块后,没有遇到,break,,则继续顺序往下执行,,直到遇到,break,语句或者,switch,语句体被执行完毕为止。,switch (,表达式,),,{,,,case,常量表达式,1,:,,,语句,;,,,[,break;,],,case,常量表达式,2,:,,,语句,;,,,[,break;,],,default:,,,语句,;,,,[,break;,],,},,值必须是整型或字符型,,不能为实型,可以是求得

20、是整型量和字符型常量表达式,但,不能含有变量,选择结构程序设计,-,switch,语句,问题描述:,,要求用户输入一个数字,1-7,,输出对应星期 。,int week;,,printf(“\n,请输入,1-7,数字,:,,");,,scanf(“%d", ,,switch(week),,{,,case ‘1’: printf(“\n,星期一,\n");,,case ‘2’: printf(“\n,星期二,\n");,,case ‘3’: printf(“\n,星期三,\n");,,case ‘4’: printf(“\n,星期四,\n");,,case ‘5’: printf(“

21、\n,星期五,\n");,,case ‘6’: printf(“\n,星期六,\n");,,case ‘7’: printf(“\n,星期日,\n");,,default: printf(“\n,输入错误!,\n");,,},,请输入,1-7,数字:,3,星期三,,星期四,,星期五,,星期六,,星期日,,输入错误,选择结构程序设计,-,switch,语句,问题描述:,,要求用户输入一个数字,1-7,,输出对应星期 。,int week;,,printf(“\n,请输入,1-7,数字,:,,");,,scanf(“%d", ,,switch(week),,{,,case ‘1’: pr

22、intf(“\n,星期一,\n"); break;,,case ‘2’: printf(“\n,星期二,\n"); break;,,case ‘3’: printf(“\n,星期三,\n"); break;,,case ‘4’: printf(“\n,星期四,\n"); break;,,case ‘5’: printf(“\n,星期五,\n"); break;,,case ‘6’: printf(“\n,星期六,\n"); break;,,case ‘7’: printf(“\n,星期日,\n"); break;,,default: printf(“\n,输入错误!,\n");,

23、,},,,内存,,week,,3,请输入,1-7,数字:,3,星期三,,,,例,3.13,:按照学生的考试成绩,打印出相应的等级,,90,分以上的输出“,A”,等级,,80,分以上的输出“,B”,等级,依此类推,,60,分以下输出“,E”,等级。,main(),{,int score; scanf(“%d”, switch(,score/10,),{,case 10:printf(“A\n”);break; case 9:printf(“A\n”);break; case 8:printf(“B\n”);break; case 7:printf(“C\n”);break; case 6:pri

24、ntf(“D\n”);break; default:printf(“E\n”);break;,},,},例,3.13,有以下程序,,main(),,{,,int i=1,y=0,a=0,b=0;,,switch(x),,{,,case1:,,switch(y),,{,,case 0:a++;break;,,case 1:b++;break;,,},,case 2:a++;b++;break;,,case 2:a++;b++;,,},,printf(“a=%d,b=%d\n”,a,b);,,},a=2,b=1,,多重,if,结构和,switch,结构都可以用来实现多路分支,,多重,if,结构用来

25、实现两路、三路分支比较方便,而,switch,结构实现三路以上分支比较方便,,在使用,switch,结构时,应注意,分支条件要求是整型表达式,,而且,case,语句后面必须是常量表达式,,有些问题只能使用多重,if,结构来实现,例如要判断一个值是否处在某个区间的情况,比较多重,if,和,switch,结构,常见,错误,列举,(,1,),if,语句之后多了,“,;,”,。,,,如,if(a>10);,,(,2,),case,子句后面的程序段中,漏掉了,break,。,,(,3,),case,后面跟着,变量表达式,。,,如,case,a,:,第五节,goto,语句,一、 语句标号,,标识符,后面加

26、一个,冒号,,如:,flag1:,、,stop0:,,该标识符,就成了一个语句标号,。,,注意:,在,C,语言中,语句标号,必须是标识符,,因此不能简单地使用,10,:、,15,:等形式。标号可以和变量同名。,,,,2,、,goto,语句,,又称为,无条件转向语句,,,goto,语句的一般形式如下:,,goto,语句标号;,,如:,goto stop;,,在,C,语言中,可以在任何语句前加上语句标号。例如:,,stop:printf(“END\n”);,,goto,语句的作用,是,把程序的执行转向语句标号所在的位置,,这个语句标号必须与此,goto,语句同在一个函数内,。滥用,goto,语句将使程序的流程毫无规律,可读性差,对于初学者来说应,尽量不用,。,,

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

相关资源

更多
正为您匹配相似的精品文档

相关搜索

关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

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

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


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