第四章 选择结构程序设计
4.1 选择结构和条件判断
C语言有两种选择语句:if语句和switch语句
4.2 用if语句实现选择结构
4.2.1 例子
例:输入3个数字a,b,c,要求按由小到大的顺序输出。
// 输入a,b,c。按照从小到大的顺序输出
#include <stdio.h>
int main()
{
double a, b, c, t;
printf("请输入三个不同大小的数字:");
scanf("%lf%lf%lf", &a, &b, &c);
if (a > b)
{
t = a;
a = b;
b = t;
}
if (a > c)
{
t = a;
a = c;
c = a;
}
if (b > c)
{
t = b;
b = c;
c = t;
}
printf("%5.2f %5.2f %5.2f", a, b, c);
return 0;
}
4.2.2 if语句的一般形式
一般形式如下:
还可以根据需要写成以下三种形式:
如:
4.3 关系运算符和关系表达式
在C语言中,比较符(或称比较运算符)称为关系运算符。
4.3.1 关系运算符机器优先次序
4.3.2 关系表达式
用关系运算符将两个数值或数值表达式连接起来的式子,称为关系表达式
4.4 逻辑运算符和逻辑表达式
用逻辑运算符将关系表达式或其他逻辑量连接起来的式子就是逻辑表达式
4.4.1 逻辑运算符及其优先次序
运算符 | 含义 | 举例 | 说明 |
---|---|---|---|
&& | 逻辑与(AND) | a && b | 如果a和b都为真,则结果为真,否则为假 |
|| | 逻辑或(OR) | a || b | 如果a和b有一个以上为真,则结果为真,二者都为假时,结果为假 |
! | 逻辑非(NOT) | !a | 如果a为假,则!a为真; 如果a为真,则!a为假 |
“&&”和“||”是双目(元)运算符,它要求有两个运算对象(操作数)。“!”是一目(元)运算符,只要求有一个操作对象。
在一个逻辑表达式中如果包含多个逻辑运算符,则按照以下的优先次序:
逻辑非(!)>算术运算符>关系运算符>&&和||>赋值运算符,同一级按照从左往右的顺序。
4.4.2 逻辑表达式
逻辑表达式的值应该是一个逻辑量“真”或“假”。C语言编译系统在表示逻辑运算结果时,用数值1表示“真”,用0表示“假”。但在判断一个量是否为“真”时,以0代表“假”,以非0代表“真”。如:
(1)a = 4,!a == 0
(2)a = 4, b = 5, a && b == 1, a || b == 1, !a || b == 1
(3)4 && 0 || 2 == 1
通过例子可以看出,由系统给出的逻辑运算结果只有0和1。而在逻辑表达式中作为参加逻辑运算的运算对象可以是任意数值。如果在一个表达式中不同位置上出现数值,应区分哪些是作为数值运算或关系运算的对象,那些是作为逻辑运算的对象。
在逻辑表达式的求解中,并不是所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。如:
(1)a && b && c。只有a为真时,才需要判别b的值。只有当a和b都为真时的情况下才需要判别c的值。如果a为假,就不必判断b和c;如果a为真,b为假,就不必判断c。
(2)a || b || c。只要a为真就不必判断b和c。只有a为假,才判别b。a和b都为假才判断c。
因此,如果有下面的逻辑表达式:
(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。
练习:
判别用year表示的某一年是否为闰年。闰年的条件是复合下面二者之一:①能被4整除,但不能被100整除②能被400整除。根据条件,写出逻辑表达式:
(year%4 == 0 && year%100 !=0) || year%400 = 0
4.5 条件运算符和条件表达式
条件运算符由两个符号(?和:)组成,必须一起使用。要求有三个操作对象,称为三目(元)运算符,它是C语言中唯一的一个三目运算符。其表达式为:
表达式1?表达式2:表达式3
其执行过程如下:
4.6 选择结构的嵌套
4.7 用switch语句实现多分支选择结构
注意:
(1)表达式应为整型或字符型。
(2)不需要依次执行之后的语句则在语句后面加上break;。
(3)default并非必须。default不需要break。
(4)多种情况执行相同的语句时,前面的case可以不写语句,只在最后一种情况后写语句即可。