if 语句
if 语句的格式是:
1
2
3
4
5
6
if (判定条件)
{
语句 1;
语句 2;
...
}
当 if 后小括号里的值判定为 1 时,才会执行花括号里的代码。(大于等于 0.5 均视为 1,反之均视为 0)
如:
1
2
3
4
if (3)
{
a = 15 + 6;
}
或者
1
2
3
4
5
6
a = 15;
if (a)
{
a -= 3;
a *= 2;
}
或者
1
2
3
4
5
6
7
a = 15;
b = 2;
if ((a >= 12) && (a != b))
{
a -= b;
b += 1;
}
以上 if 语句括号中的判定都是 1,花括号里内容都会执行。
当花括号中只有一句话时,可以省略花括号,如:
1
2
if (3)
a = 15 + 6;
else 语句
与 if 作伴的还有一个 else 语句,这个语句必须和 if 语句在一起才能使用,格式为:
1
2
3
4
5
6
7
8
if (判定条件)
{
语句 1;
}
else
{
语句 2;
}
当 if 内判定为 1 时执行语句 1,否则执行语句 2。
或者
1
2
3
4
5
6
7
8
9
10
11
12
13
if (判定条件 1)
{
语句 1;
}
else if (判定条件 2)
{
语句 2;
}
else if (判定条件 3)
{
语句 3;
}
else if ...
你可以在后面加很多个 else if,对于每一个 else if 来说,只有在前面的所有 if 和 else if 均判定为0时,才会进行该 else if 的判定。
关于花括号
if 语句的执行代码如果只有一句,那么是可以不用花括号的(当然用了也是对的),如:
1
2
if (i <= 1)
i += 1;
但是,如果你的 if 语句的执行代码有两句及以上,如:
1
2
3
if (i <= 1)
i += 1;
i *= 12;
在这里,事实上只有 i += 1;
是属于 if 的管辖范畴,即使你把 i *= 12;
和 i += 1;
对齐也是没有用的。
所以这里你必须使用花括号,改成:
1
2
3
4
5
if (i <= 1)
{
i += 1;
i *= 12;
}
花括号的意义把里面的代码段整合为一个语句块。
即:一个花括号等效于一个语句。
对于有 else 的多个 if 的复合语句,建议全部使用花括号。例如下面这段代码:
1
2
3
4
5
if (i <= 3)
if (j >= 6)
i += j;
else
i -= j;
这段代码的 else 看起来是对应的是第一个 if。然而事实上,else 遵循就近原则,它与离自己最近且未和 else 配对的 if 进行配对,所以实际上这个 else 对应的是第二个 if,所以实际上相当于是:
1
2
3
4
5
if (i <= 3)
if (j >= 6)
i += j;
else
i -= j;
这就和我们想要的效果不同了。所以这段代码应该改为:
1
2
3
4
5
6
7
if (i <= 3)
{
if (j >= 6)
i += j;
}
else
i -= j;
这样 else 就与第一个 if 配对。
使用 if 还不够熟练时,建议全部使用花括号,不管是单个语句还是多个语句,避免出错。注:之后学习的 while, do, for 等都是这样。
扩展:事实上 else if 只是一种便于阅读的缩写。例如开头那个例子,它的完全体写法是这样的:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
if (判定条件 1)
{
语句 1;
}
else
{
if (判定条件 2)
{
语句 2;
}
else
{
if (判定条件 3)
{
语句 3;
}
else ...
}
}
显然不如把 else if 写在一起更好阅读。
switch 语句
switch 语句的通式为:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
switch (被测量值)
{
case 值 1:
代码 1;
break;
case 值 2:
代码 2;
break;
...
default:
代码 n+1;
}
被测量值可以是一个变量,一个返回值不确定的函数等。
case 后的内容是被测量值有可能的取值。case 应以冒号结尾。
代码 1 是指被测量值为值 1 的时候执行的代码,同理,代码 2 是被测量值为值 2 时执行的代码。记住每一个 case 段落最后要加上一个 break;
结尾。
最后以 default:
结尾,当被测量值不满足之前给出的 n 个 case 时,执行 default 后的代码。当然 default 段落也可以不写。
上述 switch 其实等效于:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
if (被测量值 == 值 1)
{
代码 1;
}
else if (被测量值 == 值 2)
{
代码 2;
}
else if...
...
else
{
代码 n+1;
}
不同的 case 可以共用一个代码段,例如下面的格式:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
switch (被测量值)
{
case 值 1:
case 值 2:
case 值 3:
代码 1;
break;
case 值 4:
case 值 5:
代码 2;
break;
...
default:
代码 n+1;
}
它等效于:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
if (被测量值 == 值 1 || 被测量值 == 值 2 || 被测量值 == 值 3)
{
代码 1;
}
else if (被测量值 == 值 4 || 被测量值 == 值 5)
{
代码 2
}
else if...
...
else
{
代码 n+1;
}