if、 else 语句

 if在英文中的意思就是如果,在c语言中也表示类似的意思,“如果(怎么怎么样),就怎么怎么样”,代表着一种分支结构。为什么说是分支结构呢?因为如果有多个“如果”的话,那么每一个如果是不是就像是代表一个分支呢?

1、一些基本的结构

1.1、if的语法结构

if(表达式)

语句

if 后面括号中的表达式是要判断的语句,如果判断为真,那么就执行括号后面的语句,如果判断为假,那么就不执行后面的语句。(关于判断真假,可以参考另一篇文章)

逻辑关系如图

1.1.1、单条语句:

如果一个if后面想要执行一个语句,那么不需要加花括号。if判定为真后,就会执行它后面的语句。这个语句可以跟if(表达式)在同一行,也可以在下一行。为了使代码看起来更清晰,一般会放在下一行,并且使用缩进,这样可以更好的看到他们的从属关系。下面是一个简单的例子

#include<stdio.h>
int main()
{
	int age1 = 20;
    int age2 = 17;
	if (age1 > 18)
		printf("第一个人已经是成年人了诶");
    if (age2 > 18)
		printf("第二个人已经是成年人了诶");
	return 0;
}

这段代码因为20>18,结果为真,所以会打印出第一句话“第一个人已经是成年人了诶”。但第二个二if语句中17<18,结果为假,就不会打印第二句话“第二个人已经是成年人了诶”。

1.1.2、多条语句:

如果一个if后面想要执行多个语句,就需要使用花括号来把多个语句“包装”起来,使他们就像一个整体一样。如下面这个例子:

#include<stdio.h>
int main()
{
	int age = 20;
	if (age > 18)
	{
		printf("已经是成年人了诶");
		printf("不再是小孩子啦");
	}
	return 0;
}

这段代码就会把花括号里的两个语句都执行了。

(不过,只执行单个语句也可以用花括号把单个语句括起来,不过没有必要。)

1.2、if—else的用法

if(表达式)

语句1

else

语句2

这句话的意思就是如果表达式为真,那么执行语句1,如果为假,执行语句2。

逻辑关系如图

 例子如下

#include<stdio.h>
int main()
{
	int age = 20;
	if (age > 18)
		printf("已经是成年人了诶");
	else
		printf("还是个未成年人");
	return 0;
}

这里如果给age赋值大于18,就会打印出"已经是成年人了诶"如果给age赋值小于等于18,就会打印出"还是个未成年人"。

1.3、多分支 if-else if 的用法

if(表达式1)

语句1

else if(表达式2)

语句2

else if(表达式3)

语句3

.......

从上到下依次判断条件是否为真,若符合 if 条件,就执行if下面的语句;若不符合 if ,就看是否满足下一条 else if 的条件;直到找出符合条件的为止,若所有条件都不符合,就执行 else 的语句。

 

 

 一个例子:

#include <stdio.h>
int main()
{
    int age = 20;
    if (age < 18)
        printf("少年\n");
    else if (age >= 18 && age < 30)
        printf("青年\n");   
    else if (age >= 30 && age < 50)
        printf("中年\n");
    else if (age >= 50 && age < 80)
        printf("老年\n");
    else
        printf("老老年(咳咳)\n");
    return 0;
}

这段代码就会根据给age赋值的不同而输出不同的结果。(&&代表的是并且的意思,即需要&&两两边的表达式都为真,整体的表达式才为真。)

1.4、if语句的嵌套

    if(表达式1)
            if(表达式2)
                    语句1;
                else
                    语句2;

即表达式1正确,才可以进入语句,再判断表达式2。相当于要进行两次判断

(ps:可能会有人疑惑这个地方的if-else语句明明有很多行,但是为什么不用加花括号,其实是因为if-else语句包括多分支的if-else if语句都相当于一个语句)

例子

#include<stdio.h>
int main()
{
	int a = 2;
	int b = 3;
	if (a == 2)
		if (b == 3)
			printf("nihenbang");
	    else
		    printf("woyehenbang");
	return 0;
}

这段代码首先,a==2为真,再判断b==3也为真,最后会打印出"nihenbang"。

if语句可以嵌套很多层,在很多场景下都会用到。

2.一些注意事项

2.1、多分支中可以没有else语句

以1.3中的例子为例,如果不满足age<80,则最后会打印“老老年(咳咳)”。此时如果把最后的else和else后面的语句删掉,代码也是可以运行的,不过当age>=80的时候没有任何输出。

2.2、悬空else

悬空else的意思是else总会跟与他最近的  并且没有跟别的else匹配过的  if相匹配(听起来很绕口啊),举个简单的例子:

#include<stdio.h>
int main()
{
	int a = 1;
	int b = 2;
	if (a == 2)
		if (b == 2)
			printf("nihenbang");
	else
		printf("woyehenbang");
	return 0;
}

这个代码最后运行出的结果是,没有任何输出。

因为else与第二个if相匹配 ,而因为第一个if就判断为假,所以根本就不会进入到第二个if-else语句中。如果还是不明白,可以加上缩进,可能会更清楚一点

#include<stdio.h>
int main()
{
	int a = 1;
	int b = 2;
	if (a == 2)
		if (b == 2)
			printf("nihenbang");
	    else
		    printf("woyehenbang");
	return 0;
}

这样看是不是恍然大悟了?

所以说必要的缩进相当重要,可以增加代码的可读性。

2.3、判断表达式为等式时

刚开始学c语言时,我经常会在判断表达式为等式的时候,把==写成=,两个等号写作一个等号。两个等号表达的意思是判断是否相等,一个等号代表赋值。可以看看下面这段代码

#include<stdio.h>
int main()
{
	int a = 1;
	if (a = 2)
		printf("nihenbang");
	
	return 0;
}

 你认为他会打印出什么东西来吗?如果说不会,那么你答错啦。由于判断表达式为a=2,是非零的,所以判断表达式为真(非零即是真),最后会打印出来。

这一点初学者还是挺容易犯错的。(不过现在如果你输入了“=”,有些编译器会提醒你是否要输入“==”)

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

名亡实存

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值