【C语言初阶】分支语句—— if语句

【C语言初阶】分支语句 —— if语句

二、分支语句(选择结构)

每个人的一生中都会面临无数的选择,而一旦确定了某个选择,那便不断地努力前行。

本章学习的 if 语句和 switch 语句,都是用来实现程序流程的选择性分支的,因此统称为选择语句(selection statement)

1 选择 - 流程图

选择结构


2 if 语句

if 语句被称为分支语句选择语句,因为它相当于一个交叉点,程序要在两条分支中选择一条执行。

2.1 语法结构

//if单分支结构
if(表达式)
	语句;

//if多分支结构
if(表达式)
	语句1;
else
	语句2;

//if多条件结构
if(表达式1)
	语句1;
else if(表达式2)
	语句2;
else
	语句3;

说明

1 if(表达式) 语句;

  表达式求值判断一次,为真时执行语句,为假时什么也不执行。

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

  表达式求值判断一次,为真时执行语句1,为假时执行语句2。

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

  先对表达式1进行判断,为真时执行语句2,为假时则对表达式2进行判断;如果表达式2为真,则执行语句2,如果表达式2为假,则执行语句3。

  如果后续还有 else if(表达式) 的结构,则依然是先判断表达式,然后执行相应的语句或者继续进行后续表达式的判断

注意1else 后不跟表达式,只有 if 或者 else if 之后才能跟表达式
注意2:语句可以是一条简单语句复合语句。表达式为真说明其是非零值。


2.2 不同结构的 if 语句

2.2.1 if 单分支结构

单分支-流程图

if单分支

示例

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

int main()
{
	//if单分支结构

	int age = 0;
	scanf("%d", &age);
	if (age < 18)
	{
		printf("未成年!\n");
	}

	return 0;
}


2.2.2 if 多分支结构

多分支-流程图

if多分支

示例

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

int main()
{
	//if多分支结构

	int age = 0;
	scanf("%d", &age);

	if (age < 18)
	{
		printf("未成年!\n");
	}
	else
	{
		printf("已成年!\n");
	}

	return 0;
}


2.2.3 if 多条件结构

多分支-流程图

if多条件

示例

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

int main()
{
	//if多条件结构

	int age = 0;
	scanf("%d", &age);

	if (age >= 0 && 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 if (age >= 80)
	{
		printf("老寿星\n");
	}

	return 0;
}


2.3 说明

  • 如果表达式的结果为真,则执行语句,否则就执行 if 语句后面的其他语句。

  • 在C语言中,0表示假,非0表示真

  • if 或者 else 后面只能跟随一条语句,当需要执行多条语句时,需要用 {} 大括号将它们括起来,形成复合语句。

  • if-else 语句可以嵌套使用一个 if 语句内部可以包含其他 if 语句


2.4 悬空 else

每个 else 只与和它最近的 if 相匹配,除非最近的 if 被花括号括起来。

2.4.1 示例1

代码示例

#include<stdio.h>

int main()
{
	//悬空else

	int a = 0;
	int b = 2;
	if (a == 1)
		if (b == 2)
			printf("hehe\n");
	else
		printf("haha\n");//什么也不打印

	return 0;
}

解释说明:

1 当程序执行到第一个 if 语句的位置时,进行表达式 a == 1 的求值和判断。

  判断的结果为假,则不执行 if 内的语句,也就是不再对第二个 if 语句的条件表达式进行求值和判断。

​  本程序中的 else 与第二个 if 相匹配,而不是第一个 if ,所以当第一个 if 的条件判断为假的时候,程序流会直接跳过第二个 ifelse ,继续执行后续其他代码。

2 也就是说,else 只与和它最近的 if 相匹配,而不是和所谓的与之对齐的 if 匹配。


2.4.2 示例2

调整代码

#include<stdio.h>

int main()
{
	//适当使用 {} 可以使代码变得更加易读
	//良好的代码书写风格很重要

	int a = 0;
	int b = 2;
	if (a == 1)
	{
		if (b == 2)
		{
			printf("hehe\n");
		}
	}
	else
	{
		printf("haha\n");//打印haha
	}

	return 0;
}

解释说明:

1 根据实际需求,可以ifelse 之后添加大括号 {} ,使得程序变得更易读。


2.5 if 不同书写形式的对比

2.5.1 示例1
//代码1
if (condition)
{
	return x;
}
return y;

//代码2
if (condition)
{
	return x;
}
else
{
	return y;
}

解释说明:

1 结论两个代码执行效果相同,但代码2更加清楚易懂。

  代码1:当 if 语句条件表达式判断为真时,执行 return x; 语句;表达式判断为假时,执行 if 语句之后的其他语句,也就是执行 return y; 。(一条 if 语句、一条 return 语句)

  代码2:当 if 语句条件表达式判断为真时,执行 return x; 语句;表达式判断为假时,执行 return y; 语句。(一条 if 语句)


2.5.2 示例2
//代码1
int num = 1;
if (num == 5)
{
	printf("hehe\n");
}

//代码2
int num = 1;
if (5 == num)
{
	printf("hehe\n");
}

解释说明:

1 结论两个代码执行效果相同,但代码2更加清楚易懂。

  代码1:在书写时,可能会出现 if (num = 5) 这样的情况,不小心漏掉了一个等号,将条件表达式由判断是否相等变成了判断一个赋值语句

  代码2:在书写时,如果出现 if (5 = num) 时,程序会报错,这样就很好的避免将条件语句中的判断相等写成赋值语句

2 赋值表达式求值

  对赋值语句判断的结果就是赋值运算符右操作数的结果,也就是将赋的值作为赋值表达式判断的结果


2.6 if 语句练习

2.6.1 练习1

判断一个数是否为奇数

代码示例

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

int main()
{
	//判断一个数是否是奇数

	int num = 0;
	scanf("%d", &num);

	//方法一
	//判断num%2的结果是否为1,为1表示是奇数,为0表示是偶数
	if (1 == num % 2)//%运算符的优先级高于==运算符
	{
		printf("%d是奇数.\n", num);
	}
	else
	{
		printf("%d是偶数.\n", num);
	}
	
	//方法二
	//判断num%2的结果是不是不等于0,如果不等于0则是奇数,为0则是偶数
	if (num % 2 != 0)//%运算符的优先级高于!=运算符
	{
		printf("%d是奇数.\n", num);
	}
	else
	{
		printf("%d是偶数.\n", num);
	}

	return 0;
}

解释说明:

1 判断奇偶时,将目标数模2取余,结果为0表示偶数,结果为1表示奇数


2.6.2 练习2

输出1~100之间的奇数

代码示例

#include<stdio.h>

int main()
{
	//判断1~100之间的奇数

	//方法一
	//从1开始判断到100,是奇数就打印输出
	int i = 0;
	for (i = 1; i <= 100; i++)//循环了100次
	{
		if (i % 2 == 1)//判断了100次
		{
			printf("%d是奇数.\n", i);//执行了50次
		}
	}

	//方法二 
	//i每次加2,满足1~100中奇数的等差数列形式,公差为2
	for (i = 1; i < 100; i += 1)//循环了50次
	{
		printf("%d是奇数.\n", i);//执行了50次
	}

	return 0;
}

解释说明:

1 写法一是判断1~100中的所有数,如果是奇数则打印。

2 写法二是直接打印1~100中的所有奇数,且不用作判断。


总结:

  本节简单介绍了分支语句中的 if 语句,给出了三种形式的 if 语句;同时又讲解了什么是悬空 elseif 不同书写形式的对比。


感谢您的阅读!如有任何错误,欢迎您的批评指正!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值