1.if语句
1.1 if
if (表达式)
语句
表达式判断成立(为真),则执行语句;表达式不成立(为假),则语句不执行。
在C语言中,没有直接定义布尔类型,0为假,非0表示真。也就是表达式的结果如果是0,则语句不执行,表达式的结果如果不是0,则语句执行。
1.2 else
if (表达式)
语句1
else
语句2
如果表达式的结果为0就执行语句2,表达式结果如果不为0就执行语句1。
1.3 分支中包含多条语句
默认if
和else
语句中默认都只控制一条语句。
#include <stdio.h>
int main(){
int age = 0;
scanf("%d", &age);
if(age >= 18)
printf("成年了\n")
printf("可以谈恋爱了\n");
return 0;
}
那如果我们要if语句同时控制2条语句,那就要使⽤ {}
将代码括起来, else 后也可以跟上⼤括号。
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if (age >= 18) //if 后使⽤{} 控制多条语句-这个块也叫:程序块,或者复合语句
{
printf("成年了\n");
printf("可以交⼥朋友了\n");
}
return 0;
}
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if (age >= 18) //if 后使⽤{} 控制多条语句-这个块也叫:程序块,或者复合语句
{
printf("成年了\n");
printf("可以交⼥朋友了\n");
}
else //else 后使⽤{}控制多条语句-这个块也叫:程序块,或者复合语句
{
printf("未成年\n");
printf("不可以早恋哦\n");
}
return 0;
1.4 嵌套if
在if else
语句中,else
可以与另一个if语句连用,构成多重判断。
//⽅法1
#include <stdio.h>
int main() {
int age = 0;
scanf("%d", &age);
if (age < 18)
printf("少年\n");
else if (age <= 44)
printf("⻘年\n");
else if (age <= 59)
printf("中⽼年\n");
else if (age <= 90)
printf("⽼年\n");
else
printf("⽼寿星\n");
return 0;
}
//带上⼤括号更容易看明⽩
#include <stdio.h>
int main() {
int age = 0;
scanf("%d", &age);
if (age < 18) {
printf("少年\n");
} else {
if (age <= 44) {
printf("⻘年\n");
} else {
if (age <= 59) {
printf("中⽼年\n");
} else {
if (age <= 90)
printf("⽼年\n");
else
printf("⽼寿星\n");
}
}
}
return 0;
}
1.5 悬空else问题
如果多个if
和else
,可以记住这样一条规则,else
总是跟最接近的if匹配。
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if(a == 1)
if(b == 2)
printf("hehe\n");
else
printf("haha\n");
return 0;
}
虽然else
是跟第一个if
对齐的,但是距离第二个if
比较近,所以是跟第二个if
相匹配的,为了避免这种情况,我们可以在if
和else
后面加上大括号,代码的逻辑就会更清晰,平常我们写代码时,不管是多条语句还是一条语句,都可以带上大括号,这样就可以避免这种匹配错误的情况。
2.关系操作符
C语言中用于比较的表达式,称为"关系表达式"(relational expression),里面使用的运算符就称为"关系表达式"(relational operator),主要有:
- >大于运算符
- <小于运算符
- >=大于等于运算符
- <=小于等于运算符
- ==相等运算符
- !=不相等运算符
例如:
a == b;
a != b;
a < b;
a > b;
a <= b;
a >= b;
关系表达式通常返回0和1,表示真假。
C语言中,0表示假,非0表示真。
关系表达式常用于if或while结构.
if (x = = 5){
printf("x的值为5\n")
}
注意:相等运算符==与赋值运算符=是两个不一样的运算符,不要混淆。
多个关系与算符不宜连用,连用不会报错但达不到想要的结果。
a<b<c;
//实际执行方式如下
(i < j) < k
可以用逻辑与符号&&来表达想要的结果
i < j && j < k
3.逻辑操作符
逻辑运算符提供逻辑判断功能,用于构建更复杂的表达式,主要有下面三个运算符。
- !:逻辑取反运算符(改变单个表达式的真假)。
- &&:与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假)。
- ||:或运算符,就是或者的意思(两侧至少有一个表达式为真,则为真,否则为假)。
3.1逻辑取反运算符
取反,顾名思义就是取相反的值,如过变量或表达式为真,取反则为假,反之。
int flag = 0;
if(!flag){
printf("关系表达式为真");
}
3.2与运算符
与运算符,也是并且的意思,两边都为真时结果才为真,只要有一方为假结果就是假。
int num = 5;
if(5 > 0 && 5 < 10){
printf("5是大于零小于10的数");
}
3.3或运算符
或运算符,也是或者的意思,两边表达式只要有一方为真结果就为真,两边都为假时结果才为假。
int month = 0;
scanf("%d",&month);
if(month == 12 || month == 1 || month == 2){
printf("%d月为冬季",&month);
}
3.4短路
C语言计算中总是从左往右计算。如果左边的表达式满足逻辑运算符的条件,就不再对右边的表达式求值。这种情况称为“短路”。
if(num > 0 && num < 10)
如果num的值小于0,那么右边表达式num<10便不再执行。
if(month == 12 || month == 1 || month == 2)
如果month==12,那么就不用再判断month是否等于1或2,也就不会再往后执行。
像这种仅仅根据左操作数的结果就能知道整个表达式的结果,不再对右操作数进⾏计算的运算称为短路求值。
学习过程中的代码我放到Gitee和Github中,欢迎大家监督,如有不对的地方欢迎大家批评指正。
Gitee: https://gitee.com/yryld
Github: https://github.com/hub-art