if语句的相关介绍

本文详细介绍了C语言中的if语句、else的使用、多分支选择、嵌套if结构以及悬空else的问题,强调了正确使用括号提高代码可读性的关键
摘要由CSDN通过智能技术生成

if语句的相关介绍

1.if语句

if的语法形式如下:

if(表达式)
  语句

表达式为真,则语句执行,表达式为假,则语句不执行。
在C语言中,0为假,非零为真, 也就是表达式的结果如果是0,则语句不执行,表达式的结果不为0,则语句执行。
例子: 输⼊⼀个整数,判断是否为奇数

#include<stdio.h>
int main()
{
int i=0;
scanf("%d",&i);
if(i%2==1)
printf("%d是奇数\n",i);
return 0;
}

在这里插入图片描述

2.else

如果⼀个数不是奇数,那就是偶数了,如果任意⼀个整数,我们要清楚的判断是奇数还是偶数怎么表
⽰呢?
这⾥就需要if…else… 语句了,语法形式如下:

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

例⼦: 输⼊⼀个整数,判断是否为奇数,如果是奇数打印是奇数,否则打印偶数。

#include<stdio.h>
int main()
{
	int i = 0;
	//输入
	scanf("%d",&i);
	//判断是奇数还是偶数
	if (i % 2 == 1)//这是判断奇数的
		printf("%d是奇数\n", i);
	else
		printf("%d是偶数\n", i);
	return 0;
}

在这里插入图片描述

3.多分支选择语句

默认在 ifelse 语句中默认都只控制⼀条语句,⽐如:


```c
#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)
	{
		printf("成年了\n");
		printf("可以谈恋爱了\n");
	}
	else//else 后使⽤ { } 控制多条语句-这个块也叫:程序块,或者复合语句
	{
		printf("还未成年\n");
		printf("好好学习\n");
	}
	return 0;
}

4.嵌套 if

if else 语句中,* else* 可以与另⼀个 if 语句连⽤,构成多重判断。
例子1: 要求输⼊⼀个整数,判断输⼊的整数是0,还是正数或者负数。请看如下代码:

#include<stdio.h>
int main()
{
	int i = 0;
	scanf("%d",&i);
	if (i == 0)
		printf("%d是正数\n",i);
	else//i不等于0,走 else, 这里的else语句又嵌套了一个 if...else...语句
	{
		if (i > 0)
			printf("%d是正数\n", i);
		else
			printf("%d是负数\n",i);
	}
	return 0;
}

以上就是嵌套if语句的语法,有了嵌套if语句,就可以完成更多复杂逻辑的判断。
*例子2:*输⼊⼀个整数,如果是正数,再判断是奇数还是偶数,并输出;如果不是正数则输出:非正数。

#include<stdio.h>
int main()
{
	int i = 0;
	scanf("%d",&i);
	if (i > 0)
	{
		if (i % 2 == 1)//这是判断奇数的
			printf("%d是奇数\n", i);
		else
			printf("%d是偶数\n", i);
	}
	else
		printf("非正数\n");
	return 0;
}

5.悬空 else 问题

如果有多个 ifelse ,可以记住这样⼀条规则, else 总是跟最接近的 if 匹配。
来看一个代码

#include<stdio.h>
int main()
{
	int a = 0;
	int b = 2;
	if (a == 1)
		if (b == 2)
			printf("hello world!\n");
	else
		printf("I like this world!\n");
	return 0;
}

打印的结果是什么呢?
刚开始学的时候,认为是这样的:
判断 a 是0,不等于1,那就执行 else 语句,打印 I like this world!
当你去运行的时候,结果:什么都不输出
在这里插入图片描述
为什么呢?
这就是悬空 else 的问题,如果有多个 ifelse ,可以记住这样⼀条规则, else 总是跟最接近的 if 匹配。

上面的代码排版,让* else* 和第⼀个 if 语句对齐,让我们以else 是和第一个 if 匹配的。
if 语句不成立的时候,自然想到的就是执行 else 句子,打印 I like this world!
但实际上 else 是和第二个 if 进行匹配的,这样后边的 if…else 语句是嵌套在第⼀个 if 语句中的,如果第⼀个 if 语句就不成立,嵌套 ifelse 就没机会执行了,最终什么都不打印。
如果代码改成下⾯这样就更加容易理解了

#include<stdio.h>
int main()
{
	int a = 0;
	int b = 2;
	if (a == 1)
	{
		if (b == 2)
			printf("hello world!\n");
		else
			printf("I like this world!\n");
	}
	return 0;
}

这就很容易看出这个代码怎样执行了。
只要带上适当的大括号,代码的逻辑就会更加的清晰,所以大家以后在写代码的时候要注意括号的使用,让代码的可读性更高。

  • 20
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值