1. if语句
1.1 if
if 语句的语法形式如下:
if
(
表达式
)
语句
表达式成⽴(为真),则语句执⾏,表达式不成⽴(为假),则语句不执⾏
在C语⾔中,0为假,⾮0表⽰真,
也就是表达式的结果如果是0,则语句不执⾏,表达式的结果如果不
是0,则语句执⾏。
例⼦:输⼊⼀个整数,判断是否为奇数
#
include
<stdio.h>
int
main
()
{
int
num =
0
;
scanf
(
"%d"
, &num);
if
(num %
2
==
1
)
printf
(
"%d
是奇数
\n"
, num);
return
0
;
}
1.2 else
如果⼀个数不是奇数,那就是偶数了,如果任意⼀个整数,我们要清楚的判断是奇数还是偶数怎么表
⽰呢?
这⾥就需要
if...else...
语句了,语法形式如下:
if
(
表达式
)
语句
1
else
语句
2
例⼦:输⼊⼀个整数,判断是否为奇数,如果是奇数打印是奇数,否则打印偶数。
#
include
<stdio.h>
int
main
()
{
int
num =
0
;
scanf
(
"%d"
, &num);
if
(num %
2
==
1
)
printf
(
"%d
是奇数
\n"
, num);
else
printf
(
"%d
是偶数
\n"
, num);
return
0
;
}
练习:输⼊⼀个年龄,>= 18岁就输出:成年,否则就输出:未成年
#
include
<stdio.h>
int
main
()
{
int
age =
0
;
scanf
(
"%d"
, &age);
if
(age>=
18
)
printf
(
"
成年
\n"
);
else
printf
(
"
未成年
\n"
);
return
0
;
}
1.3 分⽀中包含多条语句
默认在
if
和
else
语句中默认都只控制⼀条语句,⽐如:
#
include
<stdio.h>
int
main
()
{
int
age =
0
;
scanf
(
"%d"
, &age);
if
(age >=
18
)
printf
(
"
成年了\n"
);
printf
(
"
可以谈恋爱了\n"
);
return
0
;
}
上⾯的代码,你会发现输⼊的值不管是>=18 还是<18,"可以谈恋爱了" 都会打印在屏幕上。
这是因为
if
语句只能控制⼀条语句,就是
printf("
成年了
\n");
,if语句为真,则打印成年了,
if语句为假,则不打印,对于
printf("
可以谈恋爱了
\n");
是独⽴存在的,不管if语句的条件的真
假,都会被执⾏。那如果我们要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
语句连⽤,构成多重判断。
⽐如:要求输⼊⼀个整数,判断输⼊的整数是0,还是正数或者负数。请看如下代码:
#
include
<stdio.h>
int
main
()
{
int
num =
0
;
scanf
(
"%d"
, &num);
if
(num ==
0
)
printf
(
"
输⼊的数字是
0\n"
);
else if
(num >
0
)
//
这⾥的
if
相当于嵌套在
else
语句中,形成了嵌套结构
printf
(
"
输⼊的数字是正数
\n"
);
else
printf
(
"
输⼊的数字是负数
\n"
);
return
0
;
}
上图中橙⾊背景的代码就是嵌套在前⾯的
else
⼦句中的,构成了嵌套的if语句。
再⽐如:
输⼊⼀个整数,如果是正数,再判断是奇数还是偶数,并输出;如果不是正数则输出:⾮正数。
#
include
<stdio.h>
int
main
()
{
int
num =
0
;
scanf
(
"%d"
, &num);
if
(num>
0
)
{
if
(num%
2
==
0
)
printf
(
"
偶数
\n"
);
else
printf
(
"
奇数
\n"
);
}
else
{
printf
(
"
⾮正数
\n"
);
}
return
0
;
}
上⾯的代码中橙⾊背景的代码也是嵌套在
if
语句中的,构成了嵌套的
if
语句。
以上就是嵌套if语句的语法,有了嵌套if语句,就可以完成更多复杂逻辑的判断。
练习:
输⼊⼀个⼈的年龄
如果年龄
<
18
岁,打印
"
少年
"
如果年龄在
18
岁⾄
44
岁打印
"
⻘年
"
如果年龄在
45
岁⾄
59
岁打印
"
中⽼年
"
如果年龄在
60
岁⾄
89
岁打印
"
⽼年
"
如果
90
岁及以上打印
"
⽼寿星
"
参考代码:
//
⽅法
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<=
89
)
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<=
89
)
printf
(
"
⽼年
\n"
);
else
printf
(
"
⽼寿星
\n"
);
return
0
;
}
1.5 悬空else问题
如果有多个
if
和
else
,可以记住这样⼀条规则,
else
总是跟最接近的
if
匹配。
我们⾸先从下⾯代码开始
1
#
include
<stdio.h>
2
int
main
()
3
{
4
int
a =
0
;
5
int
b =
2
;
6
if
(a ==
1
)
7
if
(b ==
2
)
8
printf
(
"hehe\n"
);
9
else
10
printf
(
"haha\n"
);
11
return
0
;
12
}
程序运⾏的结果是啥?
很多初学者,上来以判断
a
是 0,不等于 1 ,那就执⾏
else
⼦句,打印
haha
但是当你去运⾏代码,输出的结果是:啥都不输出。
为什么呢?
这就是悬空
else
的问题,如果有多个
if
和
else
,可以记住这样⼀条规则,
else
总是跟最接近
的
if
匹配。
上⾯的代码排版,让
else
和第⼀个
if
语句对⻬,让我们以为
else
是和第⼀个if匹配的,当
if
语句不成⽴的时候,⾃然想到的就是执⾏
else
⼦句,打印
haha
,但实际上
else
是和第⼆个
if
进⾏匹配的,这样后边的
if...else
语句是嵌套在第⼀个
if
语句中的,如果第⼀个
if
语句就不
成⽴,嵌套
if
和
else
就没机会执⾏了,最终啥都不打印。
如果代码改成下⾯这样就更加容易理解了
#
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匹配,可以这样修改代码:
#
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
;
}
只要带上适当的⼤括号,代码的逻辑就会更加的清晰,所以⼤家以后在写代码的时候要注意括号的使
⽤,让代码的可读性更⾼。