【C语言】分支语句(选择结构)—— if语句

前言

在C语言中支持三种结构,分别是顺序结构、选择结构和循环结构。顺序结构就是一条道走到黑,先干什么后干什么,按顺序来;选择结构就是有所选择的结构,你好好学习,去麻省理工读研究生,走上人生巅峰,如果不好好学习,毕业家里蹲,要么好好学习,要么不好好学习,这就是选择。

在这里插入图片描述

这就是选择结构,用分支语句来支持选择结构,分支语句也叫条件判断语句。
在C语言中主要有两种分支语句分别是 if 语句和 switch 语句。这篇文章将对if语句进行详细说明。

if语句

if语句也有三种情况,一是单if语句,二是if…else语句,三是嵌套if…else

单 if 语句

if (表达式)
	语句;
#include<stdio.h>

int main()
{
	int score = 0;
	scanf("%d", &score);

	if (score > 80)
		printf("优秀\n"); //单if语句

	return 0;
}

if…else语句

if...else语句意味着非此即彼。形式为

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

举个例子,如果成绩分数大于80分为优秀,否则需要继续努力。

#include<stdio.h>

int main()
{
	int score = 0;
	scanf("%d", &score);

	// if...else语句
	if (score > 80)
		printf("优秀\n"); 
	else
		printf("继续努力\n");

	return 0;
}

嵌套if…else

使用多个 if...else 语句来表达,适用于多种情况。

如:如果成绩大于80分是优秀,60分到80分之间是合格,60分以下还需要努力。

这种情况使用一个if...else无法表达清楚,所以需要使用嵌套if...else。
#include<stdio.h>

int main()
{
	int score = 0;
	scanf("%d", &score);

	// 嵌套if...else
	if (score > 80)
		printf("优秀\n");
	else if (score >= 60 && score <= 80)
		printf("合格\n");
	else
		printf("需要努力\n");

	return 0;
}

在这个地方请注意:

if (score >= 60 && score <= 80)

这一行不能写成

if (60<= score <= 80)

这是数学里面的表示方法,如果写成数学的表达形式,会出现什么情况呢?我们来看一下:
在这里插入图片描述
我在这里输入一个50,按理说应该输出“需要努力”,但是这里是“合格”。我在前面的文章中说过,在C语言中0为假,非0为真,在这里,输入50,表达式相当于变成了

if (60 <= 50 <= 80)

编译器会先判断60小于等于50,为假,因为 0 为假,则这行表达式相当于变成了

if (0 <= 80)

结果为真,于是就打印出“合格”。

if 语句注意点

if 语句后默认管理一条语句,如

if (score > 80)
		printf("优秀\n");

如果你还想在score大于80的条件下打印“给你点赞”,是不能这样写的:

if (score > 80)
		printf("优秀\n");
		printf("给你点赞\n");

我们可以来看一下:
在这里插入图片描述
我们发现编译器报错,并且已经告诉我们应该只输入一个语句。我们可以通过加大括号的形式让一个 if 管理多条语句
在这里插入图片描述
我们可以看到这个时候运行成功,输入90,两个都打印出来了。

else采取就近原则,和最近的if匹配,不要被代码风格迷惑

#include<stdio.h>

int main()
{
	int a = 10;
	int b = 10;

	if (a == 1)
		if (b == 10)
			printf("小刘是帅哥\n");
	else
		printf("你是帅哥\n");

	return 0;
}

你们可以想一想这段代码的结果是什么?

在这里插入图片描述
我们发现什么都没有打印出来。这是因为你可能走入了一个误区,你以为我圈出来的 if 和 else 是一对,如果你是这样想的,说明你被代码风格给迷惑了。其实真正的代码应该是这样的:

#include<stdio.h>

int main()
{
	int a = 10;
	int b = 10;

	if (a == 1)
		if (b == 10)
			printf("小刘是帅哥\n");
		else
		printf("你是帅哥\n");

	return 0;
}

这样写是不是就清楚很多了,这就是 else 就近原则,虽然这样写也没有问题,但我建议这样写:

#include<stdio.h>

int main()
{
	int a = 10;
	int b = 10;

	if (a == 1)
	{
		if (b == 10)
			printf("小刘是帅哥\n");
		else
			printf("你是帅哥\n");
	}
	return 0;
}

适当加上大括号,可以使代码的逻辑更加清晰,这是我的一点建议。
好的代码风格很重要。以后找工作无论是面试还是笔试都需要写代码,远程面试可能面试官让同学们共享屏幕,或者与面试官面对面,给你一张纸在面试官面前写,这个时候你怎么写代码,写的代码是什么样子,面试官一眼就看清楚了,心里就有数了。你如果写成这样:

#include<stdio.h>

int main()
{
int a=10;
int b=10;
if (a==1)
{
if (b==10)
printf("小刘是帅哥\n");
else
printf("你是帅哥\n");
}
return 0;
}

这写的什么玩意,可能直接就把你pass了。

一个小技巧

很多同学在写一个变量等于某个值的时候,经常会忘记一个等号:
在这里插入图片描述
这段代码如果没少等号的话是什么都打印不出来的,但是这里我们发现有输出,这里相当于给a重新赋值为1,那自然为真会进入这个分支语句内。所以建议同学们开始学习的时候写一个变量等于某一个值时,将值写在左边,变量名写在右边:

if (1 == a )  // 这里将值写在左边,变量名写在右边
{
	if (10 == b)
		printf("小刘是帅哥\n");
	else
		printf("你是帅哥\n");
}

这样做有什么好处呢?我们可以来看一下,如果少个等号是什么情况:
在这里插入图片描述
我们发现在visual studio上,它会直接报错,根本编译不过。这算是一个小技巧吧。

练习题

  1. 判断一个数是否为奇数
  2. 输出 1 ~ 100 之间的奇数

结语

if 语句到这里就结束了,下一篇文章将对switch进行详细说明。

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三尺h

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值