【3.0】C-选择结构及其应用
前言
这部分东西不多,相对简单,快速上手,通俗易懂。
关系运算符和关系表达式
关系运算符
在程序中经常需要比较两个量的大小关系,以决定程序的下一步进行的工作。比较两个量的运算符称为关系运算符。通俗来讲,也就是比较运算,即将两个操作数比较并产生运算结构0(假)或1(真)。C语言提供的关系运算符有6种,例如:
运算符 | 功能 |
---|---|
< | 小于 |
<= | 小于或等于 |
> | 大于 |
>= | 大于或等于 |
== | 等于 |
!= | 不等于 |
说明:
- C语言中的关系运算符与数学中的(>,>=等)不一样。
- 以上6种关系运算符中,前4种(<,<=,>,>=)的优先级相同,后两种(==,!=)的优先级相同,前4种优先级高于后两种。
- 关系运算符的结合性为从左到右。
关系表达式
关系表达式是指用关系运算符将两个数(或者表达式)连接起来进行关系运算的式子,代码示例:
1 | 3<2; |
关系表达式的结果是逻辑值,即真值或者假值,其中1为真,0为假,真值表示关系表达式表示关系成立,反之则不成立。
优先级和结合性
关系运算符的结合性都是自左向右的。
注意运算符的优先级
逻辑运算符和逻辑表达式
C语言中,对参与逻辑运算的所以数值,都转化为逻辑“真”或“假”后才参与逻辑运算,如果参与逻辑运算的数值为0,则把它作为逻辑“假”处理,而所有非0的数值都作为逻辑“真”处理。
逻辑运算符
C语言中有3种逻辑运算符:逻辑与(和)(&&),逻辑或(||),逻辑非(!),详细如下表:
运算符 | 功能 |
---|---|
&& | 与(和),双目运算符,左右两数为“真”则为真,反之为“假” |
|| | 或,双目运算符,左右都为“假”则为假,反之为“真” |
! | 非,单目运算符,对操作符取反 |
逻辑表达式
逻辑表达式是由逻辑运算符将逻辑量连接起来构成的式子。对象可以是任何类型的数据,但运算结果一定是整型值,并且只有两个值:1和0,分别表示真和假。
说明:
- 对于
a&&b
,只有a
的值为真时,才需要判断b
的值。 - 对于
a||b
,只有a
的值为真时,才不需要判断b
的值。 - 对于$2<a<3$这类表达式,C语言中的实现为
(a>2)&&(a<3)
。
优先级和结合性
三种运算符的优先级由高到低依次为:!
,&&
,||
。
逻辑运算符中的&&
和||
的结合性为从左向右,!
的结合性为从右向左。
【实例】逻辑运算符的应用
【代码示例】
1 |
|
【输出结果】
if
语句
if
语句是条件选择语句,它先对给定条件进行判断,根据判定的结果(真或假)决定要执行的语句。if
语句有if
分支,if-else
分支和嵌套的if
语句3种形式。
if
分支
if
分支是最简单的条件语句,if
分支语句的一般形式如下:
1 | if(表达式) |
其中,表达式一般为逻辑语句或者关系表达式。语句1可以是一条简单的居于或者多条语句,当为多条语句时,需要用大括号{}
,将这些语句括起来,构成复合语句。if
分支语句的执行过程是:当表达式值为真(非0)时,会执行语句1,反之则不执行。
【实例】从键盘输入一个整数,如果输入的是2的倍数,则显示“成功”,反之则不显示
【代码示例】
1 |
|
【输出结果】
if-else
分支
if
分支语句只允许在条件为真时指定要执行的语句,而if-else
分支还可以在条件为假时指定要执行的语句。if-else
分支语句的一般形式如下:
1 | if(表达式) |
还是上面2的整数的例子,稍微改进一下,如果不是2的倍数,则输出“不是2的倍数”。代码示例:
1 |
|
输出结果:
【实例】输入三个值,如果三个值均大于0且符合任意两个之和大于第三个,则计算以这三个值为边的三角形面的结果。
【代码示例】
1 |
|
【输出结果】
已知三边,求三角形面积参考 海伦公式
嵌套的if
语句
简单的if
语句只能通过给定条件的判断执行两种操作,而不能多种操作中选择一个,此时嵌套的if
语句解决了这个问题。**if
语句中又包含一个或者多个if
语句时,称为if
语句的嵌套**。
常用的if
语句嵌套有以下两种形式:
形式一,代码示例:
1
2
3
4
5
6
7
8
9
10if(表达式)
if(表达式)
语句1;
else
语句2;
else
if(表达式)
语句3;
else
语句4;形式二,代码示例:
1
2
3
4
5
6
7
8
9
10if(表达式1)
语句1;
else if(表达式2)
语句2;
else if(表达式3)
语句3;
else if(表达式n)
语句n;
else
语句n+1;【实例】将学生成绩按分数输出 A B C D E 等级
【补充】成绩对照关系表百分制 等级 90$\leq$score$\leq$100 A 80$\leq$score$<$90 B 70$\leq$score$<$80 C 60$\leq$score$<$70 D 0$\leq$score$<$60 E 【代码示例】
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
int main(){
int score; //定义分数
printf("请输入分数:");
scanf("%d", &score); //获取输入的分数
if (score>100 || score <0)
{
printf("输入的成绩不合法");
}else if (score <=100 && score>=90)
{
printf("该同学的成绩等级为 A");
}else if (score <90 && score >=80){
printf("该同学的成绩等级为 B");
}else if (score <80 && score >=70)
{
printf("该同学的成绩等级为 C");
}else if (score <70 && score >=60)
{
printf("该同学的成绩等级为 D");
}else{
printf("该同学的成绩等级为 E");
}
return 0;
}【输出结果】
switch
语句
对于常规的两种选择可以使用if-else
语句,那么对于两种及以上的多种选择则需要switch
语句的帮助了。当然你也可以通过使用嵌套的if-else
语句来实现多种选择。
switch
语句的一般格式如下:
1 | switch (表达式) |
【实例】在键盘上输入 17 实现输出对应的星期几,如果输入的值不是 17,则输出非法数据。
【代码示例】
1 |
|
【说明】
break
表示跳出当前循环。case
的循序是任意的,也就是说default
可以放到最前面或者任意一个位置。
条件运算符和条件表达式
条件运算符很特殊,它是C语言中唯一一个三目运算符,也就是说,它要求要有三个运算对象。条件表达式的一般形式如下:
1 | 表达式1 ? 表达式2 : 表达式3 ; |
条件表达式的执行过程:如果表达式1的值为真,则执行表达式2,反之则执行表达式3。例如:
1 | c=a>b?a:b; |
若a大于b,则c的值由a赋值,反之,则c的值由b赋值。
比较两个数最大值可以使用该方法
说明:
条件运算符的优先级低于算术运算符,关系运算符以及逻辑运算符,仅高于赋值运算符和逗号运算符。
条件运算符的结合性为从左到右,当有条件运算符镶嵌时,按照从右到左的顺序依次运算。
条件表达式中三个表达式的类型可以不同,其中表达式1表示条件,只能是0或者非0的结果;当表达式2和表达式3的类型不同时,条件表达式值的类型为两者中较高的类型(可以参考自动类型转换阶级)。例如:
1
2int a=1,b=2;
a<b?3:4.0;该例子的值为 3.0 而不是整型数 3 。
应用实例
【实例】经典问题,对于输入的年份,计算该年份是否为闰年。
【代码示例】
1 |
|
【说明】闰年判断规则:
- 能被4整除且不能被100整除。
- 世纪年能被400整除的。