您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > 第04章 选择结构程序设计(培训)
4.1关系运算和逻辑运算4.2if语句和if语句构成的选择结构4.3条件表达式构成的选择结构第四章选择结构程序设计4.4switch语句4.4goto语句4.1.1、C语言的逻辑值关系表达式和逻辑表达式的运算结果会得到一个逻辑值。逻辑值只有两个,分别用“真”和“假”表示,C语言中没有专门的“逻辑值”,在表示逻辑表达式或关系结果是,以数值1代表“真”,0代表“假”,但在判断一个量是否为“真”时,以0代表“假”,以非0(不论正负)代表真。4.1.2、关系运算符和关系表达式关系运算:比较运算,比较两个操作数,看是否满足给定的关系。1、关系运算符(6种):小于,53,35=:小于等于,5=3,3=5,与数学上(≤)不同:大于,53,35=:大于等于,5=3,3=5,与数学上(≥)不同==:等于,5==3,与数学上(=)不同!=:不等于,5!=3,与数学上(≠)不同2、关系表达式和关系表达式的值用关系运算符将表达式连接起来的式子优先级==高低==!=结合方向自左向右表达式的值关系成立,即为真,结果为1;关系不成立,即为假,结果为0;算术运算符高低C语言中,真:非0值,假:0值如:ab,a+bc-d,(a=3)=(b=5),'a'='b',(ab)==(bc)例如,假设num1=3,num2=4,num3=5,则:(1)num1num2的值为?。(2)(num1num2)!=num3的值为?。(3)num1num2num3的值为?。思考题:任意改变num1或num2的值,会影响整个表达式的值吗?为什么?(4)(num1num2)+num3的值为?6.因为num1num2的值=1,1+5=6。再次强调:C语言用整数“1”表示“逻辑真”,用整数“0”表示“逻辑假”。所以,关系表达式的值,还可以参与其它种类的运算,例如算术运算、逻辑运算等。0114.1.3、逻辑运算符和逻辑表达式1、逻辑运算符(3种)!:逻辑非,一元运算符运算规则:取反,!真假,!假真&&:逻辑与。又称逻辑乘。运算规则:两个操作数均为真,结果为真。||:逻辑或。又称逻辑加。运算规则:只要两个操作数有一个为真,结果为真。2、逻辑量或逻辑表达式的值非0值:真0值:假整型实型字符型指针类型00.0\0NULL3、逻辑表达式用逻辑运算符将表达式连接起来的式子。优先级关系运算符高低&&逻辑与算术运算符高低!逻辑非高低高低||逻辑或结合性!:自右向左&&、||:自左向右高低赋值运算符(x=0)&&(x10),(x1)||(x5),!(x==0),例如:1.假设inta=5;floatb=3.5;!a0!b0a&&b1a||b1!a&&!b04、注意在逻辑表达式的求解中,并不是所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。例2-7:a=0;b=1;c=2;d=a++&&b++&&--c;d=(a++)&&(b++)&&(--c);运算结果:d=0,a=1,b=1,c=2(1)a&&b&&c求解方法:只有a为真(非0),才需要判断b的值,只有a和b都为真,才需要判断c的值。只要a为假,就不必判断b和c,运算立即中止。(2)a||b||c求解方法:只要a为真(非0),就不必判断b和c;只有a为假,才判断b;a和b都为假,才判断c。例2-8:a=0;b=1;c=2;d=a++||b++||--c;d=(a++)||(b++)||(--c);运算结果:d=1,a=1,b=2,c=2以下的条件如何使用c语言的逻辑和关系表达式表述:1.0x22.x大于5且不能够被7整除3.y在1到9之间但不能是54.ch不是字符’q’或者’k’x0&&x2x5&&x%7!=0y1&&y9&&y!=5ch!=‘q’||ch!=‘k’思考题:1.判断一个数n是否为奇数或偶数?2.判断一个字母c是否是英文字符?3.判断一个年份是否为闰年?4.判断一个数n是否被数k整除?5.判断三个数是否组成一个三角形?6.判断三个数是否组成一个等腰三角形?(year%4==0)&&(year%100!=0)||(year%400==0)1.设有定义:“inta=2,b=3,c=4;”,则以下选项中值为0的表达式是——(05.09)a.(!a==1)&&(!b==0)b.(ab)&&!c||1c.a&&bd.a||(b+b)&&(c-a)A国家等级考试练习2.有以下程序main(){inta,b,d=25;a=d/10%9;b=a&&(-1)printf(“%d,%d\n”,a,b);}程序运行后的输出结果是:——a.123b.234c.223d.233D4.已定义“charch=“$”;inti=1,j;”,执行“j=!ch&&i++以后,i的值为——5.以下程序运行后的结果是————main(){inta,b,c;a=10;b=20;c=(a%b1)||(a/b1);printf(“%d%d%d\n”,a,b,c);}6.在C语言中,逻辑“真”等价于下面哪一项——a.整数1b.Truec.非0数d.任意常数110200C7.有以下程序:main(){inta=1,b=2,m=0,n=0,k;k=(n=ba)||(m=ab);printf(“%d,%d\n”,k,m);}程序运行后的输出结果是————a.0,0b.0,1c.1,0d.1,1C问题提出:计算分段函数:y=3-xx≤02/xx0解题的步骤:输入xx≤0是y=3-xy=2/x否输出y的值C语言用来设计条件选择结构程序的选择语句有两种:if语句、switch语句。4.2if语句1、单分支选择if语句if语句有三种形式:单分支选择if语句、双分支面具选择if语句、多分支选择if语句。语句形式:if(表达式)语句语句执行流程:表达式语句真(非0)假(0)4.2.1if语句的三种形式例4-1:从键盘输入两个整数a和b,如果a大于b则交换两数,最后输出两个数。#includestdio.h输入a,bab交换a、b输出结束真假voidmain(){inta,b,t;scanf(%d,%d,&a,&b);if(ab){t=a;a=b;b=t;}printf(a=%d,b=%d\n,a,b);}注意:(1)if语句自动结合一个语句,当满足条件需要执行多个语句时,应用一对大括号{}将需要执行的多个语句括起,形成一个复合语句。(2)if语句中表达式形式很灵活,可以是常量、变量、任何类型表达式、函数、指针等。只要表达式的值为非零值,条件就为真,反之条件为假。2、双分支选择if语句语句形式:if(表达式)语句1else语句2语句执行流程:表达式语句1真(非0)假(0)语句2例4-2输入两个整数,输出其中较大的数。#includestdio.h#includemath.hvoidmain(){intx,y,max;scanf(%d,%d,&x,&y);if(xy)max=x;elsemax=y;printf(max=%d\n,max);}输入x,yxymax=x输出最大值结束真假max=y注意if和else语句之间只能有一个语句,当if~else之间的语句不只一句时,应用一对{}将语句括起。if(ab){a++;b++;}else{a=0;b=10;}if(ab)a++;b++;elsea=0;b=10;3、多分支选择if语句语句形式:if(表达式1)语句1elseif(表达式2)语句2……elseif(表达式n)语句nelse语句n+1else子句可以省略语句执行流程:表达式1语句1真(非0)假(0)语句2表达式2真(非0)表达式2语句n语句n+1假(0)假(0)例4-3:计算分段函数。x5x1y2x1x103x10x10假输入xX=1真X10y=3/(x-10)y=2xy=x+5假真#includestdio.hvoidmain(){floatx,y;printf(enterx:);scanf(%f,&x);if(x=1)y=x+5;elseif(x10)y=2*x;elseif(x10)y=3/(x-10);elseprintf(“notdefine\n”);printf(x=%.2f,y=%.2f\n,x,y);}计算分段函数程序语句含义:语句形式:当if语句中又包含若干个if语句时,则构成了if语句嵌套的情形。4.2.2if语句的嵌套if(表达式1)if(表达式2)语句1if(表达式1)if(表达式2)语句1else语句2if(表达式1){if(表达式2)语句1}else语句2if(表达式1)if(表达式2)语句1else语句2else语句3if(表达式1)if(表达式2)语句1else语句2elseif(表达式3)语句3else语句4语句执行流程:else与if的配对原则:就近一致原则:else与同一层最接近它,而又没有其它else语句与之相匹配的if语句配对。真(非0)语句2假(0)表达式2语句1语句4假(0)真(非0)表达式1假(0)真(非0)表达式3语句3建议:对于嵌套的if语句最好使用“{}”扩起来同时采用代码缩进的形式书写国家级等级考试练习:1.设变量x和y均已正确定义并赋值,以下的if语句中,在编译时将产生错误信息的是——a.if(x++);b.if(xy&&y!=0);c.if(xy)x--d.if(y0){;}elsey++;elsex++;2.在嵌套使用if语句时,C语言规定else总是———a.和之前与具有相同缩进位置的if配对b.和之前与其最近的if配对c.和之前与其最近的且不带else的if配对d.和之前的第一个if配对CC3.有以下程序程序:main(){inta=0,b=0,c=0,d=0;if(a=1)b=1;c=2;elsed=3;printf(“%d,%d,%d,%d\n”,a,b,c,d);}程序输出的结果是——a.0,1,2,0b.0,0,0,3c.1,1,2,0d.编译有错D4.设有变量a、b、c、d和y都已正确并赋值,若有以下if语句:if(ab)if(c==d)y=0;elsey=1;该语句所表示的含义是——a.y=0ab且c=d1a=bb.y=0ab且c=d1a=b且c!=dc.y=0ab且c=d1ab且c!=dd.y=0ab且c=d1c!=dC5.有以下程序运行后的输出结果是————main(){inta=3,b=4,c=5,t=99;if(ba&&ac)t=a;a=c;c=t;if(ac&&bc)t=b;b=a;a=t;printf(“%d%d%d\n”,a,b,c);}45996.有以下程序main(){inta=3,b=4,c=5,d=2;if(ab)if(bc)printf(“%d”,d+++1);elseprintf(“%d”,++d+1);printf(“%d\n”,d);}程序运行后的结果是————a.2b.3c.43d.44A4.3、条件运算符与条件表达式有两个符号:?、:,它与三个操作数组成三元运算。一般形式:表达式1?表达式2:表达式3求值规则和表达式的值:求解表达式1真(非0)求解表达式2假(0)求解表达式3表达式的值优先级:算术关系逻辑条件赋值结合性:自右至左例:intmax,a=5;b=3;max=ab?a:b--a==b++?a++:b++y=x10?x/10:x0?x:-x;1.有以下计算公式y=xx(x=0)(x0)若程序前面已在命令行中包括math.h文件,不能够正确计算上述公式的程序是——a.if(x=0)y=sqrt(x);b.y=sqrt(x);elsey=sqrt(-x);if(x0)y=sqrt(-x)c.if(x=0)y=sqrt(x);y=sqrt(x=0?x:-x);if(x0)y=sqrt(-x);国家
本文标题:第04章 选择结构程序设计(培训)
链接地址:https://www.777doc.com/doc-984271 .html