一文学会C语言分支语句

Source

在C语言当中的分支语句(又叫选择结构)有 if 和 switch 两种。

if 语句

如果好好学习,校招时拿一个好offer,就能获得很好的成就。如果不好好学习,找不到好工作,就不会开心。
这就是一个选择语句。

if语句的语法:

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

这样就是一个简单的 if 语句,如果好好学习,校招时就能拿一个好offer。如果不好好学习,就找不到好工作。用代码实现:

int main()
{
    
      
	int a = 0;
	printf("是否要好好学习,是 请输入1,不是 请输入其它数字\n");
	scanf("%d", &a);
	if (1 == a)
		printf("好offer\n");
	else
		printf("找不到好工作");
	return 0;
}

悬空 else

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

这个程序不会输出结果的,因为C语言语法规定,else 只与离它最近的 if 所匹配。所以这里的 else 是和第二个 if 匹配。这一套 if else 都在第一个 if 里面。所以,只有第一个 if 判断为真,才会执行里面的 if 或者 else 。所以这里什么也不输出。

所以我们写代码的时候,一定要加上大括号,这样既是代码的规范性,也便于阅读,便于维护。

年龄不够18岁,就叫少年,18-30叫青年,30-50叫中年,50-80叫老年,80以上叫寿星。代码实现如下:

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");
   }
    return 0;
}

这里主要用到逻辑与 (&&) 操作符,也就是两边都要判断为真程序才会执行。在C语言当中:0 表示假,一切的非 0 表示真。

练习

练习一:判断一个数是否为奇数

做题思路就是,知道奇数的判断条件是不会被 2 整除。所以,如果模 2 等于 0 ,就说明这个数是偶数。代码如下:

int main()
{
    
      
	int a = 0;
	scanf("%d", &a);
	if (a % 2 != 0)			//这里是判断是否为奇数
	{
    
      
		printf("这个数是奇数\n");
	}
	return 0;
}

练习二: 输出1-100之间的奇数。

这道题的做法和上一道题的做法一样。不过是把输入一个数变成循环了。

int main()
{
    
      
	int a = 0;
	for (a = 1; a <= 100; a++)		//产生1-100的数
	{
    
      
		if (a % 2 != 0)				//判断是不是奇数
		{
    
      
			printf("%d ",a);		//输出奇数
		}
	}
	return 0;
}

当然,还能优化,因为奇数之间相差 2 ,而且第一个奇数是 1 ,所以从 1 开始,每次自增 2 。

int main()
{
    
      
	int a = 0;
	for (a = 1; a <= 100; a+=2)
	{
    
      
			printf("%d ",a);
	}
	return 0;
}

这里就是优化过后的代码,更简洁。

switch语句

switch语句用于多分支的情况。比如:

输入1,输出星期一
输入2,输出星期二
输入3,输出星期三
输入4,输出星期四
输入5,输出星期五
输入6,输出星期六
输入7,输出星期日

当然,也能写成 if 但是那样太麻烦了。所以用 switch 。switch 语句的语法:

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

语句项就是一些 case 语句,不过 case 语句后面要加整型常量表达式,然后是语句。

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

在 switch 语句当中一定要用 break

如果在switch当中,不用 break 的话,就会继续执行其它的 case 情况,不能实需求。所以实现星期一,二,三,就可以这样写代码。

int main()
{
    
      
    int day = 0;
    scanf("%d",&day);
     switch(day)
   {
    
      
        case 1printf("星期一\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;
}

上面这个就是通过输入 1,2,3,4,5,6,7。输出星期一,二…。

假设现在的需求是输入 1-5 输出的是 “weekend” 。输入 6-7 输出的是 “weekend” 。

因为之前说过,如果不写 break 的话,就会继续执行下面的case情况,所以对这种情况的话,就可以在 case 5 后面输出 weekend 然后 break 。同理在 case 7 后面加上 weekend 然后break 就好了。代码如下:

int main()
{
    
      
    int day = 0;
    scanf("%d", &day);
    switch(day)
   {
    
      
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:
            printf("weekday\n");		//这里就涵盖了1-5的所有情况
            break;
        case 6:
        case 7:
            printf("weekend\n");		//这里是涵盖的6-7的情况
            break;
   }
    return 0;
}

break 语句的实际效果是把语句列表划分为不同的部分。

default语句

default 语句用于 switch 语句,当所有的 case 条件都不满足时,就执行,default ,也就是说,default 是case情况外的所有情况。所以在上面的 weekday 和 weekend 后面就还能再加一种 default 情况,显示:输入错误

int main()
{
    
      
	int day = 0;
	scanf("%d", &day);
	switch (day)
	{
    
      
	case 1:
		case 2:
		case 3:
		case 4:
		case 5:
			printf("weekday\n");		
			break;
		case 6:
		case 7:
			printf("weekend\n");		
			break;
		default:
			printf("输入错误\n");
			break;
	}
	return 0;
}

switch语句也可以嵌套使用

计算下面程序的 m 是多少:

int main()
{
    
      
    int n = 1;
    int m = 2;
    switch (n)
    {
    
      
    case 1:
        m++;
    case 2:
        n++;
    case 3:
        switch (n)
        {
    
      //switch允许嵌套使用
        case 1:
            n++;
        case 2:
            m++;
            n++;
            break;
        }
    case 4:
        m++;
        break;
    default:
        break;
    }
    printf("m = %d, n = %d\n", m, n);	//m输出 5   n输出 3
    return 0;
}

m 的值是 5 因为第一个 switch 语句 n = 1 就进入了 case 1 m加1 m等于3 ,因为没有 break 所以继续执行 case 2 n等于2 然后进入 case 3 因为 n 等于2 所以进入嵌套的 switch 的 case 2 m 等于 4 n 等于3 然后 break 跳出循环 因为 case 3 没有 break 所有继续执行 case 4 m等于5 n等于3。下面用图片来解释:
在这里插入图片描述
结果就是上面这张图片。