【C语言】分支语句详解

目录

前言

什么是分支语句?

if语句

语法

可以是

也可以是

还可以是

例子 

小乐乐接到个任务,写一个程序,根据输入的年龄判断此人是否成年。

小乐乐又接到一个任务,写一个程序,根据输入的年龄来判断此人处于什么阶段。 

需要注意的细节 

else和if的匹配问题

解决方法 

if书写形式的比较 

代码1和代码2的比较

代码3 和代码4的比较

 实现多分支语句时,使用多个if和使用if else的区别

使用if else

使用多个if 

switch语句

switch语法结构

语句项 

示例

switch的注意事项 

搭配break才能真正实现分支

 使用default来保底

 if语句和switch的比较

总结


前言

C语言是结构化的程序设计语言,我们生活中遇到的问题都能被高度抽象为“顺序结构”、“选择结构”、“循环结构”三种结构,C语言是用计算机来解决生活中的实际问题,所以也支持上述三种结构,这一篇讲述分支语句(选择结构)或者成为条件啊判断语句,有if、switch两种。

什么是分支语句?

我们将实现选择结构这种功能的语句称之为分支语句。

if语句

语法

可以是

if(表达式)
    语句;if(表达式)
    语句;

也可以是


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

还可以是

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

例子 

小乐乐接到个任务,写一个程序,根据输入的年龄判断此人是否成年。

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

小乐乐又接到一个任务,写一个程序,根据输入的年龄来判断此人处于什么阶段。 

int main()
{
 int age = 0;
    scanf("%d", &age);
    if(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
   {
        printf("高寿\n");
   }
    
}

需要注意的细节 

else和if的匹配问题

else与离它最近的if匹配,而不是与格式对齐的if匹配。

示例:这里的else与if(b == 2)匹配而不是和if(a == 1)匹配,但这样的格式很容易让人误以为else是跟if(a == 1)匹配,从而的到错误的答案。

#include <stdio.h>
int main()
{
    int a = 0;
    int b = 2;
    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 = 2;
	if (a == 1)
		if (b == 2)
			printf("hehe\n");
		else
			printf("haha\n");
	return 0;
}

或者是用括号将内容括起来

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

if书写形式的比较 

有上面的例子我们可以知道,代码风格的好坏,决定了代码的可读性和可维护性,好的代码风格就像是书法一样,让人赏心悦目,那么我们这里给出if的几种写法来比较好坏。

代码1和代码2的比较

代码2要优于代码1。

代码1会让人产生歧义:不管这个条件是真是假,都会返回y,但实际上是:为真返回x,为假返回y,当返回时,这个程序就终止了,不会再往下走。

代码2清晰明了,条件为真返回x,条件为假就返回y。

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

代码3 和代码4的比较

代码4要优于代码3.

代码3,当条件漏了=时,也就是if(num = 5)时,程序的走向偏离了我们的预期,但是依然能够执行,从判断语句变成了赋值语句,缺点就在于犯了错但不会报出来。

代码4,当条件漏了=时,也就是if(5 = num)时,编译器会直接报错,方便我们弄懂错误在哪,而不用调试半天,抓破头皮。

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

 

 实现多分支语句时,使用多个if和使用if else的区别

有的同志会疑惑,我使用多个if来实现多分支语句不比if else来的快?我为什么要用if else呢?

区别就在于效率。

使用if else

各个if语句是联系起来的,执行的效率更高

int main()
{
 int age = 0;
    scanf("%d", &age);
    if(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
   {
        printf("高寿\n");
   }
    
}

相当于是下面所示

#include<stdio.h>
int main()
{
	int age = 0;
	scanf("%d", &age);
	if (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
					printf("高寿\n");
				
			}
		}
		
	}
	

}

使用多个if 

使用多个if时,各个if之间相当于是独立的,随着语句的执行,依次执行判断,有多少个if就要判断多少次。

#include<stdio.h>
int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age < 18)
	{
		printf("少年\n");
	}
	if (age >= 18 && age < 30)
	{
		printf("青年\n");
	}
	if (age >= 30 && age < 50)
	{
		printf("中年\n");
	}
	if (age >= 50 && age < 80)
	{
		printf("老年\n");
	}
	if(age>=80)
	{
		printf("高寿\n");
	}

}

switch语句

switch 也是一种分支语句,适用于多分支情况,比使用if else要简洁一点。

switch语法结构


    switch(整型表达式)
   {
        语句项;
   }

语句项 

case 整形常量表达式:
    语句;

示例

小乐乐接到一个任务,根据day的值来显示今天是星期几。

#include <stdio.h>
int main()
{
    int day = 3;
    switch(day)
   {
        case 1:
            printf("星期一\n");
            break;
        case 2:
            printf("星期二\n");
            break;
        case 3:
            printf("星期三\n");
            break;    
        case 4:
            printf("星期四\n");
            break;    
        case 5:
            printf("星期五\n");
            break;
        case 6:
            printf("星期六\n");
            break;
        case 7:
            printf("星期天\n");    
            break;
        default:
            printf("输入错误\n");
            break;
   }
    return 0;
}

  

switch的注意事项 

搭配break才能真正实现分支

程序在遇到break时才会跳出switch语句,要不然会继续往下执行,例如:

#include <stdio.h>
int main()
{
    int day = 1;
    switch (day)
    {
    case 1:
        printf("星期一\n");
    case 2:
        printf("星期二\n");
    case 3:
        printf("星期三\n");
    case 4:
        printf("星期四\n");
    case 5:
        printf("星期五\n");
    case 6:
        printf("星期六\n");
    case 7:
        printf("星期天\n");
    default:
        printf("输入错误\n");
    }
    return 0;
}

 

 使用default来保底

将输入的值不符合我们的情况放进default语句中,来保证能得到反馈。

当我们将day赋值成0时,没有default则没有反馈。

#include <stdio.h>
int main()
{
    int day = 0;
    switch (day)
    {
    case 1:
            printf("星期一\n");
            break;
        case 2:
            printf("星期二\n");
            break;
        case 3:
            printf("星期三\n");
            break;
        case 4:
            printf("星期四\n");
            break;
        case 5:
            printf("星期五\n");
            break;
        case 6:
            printf("星期六\n");
            break;
        case 7:
            printf("星期天\n");
            break;
    }
    return 0;
}

 

 if语句和switch的比较

if语句更适用于范围的判断,switch更适用于点的判断。多分支情况switch要更好。

总结

本文介绍了两种分支语句if和switch,分别讲述了它们的使用方式、场景、及注意事项,希望能帮助同志们多于分支语句的理解更上一层楼~

  • 14
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值