学习C语言第三天 :分支语句(if - else if - else)

1.C语言语句结构

        C语言是结构化的程序设计语言,这里的结构指的是顺序结构、选择结构、循环结构,C语言是能够实现这三种结构的,其实我们如果仔细分析,我们日常所见的事情都可以拆分为这三种结构或者这三种结构的组合。

        我们可以使用 if、switch 实现分支结构,使用 for 、while 、do while 实现循环结构。

2.if 语句

        2.1.if 语句的语法形式如下:

if (表达式)
    语句

        if 语句成立:表达式成立(为真),则语句执行,表达式不成立(为假),则语句不执行。

        在C语言中,0为假,非0表示真,也就是表达式的结果如果是0,则语句不执行,表达式的结果如果是不是0,则语句执行。

        接下来写个例子:

// 输⼊⼀个整数,判断是否为奇数
int main()
{
	int i = 0; // 初始化
	scanf("%d", &i); // 输入值

	if (i % 2 == 1) // 表达式
	{
		printf("是奇数!"); // 语句
	}

	return 0;
}

执行结果:

 流程图:

        2.2.else 语句的语法形式如下:

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

        接下来写个例子:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>


// 输入一个整数,判断是否为奇数,如果是奇数打印是奇数,否则打印数偶数。
int main()
{
	int i = 0; // 初始化
	scanf("%d", &i); // 输入整数

	if (i % 2 == 1) // 如果 i 模 2 等于 1的 就是奇数
	{
		printf("%d是奇数!", i); 
	}
	else // 如果不是等于 1的,就是偶数
	{
		printf("%d 是偶数!", i);
	}

	return 0;
}

        运行结果:

      2.3. 分支中包含多条语句

        默认在 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语句同时控制2条语句。

怎么办呢? 那就要使用将代码括起来else 后也可以跟上大括号。如下:

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

    if (age >= 18) //if 后使⽤{} 控制多条语句-这个块也叫:程序块,或者复合语句
    {
        printf("成年了!\n");
        printf("可以谈恋爱了!\n");
    }
    else // else 后使⽤{}控制多条语句-这个块也叫:程序块,或者复合语句
    {
        printf("未成年!\n");
        printf("不可以早恋哦!\n");
    }
        

    return 0;
}

         2.4.嵌套if

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

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

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

	if (i == 0)
	{
		printf("%d是零\n", i);
	}
	else if (i > 0)
	{
		printf("%d是正数\n", i);
	}
	else
	{
		printf("%d是负数\n", i);
	}

	return 0;
}

 

        2.5.悬空else问题

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

               看下面的代码:

#include <stdio.h>

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

	if (a == 1)
		if (b == 2)
			printf("hehe\n");
	else
		printf("haha\n");

	return 0;
}

        这段代码输出什么呢?

        其实什么都没有输出,初学者其实会犯的错误,上来就判断 a是0,不等于1,那就执行else子句,打印 haha,但是当你去运行的时候会发现,啥都没有。

         为什么呢?

        因为这就是悬空else的问题了,如果有多个 if 和 else,可以记住这样一条规则,else总是跟最接近的 if 匹配。

        上面的代码排版,让 else 和第一个 if 语句对齐了,让我们以为 else是和第一个 if匹配的, 当 if 语句不成立的时候,自然想到的就是执行 else 子句,打印 haha ,但实际上 else 是和第二个 if 进行匹配的,这样后边的 if...else 语句是嵌套在第一个 if 语中的,如果第一个 if 语句就不成立,嵌套 if 和 ese 就没机会执行了,最终啥都不打印。

        那来改进一下,如下:

#include <stdio.h>

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

	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 = 0;

	if (a == 1)
	{
		if (b == 2)
			printf("hehe\n");
	}
	else
	{
		printf("haha\n");
	}

	return 0;
}

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

        注:再写代码的时候,排版是很重要的,方便自己以后看得懂,也方便进了公司,在同事来阅读你的代码的时候能顺利,而且要养成自己写代码的风格。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

南城猿

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

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

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

打赏作者

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

抵扣说明:

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

余额充值