C语言的分支结构 if语句

前言

程序并不会总是执行同样的处理,例如,按下某个按键的时候执行a处理,按下其他键的时候执行b处理······,程序通过条件判断的结果选择的执行某种处理情况非常多见。
本节介绍的改变程序流程的基本办法

一、if语句

if语句的语法格式

if(表达式)
语句;

但是每个if语句后面只能跟一个语句 ,如果想要跟多个语句就要用大括号括起来,就像这样:
if(表达式)
{
语句;
}

if语句怎么执行:先判断表达式的值,如果结果不为0,则执行相应的语句

int main()
{
	int a = 0;
	printf("请输入一个数:");
	scanf("%d", &a);
	if (a % 5)   //a不能被5整除是表达为真,表达式执行
	{
		printf("输入的整数不能被5整除");
	}
	return ;
}

在这里插入图片描述

括号内对条件进行判断的表达式称为控制表达式。上面程序中对控制表达式a % 5的判断结果为a除以5的余数。只有当这个余数不为0,也就是a的值不能被5整除时,才会执行下列语句。
而当我输入的整数能被5整除的时候,后续的语句则不会执行,屏幕上不会显示内容

看看下面这中if语句
if(表达式) 语句1 else 语句 2
接下来再看一个代码,这个与上面不同的地方在于多了一个else 语句,else语句后面不用加表达式 else是否则的意思。就是表达其对应if语句剩余的情况 ,当表达式的值不为0时执行语句1,当表达时为0执行语句2

在这里插入代码片
#include<stdio.h>
int main()
{
	int a = 0;
	printf("请输入一个数:");
	scanf("%d", &a);
	if (a % 5)   //a不能被5整除是表达为真,表达式执行
	{
		printf("输入的整数不能被5整除");
	}
	else         //其他的情况就是能被5整除的数则为真,表达式执行
	{
		printf("该整数能被5整除。");
	}
	return ;
}

在这里插入图片描述
这样我们就让代码判断完整了,可以判断是不是5的整数,并将结果输出出来。
接下来让我们写一个代码奇偶数的判断

在这里插入代码片
#include<stdio.h>
int main()
{
	int a = 0;
	scanf("%d", &a);
	if (a % 2)    //如果输入4那4%2的结果就为0,表达式的结果就为假,就执行else下面的语句
	{
		printf("a为奇数");    //a不能被2整除时执行
	}
	else
	{
		printf("a为偶数");   //a能被2整除时执行
	}
	return 0;
}

在这里插入图片描述

1、相等运算符和不相等运算符

== 运算符 ,a == b 如果a和b的值相等,则为1,不相等则为0
!= 运算符 ,a != b 如果a和b的值不相等,则为1,相等则为0

先看一个代码,输入两个整数,判断它们是否相等

在这里插入代码片
#include<stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d%d", &a, &b);
	if (a == b)
		printf("它们相等\n");
	else
		printf("它们不相等\n");
	return 0;
}

在这里插入图片描述

== 运算符是对左右两边的操作数进行比较。如果它们两个相等则结果为1。如果不相等则结果为0.
另外 == 和 != 分别是一个运算符。所以如果再= 和= 中间,或者! 和 =中间加上空格,这样是不对的,会改变意思。(不能在中间加空格

2.关系运算符

在这里插入图片描述
这些运算符也是对左右两边的操作数进行比较,也与之前的运算符一样不能在中间加空格

3、嵌套的if语句

判断输入整数的符号

#include<stdio.h>
int main()
{
	int a = 0;
	scanf("%d", &a);
	if (a > 0)
		printf("为正数");
	else 
		if (a < 0)
		{
			printf("为负数");
		}
		else
		{
			printf("为0");
		}
	return 0;
}

在这里插入图片描述
这个代码中就使用了if语句的嵌套,输入的整数只有3种情况:a>0 ,a<0 , a=0。第一个if语句就判断了a>0的情况,那剩下的else是不是就剩了<0和=0。我们就再在else里面再判断一次if (a < 0),然后就剩下了最后一种a = 0,再用个else就可以了。

上面的代码还可以写成下面这种形式,把
else
{
if
}
写成else if

#include<stdio.h>
int main()
{
	int a = 0;
	scanf("%d", &a);
	if (a > 0)
		printf("为正数");
	else if (a < 0)
			printf("为负数");
	else
			printf("为0");
	return 0;
}

接下来再看一个代码

在这里插入代码片
int main()
{
	int a = 0;
	scanf("%d", &a);
	if(a > 0)  //大于0执行
		if (a % 2 == 0)  //当输入12时 12 % 2==0就为真
		{
			printf("为偶数\n");
		}
		else           //a % 2 != 0就执行
		{
			printf("为奇数\n");
		}
	else   //小于等于0执行
	{
		printf("你输入的不是正数\n");
	}
	return 0;
}

在这里插入图片描述
该代码if语句的结构如下
在这里插入图片描述

4、条件运算符

条件运算符的结构:a ? b:c 如果a不为0,则结果为b的值,如果a为0,则结果为c的值
条件运算符属于三目操作符
判断两个整数的中的较大值

在这里插入代码片
int main()
{
	int a = 0;
	int b = 0;
	int max = 0;
	scanf("%d%d", &a, &b);
	max = (a > b) ? a : b;  //a > b 结果为a,a < b,结果为b,最后将得到的值赋给max
	printf("最大值为%d\n", max);
	return 0;
}

在这里插入图片描述

5、逻辑运算符

逻辑运算符:&&并且的意思 ,||或者的意思

在这里插入代码片
int main()
{
	int month = 0;
	scanf("%d", &month);
	if (month >= 3 && month <= 5)  //这里运用了&&运算符,要两个条件同事满足才能执行语句
		printf("%d是春季节\n", month);
	else if (month >= 6 && month <= 8)
		printf("%d是夏季\n", month);
	else if (month >= 9 && month <= 11)
		printf("%d是秋级季\n", month);
	else if (month == 1||month == 2 ||month == 12)  //这里运用了||运算符,只要其中一个满足就会执行语句
		printf("%d是冬季\n", month);
	else
		printf("月季不存在\n");
	return 0;
}
1、逻辑运算符短路

1、if语句首先进行的是判断季节是否为“春季”。 这里假设变量month的值为2,我们来判 断下述表达式。
2、 month >=3 &&month <=5
左操作数month>=3的判断结果为0。这样的话即使不判断右操作数month<=5,整个 表达式的判断结果也显然为0(不是春季)。
也就是说,&&运算符在左操作数的判断结果为0时不对右操作数进行判断。
3、 ||运算符怎样呢?这里我们结合下面这个判断季节是否是“冬季”的表达式来看。 month==1 || month ==2 1 || month ==12 ,如果month为1,则根本不用判断month为2月或12月的情况,整个表达式的判断结果 就为1(是冬季)。
也就是说,||运算符在左操作数的判断结果不为0时不会对右操作数进行判断。
像这样就称为短路求值

6、if语句使用注意事项

1、空语句

if(表达式)
printf(“…”);
这样的写法是错误的的,我们可以把他理解为这样。

if(表达式)
     ;      //单独一个分号为空语句,如果执行空语句什么都不会发生
 printf("........");
2、判断相等
1、== 和=

请注意不要把判断相等性(是否相等)时使用的 == 运算符和 = 混淆
if(a = 0)错误
if(a == 0)对
在错误的例子中,变量a会被赋值为0,这样就不管a的值为什么,该语句都不会执行

2、== 和&&

判断3个变量a b c 的值
if(a == b == c)错误
if(a == b && b == c)对
因为相等运输符== 是双目运算符,所以不能实现第一种错误的语句

3、&&和||

不要使用以bit为单位的逻辑运算符代替逻辑运算符
if(a == b & b == c)错误
if(a == b | b == c)错误
if(a == b || b == c)对
if(a == b && b == c)对

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值