C语言课件 第5章选择结构

上传人:小*** 文档编号:243139926 上传时间:2024-09-16 格式:PPT 页数:42 大小:113KB
返回 下载 相关 举报
C语言课件 第5章选择结构_第1页
第1页 / 共42页
C语言课件 第5章选择结构_第2页
第2页 / 共42页
C语言课件 第5章选择结构_第3页
第3页 / 共42页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,第5章 选择结构程序设计,主要内容:,关系运算符和关系表达式,逻辑运算符和逻辑表达式,if - else(,重点、难点),switch,条件运算符和条件表达式(了解),根据选择结构的组成特点,我们在分析问题时着重明确以下两点:,1)条件是什 么。,2)条件成立和不成立时分别执行什么操作。,简单条件用关系表达式来表示,例5.1 判断一个整数,n,是奇数还是偶数(设,n,由用户输入),分析:第一步,输入整数,n。,第二步,判断:若条件“,n%2,等于0“成立,则输出“,n,为偶数“;否则输出“,n,为奇数“。,5.1关系运算符和关系表达式,main(),int,n;,printf,(“n enter,int,n:”);,scanf,(“%d”,if(,n%2=0,),printf,(“n %d is even number“, n);,else,printf,(“n %d is odd number”, n);,开始,输入,n,n%2,为0,是偶数,是奇数,结束,输入,n,例5.2输入任一考生的考号及成绩,判断其是否能上大学。(设分数线为600,若能上,则输出“,success“,,否则输出”,failure”)。,分析:第二步是选择结构,条件是“,score,大于等于600”,,main(),int,no;,float score;,printf,(“n enter no,score:”);,scanf,(“%d%f”,if(,score=600,),printf,(“n %d :success”,no);,else,printf,(“n %d :failure.”,no);,关系表达式的值:,若条件满足,则关系表达式的值为,ture,( 1);,否则,关系表达式的值为,false(0)。,1.,关系运算符:, = = !=,例如下列关系表达式:,ab,表示条件 “,a,大于,b“,,x!=0,表示条件 “,x,等于 0“,,a+b 关系运算符 赋值运算符,且 = 高于 = !=,结合性:,自左向右(一般很少连用)。,如:,abb)c,f=ag+1,表示,f=(adc,也是合法的关系表达式,但在实际应用中很少使用;因为它不能表示:,a+b,大于,c,且大于,d。,问题:,如何表示:,a x b,0y=15 &temperature1 、 !y-0,x&y - 0 x | y -1,特别提示 :,if( !x ),等价于,if( x=0),2.,逻辑表达式,: 由逻辑运算符将一个或多个表达式连接起来的式子。比如:,1),a,和,b,中只有一个为0的逻辑表达式为:,a+b!=0&a*b=0,2),某英语专业的招生条件“总分(,total ),超过分数线(600)并且英语成绩(,score),不低于85分“,该条件的逻辑表达式为:,total600&score=85,3),判断某年是润年应满足以下两个条件之一:该年能被4整除但不能被100整除,或该年能被400整除。该条件对应的逻辑表达式为:,year%4=0&year%100!=0 | year%400=0,3,逻辑运算符的优先级和结合性,当条件表达式中同时出现多个运算符时,首先按优先级计算,当同时出现多个优先级相同的运算符时,再按结合性计算。,优先级:,!算术运算符关系运算符& | 赋值运算符,结合性:,逻辑与&、逻辑或 |的结合性:,自左向右,,,逻辑非 ! 的结合性:,自右向左,例如: (下页),优先级与结合性举例,例如:,设,int,h=3,j=3,k=3;,double x=0,y=2.3;,计算下列表达式的值:,h& j & k,等价于(,h& j) & k,hj &xy,等价于 (,hj)&(xy),hk | xy,等价于 (,hk) | (xb) & (n=cd),后,,n,的值为()。,A. 1 B. 0,C,. 2 D.3,2),当,c,的值不为0时,在下列选项中能正确将,c,的值赋给变量,a、b,的是(),Ac=b=a; B. (a=c)|(b=c);,C,. (a=c),D. a=c=b;,5.3,if,语句,if,语句能实现所有的选择结构,例5.5 将任意两个整数,m、n,中的较大数送给,x,,较小数送给,y ,,然后按大小顺序输出(设,m、n,的值由键盘输入),分析:共分三步,,S1:,输入两个整数给,m,和,n。,S2:,判断,m、n,的大小并分别给,x,和,y,赋值。,S3:,输出,x,和,y。,其中第二步用选择结构.,main(),int,m,n,x,y;,printf,(“n please enter two integers:”);,scanf,(“%d%d”,if(mn) x=m; y=n; /*,复合语句*/,else,x=n; y=m;,printf,(“n x=%d,y=%d”,x,y);,思考:若条件改为:,mn,,如何实现?,1.,If,语句的一般形式:,i,f(,表达式),语句1,else,语句2,执行过程:(如右图,),格式说明,:,语句,1 和,语句,2 在语法上是一个语句,可以是简单语句,也可以是复合语句。在此要特别注意复合语句中一对 的正确使用,。,条件表达式,语句1,语句2,Y,N,2.,if,语句的简化形式,例5.6 从键盘接收一个字符,若为大写字母,则将其转换成小写字母并输出;否则输出原字符。,分析:共三步,其中第二步判断,ch,是大写字母的条件是:,ch,在,AZ,之间,#,include ,main(), char,ch,;,printf,(“n enter a character:”); /*,第一步,输入,ch,*/,ch,=,getchar,();,getchar,();,if(,ch,=A &,ch,=Z,) /*,第二步,判断并处理*/,ch,=,ch,+32; /*32:,大小写字母的,ASCII,码之差为32*/,putchar,(,ch,); /*,第三步,输出*/,2.,if,语句的简化形式,if(expression),statement1,执行过程如图:,例:输入任意数,n,,输出其绝对值。,main(), float a;,scanf,(“%f”,if(am”;,条件成立时输出“,big”;,否则输出“,small”。,很明显,又是一个选择结构,。,main(),int,m=15, n;,printf,(n guess a num:);,scanf,(%d, /,if( m= =n),printf,( RIGHT); /*,语句1*/,else,printf,(n WRONG);,if( nm),printf,( BIG); /*,语句2*/,else,printf,( SMALL);,例5.8某幼儿园只接收26岁的小孩,其中23岁编入小班,45岁编入中班,6岁编入大班。编程实现,对输入的任意一个年龄,输出该编入什麽班,或者告知“不收“。,分析:首先根据条件“,年龄在26岁之间,”判断是“收”还是“不收“,若条件满足,则执行的操作为:(1)判断该编入何班;否则,输出“不收”。,其次,分析(1)如何实现。,提示:本例可用不同的程序实现,。,如将条件改为“年龄超出26岁”;或者从条件“年龄小于2”开始判断。试编程实现。,main(),int,age;,printf,(“n enter age:”);,scanf,(“%d”,if(age=2&age=6),if(age=3),/*,语句1开始*/,printf,(“n small class”); /*,语句 1_1*/,else,if(age0),if(n%2=0),printf,(“positive and even.n”);,else,printf,(“negativen”);,画出该程序的流程图,程序结构更清楚。,例5.10程序(2):,main(),int,n;,printf,(“n enter a integer:”);,scanf,(“%d”,if(n0),if(n%2=0),printf,(“positive and even.n”);,else,printf,(“negativen”);,4条件运算符,使用,if,语句时,有时是为了根据条件给同一个变量赋不同的值,比如:,main(),int,x,y;,scanf,(“%d”,if(x0) y=x+1;,else y=x*x+1;,printf,(“n x=%d,y=%d”,x,y);,本例中,当条件满足或不满足时分别执行一个赋值语句,且都是给变量,y,赋值。用,C,语言提供的条件运算符描述,比用,if,语句更简练。上述,if,语句等价于:,y= x0? x+1 : x*x+1;,其中“,x0? x+1 : x*x+1”,是一个“条件表达式”,,条件运算符,: ? :,条件表达式的一般格式:,表达式1 ?表达式2 : 表达式3,计算过程:,首先计算表达式1;若其值为真(非0),则计算表达式2,取表达式2的值作为整个条件表达式的值;否则,计算表达式3,取表达式3的值作为整个条件表达式的值。,优先级,: 条件运算符的优先级比关系运算符和算术运算符都低,比赋值运算符高。,例如:,y=x0?x+1:x*x+1,等价于,y=(,(x0)?( x+1) : (x*x+1),),说明:并不是所有的,if,语句都能用条件表达式实现。如,if(n0) a=6;,else b=8;,5.4,switch,语句,switch,语句可用来处理,一部分特殊的多分支选择结构,。即根据某个表达式的值进行选择,而不能根据表达式的取值范围作出选择,所以使用时有很大的局限性。 .,如学生成绩等级分类,幼儿园分班等。,若用,if,语句实现,程序冗长,嵌套层次多,结构不够清晰。而用,switch,语句则更清楚。,例5.12输入某个成绩等级,输出该等级对应的分数段。(,A:90100,B:8089,C:7079,D:6070,E:60,以下),#,include ,/*,例5.12*/,main(), char grade;,printf,(n enter score grade(ae):); /*,输出提示信息*/,grade=,getchar,();,getchar,(); /*,接收输入的一个字符*/,switch(grade), case a:,printf,(n 90100);,/*case,后是一常量*/,break;,/*,多个语句组成的语句段1*/,case b:,printf,(n 8089); break;,case c :,printf,(“n 7079”); break;,/*case,后,有空格*/,case d:,printf,(n 6069.); break;,case e:,printf,(n 60); break;,default:,printf,(n error:out of the field(ae).);,/*switch,语句结束*/,switch,语句的一般形式为 :,switch(expression), case,常量表达式1 :语句段1,break;,case,常量表达式2:语句段2,break;,case,常量表达式,N :,语句段,N,break;,default:,语句段,N+1,(,格式说明),switch,语句的执行过程,:,计算,switch,后面括号中的表达式。,将表达式的值与第一个,case,后的常量表达式的值比较,,若相等,则从语句段1开始,执行语句段1及其以后的所有语句,不再进行判断(即执行完语句段1后,接着执行后面的,case,或,default,语句中的语句段),直至遇到,break,语句或执行至,switch,语句的末尾;,若不相等,再与第二个,case,后的常量表达式比较,依此类推;若所有的,case,均不匹配,则执行,default,后的语句段,n+1。,main() /*,幼儿园编班问题*/,int,age;,printf,(n enter childs age:);,scanf,(%d,switch(age), case 2:,case 3:,printf,(“n small class”); /*,当,age,为2或3时*/,break; /*,跳出,switch,语句*/,case 4:,case 5:,printf,(n middle class.);,break;,case 6:,printf,(n big class.);,break;,default:,printf,(n cant accept.);, /*,实现多个,case,分支共用一个语句段,。,*/,例5.14输入任一百分之成绩,输出其对应的成绩等级:,A(90100),B(8089),C(7079),D(6069),E(60)。,分析:因为,case,后必须是一常量,所以要用,switch,语句实现,必须先找出各个分数段对应的常量。很容易可看出,除100分、60分以下的分数外,其它分数段内的分数除以10取整结果相同。,main() / *,例5.14*/,int,score,n;,printf,(n enter a score(0100):);,scanf,(%d,if,(score=100) n=score/10;,else,n=11;,if(n6) n=5; /*,当,n6,时,说明,score60,,令,n=5*/,switch(n), case 10:,/*,当,score,为100时,,n,的值为10*/,case 9:,printf,(“,nA,”); break; / *n,为9或10时共用该语句段,*/,case 8:,printf,(,nB,); break;,case 7:,printf,(,nC,); break;,case 6:,printf,(,nD,); break;,case 5:,printf,(,nE,); break;,default:,printf,(n enter error.); ,思考:如果将分数段的划分改为:,A(10085), B(7084), C(6069), D(60),用,switch,语句实现是否合适?,特别说明,:并不是所有的多分支结构都可用,switch,语句实现,只有当各个分支能分别与某个常量对应时,才适合采用,switch,语句。,上机调试,一、习题 第一部分,5、下面程序的执行结果是:,main(),int,x=-1,y=3,k;,k=(x+30),r=-1; /*,用-1标记不予邮寄*/,else if(weight20) r=0.70; /*r,保存实际邮寄费率*/,else if(weight10),r=0.75;,else r=0.8;,if(r!=-1), money=r*weight+0.2;,printf,(n weight:%f,money:%f,weight,money);, else,printf,(n cant post.);,分析该程序,共有4个分支,分别对应,weight,的取值为:30, 20且10且=20,=10; 因此若要实的每个分支都能执行一遍,,weight,应分别从上述每一范围中至少取一个值。,考虑到,边界容易出错,,,所以,weight,应分别取10,20,30作为测试数据,或直接将30,20 10作为后3个范围中的测试数据。,测试用例:,35,30 ,20, 10(至少4个测试数据),或者使用:35,25,15,5,30,20,10(每个范围取一个测试数据,在加上边界数据供7组)。,5.5 上机调试,三、单步执行(,run/step,或,F7,或,F8),具体方法是:根据某个测试用例,若程序的运行结果不正确,则采用单步执行方式,利用原来的测试数据,重新运行该程序,根据亮条光标的移动,可以很清楚的看到程序的执行过程,然后与该程序要实现的任务比较,很容易找出程序中哪儿与实际不符。,同时使用,break/watch,可添加表达式,利用单步执行观察,watch,窗口中该表达式或变量的值,则更容易找出是哪一步出错了。,比如:上例的执行。,作业,2. 习题5, 8,10 ,12,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 小学资料


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

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


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