第05章 选择结构程序设计.docx
《第05章 选择结构程序设计.docx》由会员分享,可在线阅读,更多相关《第05章 选择结构程序设计.docx(17页珍藏版)》请在冰豆网上搜索。
第05章选择结构程序设计
本章重点:
●关系运算符和关系表达式
●逻辑运算符和逻辑表达式
●if语句
●switch语句
第五章选择结构程序设计
§5.1关系运算符和关系表达式
一、关系运算符
关系运算就是平常所说的比较运算,比较的结果只有两种,要么成立(真),要么不成立(假)。
如:
3>5这个关系表达式是成立的,为真。
1.C的6种关系运算符
关系运算符
含义
关系运算符
含义
>
大于
>=
大于等于
<
小于
<=
小于等于
==
等于
!
=
不等于
2.优先级
>,<,>=,<=四种优先级相同,==和!
=优先级相同,但低于前四种
关系运算符的优先级低于算术运算符
关系运算符的优先级低于赋值运算符
如:
a=3+5>4
二、关系表达式
1.概念
用关系运算符将两个
表达式连接起来的式子,如:
3+5<2-6
2.关系表达式的值
C语言没有逻辑类型,C中关系表达式若成立(为真),它的值为1,不成立(为假),它的值为0。
如:
a=3>4a的值为0
a=(2<4)+1a的值为0
§5.2逻辑运算符和逻辑表达式
关系表达式只能描述单一条件,例如“x>=0”。
如果需要描述“x>=0”、同时“x<10”,就要借助于逻辑表达式了。
一、逻辑运算符
1.C的三种逻辑运算符
&&逻辑与(相当于“同时”或“并且”)
||逻辑或(相当于“或者”)
!
逻辑非(相当于“否定”或“不”)
2.运算规则和优先级
&&都成立,才成立
||一个成立,就成立
!
取反
优先级顺序:
!
,&&,||
二、逻辑表达式
1.概念
用逻辑运算符将两个
表达式连接起来的式子,如:
(x>=0)&&(x<10),(x<1)||(x>5),!
(x==0)
2.逻辑表达式的值
和关系表达式一样,C中逻辑表达式若成立(为真),它的值为1,不成立(为假),它的值为0。
如:
a=3>4a的值为0
a=(2<4)+1a的值为0
但在判断一个量是否为真时,以0代表假,以非0代表真。
试比较下面的语句
a=3;
if(a>0)a--;
printf(“%d”,a);
a=3;
if(-2)a--;
printf(“%d”,a);
3.说明
在计算逻辑表达式时,只有在必须执行下一个表达式才能求解时,才求解该表达式(即并不是所有的表达式都被求解)。
(1)
§5.3if语句
一、格式
格式一:
if(条件)
{
//要执行的语句块
}
格式二:
if(条件)
{
//要执行的语句块1
}
else
{
//要执行的语句块2
}
格式三:
if(条件1)
{
//要执行的语句块1
}
elseif(条件2)
{
//要执行的语句块3
}
elseif(条件3)
{
//要执行的语句块3
}
......
else
{
//要执行的语句块n
}
注意:
条件为逻辑表达式或数值表达式,对逻辑表达式,成立则值为1,不成立则值为0。
对数值表达式非0表示成立,0表示不成立。
二、举例
1.[例1]注意执行过程
main()
{
inta=3;
if(a>0)a--;
if(a>0)a-=2;
if(a>0)a=-100;
printf(“%d”,a;);
}
2.[例2]注意语句块必须括起来
main()
{
inta,b,c;
intx,y,z;
a=65;b=77;c=86;
x=74;y=90;z=45;
if(a+b+c>x+y+z)
{
printf(“%d”,a;);
printf(“%d”,b;);
printf(“%d”,c;);
}
else
{
printf(“%d”,x;);
printf(“%d”,y;);
printf(“%d”,z;);
}
}
3.[例3]输入一个圆的半径,求周长和面积。
main()
{
floatr,l,s;
clrscr();
printf("pleaseinputr:
");
scanf("%f",&r);
if(r>=0)
{
l=2*3.14*r;
s=3.14*r*r;
printf(“l=%f”,l);
printf(“s=%f”,s);
}
else
{
printf(“inputerror!
!
”);
printf(“r<0!
!
”);
}
getch();
}
4.[例4]出键盘输入三个数,输出最大数程序
/*编程方法一*/
main()
{
inta,b,c,max;
clrscr();
printf("pleaseinputa,b,c:
");
scanf("%d,%d,%d",&a,&b,&c);
if(a>b&&a>c)max=a;
if(b>a&&b>c)max=b;
if(c>a&&c>b)max=c;
printf("max=%d",max);
}
/*编程方法二*/
main()
{
inta,b,c,max
clrscr();
printf("pleaseinputa,b,c:
");
scanf("%d,%d,%d",&a,&b,&c);
if(a>b)
{
max=a;
}
else
{
max=b;
}
if(max{
max=c;
}
else
{
max=max;
}
printf("max=%d",max);
getch();
}
/*编程方法三*/
main()
{
inta,b,c,max;
clrscr();
printf("pleaseinputa,b,c:
");
scanf("%d,%d,%d",&a,&b,&c);
if(a>b)
{
if(a>c)max=a;elsemax=c;
}
else
{
if(b>c)max=b;elsemax=c;
}
printf("max=%d",max);
getch();
}
5.[例5]if…elseif…elseif……else的例子
/*从键盘输入成绩,判断等级程序*/
main()
{
ints;
clrscr();
printf("pleaseinputscore:
");
scanf("%d",&s);
if(s>=0&&a<60)
{
printf(“不及格”);
}
elseif(s>=60&&a<70)
{
printf(“及格”);
}
elseif(s>=70&&a<80)
{
printf(“中等”);
}
elseif(s>=80&&a<90)
{
printf(“良好”);
}
elseif(s>=90&&a<1000)
{
printf(“优秀”);
}
else
{
printf(“不可能的成绩”);
}
}
三、举例
1语句块一定要用{}括起来,否则只执行第一句
2if嵌套时,else总是与它上面最近的未配对的if配对,为更
清晰,更明确,最好用{}来说明和确定配对关系
if()
if()语句;
else
if()语句;
else语句;
四、条件运算符
1格式
max=(a>b)?
x:
y;
if(a>b)max=x;elsemax=y
2举例
max=a>b?
x:
y;
max=a>b?
x:
y+1;
max=a>b?
(max=x):
(max=y);
max=a>b?
a:
c>d?
c:
d;
2说明
1)优先级
2)结合性
3)只用最简单的形式,复杂的坚决推荐用if语句
§5.4switch语句
一、格式
switch(条件1)
{
case表达式1:
{
//要执行的语句块1
[break;]
}
case表达式2:
{
//要执行的语句块2
[break;]
}
......
default
{
//要执行的语句块n
}
}
二、说明
1.找到与条件相匹配的表达式,开始执行后面的(所有)语句,若
找不到,执行default后的语句。
2.要使执行完一个case后的语句块,便结束switch语句,应使
用break语句。
三、举例
1.[例1]根据键盘输入等级,判断成绩分数
main()
{
charcj
clrscr();
printf("pleaseinputscoregrade:
");
scanf("%c",&cj);
switch(cj)
{
caseA:
{
printf("90~100");
break;
}
caseB:
{
printf("80~89");
break;
}
caseC:
{
printf("70~79");
break;
}
caseD:
{
printf("60~69");
break;
}
caseE:
{
printf("s<60");
break;
}
}
}
2.[例2]根据键盘输入分数,判断成绩等级
main()
{
intcj
clrscr();
printf("pleaseinputscore:
");
scanf("%d",&cj);
cj=cj/10;
switch(cj)
{
case10:
{
printf("A");
break;
}
case9:
{
printf("A");
break;
}
case8:
{
printf("B");
break;
}
case7:
{
printf("C");
break;
}
case6:
{
printf("D");
break;
}
default
{
printf("E");
}
}
}
补充程序
1函数bioskey()的使用
#include"bios.h"
#include"conio.h"
main()
{
intc
clrscr();
c=bioskey(0);
switch(c)
{
case18432:
/*up*/
{
printf("UP");
break;
}
case20480:
/*down*/
{
printf("DOWN");
break;
}
case19200:
/*left*/
{
printf("LEFT");
break;
}
case19712:
/*right*/
{
printf("RIGHT");
break;
}
case283:
/*ESC*/
{
printf("ESC");
break;
}
}
}
作业
1从键盘输入四个数,按由小到大的顺序输出
2从键盘输入一个不超过5位的整数,要求判断出它为几位数,并输出它的相
反数(如:
输入3276,应输出6723)。
3有一函数如下:
从键盘输入一个X值,输出Y值。