资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,C,语言程序设计,选择结构,第三章,主要内容,第一节 关系运算与逻辑运算,第二节,if,语句,第三节 条件运算符和条件表达式,第四节,switch,语句,第五节,goto,语句,本章学习目标,掌握关系运算和逻辑运算,掌握,if,语句的几种形式和使用技巧,熟悉,switch,语句的基本使用技巧,第一节 关系运算与逻辑运算,一、,C,语言中的逻辑值,C,语言中的逻辑值只有两个:“真(,true,)”,“假(,false,)”,.,用,非零,来代表“,真,”,用零来代表“假”。,只要值不是零,,不管是正数还是负数,整型数还是实型数,都代表一个“,真,”值。,二、关系运算符,C,语言提供了,6,种关系运算符,表,3-1 6,种关系运算符及优先级,优先级相同(高) 优先级相同(低),(,大于,) =,(大于等于),= =,(等于),(,小于,),、,=,、,、,关系运算符,赋值运算符,三、关系表达式,1.,用关系运算符将两个表达式连接起来的表达式,成为关系表达式。,例如:,a(b=20), (a10)(b20),等都是合法的关系表达式。,2.,关系运算的,结果,有两个:,0,和,1,。其中“,0”,代表“假”,用“,1”,代表“真”。,例如:关系表达式,(a=10) & |(,优先级,),(,2,),!(单目),算术运算符,关系运算符,&|,赋值运算符,逗号运算符,五、逻辑表达式及其值,&(,逻辑“与”,),和,|,(逻辑“或”)的运算操作对象有两个,故它们都是,双目运算符,,而!(逻辑“非”)的运算对象只有一个,因此它是,单目运算符,。逻辑运算举例如下:,(1)a&b,当运算对象,a,和,b,的值,都为“真”,时,,a&b,的值才为“真”。,(2)a|b,当运算对象,a,和,b,的值,有一个为“真”,时,,a|b,的值就为“真”,(3),!,a,当运算对象,a,的值为“真”时,!,a,的值为“假”;当运算对象,a,的值为“假”时,,a,的值为“真”。,a,b,a|b,a,b,a&b,0,0,0,1,1,0,1,1,0 0,0,1 0,1,0 1,1,1 1,1,0,0,0,1,a,!a,0,1,1,0,例,3,1,设有定义:,int a=2,b=3,c=4;,则以下选项中值为,0,的表达式是,。,A,),(,!a= =1)&(b- =2),B,),(ay)printf(%d,x);,又如,:,if(xy),m=x;,printf(m=%d,m);,如果,if,语句后面有多个子句,应将它们 用,括起来,例,3.3,:,main(),int a;,scanf(%d,if(a50) printf(%d,a);,if(a40) printf(%d,a);,if(a30) printf(%d,a);,输入,输出结果将为:,例,3.4,若有以下程序,main(), int a=4,b=3,c=5,t=0;,if(ab) t=a;a=b;b=t;,if(ay),printf (,%d,x);,else,printf (%d,y);,例,3.7,程序运行后的输出结果是:,main(),int a=1,b=2,c=3;,if(c=a ) printf(“%dn”,c);,else printf(“%dn”,b);,1,【,练习,】,编写程序实现下述功能:从键盘上输入两个整数,输出其中较大数。,解题思路:定义两个整型变量,num1,、,num2,,用来存放键盘输入的两个整数;再定义一个整型变量,max,,用来存放两个数中较大数。,具体操作步骤如下:,(,1,)显示提示信息;,(,2,)从键盘输入,num1,、,num2,的值;,(,3,)如果,num1num2,,则,max,num1,,否则,max,num2,;,(,4,)输出,max,的值。,#include ,void main(),int num1,num2,max;,printf(,请输入两个整数:,);,scanf(%d,%d,if (num1num2) max=num1;,else max=num2;,printf(,两个数中的最大数为:,%dn,max);,三、,if-else-if,语句,1.if-else-if,格式:,if (,表达式,1),语句组,1,else if (,表达式,2),语句组,2,else if (,表达式,3),语句组,3,else if (,表达式,n,),语句组,n,else,语句组,n,+1,执行过程:,例如:,if(number500)cost=0.15;,else if(numbe300)cost=0.10;,else if(number100)cost=0.075;,else if(number50)cost=0.05;,else cost=0;,例,3.8,从键盘上输入,x,的值,并通过如下的数学关系求出相应的,y,值。,-1 x0,用,if-else-if,结构可以很方便地完成上述要求。,具体程序如下:,main(), int x,y;,scanf(“%d”,if(x 0),if (y 1),z = 1;,else,/*,这个,else,部分属于哪个,if,?,*,/,z = 2;,选择结构程序设计,-,if,嵌套,C,语言规定,每个,else,部分总属于,前面最近的那个缺少对应的,else,部分的,if,语句,。,提倡使用大括号括起来以避免看起来有二义性。,?,例,3.11,设变量,a,、,b,、,c,、,d,和,y,都已经正确定义并赋值。,若有以下,if,语句,if(ab),if(c=d) y=0;,else y=1;,该语句所表示的含义是,0 ab,且,c=d 0 ab,且,c=d,A,),y= B) y=,1 ab 1 ab,且,cd,0 ab,且,c=d 0 ab,且,c=d,C) y= D) y=,1 ab,且,cd 1 cd,if(a,赋值运算符,c) max=a;,else max=c;,可以用下述的条件运算符来处理,max=,ac? a:c;,5.,条件运算符的,结合性,:自右向左,例如:,ab?a:cd?c:d,例如:,ab?a:,cd?c:d,switch,语句是一种选择结构,第四节,switch,语句,switch (,表达式,),case,常量,1,:,语句,;,break;,case,常量,2,:,语句,;,break;,default:,语句,;,break;,计算表达式的值,如果等于常量,1,如果等于常量,2,如果没有找到匹配的值,switch,语句需要注意的地方,a.,在,case,后的,各常量表达式的值不能相同,,否则会出现错误;,b.,在,case,后,允许有多个语句,可以不用,括起来;,c.,各,case,和,default,子句的,先后顺序可以变动,,而不会影响程序执行结果;,d.default,最多只能有一个,,通常出现在,switch,的最后部分,但也可以出现在,case,之间或所有,case,之前。,default,子句,可以省略,;,e.,在执行过程中如果遇到,break,语句,则跳出,switch,语句。如果执行完某一个,case,或者,default,语句块后,没有遇到,break,,则继续顺序往下执行,,直到遇到,break,语句或者,switch,语句体被执行完毕为止。,switch (,表达式,),case,常量表达式,1,:,语句,;,break;,case,常量表达式,2,:,语句,;,break;,default:,语句,;,break;,值必须是整型或字符型,,不能为实型,可以是求得是整型量和字符型常量表达式,但,不能含有变量,选择结构程序设计,-,switch,语句,问题描述:,要求用户输入一个数字,1-7,,输出对应星期 。,int week;,printf(“n,请输入,1-7,数字,:,);,scanf(“%d, ,switch(week),case 1: printf(“n,星期一,n);,case 2: printf(“n,星期二,n);,case 3: printf(“n,星期三,n);,case 4: printf(“n,星期四,n);,case 5: printf(“n,星期五,n);,case 6: printf(“n,星期六,n);,case 7: printf(“n,星期日,n);,default: printf(“n,输入错误!,n);,请输入,1-7,数字:,3,星期三,星期四,星期五,星期六,星期日,输入错误,选择结构程序设计,-,switch,语句,问题描述:,要求用户输入一个数字,1-7,,输出对应星期 。,int week;,printf(“n,请输入,1-7,数字,:,);,scanf(“%d, ,switch(week),case 1: printf(“n,星期一,n); break;,case 2: printf(“n,星期二,n); break;,case 3: printf(“n,星期三,n); break;,case 4: printf(“n,星期四,n); break;,case 5: printf(“n,星期五,n); break;,case 6: printf(“n,星期六,n); break;,case 7: printf(“n,星期日,n); break;,default: printf(“n,输入错误!,n);,内存,week,3,请输入,1-7,数字:,3,星期三,例,3.13,:按照学生的考试成绩,打印出相应的等级,,90,分以上的输出“,A”,等级,,80,分以上的输出“,B”,等级,依此类推,,60,分以下输出“,E”,等级。,main(),int score;scanf(“%d”,switch(,score/10,),case 10:printf(“An”);break;case 9:printf(“An”);break;case 8:printf(“Bn”);break;case 7:printf(“Cn”);break;case 6:printf(“Dn”);break;default:printf(“En”);break;,例,3.13,有以下程序,main(),int i=1,y=0,a=0,b=0;,switch(x),case1:,switch(y),case 0:a+;break;,case 1:b+;break;,case 2:a+;b+;break;,case 2:a+;b+;,printf(“a=%d,b=%dn”,a,b);,a=2,b=1,多重,if,结构和,switch,结构都可以用来实现多路分支,多重,if,结构用来实现两路、三路分支比较方便,而,switch,结构实现三路以上分支比较方便,在使用,switch,结构时,应注意,分支条件要求是整型表达式,,而且,case,语句后面必须是常量表达式,有些问题只能使用多重,if,结构来实现,例如要判断一个值是否处在某个区间的情况,比较多重,if,和,switch,结构,常见,错误,列举,(,1,),if,语句之后多了,“,;,”,。,如,if(a10);,(,2,),case,子句后面的程序段中,漏掉了,break,。,(,3,),case,后面跟着,变量表达式,。,如,case,a,:,第五节,goto,语句,一、 语句标号,标识符,后面加一个,冒号,,如:,flag1:,、,stop0:,该标识符,就成了一个语句标号,。,注意:,在,C,语言中,语句标号,必须是标识符,,因此不能简单地使用,10,:、,15,:等形式。标号可以和变量同名。,2,、,goto,语句,又称为,无条件转向语句,,,goto,语句的一般形式如下:,goto,语句标号;,如:,goto stop;,在,C,语言中,可以在任何语句前加上语句标号。例如:,stop:printf(“ENDn”);,goto,语句的作用,是,把程序的执行转向语句标号所在的位置,,这个语句标号必须与此,goto,语句同在一个函数内,。滥用,goto,语句将使程序的流程毫无规律,可读性差,对于初学者来说应,尽量不用,。,
展开阅读全文