到底买几个西瓜?——C语言常见分支语句if篇

观前提示:scanf在vs中会报错,所以我习惯使用scanf_s。

分支语句有if语句和switch语句两种。二者在用法上最突出的不同是:if语句适用于分支较少的情况,而switch语句则在分支较多的情境中更泛用一些。在此篇中讲解的是if语句。

这里就不得不插入一个程序员笑话了。

女朋友说,下班回来带一个西瓜。如果看到卖番茄的,就买两个。最后程序员买回来两个西瓜。

为什么程序员会搞错呢?if语句能解释这个问题。

if语句的语法结构是这样的:

if(条件表达式)
{
 语句1;
}
else
{
 语句2;
}

如果条件为真则执行花括号内的代码段,如果为假则不执行。

比如输入一个代表自己年龄的整数判断一下有没有成年:

#include <stdio.h>
int main ()
{
    int age = 0;
    scanf_s ("%d",&age);
    if (age < 18)
    {
        printf ("未成年");
    }
    return 0;
}

这种就是单分支if语句。 满足if中的条件花括号内的语句,即会打印未成年三个字。如果不满足便不会输出。

但显然这样的输出没完全分到位,把大于18岁的忽略了。如果更细节一点呢?

#include <stdio.h>
int main ()
{
    int age = 0;
    scanf_s ("%d",&age);
    if (age < 18)
    {
        printf ("未成年");
    }
    else
    {
        printf ("成年人");
    }
 
     return 0;
}

加上else,此时就变成了双分支语句。如果你的输入的数字满足if内条件也就是小于18,那就会输出未成年,相反则会满足else的语句,输出成年人。

但是20是成年80也是成年,能不能分得更细一点?

#include <stdio.h>
int main ()
{
    int age = 0;
    scanf_s ("%d",&age);
    if (age < 18)
    {
        printf ("未成年");
    }
    else if (age >= 18 && age < 30)
    {
        printf ("青年");
    }
    else if (age >= 30 && age < 50)
    {
        printf ("中年");
    }
    else if (age >= 50 && age < 80)
    {
        printf ("老年");
    }
    else
    {
        printf ("老寿星");
    }
    return 0;
}

在大于18岁的情况下进行了进一步的细分,此时便形成了一个多分支语句。代码由上至下运行,满足哪个条件就执行对应代码。

当然一个花括号内不仅仅只能运行一条语句了。比如在上面双语句的基础上进行修改,输出能不能谈恋爱:

#include <stdio.h>
int main()
{
	int age = 0;
	scanf_s("%d", &age);
	if (age >= 18)
	{
		printf("成年\n");
		printf("谈恋爱\n");
	}
	else
	{
		printf("未成年\n");
		printf("不能谈恋爱\n");
	}

	return 0;
}

如果条件成立需要执行多条语句,则使用代码块{}

但是代码块的使用不当也会出现问题。比如下面这条代码:

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

这条代码会输出hehe还是haha?但运行起来的结果是——什么也没有。

因为此时的else是与第二个if匹配的而不是第一个,由于第一个if语句的不成立,直接跳过了第二个if。

改正后是这样的:

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

逻辑不清晰,代码被人批。为了程序易读性还是加上大括号吧。

还要提醒的是:如果if后面没有花括号,且有两个printf()语句,那么只有第一个printf()语句属于if的代码段,而另一个printf()语句和if语句同级,无论如何都会被执行。

再来看开头买西瓜的笑话,它可以被if-else语句这样表示:

#include<stdio.h>
#include<stdlib.h>

int main()
{
    int tomato=0;
    printf("是否看到了卖番茄的?0--没有 1--有\n");
    scanf_s("%d", &tomato);
    if (tomato == 0)//没有看到卖番茄的
        printf("买一个西瓜\n");
    else             //看到了卖番茄的
        printf("买两个西瓜\n");
    return 0;
}

是否看见卖番茄的变成了买几个西瓜的条件,完全没有番茄的事了。

代码没有错误,关键是程序员要理解女朋友说的话的意思,不是程序员和电脑之间的沟通。

关于if-else语句的讲解就到这里了,感谢阅读。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值