选择结构程序设计(重点).doc_第1页
选择结构程序设计(重点).doc_第2页
选择结构程序设计(重点).doc_第3页
选择结构程序设计(重点).doc_第4页
选择结构程序设计(重点).doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

VIP免费下载

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

文档简介

第5 章 选择结构程序设计(重点)【内容摘要】 关系运算和逻辑运算及其规则 if 语句及其几种形式的应用 switch 语句及其应用 选择结构程序设计实例51 关系运算与逻辑运算该内容已提到第二章讲授52 IF 语句的三种形式及其应用一、简单的IF 语句:【格式】IF(表达式)语句体【执行过程】先进行表达式判断,若其值为真(用非0 表示),则执行语句体;【说明】表达式必须用()括起来;表达式的具体形式可以是:常量、变量、表达式、函数调用只要表达式的值为非0 即为真则执行语句体,为0(或 0或0.0 表示假)则不执行语句;语句体为多个语句时须用 括起来;也可以是空语句(;)表达式可以是关系表达式、逻辑表达式、任意数据类型的常量(或变量);二、复合IF 语句:【格式】IF(表达式)语句体1ELSE 语句体2【执行过程】先进行表达式判断,若其值为真(用非0 表示),则执行语句体1,否则执行语句体2;【嵌套的IF 的匹配问题】(P94)ELSE 总是和它前面的最接近的IF 配对;如果一个ELSE 的上面又有一个未配对的ELSE,则先处理上面(内层)的ELSE 的配对;直到把所有ELSE 用完为止。例:= =0)IF(X0) Y=1;ELSE Y=0;ELSE Y=-1;表示方法(2):IF(X0) Y=1;ELSE Y=0;表示方法(4):19Y=0;IF(X=0)IF(X0) Y=1;ELSE Y=-1;三、多表达式复合IF 语句:(P92)【格式】IF(表达式1)语句体1ELSE IF(表达式2)语句体2ELSE IF(表达式3)语句体3ELSE 语句体n【说明】一个IF 语句(含ELSE)属于一个语句;ELSE 不能单独使用,须与IF 配套使用;用 括起来的复合语句属于一个整体(算一个语句);【实例1】输入三个数,由小到大输出(P94)、(P95)例5.3:int a,b,c;思路:用简单的if 语句实现。if(ab) a=a+b,b=a-b,a=a-b; a、b 交换if(ac) a=a+c,c=a-c,a=a-c; a、c 交换if(bc) b=b+c,c=b-c,b=b-c; b、c 交换【实例2】从键盘上输入三个整数,找出其中的我最大值并输出。/*简单的if语句的使用。*/int max1(int x,int y,int z)int max=x;if(maxy) max=y;if(maxy)if(xz) max=x; /* xy & xz */else max=z; /* z=x & xz */else /* y=x */if(yz) max=y; /* y=x & yz */else max=z; /* z=y & y=x */return(max);/*使用简单的ifelseif 语句*/int max3(int x,int y,int z)int max=x;if(xy) ;else if(yz) max=y; /* y=x & yz */else max=z; /* z=y & y=x */return(max);20/*使用嵌套的条件运算实现*/int max4(int x,int y,int z)return(xy?(xz?x:z):(yz?y:z);main()int a,b,c;printf(%d%d%d=a b c:);scanf(%d %d %d,&a,&b,&c);printf(Max(%d,%d,%d)=%d,a,b,c,max3(a,b,c);【实例3】简单的if 语句的使用。写一程序,从键盘上输入1 年份year(4 位十进制数),判断其是否闰年。闰年的条件是:能被4 整除、但不能被100 整除,或者能被400 整除。算法设计要点:(1)如果能被整除,则余数为,即如果的值等于,则表示能被整除!(2)首先将是否闰年的标志leap 预置为0(非闰年),这样仅当year 为闰年时将leap 置为1 即可。这种处理两种状态值的方法,对优化算法和提高程序可读性非常有效,请读者仔细体会。main()int year,leap=0; /* leap=0:预置为非闰年*/printf(Please input the year:);scanf(%d,&year);if (year % 4=0)if (year % 100 != 0) leap=1;else if (year%400=0) leap=1; if (leap) printf(%d is a leap year.n,year);else printf(%d is not a leap year.n,year);【条件运算符】(P96):1格式:e1?e2:e32执行过程(P96):当表达式e1 为非0 时,结果为表达式e2 的结果值,否则为表达式e3 的结果值。3说明:可嵌套(结合方向:从右到左);例:y=a0?1:(a0?1: a0?1:0 的结果值是:1与IF 语句的等价问题:(P96P97)若IF 语句中,在 表达式为真或假时,且都执行一个赋值语句给同一变量赋值时,可用简单的条件运算符来处理(代替之)。即只有在IF 语句的内嵌语句为赋值语句,且两个分支都给同一变量赋值时才能代替IF 语句。53 SWITCH 语句及其应用【格式】 switch(表达式)case 常量表达式1:语句体1case 常量表达式2:语句体2case 常量表达式3:语句体3case 常量表达式n:语句体ndefault :语句体n+1; 【执行过程】先计算表达式的值,然后从上到下与每个case 后面的常量表达式的值进行比较,当某个case 后面的常量表达式的值与switch 中表达式的相等时,(由此作为入口)就执行此case 后面21的所有语句(不再判断其它case);若所有的case 后面的常量表达式的值都没有与switch 中表达式的值匹配时,就执行default 后面的语句体(若有default 的话)【说明】(P99)switch 后面的条件“表达式”,ANSI 允许为任意类型,但一般是一个整数表达式(或字符表达式);case 后面的“常量表达式”值的类型应与之相同,可以是不含变量与函数的常数表达式,但不能是变量。例:case 3+4:case a:switch 结构的执行部分时一个由一些case 子结构与一个可缺省的default 子句构成的复合语句,须用括起来;一个switch 结构中不可出现两个case 具有相同的常量表达式值,例:case 3+6:case 7+2:case 11-2:在执行switch 语句时,根据switch 后面表达式的值找到匹配的入口标号(即具有相同值的case),就此标号开始执行下去,不再进行判断,直到遇上break,执行被终止。语句体有多个语句时可以不加括起来;(P100)多个case 可以执行同一个语句体;(P100)switch()可以嵌套,嵌套的switch 语句相当于一个语句。不论default 位置如何,总是先判断每个case 子句,没有满足条件的case 时就执行default 之后的所有语句,直到遇上break。default 的位置有三种情形(它对结果有一定影响,但每个case 的语句后面加上break 时则不影响结果);【实例分析】例1:default 置于所有case 之后(无break 语句):main()char *p=This is a c program;int a,e,i,o,u,kk;a=e=i=o=u=kk=0;while(*p+)switch(*p)case A:case a: a+;case E:case e: e+;case I:case i: i+;case O:case o: o+;case U:case u:u+;default: kk+; /*End for switch*/printf(a=%d e=%d i=%d o=%d u=%d k=%dn,a,e,i,o,u,kk);结果为:a=2 e=2 i=4 o=5 u=5 kk=19例2:default 置于case 之间(无break 语句):main()char *p=This is a c program;int a,e,i,o,u,kk;a=e=i=o=u=kk=0;while(*p+)22switch(*p)case A:case a: a+;case E:case e: e+;case I:case i: i+;default: kk+;case O:case o: o+;case U:case u: u+; /*End for swicth*/printf(a=%d e=%d i=%d o=%d u=%d k=%dn,a,e,i,o,u,kk);结果为:a=2 e=2 i=4 o=19 u=19 kk=18例3:default 置于所有case 之前(无break 语句):main()char *p=This is a c program;int a,e,i,o,u,kk;a=e=i=o=u=kk=0;while(*p+)switch(*p)default: kk+;case A:case a: a+;case E:case e: e+;case I:case i: i+;case O:case o: o+;case U:case u: u+;printf(a=%d e=%d i=%d o=%d u=%d k=%dn,a,e,i,o,u,kk);结果为:a=16 e=16 i=18 o=19 u=19 kk=14例4:default 置于所有case 之后,每个case 之后加上break 语句:main()char *p=This is a c program;int a,e,i,o,u,kk;a=e=i=o=u=kk=0;while(*p+)switch(*p)case A:case a: a+; break;case E:case e: e+; break;23case I:case i: i+; break;case O:case o: o+; break;case U:case u: u+; break;default: kk+;printf(a=%d e=%d i=%d o=%d u=%d k=%dn,a,e,i,o,u,kk);结果为:a=2 e=0 i=2 o=1 u=0 kk=14例5:default 置于case 之间,每个case 之后加上break 语句:main()char *p=This is a c program;int a,e,i,o,u,kk;a=e=i=o=u=kk=0;while(*p+)switch(*p)case A:case a: a+; break;case E:case e: e+; break;case I:case i:i+; break;default: kk+; break;case O:case o:o+; break;case U:case u:u+; break;printf(a=%d e=%d i=%d o=%d u=%d k=%dn,a,e,i,o,u,kk);结果为:a=2 e=0 i=2 o=1 u=0 kk=14例6:default 置于所有case 之前,每个case 之后加上break 语句:main()char *p=This is a c program;int a,e,i,o,u,kk;a=e=i=o=u=kk=0;while(*p+)switch(*p)default: kk+; break;case A:case a:a+; break;case E:case e:e+; break;case I:case i:i+; break;case O:case o:o+; break;24case U:case u:u+; break;printf(a=%d e=%d i=%d o=%d u=%d k=%dn,a,e,i,o,u,kk);结果为:a=2 e=0 i=2 o=1 u=0 kk=14每个case 的语句后面加上break 时,无论default 放置于何处,都不影响结果;但总是先判断每个case 之后,再执行default;【作业】1、 写出下列逻辑表达式的结果:0|a 1&a 1|a 0&a a|!a 0&!a a|a a&a !(a&b) !(a|a) !(!a)2、给出一个百分制成绩,要求输出成绩等级A、B、C、D、E。90分以上为A,8189分为B,7079分为C,6069分为D,60分以下为E。 事先编好程序,要求分别用if语句和switch语句实现。运行程序,并检查结果是否正确。再运行一次程序,输入分数为负值(如70),这显然是输入时出错,不应给出等级。修改程序,使之能正确处理任何数据。当输入数据大于100或小于0时,通知用户“输入数据错”,程序结束。3、给一个不多于5位的正整数,要求:求出它是几位数;分别打印出每一位数字;按逆序打印出各位数字,例如原数为321,应输出123。应准备以下测试数

温馨提示

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

评论

0/150

提交评论