关系表达式的值是一个逻辑值,即“真”或“假”。
例:
关系表达式”a>b”的值为“真”,表达式的值为1。
一、逻辑运算符与关系表达式
1、逻辑运算符及其优先次序
(1)&&(逻辑与)相当于其他语言中的AND
(2)||(逻辑或)相当于其他语言中的OR
(3)!
(逻辑非)相当于其他语言中的NOT
例:
a&&b若a,b为真,则a&&b为真。
a||b若a,b之一为真,则a||b为真。
!
a若a为真,则!
a为假。
优先次序:
自左向右运算
!
(非)->&&()->||()
逻辑运算符中的“&&”和“||”低于关系运算符,“!
”高于算术运算符
2、逻辑表达式
用逻辑运算符将关系表达式或逻辑量连接起来的式子就是逻辑表达式。
逻辑表达式的值应该是一个逻辑量“真”或“假”。
例:
设a=4,b=5:
!
a的值为0a&&b的值为1
a||b的值为1!
a||b的值为1
例:
5>3&&8<4-!
0
课题
关系运算符与表达式(习题课)
教学
目的
1、通过习题理解优先级
2、
教材
分析
教学重点
运算符优先级
教学难点
课时安排
1
教学方法
讲授与讨论法
教具
计算机、投影仪
教
学
内
容
及
过
程
设
计
知识点:
在逻辑表达式的求解中,并不是所有的逻辑运算符都要被执行。
(1)a&&b&&c只有a为真时,才需要判断b的值,只有a和b都为真时,
才需要判断c的值。
(2)a||b||c只要a为真,就不必判断b和c的值,只有a为假,才
判断b。
a和b都为假才判断c
一、例题演讲
1、:
(m=a>b)&&(n=c>d)当a=1,b=2,c=3,d=4,m和n的原值为1时,由于“a>b”的值为0,因此m=0,而“n=c>d”不被执行,因此n的值不是0而仍保持原值1
2、正确表示“当x的取值在[1,10]和[200,210]范围内为真,
否则为假”的表达式是 (x>=1)&&(x<=10)||(x>=200)&&(x<=210)
1、a=b=c=3;++a||++b&&++c;第二个表达式的值?
4、include
main()
{inti=-1,j=4,k;
k=(i++<=0)&&(!
(j--<=0));
printf("%d,%d,%d\n",k,i,j);
}
2、inti=2,j=4;
printf("%d\n",i++*i++*i++);
或printf("%d\n",++*i++i*++i);
或printf("%d\n",i+4*i+++6);
分别写出三个输出的结果
二、学生练习。
1.若a=5,b=6,c=7,d=8,则表达式d=a/2&&b==c||!
a的值为
2.定义intx=10,y,z;执行y=z=x;x=y==z后,变量x的值为。
备注
上机实训一课时
课题
if分支选择语句
教学
目的
1、掌握if三种形式
2、
教材
分析
教学重点
语句格式
教学难点
if语句的应用
课时安排
1
教学方法
讲授与演示法相结合讨论法
教具
计算机、投影仪
教
学
内
容
及
过
程
设
计
一新课引入
选择结构是三在结构之一,常用。
二、新授
语法1:
if(表达式)语句
例:
if(x>y)printf(“%d”,x);
语法2:
if(表达式)语句1;else语句2;
例:
if(x>y)printf(“%d”,x);
elseprintf(“%d”,y);
语法3:
也称ifelseif语句
if(表达式1)语句1;
elseif(表达式2)语句2;
elseif(表达式3)语句3;
……
else语句n+1;
例:
if(number>500)cost=0.15;
elseif(number>300)cost=0.10;
elseif(number>100)cost=0.075;
elseif(number>50)cost=0.05;
elsecost=0;
3、习题讲解。
备注
课题
if分支选择语句
教学
目的
1、巩固if三种形式
2、掌握if
教材
分析
教学重点
语句格式
教学难点
if语句的应用
课时安排
1
教学方法
讲授与演示法相结合讨论法
教具
计算机、投影仪
教
学
内
容
及
过
程
设
计
一、复习引入
上节课是选择结构的三种形式,那如何应用,应用时应注意哪些?
二、新授
1例:
输入两个实数,按代数值由小到大的顺序输出这两个数。
#include
voidmain()
{floata,b,t;
scanf(″%f,%f″,&a,&b);
if(a>b){t=a;a=b;b=t;}printf(″%5.2f,%5.2f\n″,a,b);}
2、说明:
1. if关键字后均为表达式(逻辑表达式、关系表达式、赋值表达式、变量等);
如:
if(a=5)语句;if(b)语句;
2. 条件表达式必须用括号括起来,在语句后必须加分号;
3. 满足条件需执行一组语句时,该组语句必须用{}括起来;
4. if语句嵌套时,else总是与它最靠近的未配对的if匹配;
5.因为if语句执行时总是简单地测试其中作为条件的“表达式”的值是0还是非0,便可利用这种特性来简化程序设计。
如对于:
if(expression!
=0)完全可用if(expression)来代替;
同理:
if(!
exp)语句;等价于:
if(exp==0)语句;
3、习题讲解。
练习完成以下任务:
输入三个数a,b,c,要求按由小到大的顺序输出。
参考答案:
#include
voidmain()
{floata,b,c,t;
scanf(″%f,%f,%f″,&a,&b,&c);
if(a>b){t=a;a=b;b=t;}
if(a>c){t=a;a=c;c=t;}
if(b>c){t=b;b=c;c=t;}
printf("%5.2f,%5.2f,%5.2f\n",a,b,c);
}
三、课堂小结
1、if的三种格试
2、if-else语句的应用。
P201-5P45110-114
备注
此课时另安排上机实验,学习选择结构的程序设计
课题
If语句的嵌套
教学
目的
1、掌握嵌套的含义
2、嵌套的配对原则
教材
分析
教学重点
嵌套的运行理解
教学难点
if语句的应用
课时安排
1
教学方法
讲授与演示法相结合讨论法
教具
计算机、投影仪
教
学
内
容
及
过
程
设
计
一新课引入
若有多种情况,我们的ifelseif语句不能太深,不利于应用。
当然我们的ifelseif语句可理解为是嵌套的一个特例。
二、新授
1、if语句的嵌套
在if语句中又包含一个或多个if语句称为if语句的嵌套。
形式:
If()
if()语句1
else语句2
else
if()语句3
else语句4
匹配规则:
else总是与它上面的,最近的,统一复合语句中的,未配
对的if语句配对。
例:
if()
if()语句1
else
if()语句2
else语句3
当if和else数目不同时,可以加花括号来确定配对关系。
-1(x<0)
3、思考:
有一个函数y=0(x=0),编一程序,输入一个x值,输出y值。
1(x>0)
备注
课题
三目条件运算符及其表达式
教学
目的
1、了解三目条件运算符
2、掌握表达式的应用
教材
分析
教学重点
表达式的应用
教学难点
表达式语句的应用
课时安排
1
教学方法
讲授与演示法相结合讨论法
教具
计算机、投影仪
教
学
内
容
及
过
程
设
计
一新课引入
二、新授
1、条件运算符:
?
:
2、格式:
e1?
e2:
e3
3、功能:
判e1的值,为1时计算e2,否则计算e3;
如:
max=(a>b)?
a:
b等价于if(a>b)max=a;
elsemax=b;
4、说明:
1) 条件运算符的结合方向自右至左
如:
a>b?
a:
c>d?
c:
d等价于a>b?
a:
(c>d?
c:
d)
若inta=1,b=2,c=3,d=4;则表达式的值为________
2) 条件运算符的优先级仅高于逗号运算符与赋值运算符;
3) 只有当if语句的真假均只执行一个赋值语句且给同一变量赋值时,才能用条件表达式取代;如:
if(a>b)max=a;elsemax=b;
就执行此case后面的语句,若所有case中的常量表达式的值都与表达式的值不相等,执行default后面语句。
例:
if(a>b)max=a;
elsemax=b;
当a>b时将a的值赋给max,当a≤b时将b的值赋给max,
可以看到无论a>b是否满足,都是向同一个变量赋值。
可以用下面的条件运算符来处理:
max=(a>b)?
a∶b;
3、小结。
备注
课题
switch语句
教学
目的
1、掌握switch语句格式
2、掌握switch语句的执行流程
教材
分析
教学重点
switch语句的执行过程
教学难点
switch语句的应用
课时安排
1
教学方法
讲授与演示法相结合讨论法
教具
计算机、投影仪
教
学
内
容
及
过
程
设
计
一复习引入
当分支的情况越多,if的层次分越多!
于是出现了开关语句
二、新授switch语句
语法1:
switch(表达式)
{caseC1:
语句序列1;
caseC2:
语句序列2;
……
caseCn:
语句序列n;
default:
语句序列n+1;}
语法2:
switch(表达式)
{caseC1:
语句序列1;break;
caseC2:
语句序列2;break;
……
caseCn:
语句序列n;break;
default:
语句序列n+1;break;}
说明:
(1)switch后面的()内的表达式,ANSI标准允许他为任何类型
(2)case后的常量表达式一般不可以为实型数据。
(3)当表达式的值与某个case后面的常量表达式的值相等时,
(5)每个case后面的常量表达式的值必须互不相同。
否则就会出现互相矛盾的现象(对表达式的同一个值,有两种或多种执行方案)。
(6)各个case与default出现次序不影响结果。
(7)break的使用(终止),是可选项
(8)多个case可以共用一组语句
例:
要求按照考试成绩的等级输出百分制分数段,用
switch语句实现:
switch(grade)
{case′A′∶printf(″85~100\n″);
case′B′∶printf(″70~84\n″);
case′C′∶printf(″60~69\n″);
case′D′∶printf(″<60\n″);
default∶(printf″error\n″);}
功能:
当表达式的值与某一个case后面的常量表达式的值相等时,就执行此case后面的语句,若所有的case中的常量表达式的值都没有与表达式的值匹配的,就执行default后面的语句。
四、小结。
1、 switch语句2、 在编写程序过程中,注意分支的作用范围,及复合语句的运用
备注
课题
switch语句习题课
教学
目的
1、掌握switch语句格式
2、掌握switch语句的执行流程
教材
分析
教学重点
switch语句的执行过程
教学难点
switch语句的应用
课时安排
1
教学方法
讲授与演示法相结合讨论法
教具
计算机、投影仪
教
学
内
容
及
过
程
设
计
一复习引入
switch语句语法
三、实例
1、运输公司对用户计算运费。
路程(s)越远,每公里运费越低。
标准如下:
s<250km没有折扣
250≤s<5002%折扣
500≤s<10005%折扣
1000≤s<20008%折扣
2000≤s<300010%折扣
3000≤s15%折扣
设每公里每吨货物的基本运费为p,货物重为w,距离为s,折扣为d,则总运费f的计算公式为:
f=p*w*s*(1-d)
程序代码略
2、main()
{charx=‘B’;
switch(x)
{case‘A’:
printf(“ItisA.”);
case‘B’:
printf(“ItisB.”);
case‘C’:
printf(“ItisC.”);
default:
printf(“other.”);
}}
1.3、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);
}
四、小结(略)。
备注
上机实验,学习选择结构的程序设计,按排一次章节测试
分支程序设计章节练习题
四、选择题
1.若x=0,y=3,z=3,以下表达式值为0的是
A.!
xB.x1:
0C.x%2&&y==zD.y=x||z/3
2.以下运算符中优先级最低的运算符为,优先级最高的为。
A.&&B.!
C.!
=D.||E.?
:
F.==
3.若w=1,x=2,y=3,z=4,则条件表达式ww:
yy:
z的结果为。
A.4B.3C.2D.1
4.若w,x,z均为int型变量,则执行以下语句后的输出为。
w=3;z=7;x=10;
printf("%d\n",x>10?
x+100:
x-10);
printf("%d\n",w++||z++);
printf("%d\n",!
w>z);
printf("%d\n",w&&z);
A.0B.1C.0D.0
1111
1100
1110
5.分析以下程序,下列说法正确的是。
main()
{intx=5,a=0,b=3;
if(x=a+b)printf("****\n");
elseprintf("####\n");
}
A.有语法错,不能通过编译B.通过编译,但不能连接
C.输出****D.输出####
6.分析以下程序,下列说法正确的是。
main()
{intx=0,a=0,b=0;
if(x=a+b)printf("****\n");
elseprintf("####\n");
}
A.有语法错,不能通过编译B.通过编译,但不能连接
C.输出****D.输出####
7.分析以下程序,下列说法正确的是。
main()
{intx=0,a=0,b=0;
if(x==a+b)printf("****\n");
elseprintf("####\n");
}
A.有语法错,不能通过编译B.通过编译,但不能连接
C.输出****D.输出####
五、读程序写结果
1.include
main()
{inta=-1,b=4,k;
k=(a++<=0)&&(!
(b--<=0));
printf("%d,%d,%d\n",k,a,b);
}
2.main()
{intx=4,y=0,z;
x*=3+2;
printf("%d",x);
x*=(y==(z=4));
printf("%d",x);
}
3.main()
{intx,y,z;
x=3;y=z=4;
printf("%d",(x>=z>=x)?
1:
0);
printf("%d",z>=y&&y>=x);
}
4.main()
{intx=1,y=1,z=10;
if(z<0)
if(y>0)x=3;
elsex=5;
printf("%d\t",x);
if(z=y<0)x=3;
elseif(y==0)x=5;
elsex=7;
printf("%d\t",x);
printf("%d\t",z);
}
5.main()
{charx=‘B’;
switch(x)
{case‘A’:
printf(“ItisA.”);
case‘B’:
printf(“ItisB.”);
case‘C’:
printf(“ItisC.”);
default:
printf(“other.”);
}
}
6.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);
}
六、填空题
1.若a=5,b=6,c=7,d=8,则表达式d=a/2&&b==c||!
a的值为
2.定义intx=10,y,z;执行y=z=x;x=y==z后,变量x的值为。
3.分段函数:
输入x,计算y值,输出y,其中:
x<0y=2x+3
x=0,y=0
x>0,y=(x+7)/3
#include
main()
{
intx,y;
scanf("%d",&x);
if(x<0)
(1);
(2)y=0;
(3)y=(x+7)/3;
printf(“%d”,y);
}
4.由键盘输入三个数,计算以这三个数为边长的三角形面积。
(1)
main()
{
(2);
printf("Pleaseenter3reals:
\n");
scanf("%f%f%f",&a,&b,&c);
if((3))
{s=(a+b+c)*0.5;
s1=s*(s-a)*(s-b)*(s-c);
s=(4);
printf("\nAreaofthetriangleis%f\n",s);
}
(5)
printf("Itisnottriangle!
\n");
}
5.有一方程a
+bx+c=0,a,b,c的值由键盘输入,请编程序,打印出以下情况时方程的解。
(1)a=0,b≠0
(2)a=0,b=0,c=0
(3)a=0,b=0,c≠0
(4)a≠0,
-4ac≥0
(5)a≠0,
-4ac≤0
#include"math.h"
main()
{floata,b,c,d,pr,pi,x1,x2;
scanf("%f%f%f",&a,&b,&c);
printf("a=%f,b=%f,c=%f\n",a,b,c);
if(a==0)
{if(
(1))
printf("onlyonesolutionx=%f\n",-c/b);
else
if(
(2))printf("nosolution\n");
elseprintf("xisanyvalue\n");
}
else
{d=b*b-4*a*c;
if((3))
{x1=(-b+sqrt(d))/(4);
x2=(-b-sqrt(d))/(5);
printf("x1=%6.2f,x2=%6.2f\n",x1,x2);
}
else
{pr=-b/(2*a);(6);
printf("x1=%6.2f+%6.2fi\n",pr,pi);
printf("x2=%6.2f-%6.2fi\n",pr,pi);
}
}
}
6.投票表决器:
–输入Y、y,打印agree
–输入N、n,打印disagree
–输入其他,打印lose
main()
{
charc;
scanf("%c",&c);
(1)
{
case‘Y’:
case‘y’:
printf(“agree”);
(2);
case‘N’:
case‘n’:
printf(“disagree”);(3);