第04章 选择结构程序设计(培训)ppt课件_第1页
第04章 选择结构程序设计(培训)ppt课件_第2页
第04章 选择结构程序设计(培训)ppt课件_第3页
第04章 选择结构程序设计(培训)ppt课件_第4页
第04章 选择结构程序设计(培训)ppt课件_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

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

文档简介

1、4.1关系运算和逻辑运算4.2 if语句和if语句构成的选择结构4.3 条件表达式构成的选择结构第四章 选择结构程序设计 4.4 switch语句 4.4 goto语句4.1.1、C语言的逻辑值 关系表达式和逻辑表达式的运算结果会得到一个逻辑值。逻辑值只有两个,分别用“真”和“假”表示,C语言中没有专门的“逻辑值”,在表示逻辑表达式或关系结果是,以数值1代表“真”,0代表“假”,但在判断一个量是否为“真”时,以0代表“假”,以非0(不论正负)代表真。4.1.2、关系运算符和关系表达式关系运算:比较运算,比较两个操作数,看是否满足给定的关系。1、关系运算符(6种):小于 ,53, 35=:小于等

2、于,5=3,3:大于,53,35=:大于等于,5 =3,3 =5 ,与数学上()不同=:等于,5=3 ,与数学上(=)不同!=:不等于,5!=3 ,与数学上()不同2、关系表达式和关系表达式的值用关系运算符将表达式连接起来的式子优先级 =高 低= !=结合方向自左向右表达式的值关系成立,即为真,结果为1;关系不成立,即为假,结果为0;算术运算符高 低C语言中,真:非0值,假:0值 如:ab,a+bc-d,(a=3)=b,(ab)= =(bc)例如,假设num1=3,num2=4,num3=5,则: (1)num1num2的值为?。 (2)(num1num2)!=num3的值为? 。 (3)nu

3、m1num2num3的值为?。 思考题:任意改变num1或num2的值,会影响整个表达式的值吗?为什么? (4)(num1num2)+num3的值为? 6.因为num1=0) & (x10) ,(x5) ,! (x= =0),例如:1.假设 int a=5; float b=3.5;!a0!b0a&b1a|b1 !a&!b 04、注意在逻辑表达式的求解中,并不是所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。例2-7:a=0; b=1; c=2; d=a+&b+&- -c;d=(a+)&(b+)&(- -c);运算结果: d=0,a=1,b=1,c

4、=2(1)a & b & c求解方法:只有a为真(非0),才需要判断b的值,只有a和b都为真,才需要判断c的值。只要a为假,就不必判断b和c,运算立即中止。(2)a | b | c求解方法:只要a为真(非0),就不必判断b和c;只有a 为假,才判断b;a和b都为假,才判断c。例2-8:a=0; b=1; c=2; d=a+|b+|- -c; d=(a+)|(b+)|(- -c); 运算结果: d=1,a=1,b=2,c=2 以下的条件如何使用c语言的逻辑和关系表达式表述:1.0 x0&x5&x%7!=0y1&yb)&!c|1c.a&b d.a|(b+b)&(c-a)A国家等级考试练习2.有以下

5、程序main()int a,b,d=25; a=d/10%9; b=a&(-1) printf(“%d,%dn”,a,b);程序运行后的输出结果是:a.1 2 3 b.2 3 4 c.2 2 3 d.2 3 3 D4.已定义“char ch=“$”;int i=1,j;”,执行“j=!ch&i+以后,i的值为5.以下程序运行后的结果是main() int a,b,c; a=10;b=20; c=(a%b1); printf(“%d %d %dn”,a,b,c);6.在C语言中,逻辑“真”等价于下面哪一项a.整数1 b.True c.非0数 d.任意常数110 20 0C7.有以下程序:main

6、() int a=1,b=2,m=0,n=0,k; k=(n=ba)|(m=a0解题的步骤:输入xx0是 y=3-xy=2/x否 输出y的值 C语言用来设计条件选择结构程序的选择语句有两种: if语句、switch语句。 4.2 if语句 1、单分支选择if语句if语句有三种形式:单分支选择if语句、双分支面具选择if语句、多分支选择if语句。 语句形式: if (表达式) 语句 语句执行流程: 表达式语句真(非0)假(0)4.2.1 if语句的三种形式例4-1:从键盘输入两个整数a和b,如果a大于b则交换两数,最后输出两个数。 #include 输入a,bab交换a、b输出结束真假 void

7、 main() int a,b,t; scanf(%d,%d,&a,&b); if(ab) t=a;a=b;b=t; printf(a=%d,b=%dn,a,b); 注意: (1)if语句自动结合一个语句,当满足条件需要执行多个语句时,应用一对大括号将需要执行的多个语句括起,形成一个复合语句。 (2)if语句中表达式形式很灵活,可以是常量、变量、任何类型表达式、函数、指针等。只要表达式的值为非零值,条件就为真,反之条件为假。 2、双分支选择if语句语句形式:if (表达式) 语句1else 语句2 语句执行流程: 表达式语句1真(非0)假(0)语句2例4-2 输入两个整数,输出其中较大的数。

8、#include #include void main()int x,y,max; scanf(%d,%d,&x,&y); if(xy) max=x; else max=y; printf(max=%dn,max); 输入x,yxymax=x输出最大值结束真假max=y注意if和else语句之间只能有一个语句,当ifelse之间的语句不只一句时,应用一对将语句括起。 if(ab) a+;b+;else a=0;b=10; if(ab) a+;b+;else a=0;b=10;3、多分支选择if语句语句形式:if (表达式1) 语句1else if (表达式2)语句2 else if (表达式n

9、)语句n else 语句n+1else子句可以省略语句执行流程: 表达式1语句1真(非0)假(0)语句2表达式2真(非0)表达式2语句n语句n+1假(0)假(0)例4-3:计算分段函数。假输入xX=1真X10y=3/(x-10)y=2xy=x+5假真#include void main()float x,y; printf(enter x:);scanf( %f ,&x);if (x=1) y=x+5; else if (x10) y=3/(x-10);else printf(“not definen”); printf(x=%.2f,y=%.2fn,x,y); 计算分段函数程序语句含义:语句

10、形式: 当if语句中又包含若干个if语句时,则构成了if 语句嵌套的情形。4.2.2 if语句的嵌套if ( 表达式1) if ( 表达式2) 语句1 if ( 表达式1) if ( 表达式2) 语句1 else 语句2if ( 表达式1) if ( 表达式2) 语句1 else 语句2if ( 表达式1) if ( 表达式2) 语句1 else 语句2else 语句3if ( 表达式1) if ( 表达式2) 语句1 else 语句2else if(表达式3) 语句3 else 语句4 语句执行流程: else与if的配对原则: 就近一致原则: else与同一层最接近它,而又没有其它else

11、语句与之相匹配的if语句配对。真(非0)语句2假(0)表达式2语句1语句4假(0)真(非0)表达式1假(0)真(非0)表达式3语句3建议:对于嵌套的if语句最好使用“”扩起来同时采用代码缩进的形式书写国家级等级考试练习:1.设变量x和y均已正确定义并赋值,以下的if语句中,在编译时将产生错误信息的是a.if(x+); b.if(xy&y!=0);c.if(xy) x- d.if(y0) ; else y+; else x+;2.在嵌套使用if语句时,C语言规定else总是a.和之前与具有相同缩进位置的if配对b.和之前与其最近的if配对c.和之前与其最近的且不带else的if配对d.和之前的第

12、一个if配对CC3.有以下程序程序:main()int a=0,b=0,c=0,d=0; if(a=1) b=1;c=2; else d=3;printf(“%d,%d,%d,%dn”,a,b,c,d);程序输出的结果是a.0,1,2,0 b.0,0,0,3 c.1,1,2,0 d.编译有错D4.设有变量a、b、c、d和y都已正确并赋值,若有以下if语句:if(ab) if(c=d) y=0; else y=1;该语句所表示的含义是a.y=0 a=bb.y=0 a=b且c!=dc.y=0 ab且c=d1 ab且c!=dd.y=0 ab且c=d1 c!=dC5.有以下程序运行后的输出结果是mai

13、n() int a=3,b=4,c=5,t=99; if(ba&ac) t=a; a=c; c=t; if(ac&bb) if(bc) printf(“%d”,d+ + 1); else printf(“%d”,+d + 1); printf(“%dn”,d);程序运行后的结果是a.2 b.3 c.43 d.44A4.3、条件运算符与条件表达式有两个符号:?、:,它与三个操作数组成三元运算。一般形式: ? :求值规则和表达式的值:求解表达式1真(非0)求解表达式2假(0)求解表达式3表达式的值优先级:算术关系逻辑 条件 赋值结合性: 自右至左例: int max,a=5;b=3; max=ab

14、?a:b-a=b+ ? a+ : b+ y = x10 ? x/10 : x0 ? x: -x;1.有以下计算公式y=(x=0)(x=0) y=sqrt(x); b.y=sqrt(x); else y=sqrt(-x); if(x=0) y=sqrt(x); y=sqrt(x=0?x:-x); if(x0) b.(x-y0) c.(x-y0) d.x-y=0C3.设有条件表达式“(EXP)?i+:j+”,则以下表达式中与“(EXP)”完全等价的是_a.(EXP=0) b.(EXP!=0) c.(EXP=1) d.(EXP!=1)B4.有以下程序段:int k=0,a=1,b=2,c=3;k=a

15、c?c:k;执行该程序后,k的值是a.3 b.2 c.1 d.0B5.若整型变量a,b,c,d中的值依次为1,4,3,2,则条件表达式ab?a:cb?(ac?a:c):(b);a.5 b.4 c.6 d.不确定C形式:逗号表达式1,逗号表达式2,逗号表达式n 求值规则:从左至右依次计算各表达式的值优先级所有运算符里最低 结合性:自左至右 表达式的值最后一个表达式的值。逗号运算符与逗号表达式例: a b y 逗号表达式 y=a=4,b=5,a+b; 4 5 4 9 y=(a=4,b=5,a+b); 4 5 9 9 y=(a=4,b=5),a+b; 4 5 5 9 y=a=(4,b=5),a+b;

16、 5 5 5 104.4 switch语句1、语句形式: switch (表达式) case 常量表达式1: 语句1; case 常量表达式2: 语句2; case 常量表达式3: 语句3; . case 常量表达式n: 语句n; default : 语句n+1; 根据表达式的不同值,选择不同的程序分支,又称开关语句。数值型或字符型常量表达式的值必须互不相同,否则执行时将出现矛盾,即同一个开关值,将对应多种执行方案。千万不能接(;)号2、语句执行流程:指语句的最后一条是否为break简单语句或复合语句breakbreak有无break有无有计算表达式常量1常量2常量n=语句1=语句2语句n其它

17、=语句n+1无值case语句出现的次序并不影响执行结果。例4-4:假设用0、1、2.6分别表示星期日、星期一.星期六。现输入一个数字,输出对应的星期几的英文单词。如果输入3,输出“Wednesday”。 #include stdio.hvoid main()int n;scanf(%d,&n);switch(n)case 0: printf(Sundayn);case 1: printf(Mondayn);case 2: printf(Tuesdayn);case 3: printf(Wednesdayn);case 4: printf(Thursdayn);case 5: printf(Fr

18、idayn);case 6: printf(Saturdayn);default: printf(Error);程序运行情况如下:3Wednesday ThursdayFridaySaturdayerror在“switch”语句中,“case 常量表达式”只相当于一个语句标号,表达式的值和某标号相等则转向该标号执行,但不能在执行完该标号的语句后自动跳出整个switch 语句,因此会继续执行所有后面语句的情况。 为此,语言提供了一种break语句,其功能是可以跳出它所在的switch语句。将上面的例4-4修改如下:#include stdio.hvoid main()int n;scanf(%d

19、,&n);switch(n)case 0: printf(Sundayn); break;case 1: printf(Mondayn); break;case 2: printf(Tuesdayn); break;case 3: printf(Wednesdayn); break;case 4: printf(Thursdayn); break;case 5: printf(Fridayn); break;case 6: printf(Saturdayn); break;default: printf(Error);程序运行情况如下:3Wednesday 3、说明多个case语句可以共用一组

20、执行语句。 switch(grade) case 10: case 9: case 8:printf(“A);break; default:printf(“B);各case和default子句的先后顺序可以变动,而不会影响程序执行结果。 default语句可以省略不用。case和default与其后面的常量表达式间至少有一个空格。switch语句可以嵌套,break语句只跳出它所在的switch语句。 例4-5 企业发放的奖金根据利润提成。从键盘输入当月利润,求应发放奖金总数? 利润xx=1010 x2020 x4040 x6060 x1001000) case 1:switch(b0) ca

21、se 1:printf(“”);break; case 2:printf(“!”);break; case 0:switch(c=5) case 0:printf(“*”);break; case 1:printf(“#”);break; case 2:printf(“$”);break; default:printf(“&”);printf(“n”);#&4.5 语句标号和goto语句1.语句标号标号可以是任意的合法的标识符,当在标识符后面加一个冒号,如:flag1: stop0: ,该标识符就成了一个语句标号。2.goto语句goto语句称为无条件转向语句,一般形式如下:goto 语句标号;作用:把程序的执行流程转向语句标号所在的位置,这个语句标号必须与此goto语句同在一个函数之内。例如: i=1; sum: i=i+1; if(i5) goto sum;printf(“%d”,i);选择结构程序设计举例 例4-7 将任意三个整数按从大到小的顺序输出。 #include stdio.hvoid main()int x,y,z,t;scanf

温馨提示

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

评论

0/150

提交评论