新手学C语言的分支

if语句

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

if  (表达式)
     语句

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

例子:输入一个整数,判断是否为单数
在这里插入图片描述
下面是表达式结果为假(0)的运行结果(没有输出)这个是表达式结果为假(0)的运行结果下面是表达式结果为真(非0)的运行结果这个是表达式结果为真(非0)的运行结果

2.else
如果一个数不是单数,便是双数。如果是非黑即白的条件下,我们该如何表达出我们的判断呢?
那就得用上我们的 if…else语句了。
if…else语句的语法形式如下

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

例子:输入一个整数,判断是否为单数,若为单数则打印是单数,否则打印是双数。

#include <stdio.h>
int main()
{
   int num=0;
   scanf("%d是单数\n",num);
   if(num%2==1)
      printf("%d是单数\n",num);
   else
      printf("%d是双数\n",num);
   return 0;
}

3.分支中包含多条分支语句
默认在if语句和else语句后面只能控制一条语句,若想控制多条语句,则要用{ }括起来,表示一个整体。否则第二条打印的语句,就不关if的事情了。比如:输入一个小于18的数,它还是会运行出来第二条语句(正常情况下,if语句表达式结果为假,是不会打印的)

#include <stdio.h>
int main()
{
   int age=0;
   scanf("%d",&age);
   if(age>=18)
   {
      printf("你已经成年了\n");
      printf("你要为你自己的行为负责了\n");
   }
 
   return 0;
 }

4.if的嵌套问题和if与else对应问题
if的嵌套可以完成更为复杂的逻辑判断,例子如下:

#include <stdio.h>
int main()
{
    int age = 0;
    scanf("%d", &age);
    if (age < 18)
        printf("未成年人\n");
    else
    {
        if (age <= 44)
            printf("青年人\n");
        else
        {
            if (age<=59)
                printf("中年人\n");
            else
            {
                if (age <= 74)
                    printf("年轻的老年人\n");
                else
                {
                    if (age <= 89)
                        printf("老年人\n");
                    else
                        printf("长寿老年人\n");
                }
            }

        }
    }

      
  
    return 0;
}

但if与else有对应的原则,就是就近对应原则,所以我们要用好{ },这样才不会出错。
下面举一个出错的例子:

#include <stdio.h>
int main()
{
    int a = 0;
    int b = 6;
    
    if (a == 1)
        if (b == 6)
           printf("xixixixi\n");
    else
        printf("hehehehe\n");

      
  
    return 0;
}

运行结果啥都没有输出,而不是我们认为的输出"hehehehe”。因为我们的else是对应了第二条 if 语句而不是第一条 if 语句,然后我们第二条 if 语句是第一条语句的嵌套,第一条if语句表达式为假所以不执行,故没有结果输出。

然而你加了{ }之后,代码如下:

#include <stdio.h>
int main()
{
    int a = 0;
    int b = 6;

    if (a == 1)

    {
        if (b == 6)
            printf("xixixixi\n");
    }
    else
        printf("hehehehe\n");

      
  
    return 0;
}

输出的结果便是“hehehhe”了。

switch语句

2.switch语句

switch语句跟if语句表达形式有点相似,下面代码可以看出它们之间的关系。

//if语句
int main()
{
    int a = 0;
    scanf("%d", &a);
    if (a % 5 == 0)
        printf("余数是0");
    else if (a % 5 == 1)
        printf("余数是1");
    else if (a % 5 == 2)
        printf("余数是2");
    else if (a % 5 == 3)
        printf("余数是3");
    else 
        printf("余数是4");
    return 0;
}


//switch语句
#include <stdio.h>
int main()
{
    int a = 0;
    scanf("%d", &a);
    switch (a % 5)
    {
    case 1: printf("余数是1"); break;
    case 2: printf("余数是2"); break;
    case 3: printf("余数是4"); break;
    case 4: printf("余数是4"); break;
    case 0:printf("余数是0"); break;
    }
    return 0;
}

我们从中可以观察到,if的表达式与switch有所不同,else if 变成了 case()。
值得注意的是: switch的表达式必须是整型表达式,而且case 后的值,必须是整型常量表达式。而常量表达式正好要匹配整型表达式的值。否则将会发生错误。比如:将case 0 :改为 case 5:则会发生错误。

谈到这里,相信会有些小伙伴可能会有这样的疑惑:如果有些情况是switch后面的值无法匹配到case语句中去,但又不得不做处理,那该怎么办呢?
这个时候就得我们的default出场了。
例子如下:

#include <stdio.h>
int main()
{
	int a = 0;
	scanf("%d", &a);
	switch (a)
	{
	case 1: printf("周一"); break;
	case 2: printf("周二"); break;
	case 3: printf("周三"); break;
	case 4: printf("周四"); break;
	case 5: printf("周五"); break;
	case 6: printf("周六"); break;
	case 7: printf("周日"); break;
	default:  printf("请输入1-7");
	}
	return 0;

	}

如果我们输入的数字不是1-7,像上文讲到的只有case的便会没有输出结果,而有了的default,我们便可以将不匹配的情况做了处理。

还有一个需要注意的点是什么呢?

1.case和后面的数字一定要有个空格,然后给个冒号。
2. case语句后面一定要跟着个break,不然它会一直读下去的。
3. 如果有几个case 引发后面的结果都是一样的话,那前面的结果可以省写,在最后的那个case写出来即可。(我的表达可能不是很好,希望你可以通过以下代码get我的意思)
代码如下:

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

	}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值