山西财经大学华商学院《C语言程序设计》课件-第4章选择结构程序设计的课件_第1页
山西财经大学华商学院《C语言程序设计》课件-第4章选择结构程序设计的课件_第2页
山西财经大学华商学院《C语言程序设计》课件-第4章选择结构程序设计的课件_第3页
山西财经大学华商学院《C语言程序设计》课件-第4章选择结构程序设计的课件_第4页
山西财经大学华商学院《C语言程序设计》课件-第4章选择结构程序设计的课件_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

1、第四章 选择结构程序设计山西财经大学华商学院C语言程序设计4.1 if语句4.2 switch语句3选择结构程序设计举例 2022/8/142022/8/144.1 if语句 1、单分支选择if语句语句形式: if (表达式) 语句; 语句执行流程: 表达式语句真(非0)假(0)if语句有三种形式:单分支选择if语句、双分支选择if语句、多分支选择if语句。 if语句的三种形式2022/8/14例4-1:从键盘输入两个整数a和b,如果a大于b则交换两数,最后输出两个数。 输入a,bab交换a、b输出结束真假#include void main() int a,b,t; scanf(%d,%d,

2、&a,&b); if(ab) t=a;a=b;b=t; printf(a=%d,b=%dn,a,b); 2022/8/14注意: (1)if语句自动结合一个语句,当满足条件需要执行多个语句时,应用一对大括号将需要执行的多个语句括起,形成一个复合语句。 (2)if语句中表达式形式很灵活,可以是常量、变量、任何类型表达式、函数、指针等。只要表达式的值为非零值,条件就为真,反之条件为假。 如:if(a=b&x=y) printf(“a=b,x=y”); if(3) printf(“OK”); if(a) printf(“%d”,a);2022/8/142、双分支选择if语句语句形式:if (表达式)

3、 语句1;else 语句2 ; 语句执行流程: 表达式语句1真(非0)假(0)语句22022/8/14注意if和else语句之间只能有一个语句,当ifelse之间的语句不只一句时,应用一对将语句括起。 例 考虑下面程序的输出结果: #include main() int x,y; scanf(“%d,%d”,&x,&y); if(xy) x=y; y=x; else x+; y+; printf(“%d,%dn”,x,y);Compile Error!2022/8/143、多分支选择if语句语句形式:if (表达式1) 语句1;else if (表达式2)语句2; else if (表达式n)

4、语句n; else 语句n+1;2022/8/14语句执行流程: 表达式1语句1真(非0)假(0)语句2表达式2真(非0)表达式n语句n语句n+1假(0)假(0)2022/8/14例4-3:计算分段函数。假输入xX=1真X10y=3/(x-10)y=2xy=x+5假真2022/8/14#include void main()float x,y; printf(enter x:); scanf( %f ,&x); else if (x=1) y=x+5; else if (x10) y=2*x; else y=3/(x-10); printf(x=%.2f,y=%.2fn,x,y); 计算分段函

5、数程序if(x=10) printf(not define x.n); 2022/8/14提示(1)当if语句中出现多个“if”与“else”的时候,要特别注意它们之间的匹配关系,否则就可能导致程序逻辑错误。“else”与“if”的匹配原则是“就近一致原则”,即“else”总是与它前面最近的“if”相匹配。(2)if语句中条件的写法应尽量简单。 if()if()if()else.else.else.12下面程序段的输出结果是:int a=5,b=5;a%=b+=a+=(a+b);printf(“a=%d,b=%d”,a,b); 练习1:a=15,b=2013下面程序段的输出结果是:int a=

6、10,b=10;a+=b-=a*=b/=3;printf(“a=%d,b=%d”,a,b); 练习2:a=3,b=-2714练习3:能正确表示x大于等于10或x小于等于0的逻辑表达式是:能正确表示x大于等于0且小于等于10的逻辑表达式是: 15例如 a=4*6,a+5 整个逗号表达式的值为29。注意一个逗号表达式又可以与另一个表达式组成一个新的逗号表达式,例如: (a=4*6,a+5),a+6 整个表达式的值为30。逗号运算符是所有运算符中级别最低的。2022/8/144.2 if语句的嵌套一般形式if (表达式1) if (表达式2) statement1 else statement2el

7、se if(表达式3) statement3 else statement4内嵌if内嵌ifif (表达式1) if (表达式2) statement1 else statement2内嵌ifif (表达式1) if (表达式2) statement1else statement3 内嵌ifif (表达式1) statement1else if(表达式2) statement3 else statement4内嵌if2022/8/14例 输入两数并判断其大小关系#include main() int x,y; printf(Enter integer x,y:); scanf(%d,%d,&x

8、,&y); if(x!=y) if(xy) printf(XYn); else printf(XYn); else printf(X=Yn);运行:Enter integer x,y:12,23 XY Enter integer x,y:12,12 X=Y2022/8/14例: if (a=b) if(b=c) printf(“a=b=c”); else printf(“a!=b”);修改: if (a=b) if(b=c) printf(“a=b=c”); else printf(“a!=b”);实现if else 正确配对方法:加 2022/8/141. main() int a=5,b=

9、4,c=3,d=2; if(abc) printf(%dn,d); else if(c-1=d)=1) printf(%dn,d+1); else printf(%dn,d+2); 执行后输出的结果是( ) A) 2 B) 3 C) 4 D) 编译时有错,无结果2022/8/14以下程序段中与语句k=ab?(bc?1:0):0;功能等价的是( ) A) if(ab)&(bc) k=1; else k=0; B) if(ab)|(bc) k=1 else k=0; C) if(a=b) k=0; else if(bb) k=1; else if(bc) k=1; else k=0;2022/8/

10、14执行后输出结果是_。 1.main() int x=10,y=20,t=0; if(x=y)t=x;x=y;y=t; printf(%d,%d n,x,y); 2.main( ) int n=0,m=1,x=2; if(!n) x-=1; if(m) x-=2; if(x) x-=3; printf(%dn,x); 20,0-42022/8/144.2 switch语句1、语句形式: switch (表达式) case 常量1: 语句1; case 常量2: 语句2; case 常量3: 语句3; . case 常量n: 语句n; default : 语句n+1; 根据表达式的不同值,选择

11、不同的程序分支,又称开关语句。数值型或字符型常量表达式的值必须互不相同,否则执行时将出现矛盾,即同一个开关值,将对应多种执行方案。千万不能接(;)号2022/8/14在“switch”语句中,“case 常量表达式”只相当于一个语句标号,表达式的值和某标号相等则转向该标号执行,但不能在执行完该标号的语句后自动跳出整个switch 语句,因此会继续执行所有后面语句的情况。 为此,语言提供了一种break语句,其功能是可以跳出它所在的switch语句。2022/8/142、语句执行流程:指语句的最后一条是否为break简单语句或复合语句breakbreak有无break有无有计算表达式常量1常量2

12、常量n=语句1=语句2语句n其它=语句n+1无值case语句出现的次序并不影响执行结果。2022/8/14例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(Thu

13、rsdayn);case 5: printf(Fridayn);case 6: printf(Saturdayn);default: printf(Error);程序运行情况如下:3Wednesday ThursdayFridaySaturdayerror2022/8/14将上面的例4-4修改如下:#include stdio.hvoid main()int n;scanf(%d,&n);switch(n)case 0: printf(Sundayn); break;case 1: printf(Mondayn); break;case 2: printf(Tuesdayn); break;c

14、ase 3: printf(Wednesdayn); break;case 4: printf(Thursdayn); break;case 5: printf(Fridayn); break;case 6: printf(Saturdayn); break;default: printf(Error);程序运行情况如下:3Wednesday 27强制转换强制转换是通过类型转换运算符来实现。一般形式:(类型说明符)表达式功能:把表达式的结果强制转换为类型说明符所表示的类型。(int)a 将a的结果强制转换为整型量。(int)(x+y) 将x+y的结果强制转换为整型量。(float)a+b 将a

15、的内容强制转换为浮点数,再与b相加 说明:(1)类型说明和表达式都需要加括号(单个变量可以不加括号)(2)无论隐式转换,强制转换都是临时转换,不改变数据本身的类型和值。28强制类型转换main() float f=5.75; printf(int)f=%dn,(int)f); /* 将f的结果强制转换为整型,输出 */ printf(f=%fn,f); /* 输出f的值 */结果:(int)f=5f=5.75000029练习4:下面程序段的输出结果: int a,b,c; a=(b=c=5,+b,b+(c+); printf(“a=%d,b=%d,c=%dn”,a,b,c);下面程序段的输出结

16、果: int a=10,b=10,c,d; c=(+a,b+,a+,+b); d=-a,b-,-a,b-; printf(“a=%d,b=%d,c=%d,d=%dn”,a,b,c,d);a=11,b=6,c=6a=10,b=10,c=12,d=112022/8/143、说明多个case语句可以共用一组执行语句。 switch(grade) case A: case B: case C:printf(grade=60n);break; default:printf(grade60);各case和default子句的先后顺序可以变动,而不会影响程序执行结果。 2022/8/14default语句可

17、以省略不用。case和default与其后面的常量表达式间至少有一个空格。switch语句可以嵌套,break语句只跳出它所在的switch语句。 2022/8/141.main()int x=1,y=0,a=0,b=0; switch(x) case 1: switch(y) case 0: a+;break; case 1:b+;break; case 2: a+;b+;break; case 3:a+;b+; printf(“a=%d,b=%dn”,a,b); 结果:a=2,b=12022/8/144.3 选择结构程序设计举例 例4.5 将任意三个整数按从大到小的顺序输出。 #include stdio.hvoid

温馨提示

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

评论

0/150

提交评论