(二)逻辑表达符和逻辑表达式
1.逻辑运算符
&&逻辑与(相当于and)
||逻辑或(相当于or)
!
逻辑非(相当于not)
注:
&&和||是双目(元)运算符,要求在运算符的两侧各有一个运算量(也称操作数)
!
是一目(元)运算符,只要求在它的右侧有一个运算量
附:
逻辑运算的真值表(表中T为真值,F为假值)
a
b
!
a
!
b
a&&b
a||b
T
T
T
F
F
T
F
F
!
(非)(高)
算术运算符
关系运算符
&&和||
赋值运算符(低)
例:
!
a&&b||x>y&&c(分析执行顺序)
2.逻辑表达式
用逻辑运算符将关系表达式或逻辑量连接起来的式子,称之逻辑表达式
逻辑表达式的值应是一个逻辑量“真”或“假”
0
1
注意:
C语言编译系统在表示逻辑运算结果时,以1代表真,以0代表假。
但在判断一个量是否为“真”时,以0代表假,以非0代表真。
练习:
1.若a=4,则!
a的值为
2.若a=4,b=5,则a&&b的值为
a||b的值为
!
a||b的值为
3.4&&0||2的值为
4.5>3&&8<4-!
0的值为
注意:
在逻辑表达式的求解中,并不是所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。
如
(1)a&&b&&c
只有a为真(非0)时,才需判别b的值,只有a和c都为真的情况下,才需判别c的值,只要a为假,就不必判别b和c。
若a为真,b为假,则不判别c
(2)a||b||c
只要a为真(非0),就不必判断b和c;只有a为假,才判别b;a和b都为假,才判别c
练习:
1.#include
main()
{inta,b;
printf("%d",(a=2)&&(b=-2));
}
运行结果:
2.设intx=1,y=1;表达式(!
x||y--)的值是()
A、0B、1C、2D、-1
3.能正确表示逻辑关系:
“a》10或a《0”的C语言表达式是( )
A、a>=10ora<=0B、a>=0|a<=10
C、a>=10&&a<=0D、a>=10‖a<=0
4.设有inta=1,b=2,c=3,d=4,m=2,n=2;执行(m=a>b)&&(n=c>d)后n的值为()
A、1B、2C、3D、4
5.若希望当a的值为奇数时,表达式的值为“真”,a的值为偶数时,表达式的值为“假”,则以下不能满足要求的表达式是()
A.a%2==1B.!
(a%2==0)
C.!
(a%2)D.a%2
6.判断char型变量c1是否为小写字母的正确表达式是()
A.‘a’<=c1<=‘z’
B.(c1>=a)&&(c1<=z)
C.(‘a’>=c1)||(‘z’<=c1)
D.(c1>=‘a’)&&(c1<=‘z’)
7.#include
main()
{inta=-1,b=1,k;
(++a<0)&&!
(b--<=0);
printf("%d%d\n",a,b);
}
运行结果:
8.下列程序的运行结果:
#include
main()
{intx,y,z;
x=y=z=-1;
printf("x=%d\ty=%d\tz=%d\n",x,y,z);
++y&&++x||++z;
printf("x=%d\ty=%d\tz=%d\n",x,y,z);
x=y=z=-1;
++x||y++&&z;
printf("x=%d\ty=%d\tz=%d\n",x,y,z);
}
9.用逻辑表达式来表示判断闰年的条件
要判别用year表示的某一年是否闰年,闰年的条件应符合下面二者之一:
(1)能被4整除,但不能被100整除,如2008
(2)能被4整除,又能被400整除,如2000(注意:
能被100整除,不能被400整除的年份不是闰年,如出2100)
逻辑表达式:
二、总结
关系表达式和逻辑表达式的值的判断
三、布置作业
书p112页第1、2、3题
第课时总第课时
单元(章、节)
第三章第2节
课题
选择结构程序设计
(二)
授课课时
课时
授课形式
理论
授课班级
日期
教具准备
学案
教学目标
1.掌握IF语句的基本格式
2.能正确判断用if语句编写的程序
3.能编写简单的选择结构程序
教学重点
IF语句的使用
教学难点
正确判断if语句编写的程序
更新、补
充、删节
内容
课外作业
书本课后习题
教学后记
教学过程和内容
师生活动
一、复习测验
1.在c语言中,关系运算符的优先级别是
2.请写出与以下表达式等价的表达式、
(1)!
(x>0)
(2)!
0
3.为表示关系:
x≥y≥z,应使用的C语言表达式是()
A.(x>=y)&&(y>=z)B.(x>=y)AND(y>=z)
C.(x>=y>=z)D.(x>=y)&(y>=z)
4.以下程序运行后的输出结果是
main()
{inta,b,c;
a=10;b=20;c=(a%b<1)||(a/b>1);
printf(“%d%d%d\n”,a,b,c);
}
5.当变量c的值不为2、4、6时,值也为“真”的表达式是()
A.(c==2)||(c==4)||(c==6)
B.(c>=2&&c<=6)||(c!
=3)||(c!
=5)
C.(c>=2&&c<=6)&&!
(c%2)
D.(c>=2&&c<=6)&&(c%2!
=1)
6.若有定义:
inta=2,b=3,c=4;则以下选项中值为0的表达式是()
A、(!
a==1)&&(!
b==0)B、(a
c||1
C、a&&bD、a||(b+b)&&(c-a)
二、讲授新课
(一)if语句的一般形式、
1.不含else子句的if语句
格式:
if(表达式)语句
流程图:
例:
if(a
语句的执行过程为首先计算紧跟在if后面一对圆括号中的表达式的值,根据计算结果有两种情况:
(1)如果表达式的值为非零(“真”),则执行其后的if子句,然后去执行if语句后的下一条语句;
(2)如果表达式的值为零(”假”),则跳过if子句,直接执行if语句后的下一条语句。
练习:
①#include
main()
{
intx=4,y=3;
if(x>y)printf(“%d”,x);
}
请画出程序的流程图及N-S图,并写出程序的运行结果
②分析下面两个程序,观察一下有何区别?
(认真看书本p97页说明)
写出程序的运行结果
(1)#include
main()
{intx=10,y=20,z=30;
if(x>y)
z=x;x=y;y=z;
printf(“x=%d,y=%d,z=%d”,x,y,z);
}
(2)#include
main()
{intx=10,y=20,z=30;
if(x>y)
{z=x;x=y;y=z;}
printf(“x=%d,y=%d,z=%d”,x,y,z);
}
2.含else子句的if语句
格式:
if(表达式)语句1
else语句2
流程图:
例:
if(a!
=0)printf(“a!
=0\n”);
elseprintf(“a==0\n”);
说明:
(1)if与else是C语言的关键字
(2)语句1称为if子句,语句2称为else子句,这些子句只允许是一条语句,若需要多条语句时,则应该使用“{}”将这些语句括起来组成复合语句;
(3)else不是一条独立的语句,它只是if语句的一部分,因此在程序中else必须与if配对。
语句的执行过程为首先计算紧跟在if后面的一对圆括号内表达式的值,计算结果有两种情况:
①如果表达式的值为非0,执行if子句,然后跳过else子句,去执行if语句后的下一条语句;
②如果表达式的值为0,跳过if子句,去执行else子句,执行完之后接着去执行if语句后的下一条语句。
练习:
1.#include
main()
{intx,y;
scnaf(“%d,%d”,&x,&y);
if(x>y)printf(“%d”,x);
elseprintf(“%d”,y);
}
若运行时从键盘输入3,4,则程序的运行结果为
2.#include
main()
{intx;
scanf(“%d”,&x);
if(x--<5)printf(“%d”,x);
elseprintf(“%d”,x++);
}
程序运行后,如果从键盘输入5,则输出结果为
3.#inlcude
main()
{intx=3,y=0,z=0;
if(x=y+z)printf(“****”);若为x==y+z有何不同?
elseprintf(“####”);
}
4.#include
main()
{inta=-1,b=1,k;
if((++a<0)&&(b--<=0))
printf(“%d%d\n”,a,b);
else
printf(“%d%d\n”,b,a);
}
三、总结
if语句的用法及注意点
四、布置作业
第课时总第课时
单元(章、节)
第三章第2节
课题
选择结构程序设计(三)
授课课时
课时
授课形式
理论
授课班级
日期
教具准备
学案
教学目标
1.掌握IF语句的嵌套使用
2.能正确判断用if语句编写的程序
3.能编写简单的选择结构程序
教学重点
IF语句的嵌套使用
教学难点
正确判断if语句编写的程序
更新、补
充、删节
内容
课外作业
书本课后习题
教学后记
教学过程和内容
师生活动
一、复习测验
(另附)
二、讲授新课
if子句和else子句中可以是任意合法的C语句,因此当然也可以是if语句,通常称此为嵌套的if语句。
内嵌的if语句既可以嵌套在if子句中,也可以嵌套在else子句中。
C语言中if……else语句的二重嵌套的三种形式:
(1)在if子句中嵌套具有else子句的if语句(图1)
(2)在if子句中嵌套不含else子句的if语句(图2)
(3)在else子句中嵌套if语句(图3)
注意:
在嵌套内的if语句,既可以是if语句形式,也可以是if……else语句形式,这就会出现多个if和多个else重叠的情况。
此时,要特别注意if和else的配对问题。
if和else配对规则为else总是与它前一个最近的if配对。
(图1)
(图2)
(图3)
例1:
#include
main()
{intx,y;
scanf(“%d”,&x);
y=0;
if(x>=0)
{if(x>0)y=1;}
elsey=-1;
printf(“%d”,y);
}
当从键盘输入32时,程序输出结果为
分析:
请画出N-S图
例2:
#include
main()
{intx,y;
scanf(“%d,%d”,&x,&y);
if(x>y)
{x=y;y=x;}
else
{x++;y++;}
printf(“%d,%d”,x,y);
}
若输入数据4和3,则输出结果为
例3:
设变量a、b、c、d和y都已正确定义并赋值。
若有以下if语句:
if(a
if(c==d)y=0;
elsey=1;
该语句所表示的含义是()
0a
A、
1a≥b
y=
0a
B、
y=
1a≥b且c≠d
0a
C、
y=
1a
0a
D、
y=
1c≠d
练习:
1.#include
main()
{inta=2,b=-1,c=2;
if(a
if(b<0)c=0;
elsec+=1;
printf(“%d\n”,c);
}
2.当a=1、b=3、c=5、d=5时,执行下面的程序段后,x的值为
if(a
if(celse
if(aif(belsex=3;
elsex=6;
elsex=7;
3.书本p112第4题
4.书本p112第5题
三、总结
if语句的用法及注意点
四、布置作业:
练习卷上相关题目