初识if语句

一.if

if语句的语法形式如下

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

 表达式

  • 真:非0,执行语句
  • 假:0,不执行语句

例:输入一个整数,判断是否为奇数 

 if的判断语句还可写成if(a%2)

 a若是奇数,a%2=1,不为0,表达式为真,执行语句,输出a

a若是偶数,a%2=0,为0,表达式为假,不执行语句

 二.else

if..else语句语法形式如下

  1.  if(表达式)
  2.     语句1
  3.  else
  4.     语句2

 输入一个整数,判断是奇数还是偶数

三.分支中包含多条语句

默认在if,else语句中默认都只控制一条语句,比如

#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语句同时控制两条语句,怎么办呢?那就要使用{ }将代码括起来;else后也可以跟上大括号,如下:

#include<stdio.h>
int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age >= 18)//if 后使⽤{} 控制多条语句-这个块也叫:程序块,或者复合语句
	{
		printf("成年了\n");
		printf("可以考驾照了\n");
	}
	else//else 后使⽤{}控制多条语句-这个块也叫:程序块,或者复合语句
	{
		printf("未成年\n");
		printf("不可以考驾照\n");
	}
	return 0;
}

 

四.嵌套if

在if else语句中,else可以和另一个if语句连用,构成多重判断。

例如:要求输入一个整数,判断输入的整数是0,还是正数,还是负数。

嵌套在else语句中

嵌套在if语句中

五.悬空else问题

如果有多个if和else,可以记住这样一条规则,else总是跟最接近的if相匹配

我们首先从下面的代码开始

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

很多人一开始会认为,因为a=0,所以第一个if表达式为假,就执行else打印“haha”

但当我们去执行这个代码时,发现啥也不是

这是因为else悬空了,代码中的else与第一条if语句是对齐的,让我们以为else是和第一个if匹配的,而实际上else离第二条if语句更近,与第二个if匹配,这样后面的if...else是嵌套在第一个if中的,当第一个if的表达式不成立时,嵌套的if和elae就没机会执行了,这样最终啥也没打印

可以将代码改成更容易理解的嵌套模式

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

或者如果想让else与第一个if语句匹配,可以这样改

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

只要带上适当的大括号,代码的逻辑就会更加的清晰,所以大家以后在写代码的时候要注意括号的使 用,让代码的可读性更高。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值