if else分支循环介绍

20 篇文章 0 订阅
17 篇文章 0 订阅

1.else if 分支循环
应用举例:

int main()
{
	int age = 0;
	scanf("%d", &age);
	if (10 < age && age < 20)
		printf("青年");
	else if (age >= 20 && age < 30)
		printf("少年");
	else
	{
		printf("其他人");
	}
	return 0;
}

有几点需要注意
1.本质上

else if(条件)
{
 执行语句
}

这个语句是这样的

else
 {
   if(条件)
   执行的语句
 }

前者是简略写法。

2.很多同学在初学的时候(比如我)又犯一些书写错误
第一种

else if (age >= 20 && age < 30)

写成

else if (20<= age < 30)

这样写是错误的。
写成这样实际会如何判断呢!
比如我输入15时,此时会先执行 20<= age ,此时语句为假,则值为0,而0 小于30,语句成立,执行else if后面的执行语句。

第二种

if (10 < age && age < 20)
		printf("青年");
		printf("好好学习");

if 或者else或者if else 后面跟两条语句,且没有用大括号括起来。这样也是不成立的,这样实际上被if判断的执行语句实际只有前一句。无论是if 还是for 等分支循环语句后面默认只会跟一条语句,超出一条语句就要用括号。
这也是为什么if后面千万不能加“;”,“;’”本身就是一句空语句,这样的话,if控制的就是一条空语句。

3.悬空else的问题

int main()
{
	int a = 0;
	int b = 1;
	if (a == 1)
		if (b == 1)
			printf("呵呵\n");
	else
		printf("哈哈\n");
	return 0;

上面这段代码很多同学可能会认为输出的是哈哈,但实际是什么都不会输出,因为这里的else一定是和第二个if配对的(不要看它和第一个if齐平),实际在用vs2019时,系统会自动改成和第二个if对齐

int main()
{
	int a = 0;
	int b = 1;
	if (a == 1)
		if (b == 1)
			printf("呵呵\n");
		else
			printf("哈哈\n");
	return 0;
}

a= 0是不符合第一个if的判断语句的,所以根本不会执行if 也不会执行后面的else(这里要注意,这里if else没有用大括号括起来,但是还是默认全部是第一个if的子语句,因为系统默认if else是一条语句而不是两条语句,因为if和else每次只会有一个执行,永远不会同时执行。)
else一定是和理他最近的if匹配的

如果我就要else和第一个if匹配怎么办呢
可以使用大括号

int main()
{
	int a = 0;
	int b = 1;
	if (a == 1)
	{

		if (b == 1)
			printf("呵呵\n");
	}
	else
			printf("哈哈\n");
	return 0;
}
``


4.if语句的书写形式的相关问题
第一
```c
int test()
{
	int a = 2;
	if (a)
	{
		return 1;
	}
	return 0;

}
int main()
{
	int ret = test();
	printf("ret = %d\n", ret);
	return 0;
}

看上述代码,我们知道实际上test()函数的作用,就是a为真返回1,否则返回0。与下面的代码是如出一辙的

int test()
{
	int a = 2;
	if (a)
	{
		return 1;
	}
	else
	{
		return 0;
	}
}
int main()
{
	int ret = test();
	printf("ret = %d\n", ret);
	return 0;

但是前者非常容易引起歧义,所以前者是不好的书写风格,而后者才是可取的。

第二

int main()
{
	int num = 1;
	if (num == 5)
		printf("hh\n");
	return 0;
}

上述代码本身没有问题,但是当有人误触将==写成了=时,不难发现,此时系统不会报错,甚至还有有结果。这样就不好。所以在判断一个变量等于一个常量时,往往会将常量写在变量的前面,如下面的代码一样

int main()
{
	int num = 1;
	if ( 5 == num)
		printf("hh\n");
	return 0;
}

这样的话,即使写成5=num系统会自动报错(相当于给常量赋值),这样就避免了这样的情况。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值