您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > 第5章 选择结构程序设计
第5章选择结构程序设计引例:计算函数值需要考虑:1.输入x2.判断x值3.根据x值,计算y值4.输出y值010/)sin(xxxxy显然2、3由顺序结构不能够实现必须引入选择结构程序#includestdio.h#includemath.hintmain(){floatx,y;printf(Enterx:\n);scanf(%f,&x);if(x!=0.0)y=sin(x)/x;elsey=1;printf(x=%5.2f\ty=%7.4f\n,x,y);return0;}输入x值x为0?真假y=1y=sin(x)/x输出y关系运算Enterx:2X=2.00关系运算符和表达式关系运算符种类:====!=结合方向:自左向右优先级别:====!=优先级6(高)优先级7(低)例ca+b//c(a+b)ab!=c//(ab)!=ca==bc//a==(bc)a=bc//a=(bc)关系表达式的值:是逻辑值真或假,用1和0表示例inta=3,b=2,c=1,d,f;ab(ab)==cb+cad=abf=abc//表达式值1//表达式值1//表达式值0//d=1//f=0–关系运算注意:例若a=0;b=0.5;x=0.3;则a=x=b的值为0例5278在C中是允许的,值为0例'a'0结果为'A'100结果为10关系运算注意:例应避免对实数作相等或不等的判断如1.0/3.0*3.0==1.0结果为可改写为:fabs(1.0/3.0*3.0-1.0)1e-60ab!a!ba&&ba||b真假真假假假真真逻辑运算符和表达式逻辑运算符种类:!&&||逻辑运算真值表C语言中,运算对象:值为0时表示假;值为非0时表示真;运算结果:假——0,真——1,真假假假假假真真假假真真真假真真!(2)&&(11)||(12)高低例a=x&&x=bab&&xya==b||x==y!a||ab优先级:结合方向:!:从右向左&&:从左向右||:从左向右//(a=x)&&(x=b)//(ab)&&(xy)//(a==b)||(x==y)//(!a)||(ab)!(2)&&(11)||(12)高低优先级:结合方向:!:从右向左&&:从左向右||:从左向右例a=4;b=5;!aa&&ba||b!a||b4&&0||253&&2||84-!0'c'&&'d'值为1值为0值为1值为1值为1值为1//(53)&&2||(8(4-(!0)))值为1短路特性:逻辑表达式求解时,并非所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符//结果m=0,n=1!(2)&&(11)||(12)高低优先级:结合方向:!:从右向左&&:从左向右||:从左向右例a=1;b=2;c=3;d=4;m=1;n=1;(m=ab)&&(n=cd)if语句(条件选择语句)if语句的三种形式形式一:格式:if(条件){语句组}执行过程:条件语句真假真假例:if(xy)printf(%d,x);条件语句1语句2形式二:格式:if(条件){语句组1}else{语句组2}执行过程:例:if(xy)max=x;elsemax=y;如:if(a==b&&x==y)printf(a=b,x=y);if(3)printf(OK);if('a')printf(%d,'a');说明:if后面的表达式类型任意语句可以是复合语句if(x)if(x!=0)if(!x)if(x==0)/*ch5_1.c*/#includestdio.hintmain(){intx,y;printf(Enteraninteger:);scanf(%d,&x);y=x;if(x0)x=-x;printf(integer:%d---absolutevalue:%d\n,y,x);return0;}例求一个数的绝对值运行:Enteraninteger:-12integer:-12---absolutevalue:12/*ch5_2.c*/#includestdio.hintmain(){inta,b;printf(Enterintegera:);scanf(%d,&a);printf(Enterintegerb:);scanf(%d,&b);if(a==b)printf(a==b\n);elseprintf(a!=b\n);}例输入两个数并判断两数相等否运行:Enterintegera:12Enterintegerb:12a==b运行:Enterintegera:12Enterintegerb:9a!=b例:任给a,b,c三个数,按从大到小的顺序输出。分析:1)对于任意两个数a,b,若ab,则输出a,b,否则输出b,a2)对于三个数,则有6种可能性:abc、acb、bac、bca、cab、cba3)使用判断交换法:1.若ab,则交换a和b2.若ac,则交换a和c结果a最大3.若bc,则交换b和c结果abc结果a=8、b=8t=a;a=b;b=t交换方法:设a=5、b=8a=b;b=a;#includestdio.hintmain(){inta,b,c,t;printf(inputa,b,c:\n);scanf(%d,%d,%d,&a,&b,&c);if(ab){t=a;a=b;b=t;}if(ac){t=a;a=c;c=t;}if(bc){t=b;b=c;c=t;}printf(%d%d%d\n,a,b,c);return0;}输入a,b,cab?是否t=a;a=b;b=t;ac?是否t=a;a=c;c=t;bc?是否t=b;b=c;c=t;输出a,b,cif语句嵌套:一般形式:if(条件1)if(条件2)语句1else语句2elseif(条件3)语句3else语句4内嵌if内嵌ifif(条件1)if(条件2)语句1else语句2内嵌ifif(条件1){if(条件2)语句1}else语句2内嵌ifif(条件1)语句1elseif(条件2)语句2else语句3内嵌if例输入两数并判断其大小关系/*ch4_4.c*/#includestdio.hintmain(){intx,y;printf(Enterintegerx,y:);scanf(%d,%d,&x,&y);if(x!=y)if(xy)printf(XY\n);elseprintf(XY\n);elseprintf(X==Y\n);}运行:Enterintegerx,y:12,23XYEnterintegerx,y:12,6XYEnterintegerx,y:12,12X==YP1P2Pn真假真假真假S1S2SnSn+1形式三:格式:if(条件1)语句1elseif(条件2)语句2elseif(条件3)语句3…...[else语句n+1]条件1语句1非0=0条件2条件3语句n+1语句3语句2非0非0=0=0执行过程:例:if(salary1000)index=0.4;elseif(salary800)index=0.3;elseif(salary600)index=0.2;elseif(salary400)index=0.1;elseindex=0;if~else配对原则:缺省{}时,else总是和它上面离它最近的未配对的if配对if(……)if(……)if(……)else…...else…...else…...例:if(a==b)if(b==c)printf(a==b==c);elseprintf(a!=b);修改:if(a==b){if(b==c)printf(a==b==c);}elseprintf(a!=b);实现if~else正确配对方法:加{}例考虑下面程序输出结果:main(){intx=100,a=10,b=20;intv1=5,v2=0;if(ab)if(b!=15)if(!v1)x=1;elseif(v2)x=10;x=-1;printf(%d,x);}结果:-1※条件运算符:考察以下if语句:if(a>b)max=a;elsemax=b;可用条件运算符来处理max=(a>b)?a∶b;条件表达式的一般形式为:表达式1?表达式2∶表达式3例:输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。intmain(){charch;scanf(%c,&ch);ch=(ch='A'&&ch='Z')?(ch+32):ch;printf(%c,ch);return0;}switch语句(开关分支语句)一般形式:switch(表达式){caseE1:语句组1;[break;]caseE2:语句组2;[break;]…….caseEn:语句组n;[break;][default:语句组;[break;]]}执行过程:switch表达式语句组1语句组2语句组n语句组…...E1E2Endefaultcase说明:E1,E2,…En是整型(字符)常量,且值互异语句标号作用,一般用break跳出case后可包含多个可执行语句,且不必加{}switch可嵌套多个case可共用一组执行语句如:……case'A':case'B':case'C':printf(score60\n);break;……..例switch(score){case5:printf(Verygood!);case4:printf(Good!);case3:printf(Pass!);case2:printf(Fail!);default:printf(dataerror!);}运行结果:score为5时,输出:Verygood!Good!Pass!Fail!dataerror!例intmain(){intx=1,y=0,a=0,b=0;switch(x){case1:switch(y){case0:a++;break;case1:b++;break;}case2:a++;b++;break;case3:a++;b++;}printf(a=%d,b=%d\n,a,b);}运行结果:a=2,b=1
本文标题:第5章 选择结构程序设计
链接地址:https://www.777doc.com/doc-3170572 .html