C语言是一种结构化的程序设计语言,它支持3种结构:
1、顺序结构
2、选择结构
3、循环结构
我们⽇常所⻅的事情都可以拆分为这三种结构或者这三种结构的组合。这是C语言创作者的强大之处。选择结构由选择语言(或分支语言)实现,循环结构由循环语句实现。
我们可以使⽤
if
、
switch
实现分⽀结构,使⽤
for
、
while
、
do while
实现循环结构。
此章详细介绍分支语句。
一、if语句
1.1 if
1 if(表达式)
2 语句
表达式成⽴(为真),则语句执⾏,表达式不成⽴(为假),则语句不执⾏。在C语⾔中,0为假,⾮0表⽰真(此处经常会认为1为真),也就是表达式的结果如果是0,则语句不执⾏,表达式的结果如果不是0,则语句执⾏。
1.2 else
else通常与if连用组成 if ... else ... 语句,语法形式如下:
1 if(表达式)
2 语句1
3 else
4 语句2
EG:输入年龄,如果>=18,则输出“成年”,否则输出“未成年”。
1 #include<stdio.h>
2
3 int main()
4 {
5 int age = 0;
6 printf("请输入你的年龄。\n");
7 scanf("%d",&age);
8 if(age >=18)
9 printf("成年\n");
10 else
11 printf("未成年\n”);
12 return 0;
13 }
if 和 else 默认只能控制一条语句,如果想分⽀中包含多条语,那就要使⽤ { } 将代码括起来,else 后也可以跟上⼤括号。如下:
1 #include<stdio.h>
2
3 int main()
4 {
5 int age = 0;
6 printf("请输入你的年龄。\n");
7 scanf("%d",&age);
8 if(age >=18)
9 {
10 printf("成年\n");
11 printf("可以谈恋爱了\n");
12 }
13 else
14 {
14 printf("未成年\n”);
15 printf("不可以谈恋爱\n");
16 }
17 return 0;
18 }
上述结果就能打印多条分支语句。
1.3 嵌套if
在
if else
语句中,
else
可以与另⼀个
if
语句连⽤,构成多重判断。
EG:
1 #iclude<stdio.h>
2
3 int main()
4 {
5 int num = 0;
6 scanf("%d", &num);
7 if(num == 0)
8 printf("输⼊的数字是0\n");
9 else if(num > 0) //这⾥的if 相当于嵌套在else语句中,形成了嵌套结构。
10 printf("输⼊的数字是正数\n");
11 else
12 printf("输⼊的数字是负数\n");
13 return 0;
14 }
后一个if ... else ...语句就嵌套在第一个else后面。
1.4 悬空else问题
如果有多个 if 和 else ,可以记住这样⼀条规则, else 总是跟最接近的 if 匹配。
看如下代码:
1#include <stdio.h>
2
3 int main()
4 {
5 int a = 0;
6 int b = 2;
7 if(a == 1)
8 if(b == 2)
9 printf("hehe\n");
10 else
11 printf("haha\n");
12 return 0;
13 }
此处很多人认为是打印“haha”,其实什么都不打印。这就是悬空 else 的问题,如果有多个 if 和 else ,可以记住这样⼀条规则, else 总是跟最接近的 if 匹配。
上⾯的代码排版,让
else
和第⼀个
if
语句对⻬,让我们以为
else
是和第⼀个if匹配的,当
if
语句不成⽴的时候,⾃然想到的就是执⾏
else
⼦句,打印
haha
,但实际上
else
是和第⼆个
if
进⾏匹配的,这样后边的
if...else
语句是嵌套在第⼀个
if
语句中的,如果第⼀个
if
语句就不
成⽴,嵌套
if
和
else
就没机会执⾏了,最终啥都不打印。