选择结构程序设计(一)
说明
内容
1.关系运算符和关系表达式
2.逻辑运算符和逻辑表达式
3.条件运算符及条件表达式
4.IF语句
举例说明
重点
1.关系运算符和关系表达式
2.逻辑运算符和逻辑表达式
3.条件运算符及条件表达式
4.IF语句的格式使用
难点
复杂条件的表示;IF语句的正确使用。
问题提出
前几讲已经介绍了顺序结构,但大多程序中都会有根据所指定的条件是否满足,在两组操作中选择执行其一的操作。此时仅用顺序结构是无法满足用户要求的。
详细内容
一、关系运算符和关系表达式
1.关系运算符:
操作符 作用
> 大于
>= 大于等于
< 小于
<= 小于等于
= = 等于
!= 不等于
2.关系表达式:
由关系运算符将两个表达式连接起来的式子,称关系表达式。
二、逻辑运算符和逻辑表达式
1.逻辑运算符
&& 逻辑与
|| 逻辑或
! 逻辑非
2.逻辑表达式用逻辑运算符将关系表达式或逻辑量连接起来的式子就是逻辑表达式。
3.逻辑运算符的优先级
! → && → ||
三、条件运算符及条件表达式
1.条件运算符
?,
C语言中唯一的一个三目运算符。
2.条件表达式形式:表达式1?表达式2:表达式3
说明:
·条件运算符的执行顺序
·条件运算符优先于赋值运算符
注意
总结
·运算符的结合方向为“自右至左”
·表达式1的类型可与表达式2和表达式3的类型不同。
四、IF语句在C中条件语句的一般形式为,
if(表达式)
语句1;
else
语句2;
执行过程如下:
如果表达式的值为非0(TURE)即真,则执行语句1,执行完语句1从语句2后开始继续向下执行; 如果表达式的值为0(FALSE)即假,则跳过语句1而执行语句2。然后程序继续往下执行。所谓表达式是指任何合法的C语言表达式。
注意:
1,条件执行语句中“else 语句2;”部分是选择项,可以缺省,此时条件语句变成:
if(表达式) 语句1;
表示若表达式的值为非0则执行语句1,否则跳过语句1继续往下执行。
2,如果语句1或语句2有多于一条语句要执行时,必须使用"{"和"}" 把这些语句包括在其中,此时条件语句形式为:
if(表达式)
{ 语句体1; }
else
{语句体2;}
五、举例说明例1:计算y的值
main( )
{
float x;
float y;
printf(″请输入x,″);
scanf(″%f″,&x);
if (x>1)
y=x+1;
else
y=x- 1;
printf(″x=%6.2f,y=%6.2f\n″,x,y);
}
例2 从键盘接收两个数,求两个数中的最大值、最小值
main( )
{ float x,y;
float max,min;
printf(″请输入两个数x,y,″);
scanf(″%f,%f″,&x,&y);
if (x>y)
{ max=x;
min=y; }
else
{ max=y;
min=x; }
printf(″max=%6.2f,min=%6.2f\n″,max,min);
}
例3 输入三个整数,按大小顺序输出程序如下:
#include <stdio.h>
main()
{ int a,b,c,temp ;
scanf(“%d,%d,%d”,&a,&b,&c) ;
if (a<b)
{ temp=a; a=b ; b=temp ; }
if (a<c)
{ temp=a; a=c ; c=temp ; }
if (b<c)
{ temp=b; b=c ; c=temp ; }
printf(“%4d,%4d,%4d”,a,b,c) ;
}
本讲对关系运算符和关系表达式、逻辑运算符和逻辑表达式做了详细的论述;并对条件运算符及条件表达式;通过对上面的论述,可以得到对选择结构条件的建立。用IF语句对选择结构来得到实现,IF语句的格式及其应用。
选择结构程序设计(二)
说明
内容
1.if 语句的嵌套
2.switch语句
举例说明
重点
1.if 语句的嵌套方法
2.switch语句的应用条件使用方法
难点
复杂条件的表示;if和switch语句的正确使用。
问题提出
前面讲了关于两选一的操作,那么多种选择怎么实现呢?
详细内容
一、if语句的嵌套条件语句可以嵌套,这种情况经常碰到,但条件嵌套语句容易出错,其原因主要是不知道哪个if对应哪个else。
可用阶梯式if-else-if结构。
三层阶梯式if语句执行流程图阶梯式结构的一般形式为,
if(表达式1)
语句1;
else if(表达式2)
语句2;
else if(表达式3)
语句3;
,
else
语句n;
这种结构是从上到下逐个对条件进行判断,一旦发现条件满足就执行与它有关的语句,并跳过其它剩余阶梯; 若没有一个条件满足,则执行最后一个else语句n。最后这个else常起着"缺省条件的作用。
重点
总结
同样,如果每一个条件中有多于一条语句要执行时,必须使用"{"和"}"把这些语句包括在其中。
例1编程计算函数值
main( )
{ float x;
float y;
printf(″请输入x,″);
scanf(″%f″,&x);
if (x<0)
y=-1;
else
if (x=0) y=0;
else y=1;
printf(″x=%8.4f,y=%5.2f\n″,x,y);
}
二、switch语句引入:虽然if语句的规则嵌套可以实现多分支的选择,但不够直观简洁,特别是在分支较多的情况下,if语句的嵌套层次也会更深,增加了理解的难度,也不便于修改和扩充。多分支选择的switch语句,能够解决多分支选择问题更加方便有效。
switch语句执行流程图开关语句
开关语句格式为,
switch(表达式)
{ case 常量1,
语句1 或空;
case 常量2,
语句2 或空;
…… …… ……
case 常量n;
语句n 或空;
default,
语句n+1 或空;
}
执行switch开关语句时,将常量表达式的值逐个与case后的常量进行比较,若与其中一个相等,则执行该常量下的语句,若不与任何一个常量相等,则执行default 后面的语句。注意:
1,switch中case常量可以是数值(整数),也可以是字符,但不能为其他的值。
2,可以省略一些case和default。
3,每个case或default后的语句可以是多个语句,但不需要使用"{"和"}"括起来。
4.每个case语句体的最后都应有一个break语句。
5.使用switch语句的关键是构造switch后的表达式和确定case常量表。
例1:从键盘输入一个字符,若为’a’ 输出abort,若为’q’输出quit,’f’
输出fail,其他字符输出出错信息’error’。
main()
{ char ch ;
ch=getchar() ;
switch(ch) /*变量为整型数的开关语句*/
{ case ‘a’,
printf("abort\n");
break; /*退出开关语句*/
case ‘q’,
printf("quit\n");
break;
case ‘f’,
printf("fail\n");
break;
default,
puts("Error");
break; }
}
例2,输入一个百分制成绩,输出对应的等级。
分析:解决本题的关键是如何将输入的百分制成绩与case常量联系起来,不难想到将百分制成绩(用score表示)除以10之后再取整,一定得到0到10之间的数。9、10对应’a’,8对应‘b‘,……,5、4、3、2、1、0对应’e’既不及格。
#include<stdio.h>
main()
{
char grade;
float score;
printf(“please input a score\n”);
scanf(“%f”,&score) ;
switch((int)(score/10.0))
{ case 10:
case 9,grade=’A’;break;
case 8,grade=’B’;break ;
case 7,grade=’C’;break ;
case 6,grade=’D’;break;
default,greade=’E’ ;
}
printf(“score=%f,grade=%c”,score,grade) ;
}
从以上两例的解决办法看,使用switch语句编写程序的关键是如何构造switch后的常量表达式和case 常量表。
本讲小结:
1.阶梯式结构的一般形式为,
if(表达式1)
语句1;
else if(表达式2)
语句2;
else if(表达式3)
语句3;
,
else
语句n;
2.switch(表达式)
{
case 常量1,
语句1 或空;
case 常量2,
语句2 或空;
case 常量n;
语句n 或空;
default,
语句n+1 或空;
}
本节主要解决多种选择的实现,并讲述了关于选择结构的嵌套,用嵌套来实现多种选择的分支语句。这个是本章的重点也是难点。
本题的解法很多,请读者自己设计一种解法。
具体输入几个数据作为讲解示例
示例应包括几个方面
可以用一个具体例题引入
强调表达式的值与case后面常量的关系
输入几个数据作为讲解示例
示例应包括几种情况
当学生理解到一定程度,可以向学生提出一些问题启发学生对程序的理解