C语言——分支语句

本文详细介绍了C语言中的分支语句,包括if语句的基础语法、嵌套使用、else的用法以及switch语句的原理、案例和break的重要性。同时讨论了如何在switch中使用default处理未匹配的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分支语句在我们编程过程中,是一个比较重要的组成部分,他可以让程序根据不同的条件执行不同的代码块。C语言为我们提供了两种分支语句:if语句和switch语句。这两种语句都能让我们实现条件的执行,具体用哪个语句还是要我们根据具体程序来决定。

分支语句

1 if语句

1.1 if

if 语句的基本语法为

if (表达式)
{
    //条件执行语句
}

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

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

例:输入一个整数,判断是否为偶数

#include <stdio.h>
int mian()
{
    int sum = 0;
    scanf ("%d",&sum);
    if (0 == sum %2)
        {
        printf ("%d 是偶数",sum);
        
return 0;
}

1.2 else

else是一个与if相对应的语句,if...else...

基本语法形式为

if(表达式)
//条件执行语句1
else
//条件执行语句2

例:输入一个数如果他是偶数就打印偶数 ,如果他是奇数就打印奇数

#include <stdio.h>
int main()
{
    int sum = 0;
    scanf ("%d",&sum);
    if (sum % 2 == 0)
    {
        printf("%d 是偶数",sum);
    }
    else
    {
        printf ("%d 是奇数",sum);
    }
    return 0;
}

练习:输入一个年龄,>= 18岁,就输出成年,否则输出未成年

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

1.3 分支语句中包含多条语句

在默认条件下if和else语句都只控制一条语句。

例:

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

以上代码,执行后会发现输入的值不管是大于等于18还是小于18,“不能谈恋爱”都会打印。

这是因为if和else语句都默认只控制一条语句执行

如果if或else要控制执行多条语句需要加{ }

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

1.4 嵌套if

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

例:

#include <stdio.h>
int main()
{
	int num = 0;
	scanf("%d", &num);
	if (num > 0)
	{
		if (num % 2 == 0)
			printf("偶数\n");
		else
			printf("奇数\n");
	}
	else
	{
		printf("非正数\n");
	}
	return 0;
}

上面代码中,判断奇数偶数部分是嵌套在if语句中的,构成了嵌套if语句

例:

#include <stdio.h>
int main ()
{
  	int num = 0;
	scanf("%d", &num);
	if (num == 0)
		printf("输入的值是0\n");
	else if (num > 0)
			printf("输入的值是正数\n");
	else
		printf("输入的值是负数\n");
	return 0;  
}

上面代码中判断正负数的部分是嵌套在else子句中的,构成了嵌套if语句。

1.5 悬空else问题

如果在一段代码中有多个if和else,可以记住这样一个规则,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;
}

以上代码第一眼很容易看错认为会输出haha,实则是什么都不输出,因为else只会跟离他最近的if语句相结合,这就是悬空else问题。

如果我们想要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;
}

这样修改以后else就与第一个if语句匹配了。

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

2 switch语句

2.1 switch

除了if语句外,C语言还提供了switch语句来实现分支结构。

switch语句是一种特殊形式的if...else结构,用于判断条件有多个结果的情况。把他多重的else if改成更易用、可读性更好的形式。

switch语句的基本语法为

switch(表达式)
{
    case 常量表达式:
        语句1;
    case 常量表达式:
        语句2;
}

在以上代码中,根据表达式不同的值,执行相应的case分支。如果找不到对应的值,就执行default分支。

switch后的表达式必须为整形表达式

case后的值,必须是整型常量表达式

case后必须加上空格再加常量

default后面也要加上空格再加":"

例:用switch实现输入1~7的数字,打印对应星期几

#include <stdio.h>
int main()
{
	int day = 0;
	scanf("%d", &day);
	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;
}

2.2 switch语句中的break

switch语句具有分支效果,只有使用break才能跳出switch语句的分支,否则会一直执行switch语句中的剩下分支,所以在switch语句中break语句是非常重要的,有break语句才能实现真正的分支效果,当然并不是每个case语句都要有break,这需要根据具体情况去决定。

例:前面的代码中我们把周一到周五定为工作日,周六周日为休息日。

#include <stdio.h>
int main()
{
	int day = 0;
	scanf("%d", &day);
	switch (day)
	{
	case 1:
	case 2:
	case 3:
	case 4:
	case 5:
		printf("工作日\n");
		break;
	case 6:
	case 7:
		printf("休息日\n");
		break;
	}
	return 0;
}

由此看出在数据较多的分支结构中,用switch语句会更加清晰。

2.3 switch语句中的default

在使用switch语句的时候,经常会遇到一种情况,比如switch后的表达式中的值无法匹配代码中的case语句时,这时我们就要么不做处理,要不就需要在switch语句中加入default子句。

switch中default语句基本语法

switch(表达式)
{
    case 常量表达式:
        语句1;
    case 常量表达式:
        语句2;
    default:
        语句3;
}

例:前面的代码打印星期练习,如果输入的day的值不是1~7之间的数,我们就要提示输入错误。

#include <stdio.h>
int main()
{
	int day = 0;
	scanf("%d", &day);
	switch (day)
	{
	case 1:
	case 2:
	case 3:
	case 4:
	case 5:
		printf("工作日\n");
		break;
	case 6:
	case 7:
		printf("休息日\n");
		break;
	default:
		printf("输入错误\n");
		break;
	}
	return 0;
}

在switch语句中default语句和case语句的是没有顺序要求的,只要能满足实际需求就可以,

不过通常情况下是把default子句放在最后处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值