内容正文:
第04章 选择结构
1
1. 关系运算符和逻辑运算符
2. if语句
3. 条件运算符
4. switch语句
5. 选择的嵌套
本章内容
2
关系运算符:>、>=、<、<=、==、!=
用关系运算符把两个操作数连接起来的表达式称为关系表达式。如果关系表达式成立,则其值为1,否则为0
==和!=的优先级略低于其他四个运算符
一、关系运算符和表达式
3
运算符 < <= > >= == !=
名称 小于 小等于 大于 大等于 等于 不等于
类型 双目
优先级 6 7
结合性 左结合
合法的关系表达式
假设num1=3,num2=4,num3=5,求
(1) num1 > num2
(2) (num1 > num2) != num3
(3) (num1 < num2) + num3
(4) num3 < num2 < num1
4
逻辑运算符:&&、||、!
a&&b:当a和b都非0时结果为1,否则为0;
a||b:当a和b都为0时结果为0,否则为1;
!a:当a非0时,!a结果为0,当a为0,!a结果为1
二、逻辑运算符和表达式
5
运算符 ! && ||
名称 逻辑非 逻辑与 逻辑或
类型 单目 双目
优先级 2 11 12
结合性 左结合 右结合
逻辑表达式的值为0或1
优先级:
!→ 算术运算符 → 关系运算符 → && → || → 赋值运算符
6
已知num = 12,则
!num
num > 1 && num <= 31
num || num > 31
已知int a = 4, b = 5, c;,求下列表达式的值:
(c = b) > 3 && 2 || 8 < b - !a
已知能被4整除,但不能被100整除,或者能被400整除的年份为闰年。给定年份year,求判断闰年的逻辑表达式。
7
year % 4 == 0 && year % 100 != 0 || year % 400 == 0
判断字符变量ch是否为大写字母、字母、数字字符的表达式
8
大写字母:ch>=‘A’&&ch<=‘Z’
字母:ch>=‘A’&&ch<=‘Z’||ch>=‘a’&&ch<=‘z’
数字:ch>=‘0’&&ch<=‘9’
‘0’<=ch<=‘9’
短路运算符&&和||
&&:从左向右依次计算各表达式值,如果有一个表达式的值为0,则整个表达式的值为0,并忽略后面表达式的计算。
||与&&类似
9
int a = 1, b = 2, c = 3, d = 0;
b++ == 2 && b - a != 2 && c-- != 3;
printf("%d,%d,%d
", a, b, c);
单分支if语句
if (表达式)
{
语句
}
三、if语句
10
0(假)
表达式
语句
1(真)
双分支if语句
if (表达式)
{
语句1
}
else
{
语句2
}
11
假
真
表达式
语句1
语句2
例1 输入三个整数,
输出这三个数中的最大值;
按从大到小的顺序输出这三个整数。
12
例2 编写程序,从键盘输入三角形的三条边a、b和c,如果三边长可以组成三角形,计算并输出三角形的面积,结果保留2位小数,否则输出”不能组成三角形”。
13
多分支if语句
if (表达式1)
语句1
else if (表达式2)
语句2
…
else if (表达式n-1)
语句n-1
else
语句n
14
例3 编写程序,输入x,计算并输出分段函数f(x)的值。分段函数定义如下:
15
说明:
1. if语句中,括号内的表达式一般为关系表达式或逻辑表达式。实际上可以为任意表达式。
2. 当if语句以表达式的值不等于0作为条件时,可直接简写成表达式作为条件。如if(x!=0) 可直接写成 if(x)。同理,if(x==0)可直接写成if(!x)
16
程序改错:
17
#include <stdio.h>
int main()
{
int n;
printf("input n:");
scanf("%d", &n);
if (n % 3 = 0)
printf("n=%d YES
", n);
else
printf("n=%d NO
", n);
return 0;
}
C语言中唯一的三目运算符:?:
一般形式:
表达式1 ? 表达式2 : 表达式3
优先级与结合性:
算术→关系→&&→||→条件→赋值→逗号
右结合性
四、条件运算符和表达式
18
C语言中,用switch语句描述多路按值选择结构。switch语句的一般形式为:
switch(表达式)
{
case 常量表达式1:语句1
case 常量表达式2:语句2
. .
case 常量表达式n:语句n
default: 语句n+1
}
五、switch语句
19
说明:
1. switch后面括号内的表达式类型必须是整型、字符型或枚举型
2. 各子句中包含的语句可以是任意条,也可以没有
3. default子句可以省略,否则最多出现一次
4. 各个case和default出现次序不影响执行结果。习惯上default子句写在所有case子句之后
5. 多个case子句可以共用一组执行语句
20
例如:执行下面这段代码时,若grade的值是'B',结果打印?
switch(grade)
{
case 'A': printf("GREAT!
");
case 'B': printf("GOOD!
");
case 'C': printf("OK!
");
case 'D': printf("NO!
");
default: printf("ERROR!
");
}
21
执行下列语句后,整型变量x的值为( )
switch(x=1)
{
case 0: x=10;break;
case 1: switch(x=1)
{
case 1: x=20;
case 2: x=30; break;
default: x=0;
}
x=1;break;
}
A. 30 B. 20 C. 10 D. 1
22
例4:输入两个操作数及一个运算符,输出运算结果。
23
例5:用switch语句编程计算:
sin(x) 0.5≤x<1.5
y(x)= cos(x) 1.5≤x<4.5
tan(x) 4.5≤x<7.5
24
嵌套选择语句指的是在选择语句中又包含一个或多个选择语句
当出现if语句嵌套时,if和else数目不一定相同,但if数目总是不少于else。有else一定有if,有if则不一定有else
六、选择的嵌套
25
else和if的配对原则:
else总是和在它之前的、离它最近的、尚未配对过的、同一语句块中的if语句配对
26
例6:求方程ax2+bx+c=0的根
27
$$