第04章 选择结构程序设计(培训)课件_第1页
第04章 选择结构程序设计(培训)课件_第2页
第04章 选择结构程序设计(培训)课件_第3页
第04章 选择结构程序设计(培训)课件_第4页
第04章 选择结构程序设计(培训)课件_第5页
已阅读5页,还剩121页未读 继续免费阅读

下载本文档

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

文档简介

4.1关系运算和逻辑运算4.2

if语句和if语句构成的选择结构4.3条件表达式构成的选择结构第四章选择结构程序设计

4.4switch语句

4.4goto语句4.1关系运算和逻辑运算4.2if语句和if语句构成的选择14.1.1、C语言的逻辑值关系表达式和逻辑表达式的运算结果会得到一个逻辑值。逻辑值只有两个,分别用“真”和“假”表示,C语言中没有专门的“逻辑值”,在表示逻辑表达式或关系结果是,以数值1代表“真”,0代表“假”,但在判断一个量是否为“真”时,以0代表“假”,以非0(不论正负)代表真。4.1.1、C语言的逻辑值关系表达式和逻辑表达式的运算结24.1.2、关系运算符和关系表达式关系运算:比较运算,比较两个操作数,看是否满足给定的关系。1、关系运算符(6种)<:小于,5<3,3<5<=:小于等于,5<=3,3<=5,与数学上(≤)不同>:大于,5>3,3>5>=:大于等于,5>=3,3>=5,与数学上(≥)不同==:等于,5==3,与数学上(=)不同!=:不等于,5!=3,与数学上(≠)不同4.1.2、关系运算符和关系表达式关系运算:比较运算,比较两32、关系表达式和关系表达式的值用关系运算符将表达式连接起来的式子优先级<<=>>=高低==!=结合方向自左向右表达式的值关系成立,即为真,结果为1;关系不成立,即为假,结果为0;算术运算符高低C语言中,真:非0值,假:0值如:a>b,a+b>c-d,(a=3)<=(b=5),'a'>='b',(a>b)==(b>c)2、关系表达式和关系表达式的值用关系运算符将表达式连接起来的4例如,假设num1=3,num2=4,num3=5,则:(1)num1>num2的值为?。(2)(num1>num2)!=num3的值为?。(3)num1<num2<num3的值为?。思考题:任意改变num1或num2的值,会影响整个表达式的值吗?为什么?(4)(num1<num2)+num3的值为?

6.因为num1<num2的值=1,1+5=6。

再次强调:C语言用整数“1”表示“逻辑真”,用整数“0”表示“逻辑假”。所以,关系表达式的值,还可以参与其它种类的运算,例如算术运算、逻辑运算等。011例如,假设num1=3,num2=4,num3=5,则:0154.1.3、逻辑运算符和逻辑表达式1、逻辑运算符(3种)!:逻辑非,一元运算符运算规则:取反,!真假,!假真&&:逻辑与。又称逻辑乘。运算规则:两个操作数均为真,结果为真。||:逻辑或。又称逻辑加。运算规则:只要两个操作数有一个为真,结果为真。4.1.3、逻辑运算符和逻辑表达式1、逻辑运算符(3种)!:62、逻辑量或逻辑表达式的值非0值:真0值:假整型实型字符型指针类型00.0\0NULL2、逻辑量或逻辑表达式的值非0值:真0值:假整型073、逻辑表达式用逻辑运算符将表达式连接起来的式子。优先级关系运算符高低&&逻辑与算术运算符高低!逻辑非高低高低||逻辑或结合性!:自右向左&&、||:自左向右高低赋值运算符(x>=0)&&(x<10),(x<1)||(x>5),!(x==0),3、逻辑表达式用逻辑运算符将表达式连接起来的式子。优先级关系8例如:1.假设inta=5;floatb=3.5;!a0!b0a&&b1a||b1

!a&&!b0例如:1.假设inta=5;floatb=3.5;94、注意在逻辑表达式的求解中,并不是所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。4、注意在逻辑表达式的求解中,并不是所有的逻辑运算符都被执行10例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-7:a=0;b=1;c=2;d=a++&&b++11(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(2)a||b||c求解方法:只要a为真(非0),就12以下的条件如何使用c语言的逻辑和关系表达式表述:1.0<x<22.x大于5且不能够被7整除3.y在1到9之间但不能是54.ch不是字符’q’或者’k’x>0&&x<2x>5&&x%7!=0y>1&&y<9&&y!=5ch!=‘q’||ch!=‘k’以下的条件如何使用c语言的逻辑和关系表达式表述:1.0<x<13思考题:判断一个数n是否为奇数或偶数?判断一个字母c是否是英文字符?判断一个年份是否为闰年?判断一个数n是否被数k整除?判断三个数是否组成一个三角形?判断三个数是否组成一个等腰三角形?(year%4==0)&&(year%100!=0)||(year%400==0)

思考题:(year%4==0)&&(year%100!=0)141.设有定义:“inta=2,b=3,c=4;”,则以下选项中值为0的表达式是——(05.09)a.(!a==1)&&(!b==0)b.(a>b)&&!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.233D1.设有定义:“inta=2,b=3,c=4;”,则以下选154.已定义“charch=“$”;inti=1,j;”,执行“j=!ch&&i++以后,i的值为——5.以下程序运行后的结果是————main(){inta,b,c;a=10;b=20;c=(a%b<1)||(a/b>1);printf(“%d%d%d\n”,a,b,c);}6.在C语言中,逻辑“真”等价于下面哪一项——a.整数1b.Truec.非0数d.任意常数110200C4.已定义“charch=“$”;inti=1,j;”,167.有以下程序:main(){inta=1,b=2,m=0,n=0,k;k=(n=b>a)||(m=a<b);printf(“%d,%d\n”,k,m);}程序运行后的输出结果是————a.0,0b.0,1c.1,0d.1,1C7.有以下程序:C17问题提出:计算分段函数:

y=3-xx≤02/xx>0解题的步骤:输入xx≤0是

y=3-xy=2/x否

输出y的值

C语言用来设计条件选择结构程序的选择语句有两种:if语句、switch语句。问题提出:计算分段函数:y=3-xx≤02/x184.2if语句

1、单分支选择if语句if语句有三种形式:单分支选择if语句、双分支面具选择if语句、多分支选择if语句。

语句形式:

if(表达式)语句

语句执行流程:

表达式语句真(非0)假(0)4.2.1if语句的三种形式4.2if语句1、单分支选择if语句if语句有三种形式19例4-1:从键盘输入两个整数a和b,如果a大于b则交换两数,最后输出两个数。#include<stdio.h>输入a,ba>b交换a、b输出结束真假

voidmain(){inta,b,t;scanf("%d,%d",&a,&b);

if(a>b){t=a;a=b;b=t;}

printf("a=%d,b=%d\n",a,b);

}例4-1:从键盘输入两个整数a和b,如果a大于b则交换两数,20注意:(1)if语句自动结合一个语句,当满足条件需要执行多个语句时,应用一对大括号{}将需要执行的多个语句括起,形成一个复合语句。(2)if语句中表达式形式很灵活,可以是常量、变量、任何类型表达式、函数、指针等。只要表达式的值为非零值,条件就为真,反之条件为假。注意:(1)if语句自动结合一个语句,当满足条件需要执行多212、双分支选择if语句语句形式:if(表达式)语句1else语句2语句执行流程:

表达式语句1真(非0)假(0)语句22、双分支选择if语句语句形式:if(表达式)语句122例4-2输入两个整数,输出其中较大的数。#include<stdio.h>#include<math.h>

voidmain(){intx,y,max;scanf("%d,%d",&x,&y);

if(x>y)max=x;elsemax=y;

printf("max=%d\n",max);}输入x,yx>ymax=x输出最大值结束真假max=y例4-2输入两个整数,输出其中较大的数。#include23注意if和else语句之间只能有一个语句,当if~else之间的语句不只一句时,应用一对{}将语句括起。if(a>b){a++;b++;}else{a=0;b=10;}

if(a>b)a++;b++;elsea=0;b=10;注意if和else语句之间只能有一个语句,当if~else之243、多分支选择if语句语句形式:if(表达式1)语句1else

if(表达式2)语句2……else

if(表达式n)语句nelse

语句n+1else子句可以省略3、多分支选择if语句语句形式:if(表达式1)语句25语句执行流程:

表达式1语句1真(非0)假(0)语句2表达式2真(非0)表达式2语句n语句n+1假(0)假(0)语句执行流程:表达式1语句1真(非0)假(0)语句2表达式26例4-3:计算分段函数。假输入xX<=1真X<10y=3/(x-10)y=2xy=x+5假真例4-3:计算分段函数。假输入xX<=1真X<10y=3/(27#include<stdio.h>

voidmain(){floatx,y;printf("enterx:");scanf("%f",&x);if(x<=1)y=x+5;elseif(x<10)y=2*x;elseif(x>10) y=3/(x-10);elseprintf(“notdefine\n”);

printf("x=%.2f,y=%.2f\n",x,y);

}计算分段函数程序#include<stdio.h>voidmain()28语句含义:语句形式:

当if语句中又包含若干个if语句时,则构成了if语句嵌套的情形。4.2.2if语句的嵌套if(表达式1)

if(表达式2)语句1语句含义:语句形式:当if语句中又包含若干个if语句时,则29if(表达式1)

if(表达式2)语句1

else

语句2if(表达式1)

{if(表达式2)语句1}

else

语句2if(表达式1)

if(表达式2)语句1

else

语句2else

语句3if(表达式1)

if(表达式2)语句1

else

语句2elseif(表达式3)语句3else

语句4if(表达式1)if(表达式1)if(表达式1)30

语句执行流程:

else与if的配对原则:

就近一致原则:

else与同一层最接近它,而又没有其它else语句与之相匹配的if语句配对。真(非0)语句2假(0)表达式2语句1语句4假(0)真(非0)表达式1假(0)真(非0)表达式3语句3建议:对于嵌套的if语句最好使用“{}”扩起来同时采用代码缩进的形式书写语句执行流程:else与if的配对原则:就近一致原则:31国家级等级考试练习:1.设变量x和y均已正确定义并赋值,以下的if语句中,在编译时将产生错误信息的是——a.if(x++);b.if(x>y&&y!=0);c.if(x>y)x--d.if(y<0){;}elsey++;elsex++;2.在嵌套使用if语句时,C语言规定else总是———a.和之前与具有相同缩进位置的if配对b.和之前与其最近的if配对c.和之前与其最近的且不带else的if配对d.和之前的第一个if配对CC国家级等级考试练习:1.设变量x和y均已正确定义并赋值,以下323.有以下程序程序: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.编译有错D3.有以下程序程序:D334.设有变量a、b、c、d和y都已正确并赋值,若有以下if语句:if(a<b)if(c==d)y=0;elsey=1;该语句所表示的含义是——a.y=0a<b且c=d1a>=bb.y=0a<b且c=d1a>=b且c!=dc.y=0a<b且c=d1a<b且c!=dd.y=0a<b且c=d1c!=dC4.设有变量a、b、c、d和y都已正确并赋值,若有以下ifa345.有以下程序运行后的输出结果是————main(){inta=3,b=4,c=5,t=99;if(b<a&&a<c)t=a;a=c;c=t;if(a<c&&b<c)t=b;b=a;a=t;printf(“%d%d%d\n”,a,b,c);}45995.有以下程序运行后的输出结果是————4599356.有以下程序main(){inta=3,b=4,c=5,d=2;if(a>b)if(b>c)printf(“%d”,d+++1);elseprintf(“%d”,++d+1);printf(“%d\n”,d);}程序运行后的结果是————a.2b.3c.43d.44A6.有以下程序A364.3、条件运算符与条件表达式有两个符号:?、:,它与三个操作数组成三元运算。一般形式:<表达式1>?<表达式2>:<表达式3>求值规则和表达式的值:求解表达式1真(非0)求解表达式2假(0)求解表达式3表达式的值4.3、条件运算符与条件表达式有两个符号:?、:,它与三个操37优先级:算术>关系>逻辑>条件>赋值结合性:自右至左例:intmax,a=5;b=3;max=a>b?a:b--a==b++?a++:b++y=x>10?x/10:x>0?x:-x;优先级:算术>关系>逻辑>条件>赋值结合性:381.有以下计算公式y=(x>=0)(x<0)若程序前面已在命令行中包括math.h文件,不能够正确计算上述公式的程序是——a.if(x>=0)y=sqrt(x);b.y=sqrt(x);elsey=sqrt(-x);if(x<0)y=sqrt(-x)c.if(x>=0)y=sqrt(x);y=sqrt(x>=0?x:-x);if(x<0)y=sqrt(-x);国家等级考试练习B1.有以下计算公式y=(x>=0)(x<0)若程序前面已392.若有定义“intx,y;”,并已正确给变量赋值,则以下选项与表达式“(x-y)?(x++):(y++)”中的条表达式(x-y)等价的是——a.(x-y>0)b.(x-y<0)c.(x-y<0||x-y>0)d.x-y==0C3.设有条件表达式“(EXP)?i++:j++”,则以下表达式中与“(EXP)”完全等价的是_____a.(EXP==0)b.(EXP!=0)c.(EXP==1)d.(EXP!=1)B4.有以下程序段:intk=0,a=1,b=2,c=3;k=a<b?b:a;k=k>c?c:k;执行该程序后,k的值是————a.3b.2c.1d.0B2.若有定义“intx,y;”,并已正确给变量赋值,则以下405.若整型变量a,b,c,d中的值依次为1,4,3,2,则条件表达式a<b?a:c<d?c:d的值是————a.1b.2c.3d.4A6.以下程序的输出结果是————main(){inta=5,b=4,c=6,d;printf(“%d\n”,d=a>b?(a>c?a:c):(b);}a.5b.4c.6d.不确定C5.若整型变量a,b,c,d中的值依次为1,4,3,2,则条41形式:逗号表达式1,逗号表达式2,…,逗号表达式n求值规则:从左至右依次计算各表达式的值优先级所有运算符里最低结合性:自左至右表达式的值最后一个表达式的值。逗号运算符与逗号表达式形式:逗号表达式1,逗号表达式2,…,逗号表达式n求值规则42例:

aby

逗号表达式

y=a=4,b=5,a+b;4549y=(a=4,b=5,a+b);4599y=(a=4,b=5),a+b;4559y=a=(4,b=5),a+b;55510例: aby逗号表达式434.4switch语句1、语句形式:switch(表达式){ case常量表达式1:语句1;

case常量表达式2:语句2;

case常量表达式3:语句3;.......

case常量表达式n:语句n;default:语句n+1;}根据表达式的不同值,选择不同的程序分支,又称开关语句。数值型或字符型常量表达式的值必须互不相同,否则执行时将出现矛盾,即同一个开关值,将对应多种执行方案。千万不能接(;)号4.4switch语句1、语句形式:switch442、语句执行流程:指语句的最后一条是否为break简单语句或复合语句breakbreak有无break有无有计算表达式常量1常量2常量n=语句1…===语句2语句n其它=语句n+1无值case语句出现的次序并不影响执行结果。2、语句执行流程:指语句的最后一条是否为break简单语句或45例4-4:假设用0、1、2......6分别表示星期日、星期一......星期六。现输入一个数字,输出对应的星期几的英文单词。如果输入3,输出“Wednesday”。#include"stdio.h"voidmain(){intn;scanf("%d",&n);switch(n){case0:printf("Sunday\n");case1:printf("Monday\n");case2:printf("Tuesday\n");case3:printf("Wednesday\n");case4:printf("Thursday\n");case5:printf("Friday\n");case6:printf("Saturday\n");default:printf("Error");}}程序运行情况如下:3↙WednesdayThursdayFridaySaturdayerror例4-4:假设用0、1、2......6分别表示星期日、星期46在“switch”语句中,“case常量表达式”只相当于一个语句标号,表达式的值和某标号相等则转向该标号执行,但不能在执行完该标号的语句后自动跳出整个switch语句,因此会继续执行所有后面语句的情况。为此,C语言提供了一种break语句,其功能是可以跳出它所在的switch语句。在“switch”语句中,“case常量表达式”只相当于一47将上面的例4-4修改如下:#include"stdio.h"voidmain(){intn;scanf("%d",&n);switch(n){case0:printf("Sunday\n");break;case1:printf("Monday\n");break;case2:printf("Tuesday\n");break;case3:printf("Wednesday\n");break;case4:printf("Thursday\n");break;case5:printf("Friday\n");break;case6:printf("Saturday\n");break;default:printf("Error");}}程序运行情况如下:3↙Wednesday将上面的例4-4修改如下:#include"stdio.h483、说明多个case语句可以共用一组执行语句。switch(grade){case10:case9:case8:printf(“A");break;default:printf(“B");}各case和default子句的先后顺序可以变动,而不会影响程序执行结果。3、说明多个case语句可以共用一组执行语句。switch49default语句可以省略不用。case和default与其后面的常量表达式间至少有一个空格。switch语句可以嵌套,break语句只跳出它所在的switch语句。default语句可以省略不用。case和default与其50例4-5企业发放的奖金根据利润提成。从键盘输入当月利润,求应发放奖金总数?例4-5企业发放的奖金根据利润提成。从键盘输入当月利润,51利润xx<=1010<x≤2020<x≤4040<x≤60 60<x≤100 100<x

(int)x/10

常量0,11,22,3,44,5,66,7,8,9,1010以上用这种方法转换后,n出现了在不同区域有重复数字的情况。解决的方法有很多,其中一种是可以采用当x为10的整数倍时,将计算出的n值减1。使用switch解题的关键,通过分析找到表达式,将问题分成几种情况。利润x(int)x/10常量用这种方法转换后,n出现了在52#include"stdio.h"voidmain(){doublex,y;intn;scanf("%lf",&x);n=(int)x/10;if((int)x/10==x/10)n--;switch(n){case0:y=x*0.1;break;case1:y=x*0.12;break;case2:case3:y=x*0.14;break;case4:case5:y=x*0.16;break;case6:case7:case8:case9:y=x*0.18;break;default:y=x*0.2;}printf("y=%.2lf\n",y);}

程序如下:#include"stdio.h"程序如下:53国家等级考试练习1.以下叙述中正确的是————a.break语句只能用于switch语句b.在switch语句中必须使用defaultc.break语句必须与switch语句中的case配对d.在switch语句中,不一定使用break语句D2.若有定义:“floatx=1.5;inta=1,b=3,c=2;”则正确的switch语句是————a.switch(x)c.switch(a+b){case1.0:printf(“*\n”);{case1:printf(“*\n”);case2.0:printf(“**\n”);}case2+1:printf(“**\n”);}b.switch((int)x);d.switch(a+b){case1:printf(“*\n”);{case1:printf(“*\n”);case2:printf(“**\n”);}casec:printf(“**\n”);}C国家等级考试练习1.以下叙述中正确的是————D2.若有定义543.有以下程序的运行结果是——main(){inta=2,b=7,c=5;switch(a>0){case1:switch(b<0){case1:printf(“@”);break;case2:printf(“!”);break;}case0:switch(c==5){case0:printf(“*”);break;case1:printf(“#”);break;case2:printf(“$”);break;}default:printf(“&”);}printf(“\n”);}#&3.有以下程序的运行结果是——#&554.5语句标号和goto语句1.语句标号标号可以是任意的合法的标识符,当在标识符后面加一个冒号,如:flag1:stop0:,该标识符就成了一个语句标号。2.goto语句goto语句称为无条件转向语句,一般形式如下:goto语句标号;作用:把程序的执行流程转向语句标号所在的位置,这个语句标号必须与此goto语句同在一个函数之内。例如:

i=1;sum:i=i+1;if(i<5)gotosum;printf(“%d”,i);4.5语句标号和goto语句1.语句标号56选择结构程序设计举例

例4-7将任意三个整数按从大到小的顺序输出。#include"stdio.h"voidmain(){intx,y,z,t;scanf("%d,%d,%d",&x,&y,&z);if(x<y){t=x;x=y;y=t;}/*交换x,y的值*/if(x<z){t=x;x=z;z=t;}/*交换x,z的值*/if(y<z){t=y;y=z;z=t;}/*交换y,z的值*/printf("%d,%d,%d\n",x,y,z);}选择结构程序设计举例例4-7将任意三个整数按从大到小的57例4-8给一个不多于4位的正整数,求出它是几位数,逆序打印出各位数字。#include"stdio.h"voidmain(){intx,a,b,c,d;/*a,b,c,d代表千位、百位、十位、个位*/scanf("%d",&x);a=x/1000;b=x%1000/100;c=x%100/10;d=x%10;/*分解出千位、百位、十位、个位*/if(a!=0)printf("4:%d%d%d%d\n",d,c,b,a);elseif(b!=0)printf("3:%d%d%d\n",d,c,b);elseif(c!=0)printf("2:%d%d\n",d,c);elseif(d!=0)printf("1:%d\n",d);}例4-8给一个不多于4位的正整数,求出它是几位数,逆序打58例4-9任意输入三个数,判断能否构成三角形?若能构成三角形,是等边三角形、等腰三角形还是其它三角形?#include"stdio.h"voidmain(){floata,b,c;scanf("%f,%f,%f",&a,&b,&c);if(a+b>c&&a+c>b&&b+c>a){if(a==b&&b==c)printf("equalateraltriangle.\n");elseif(a==b||a==c||b==c)printf("isoscelestriangle.\n");elseprintf("othertriangle.\n");}elseprintf("cannot\n");}例4-9任意输入三个数,判断能否构成三角形?若能构成三角形59例4-10从键盘输入一个年份,判断是否是闰年。#include"stdio.h"voidmain(){intyear;scanf("%d",&year);if(year%400==0||(year%4==0&&year%100!=0))printf("%disaleapyear\n",year);elseprintf("%disnotaleapyear\n",year);}例4-10从键盘输入一个年份,判断是否是闰年。#inclu601.main(){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课堂练习1.main()结果:课堂练习612.程序填空:以下程序判断输入的整数能否被3或7整除.main(){intx,f=0;scanf(“%d”,&x);if(1)(2)

if(f==1)printf(“YES\n”);elseprintf(“NO\n”);}2.程序填空:以下程序判断输入的整数能否被3或7整除.62演讲完毕,谢谢观看!演讲完毕,谢谢观看!634.1关系运算和逻辑运算4.2

if语句和if语句构成的选择结构4.3条件表达式构成的选择结构第四章选择结构程序设计

4.4switch语句

4.4goto语句4.1关系运算和逻辑运算4.2if语句和if语句构成的选择644.1.1、C语言的逻辑值关系表达式和逻辑表达式的运算结果会得到一个逻辑值。逻辑值只有两个,分别用“真”和“假”表示,C语言中没有专门的“逻辑值”,在表示逻辑表达式或关系结果是,以数值1代表“真”,0代表“假”,但在判断一个量是否为“真”时,以0代表“假”,以非0(不论正负)代表真。4.1.1、C语言的逻辑值关系表达式和逻辑表达式的运算结654.1.2、关系运算符和关系表达式关系运算:比较运算,比较两个操作数,看是否满足给定的关系。1、关系运算符(6种)<:小于,5<3,3<5<=:小于等于,5<=3,3<=5,与数学上(≤)不同>:大于,5>3,3>5>=:大于等于,5>=3,3>=5,与数学上(≥)不同==:等于,5==3,与数学上(=)不同!=:不等于,5!=3,与数学上(≠)不同4.1.2、关系运算符和关系表达式关系运算:比较运算,比较两662、关系表达式和关系表达式的值用关系运算符将表达式连接起来的式子优先级<<=>>=高低==!=结合方向自左向右表达式的值关系成立,即为真,结果为1;关系不成立,即为假,结果为0;算术运算符高低C语言中,真:非0值,假:0值如:a>b,a+b>c-d,(a=3)<=(b=5),'a'>='b',(a>b)==(b>c)2、关系表达式和关系表达式的值用关系运算符将表达式连接起来的67例如,假设num1=3,num2=4,num3=5,则:(1)num1>num2的值为?。(2)(num1>num2)!=num3的值为?。(3)num1<num2<num3的值为?。思考题:任意改变num1或num2的值,会影响整个表达式的值吗?为什么?(4)(num1<num2)+num3的值为?

6.因为num1<num2的值=1,1+5=6。

再次强调:C语言用整数“1”表示“逻辑真”,用整数“0”表示“逻辑假”。所以,关系表达式的值,还可以参与其它种类的运算,例如算术运算、逻辑运算等。011例如,假设num1=3,num2=4,num3=5,则:01684.1.3、逻辑运算符和逻辑表达式1、逻辑运算符(3种)!:逻辑非,一元运算符运算规则:取反,!真假,!假真&&:逻辑与。又称逻辑乘。运算规则:两个操作数均为真,结果为真。||:逻辑或。又称逻辑加。运算规则:只要两个操作数有一个为真,结果为真。4.1.3、逻辑运算符和逻辑表达式1、逻辑运算符(3种)!:692、逻辑量或逻辑表达式的值非0值:真0值:假整型实型字符型指针类型00.0\0NULL2、逻辑量或逻辑表达式的值非0值:真0值:假整型0703、逻辑表达式用逻辑运算符将表达式连接起来的式子。优先级关系运算符高低&&逻辑与算术运算符高低!逻辑非高低高低||逻辑或结合性!:自右向左&&、||:自左向右高低赋值运算符(x>=0)&&(x<10),(x<1)||(x>5),!(x==0),3、逻辑表达式用逻辑运算符将表达式连接起来的式子。优先级关系71例如:1.假设inta=5;floatb=3.5;!a0!b0a&&b1a||b1

!a&&!b0例如:1.假设inta=5;floatb=3.5;724、注意在逻辑表达式的求解中,并不是所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。4、注意在逻辑表达式的求解中,并不是所有的逻辑运算符都被执行73例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-7:a=0;b=1;c=2;d=a++&&b++74(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(2)a||b||c求解方法:只要a为真(非0),就75以下的条件如何使用c语言的逻辑和关系表达式表述:1.0<x<22.x大于5且不能够被7整除3.y在1到9之间但不能是54.ch不是字符’q’或者’k’x>0&&x<2x>5&&x%7!=0y>1&&y<9&&y!=5ch!=‘q’||ch!=‘k’以下的条件如何使用c语言的逻辑和关系表达式表述:1.0<x<76思考题:判断一个数n是否为奇数或偶数?判断一个字母c是否是英文字符?判断一个年份是否为闰年?判断一个数n是否被数k整除?判断三个数是否组成一个三角形?判断三个数是否组成一个等腰三角形?(year%4==0)&&(year%100!=0)||(year%400==0)

思考题:(year%4==0)&&(year%100!=0)771.设有定义:“inta=2,b=3,c=4;”,则以下选项中值为0的表达式是——(05.09)a.(!a==1)&&(!b==0)b.(a>b)&&!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.233D1.设有定义:“inta=2,b=3,c=4;”,则以下选784.已定义“charch=“$”;inti=1,j;”,执行“j=!ch&&i++以后,i的值为——5.以下程序运行后的结果是————main(){inta,b,c;a=10;b=20;c=(a%b<1)||(a/b>1);printf(“%d%d%d\n”,a,b,c);}6.在C语言中,逻辑“真”等价于下面哪一项——a.整数1b.Truec.非0数d.任意常数110200C4.已定义“charch=“$”;inti=1,j;”,797.有以下程序:main(){inta=1,b=2,m=0,n=0,k;k=(n=b>a)||(m=a<b);printf(“%d,%d\n”,k,m);}程序运行后的输出结果是————a.0,0b.0,1c.1,0d.1,1C7.有以下程序:C80问题提出:计算分段函数:

y=3-xx≤02/xx>0解题的步骤:输入xx≤0是

y=3-xy=2/x否

输出y的值

C语言用来设计条件选择结构程序的选择语句有两种:if语句、switch语句。问题提出:计算分段函数:y=3-xx≤02/x814.2if语句

1、单分支选择if语句if语句有三种形式:单分支选择if语句、双分支面具选择if语句、多分支选择if语句。

语句形式:

if(表达式)语句

语句执行流程:

表达式语句真(非0)假(0)4.2.1if语句的三种形式4.2if语句1、单分支选择if语句if语句有三种形式82例4-1:从键盘输入两个整数a和b,如果a大于b则交换两数,最后输出两个数。#include<stdio.h>输入a,ba>b交换a、b输出结束真假

voidmain(){inta,b,t;scanf("%d,%d",&a,&b);

if(a>b){t=a;a=b;b=t;}

printf("a=%d,b=%d\n",a,b);

}例4-1:从键盘输入两个整数a和b,如果a大于b则交换两数,83注意:(1)if语句自动结合一个语句,当满足条件需要执行多个语句时,应用一对大括号{}将需要执行的多个语句括起,形成一个复合语句。(2)if语句中表达式形式很灵活,可以是常量、变量、任何类型表达式、函数、指针等。只要表达式的值为非零值,条件就为真,反之条件为假。注意:(1)if语句自动结合一个语句,当满足条件需要执行多842、双分支选择if语句语句形式:if(表达式)语句1else语句2语句执行流程:

表达式语句1真(非0)假(0)语句22、双分支选择if语句语句形式:if(表达式)语句185例4-2输入两个整数,输出其中较大的数。#include<stdio.h>#include<math.h>

voidmain(){intx,y,max;scanf("%d,%d",&x,&y);

if(x>y)max=x;elsemax=y;

printf("max=%d\n",max);}输入x,yx>ymax=x输出最大值结束真假max=y例4-2输入两个整数,输出其中较大的数。#include86注意if和else语句之间只能有一个语句,当if~else之间的语句不只一句时,应用一对{}将语句括起。if(a>b){a++;b++;}else{a=0;b=10;}

if(a>b)a++;b++;elsea=0;b=10;注意if和else语句之间只能有一个语句,当if~else之873、多分支选择if语句语句形式:if(表达式1)语句1else

if(表达式2)语句2……else

if(表达式n)语句nelse

语句n+1else子句可以省略3、多分支选择if语句语句形式:if(表达式1)语句88语句执行流程:

表达式1语句1真(非0)假(0)语句2表达式2真(非0)表达式2语句n语句n+1假(0)假(0)语句执行流程:表达式1语句1真(非0)假(0)语句2表达式89例4-3:计算分段函数。假输入xX<=1真X<10y=3/(x-10)y=2xy=x+5假真例4-3:计算分段函数。假输入xX<=1真X<10y=3/(90#include<stdio.h>

voidmain(){floatx,y;printf("enterx:");scanf("%f",&x);if(x<=1)y=x+5;elseif(x<10)y=2*x;elseif(x>10) y=3/(x-10);elseprintf(“notdefine\n”);

printf("x=%.2f,y=%.2f\n",x,y);

}计算分段函数程序#include<stdio.h>voidmain()91语句含义:语句形式:

当if语句中又包含若干个if语句时,则构成了if语句嵌套的情形。4.2.2if语句的嵌套if(表达式1)

if(表达式2)语句1语句含义:语句形式:当if语句中又包含若干个if语句时,则92if(表达式1)

if(表达式2)语句1

else

语句2if(表达式1)

{if(表达式2)语句1}

else

语句2if(表达式1)

if(表达式2)语句1

else

语句2else

语句3if(表达式1)

if(表达式2)语句1

else

语句2elseif(表达式3)语句3else

语句4if(表达式1)if(表达式1)if(表达式1)93

语句执行流程:

else与if的配对原则:

就近一致原则:

else与同一层最接近它,而又没有其它else语句与之相匹配的if语句配对。真(非0)语句2假(0)表达式2语句1语句4假(0)真(非0)表达式1假(0)真(非0)表达式3语句3建议:对于嵌套的if语句最好使用“{}”扩起来同时采用代码缩进的形式书写语句执行流程:else与if的配对原则:就近一致原则:94国家级等级考试练习:1.设变量x和y均已正确定义并赋值,以下的if语句中,在编译时将产生错误信息的是——a.if(x++);b.if(x>y&&y!=0);c.if(x>y)x--d.if(y<0){;}elsey++;elsex++;2.在嵌套使用if语句时,C语言规定else总是———a.和之前与具有相同缩进位置的if配对b.和之前与其最近的if配对c.和之前与其最近的且不带else的if配对d.和之前的第一个if配对CC国家级等级考试练习:1.设变量x和y均已正确定义并赋值,以下953.有以下程序程序: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.编译有错D3.有以下程序程序:D964.设有变量a、b、c、d和y都已正确并赋值,若有以下if语句:if(a<b)if(c==d)y=0;elsey=1;该语句所表示的含义是——a.y=0a<b且c=d1a>=bb.y=0a<b且c=d1a>=b且c!=dc.y=0a<b且c=d1a<b且c!=dd.y=0a<b且c=d1c!=dC4.设有变量a、b、c、d和y都已正确并赋值,若有以下ifa975.有以下程序运行后的输出结果是————main(){inta=3,b=4,c=5,t=99;if(b<a&&a<c)t=a;a=c;c=t;if(a<c&&b<c)t=b;b=a;a=t;printf(“%d%d%d\n”,a,b,c);}45995.有以下程序运行后的输出结果是————4599986.有以下程序main(){inta=3,b=4,c=5,d=2;if(a>b)if(b>c)printf(“%d”,d+++1);elseprintf(“%d”,++d+1);printf(“%d\n”,d);}程序运行后的结果是————a.2b.3c.43d.44A6.有以下程序A994.3、条件运算符与条件表达式有两个符号:?、:,它与三个操作数组成三元运算。一般形式:<表达式1>?<表达式2>:<表达式3>求值规则和表达式的值:求解表达式1真(非0)求解表达式2假(0)求解表达式3表达式的值4.3、条件运算符与条件表达式有两个符号:?、:,它与三个操100优先级:算术>关系>逻辑>条件>赋值结合性:自右至左例:intmax,a=5;b=3;max=a>b?a:b--a==b++?a++:b++y=x>10?x/10:x>0?x:-x;优先级:算术>关系>逻辑>条件>赋值结合性:1011.有以下计算公式y=(x>=0)(x<0)若程序前面已在命令行中包括math.h文件,不能够正确计算上述公式的程序是——a.if(x>=0)y=sqrt(x);b.y=sqrt(x);elsey=sqrt(-x);if(x<0)y=sqrt(-x)c.if(x>=0)y=sqrt(x);y=sqrt(x>=0?x:-x);if(x<0)y=sqrt(-x);国家等级考试练习B1.有以下计算公式y=(x>=0)(x<0)若程序前面已1022.若有定义“intx,y;”,并已正确给变量赋值,则以下选项与表达式“(x-y)?(x++):(y++)”中的条表达式(x-y)等价的是——a.(x-y>0)b.(x-y<0)c.(x-y<0||x-y>0)d.x-y==0C3.设有条件表达式“(EXP)?i++:j++”,则以下表达式中与“(EXP)”完全等价的是_____a.(EXP==0)b.(EXP!=0)c.(EXP==1)d.(EXP!=1)B4.有以下程序段:intk=0,a=1,b=2,c=3;k=a<b?b:a;k=k>c?c:k;执行该程序后,k的值是————a.3b.2c.1d.0B2.若有定义“intx,y;”,并已正确给变量赋值,则以下1035.若整型变量a,b,c,d中的值依次为1,4,3,2,则条件表达式a<b?a:c<d?c:d的值是————a.1b.2c.3d.4A6.以下程序的输出结果是————main(){inta=5,b=4,c=6,d;printf(“%d\n”,d=a>b?(a>c?a:c):(b);}a.5b.4c.6d.不确定C5.若整型变量a,b,c,d中的值依次为1,4,3,2,则条104形式:逗号表达式1,逗号表达式2,…,逗号表达式n求值规则:从左至右依次计算各表达式的值优先级所有运算符里最低结合性:自左至右表达式的值最后一个表达式的值。逗号运算符与逗号表达式形式:逗号表达式1,逗号表达式2,…,逗号表达式n求值规则105例:

aby

逗号表达式

y=a=4,b=5,a+b;4549y=(a=4,b=5,a+b);4599y=(a=4,b=5),a+b;4559y=a=(4,b=5),a+b;55510例: aby逗号表达式1064.4switch语句1、语句形式:switch(表达式){ case常量表达式1:语句1;

case常量表达式2:语句2;

case常量表达式3:语句3;.......

case常量表达式n:语句n;default:语句n+1;}根据表达式的不同值,选择不同的程序分支,又称开关语句。数值型或字符型常量表达式的值必须互不相同,否则执行时将出现矛盾,即同一个开关值,将对应多种执行方案。千万不能接(;)号4.4switch语句1、语句形式:switch1072、语句执行流程:指语句的最后一条是否为break简单语句或复合语句breakbreak有无break有无有计算表达式常量1常量2常量n=语句1…===语句2语句n其它=语句n+1无值case语句出现的次序并不影响执行结果。2、语句执行流程:指语句的最后一条是否为break简单语句或108例4-4:假设用0、1、2......6分别表示星期日、星期一......星期六。现输入一个数字,输出对应的星期几的英文单词。如果输入3,输出“Wednesday”。#include"stdio.h"voidmain(){intn;scanf("%d",&n);switch(n){case0:printf("Sunday\n");case1:printf("Monday\n");case2:printf("Tuesday\n");case3:printf("Wednesday\n");case4:printf("Thursday\n");case5:printf("Friday\n");case6:printf("Saturday\n");default:printf("Error");}}程序运行情况如下:3↙WednesdayThursdayFridaySaturdayerror例4-4:假设用0、1、2......6分别表示星期日、星期109在“switch”语句中,“case常量表达式”只相当于一个语句标号,表达式的值和某标号相等则转向该标号执行,但不能在执行完该标号的语句后自动跳出整个switch语句,因此会继续执行所有后面语句的情况。为此,C语言提供了一种break语句,其功能是可以跳出它所在的switch语句。在“switch”语句中,“case常量表达式”只相当于一110将上面的例4-4修改如下:#include"stdio.h"voidmain(){intn;scanf("%d",&n);switch(n){case0:printf("Sunday\n");break;case1:printf("Monday\n");break;case2:printf("Tuesday\n");break;case3:printf("Wednesday\n");break;case4:printf("Thursday\n");break;case5:printf("Friday\n");break;case6:printf("Saturday\n");break;default:printf("Error");}}程序运行情况如下:3↙Wednesday将上面的例4-4修改如下:#include"stdio.h1113、说明多个case语句可以共用一组执行语句。switch(grade){case10:case9:case8:printf(“A");break;default:printf(“B");}各case和default子句的先后顺序可以变动,而不会影响程序执行结果。3、说明多个case语句可以共用一组执行语句。switch112default语句可以省略不用。case和default与其后面的常量表达式间至少有一个空格。switch语句可以嵌套,break语句只跳出它所在的switch语句。default语句可以省略不用。case和default与其113例4-5企业发放的奖金根据利润提成。从键盘输入当月利润,求应发放奖金总数?例4-5企业发放的奖金根据利润提成。从键盘输入当月利润,114利润xx<=1010<x≤2020<x≤4040<x≤60 60<x≤100 100<x

(int)x/10

常量0,11,22,3,44,5,66,7,8,9,1010以上用这种方法转换后,n出现了在不同区域有重复数字的情况。解决的方法有很多,其中一种是可以采用当x为10的整数倍时,将计算出的n值减1。使用switch解题的关键,通过分析找到表达式,将问题分成几种情况。利润x(int)x/10常量用这种方法转换后,n出现了在115#include"stdio.h"voidmain(){doublex,y;intn;scanf("%lf",&x);n=(int)x/10;if((int)x/10==x/10)n--;switch(n){case0:y=x*0.1;break;case1:y=x*0.12;break;case2:case3:y=x*0.14;break;case4:case5:y=x*0.16;break;case6:case7:case8:case9:y=x*0.18;break;default:y=x*0.2;}printf("y=%.2lf\n",y);}

程序如下:#include"stdio.h"程序如下:116国家等级考试练习1.以下叙述中正确的是————a.break语句只能用于switch语句b.在switch语句中必须使用defaultc.break语句必须与switch语句中的case配对d.在switch语句中,不一定使用break语句D2.若有定义:“floatx=1.5;inta=1,b=3,c

温馨提示

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

评论

0/150

提交评论