五章选择结构程序设计ppt课件_第1页
五章选择结构程序设计ppt课件_第2页
五章选择结构程序设计ppt课件_第3页
五章选择结构程序设计ppt课件_第4页
五章选择结构程序设计ppt课件_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

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

文档简介

1、东北师范大学计算机学院 2008年秋季学期第五章第五章 选择构造程序设计选择构造程序设计主要内容主要内容:(1)关系运算关系运算(2)逻辑运算逻辑运算(3)if语句的构造语句的构造(4)switch语句的构造语句的构造(5)运用两种选择构造处理实践问题运用两种选择构造处理实践问题东北师范大学计算机学院 2008年秋季学期Professional WordsSelection structure 选择构造选择构造 Arithmetic operator 算术运算符算术运算符Relational operator 关系运算符关系运算符Logical operator 逻辑运算符逻辑运算符neste

2、d 嵌嵌套套priority 优先优先级级东北师范大学计算机学院 2008年秋季学期 选择构造的作用:根据指定的条件能否选择构造的作用:根据指定的条件能否满足,决议从给定的两组或多组操作中满足,决议从给定的两组或多组操作中选择其一。实现方法主要有两种:选择其一。实现方法主要有两种:if elseswitch东北师范大学计算机学院 2008年秋季学期一、关系运算符和关系表达式一、关系运算符和关系表达式(Relational opertor & expression) (Relational opertor & expression) 1、关系运算符、关系运算符 比较大小的运算称为

3、关系运算,是逻辑运算的比较大小的运算称为关系运算,是逻辑运算的一种。一种。C言语提供了六种关系运算,分为两个言语提供了六种关系运算,分为两个优先级。优先级。,=, 优先级高优先级高=,!= , 优先级低优先级低关系运算的优先级低于算术运算,高于赋值运算关系运算的优先级低于算术运算,高于赋值运算ab+3a=b=3 等效于等效于a=b=3a=b3 等效于等效于a=(b3)东北师范大学计算机学院 2008年秋季学期2、关系表达式、关系表达式 由关系运算符将两个表达式衔接起来的由关系运算符将两个表达式衔接起来的式子称为关系表达式,关系表达式的值式子称为关系表达式,关系表达式的值为为“真或真或“假,假,

4、C C言语没有逻辑型数据,言语没有逻辑型数据,所以用非所以用非0 0表示真,用表示真,用0 0表示假。但关系表示假。但关系表达式的前往值只需表达式的前往值只需0 0或或1 1 关系表达式满足左结合性关系表达式满足左结合性,a=5,b=4,c=3, ,a=5,b=4,c=3, abc=? abc=? 0东北师范大学计算机学院 2008年秋季学期二、逻辑运算符和逻辑表达式二、逻辑运算符和逻辑表达式(Logical operator & expression) (Logical operator & expression) 1、逻辑运算符、逻辑运算符&,|,!单目运算符单目运

5、算符Unary优先级:!优先级:!&| 已学过的四类运算符之间的关系已学过的四类运算符之间的关系!算术运算符算术运算符关系运算符关系运算符&|赋值运算符赋值运算符 东北师范大学计算机学院 2008年秋季学期三种逻辑运算符的真值表三种逻辑运算符的真值表 aba&ba|b!a真真真真真真真真假假真真假假假假真真假假假假真真假假真真真真假假假假假假假假真真东北师范大学计算机学院 2008年秋季学期三种逻辑运算符的真值表三种逻辑运算符的真值表 aba&ba|b!a真真1真真1真真1真真1假假0真真1假假0假假0真真1假假0假假0真真1假假0真真1真真1假假0假假0假假0

6、假假0真真1东北师范大学计算机学院 2008年秋季学期三种逻辑运算符的真值表三种逻辑运算符的真值表 aba&ba|b!a11110100100101100001东北师范大学计算机学院 2008年秋季学期2、逻辑表达式、逻辑表达式 逻辑表达式的结果用逻辑表达式的结果用0或或1表示,但在判表示,但在判别一个量的真假时,用别一个量的真假时,用0表示假,用非表示假,用非0表示真。表示真。C言语在求解逻辑表达式时,并言语在求解逻辑表达式时,并不是一切的逻辑运算符都被执行,只需不是一切的逻辑运算符都被执行,只需在必需执行的情况下才执行该运算符在必需执行的情况下才执行该运算符 & 当当为假时

7、,不再求为假时,不再求的值的值东北师范大学计算机学院 2008年秋季学期m=ab&(n=cd) a=1,b=2,c=3,d=4, m,n的原值为的原值为1 执行后执行后m的值为的值为0,n的值依然为的值依然为1,由于该表达,由于该表达式没有被求解式没有被求解 例,判别一个年份是不是闰年,当例,判别一个年份是不是闰年,当year能被能被4整整除,但不能被除,但不能被100整除,或能被整除,或能被400整除,那么整除,那么为闰年为闰年year %4=0&year %100!=0|year %400=0(year %4=0&year %100!=0)|year %400=0东

8、北师范大学计算机学院 2008年秋季学期三、三、if语句语句1、if语句的三种方式语句的三种方式 if (表达式表达式) 语句语句 if (表达式表达式) 语句语句1 else 语句语句2 if (表达式表达式1) 语句语句1 else if (表达式表达式2) 语句语句2 else if (表达式表达式m) 语句语句m else 语句语句n东北师范大学计算机学院 2008年秋季学期例,输入例,输入3个数个数a,b,c,按由小到大的顺序输出按由小到大的顺序输出 main()int a,b,c,temp;scanf(“%d%d%d,&a,&b,&c);if (ab)tem

9、p=a;a=b;b=temp;if (ac)temp=a;a=c;c=temp;if (bc)temp=b;b=c;c=temp;printf(“%d,%d,%d,a,b,c);东北师范大学计算机学院 2008年秋季学期2、if语句嵌套语句嵌套(nested)if else 语句,语句中可以嵌套语句,语句中可以嵌套if语句,语句,else与离与离它最近的它最近的if 配对配对例,求例,求sign函数函数 main() float x; int y; scanf(“%d,&x); if (x0) y=1; else if (x=0) y=0; else y=-1; printf(“%f,

10、%d,x,y); x=0 x=0) if (x0) y=1; else y=0;else y=-1;printf(“%f,%d,x,y);x=0 xb?a:cb?(a=100): ( b=100) ab?printf(“%d,a):printf(“%d,b); 表达式表达式2和表达式和表达式3的类型可以不同,向的类型可以不同,向高级别的转换高级别的转换 xy?1:1.5 当当xy时,结果为时,结果为1.0东北师范大学计算机学院 2008年秋季学期 例,输入一个字符,判别它能否为大写例,输入一个字符,判别它能否为大写字母,假设是大写字母,那么转换为小字母,假设是大写字母,那么转换为小写字母输出,

11、否那么原样输出。写字母输出,否那么原样输出。 main()char ch;scanf(%c,&ch);ch=(ch=A&ch=Z)?(ch+32):ch;printf(“%c,ch);东北师范大学计算机学院 2008年秋季学期阐明阐明条件运算符一定程度上可替代条件运算符一定程度上可替代ifelse语句语句当条件复杂时当条件复杂时,最好不用这种构造最好不用这种构造,不便于不便于了解程序了解程序东北师范大学计算机学院 2008年秋季学期练练 习习1.表示表示x在在1,8之内为真时的表达式之内为真时的表达式_2.int a=2,b=2,c=3,表达式表达式a|a-b&!c的值

12、的值_3.以下程序段的输出结果为以下程序段的输出结果为:_int a=5,x=6;if(x=a) printf(“1:%dn,x);else printf(“2:%dn,x);东北师范大学计算机学院 2008年秋季学期4.以下程序段的功能是判别三角形是等边以下程序段的功能是判别三角形是等边,等腰还是普等腰还是普通三角形通三角形,或者不能构成三角形,将程序填充完好或者不能构成三角形,将程序填充完好.main() int a,b,c; scanf(“%d%d%d,&a,&b,&c); if _ /能构成三角形能构成三角形 if _ printf(“等边等边n); else

13、if _ printf(“等腰等腰n); else printf(“能构成三角形能构成三角形n); else printf(“不能构成三角形不能构成三角形n);东北师范大学计算机学院 2008年秋季学期四、四、switch语句语句当分支数较多时,用当分支数较多时,用switch语句语句1 switch语句的普通方式语句的普通方式switch 表达式表达式case 常量表达式常量表达式1:语句:语句1;case 常量表达式常量表达式2:语句:语句2; case 常量表达式常量表达式n:语句:语句n;default: 语句语句n+1;东北师范大学计算机学院 2008年秋季学期2、有关、有关swit

14、ch语句的阐明语句的阐明 1switch后的表达式可以是任何类型后的表达式可以是任何类型 2当表达式的值与某一当表达式的值与某一case后的常量表达后的常量表达式的值一样时,那么执行其后的语句,假设与式的值一样时,那么执行其后的语句,假设与一切的一切的case后的值都不同,那么执行后的值都不同,那么执行 default后后的语句的语句 3各个各个case的值互不一样;多个的值互不一样;多个case可以可以对应一个语句对应一个语句 4执行某个执行某个case后,接着执行下一个后,接着执行下一个case而不再进展判别,所以要加而不再进展判别,所以要加break跳出跳出switch东北师范大学计算机

15、学院 2008年秋季学期五、五、 程序举例程序举例例例1,按照考试成果等级打印出百分制分数段,按照考试成果等级打印出百分制分数段,可以用可以用switch语句来实现语句来实现switchgradecase A:printf(“85100n); case B:printf(“7084n); case C:printf(“6069n); case D:printf(“60n); break;case D:printf(“60n); break;default: printf(“errorn); 东北师范大学计算机学院 2008年秋季学期例例3 3,写一程序,判别某一年能否闰年,写一程序,判别某一年

16、能否闰年 main() main() int year,leap;int year,leap;if (year %4=0&year%100!=0|year %400=0) if (year %4=0&year%100!=0|year %400=0) leap=1;leap=1;else leap=0;else leap=0;if (leap=1)if (leap=1)printf(printf(“%d year is leap%d year is leap,year);,year);else else printf(printf(“%d year is not leap%d y

17、ear is not leap,year);,year); 东北师范大学计算机学院 2008年秋季学期 例例4 4,求,求ax2+bx+c=0ax2+bx+c=0方程的解方程的解 main()main()float a,b,c,d,p,q,x1,x2;float a,b,c,d,p,q,x1,x2;scanf(%f%f%f,&a,&b,&c);scanf(%f%f%f,&a,&b,&c);if (fabs(a)=1e-6)if (fabs(a)=1e-6) printf(is not a quadraticn); printf(is not a

18、quadraticn);elseelsed=bd=b* *b-4b-4* *a a* *c;c;p=-b/(2p=-b/(2* *a);a);if (fabs(d)=1e-6)if (fabs(d)1e-6) x1=p+sqrt(d)/(2*a); x2=p-sqrt(d)/(2*a);printf(has two distinct real roots:%8.2f,%8.2fn,x1,x2); elseq=sqrt(-d)/(2*a);printf(has complex roots:n);printf(%8.2f+%8.2fin,p,q);printf(%8.2f-%8.2fin,p,q)

19、;东北师范大学计算机学院 2008年秋季学期例例5,运输公司对用户计算运费,路程,运输公司对用户计算运费,路程S越远,每越远,每公里运费越低,规范如下:公里运费越低,规范如下:s250Km 没有折扣没有折扣250=s500 2%折扣折扣500=s1000 5%折扣折扣1000=s2000 8%折扣折扣2000=s3000 10%折扣折扣3000=3000) c=12;else c=s/250;switch(c)case 0:d=0;break;case 1:d=0.02;break;case 2:case 3:d=0.05;break;东北师范大学计算机学院 2008年秋季学期case 4:c

20、ase 5:case 6:case 7:d=0.08;break;case 8:case 9:case 10:case 11:d=0.1;break;case 12:d=0.15;break;f=p*w*s*(1-d);printf(“s=%d,d=%f,f=%f,s,d,f);东北师范大学计算机学院 2008年秋季学期练习练习1.以下程序段执行后,以下程序段执行后,a的值是多少?的值是多少?int x=5,y=5,z=10,a;switch(x=y)case 1: if (yz) a=1; else a=2; case 2: switch(z) case 10: a+=10; break;

21、case 11: a+=20; case 0: a*=10;东北师范大学计算机学院 2008年秋季学期2. 编写一程序,根据输入的年份和月编写一程序,根据输入的年份和月份,计算该月有多少天?份,计算该月有多少天?3.输入一个日期,计算该日期是今年输入一个日期,计算该日期是今年2021的第几天?的第几天?4.输入某一年的输入某一年的1月月1日是星期几日是星期几,然后然后再输入一个日期再输入一个日期,计算这一天是星期计算这一天是星期几几?(学完第六章以后学完第六章以后,会有更好的处理方会有更好的处理方案案)东北师范大学计算机学院 2008年秋季学期5. 接受一个字符,例如用接受一个字符,例如用“+

22、表示加法,表示加法,用用“表示减法。接受表示减法。接受num1 和和num2 两个数。假设输入的字符为两个数。假设输入的字符为“+,那么,那么将这两个数相加并显示相应的结果。假将这两个数相加并显示相应的结果。假设输入的字符为设输入的字符为“,那么将这两个数,那么将这两个数相减并显示相应的值。要求完成相减并显示相应的值。要求完成+,-,*,/四四种运算。种运算。6.编写一个程序,从用户输入的三个数中编写一个程序,从用户输入的三个数中找到最大值,并将该最大值输出。找到最大值,并将该最大值输出。东北师范大学计算机学院 2008年秋季学期2代码代码:#include #includevoid main

23、()int year,month,days;scanf(%d%d,&year,&month);switch(month)case 1:case 3:case 5:case 7:case 8:case 10:case 12:days=31;break;东北师范大学计算机学院 2008年秋季学期case 2: if(year%4=0&year%100!=0|year%400=0) days=29;else days=28;break;case 4:case 6:case 9:case 11:days=30;break;default: printf(input is err

24、or!n);exit(0); printf(days:%dn,days);东北师范大学计算机学院 2008年秋季学期3代码代码:void main()int year,month,day,days;scanf(%d%d%d,&year,&month,&day);switch(month)case 1:days=day;break;case 2:days=31+day;break;case 3:days=31+28+day;break;case 4:days=31+28+31+day;break;case 5:days=31+28+31+30+day;break;case

25、 6:days=31+28+31+30+31+day;break;case 7:days=31+28+31+30+31+30+day;break;东北师范大学计算机学院 2008年秋季学期case 8:days=31+28+31+30+31+30+31+day;break;case 9:days=31+28+31+30+31+30+31+31+day;break;case 10:days=31+28+31+30+31+30+31+31+30+day;break;case 11: days=31+28+31+30+31+30+31+31+30+31+day;break;case 12: days

26、=31+28+31+30+31+30+31+31+30+31+30+day;break;default: printf(input is error!n);exit(0); if(year%4=0&year%100!=0|year%400=0)&month2) days+;printf(days=%dn,days);东北师范大学计算机学院 2008年秋季学期4代码代码:#include #includevoid main()int year,month,day,week,week1,days;scanf(%d%d%d%d,&year,&month,&day,&week);switch(month)case 1:days=day;break;case 2:days=31+day;break;case 3:days=31+28+day;break;case 4:days=31+28+31+day;break;case 5:days=31+28+31+30+day;break;ca

温馨提示

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

评论

0/150

提交评论