一篇文章拿下选择语句if和switch

简介: 一篇文章拿下选择语句if和switch

什么是选择语句

       选择语句也叫分支语句,在c语言中最常用的当属if和switch,顾名思义就是在你做出一项“选择”产生一个结果

if语句

       在if语句中用0表示为真,非0表示为假,满足条件则执行语句,可以用思维导图的方式如下表示,包含一般的if语句和多分支的if语句

一般if的基本语法

if(表达式)

  语句1;

else

  语句2;

举例如下:

int main()
{
  int age = 0;
  scanf("%d", &age);
  if (age < 18)
    printf("未成年\n");
  else
    printf("已成年\n");
  return 0;
}

多分支的if语句基本语法

if(表达式1)

  语句1;

else if(表达式2)

  语句2;

else

  语句3;

举例如下:

int main()
{
  int age = 0;
  scanf("%d", &age);
  if (age < 18)
    printf("未成年\n");
    else if (age >= 18 && age < 35)
      printf("青年\n");
    else
      printf("中年或老年\n");
  return 0;
}

悬浮else及其匹配

       if语句中也可以允许嵌套别的if语句,并且在使用过程中,可以根据我们的需求对else进行适当省略,语法是允许只有if没有else的情况出现的,因此,我们可能在实际情况中会出现程序中有多个if,但是只有少量的else的情况的,在这种情况下,else对于if的匹配则是我们需要格外注意的地方,else的匹配原则是优先与最近的那个if匹配,因此我们在使用的过程中也得注意作用区间,可以给上大括号等方式来完成我们目的的设计。


我们可以做如下的测试:

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

   理论上,我们想要的结果应该是输出“a的值为0”,但实际上,这段程序不会有任何的结果输出,原因就在于这里的else并不是和第一个if匹配的,而是和第二个if匹配的,程序首先判断a是否为1,判断为假,跳过结果语句找寻else语句的结果,但并没有找到,因此没有任何输出。

这也告诫了我们,在书写时应注意if对else的匹配,可以适当的添加大括号来达成目的

switch语句

switch语句也是一种选择语句,通常用于多分支的情况下。

switch语句的基本语法

switch ( 整型表达式 )

{  

       case 整形常量表达式 :

                 语句 ;

}

我们可以做以下的示例:

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

但是这样就会带来一个问题,我们不妨试着运行以下,这里以输入3为例

       我们会发现,这与我们设想的完全不一样,多了许多我们不需要的输出,这主要是因为case只是switch的输入接口,就是说从case这里进入switch语句,然后按着顺序继续执行语句,为例改善这一点,我们就需要使用“break”关键字。即在编译器读到break关键字时,即刻跳出switch语句,如下示例。

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;
}

       同时在switch语句中我们也可以根据需求做出部分省略,假如我们现在想用输入数字表示今天星期几,输出今天是休息日还是工作日 ,示例如下

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;
}

default子句

       在switch语句中也允许使用default子句来表示默认的选项和情况。        假如在刚才的程序中,我们输入了8,但实际上是不存在星期八的情况的,我们就可以输出“输入错误”,其他数据同样。

 

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

目录
相关文章
|
1月前
震惊!!!return 语句居然是这样的
震惊!!!return 语句居然是这样的
23 1
|
1月前
|
C#
C#拾遗补漏之goto跳转语句
在我们日常工作中常用的C#跳转语句有break、continue、return,但是还有一个C#跳转语句很多同学可能都比较的陌生就是goto,今天大姚带大家一起来认识一下goto语句及其它的优缺点。
|
6月前
分支和循环语句(2)补充goto语句
分支和循环语句(2)补充goto语句
39 1
|
1月前
|
C++ 存储
C++从零基础到入门(2)—— (if、switch、for、while语句)
C++从零基础到入门(2)—— (if、switch、for、while语句)
C++从零基础到入门(2)—— (if、switch、for、while语句)
|
1月前
|
Java
Java程序设计基础——switch选择语句
Java程序设计基础——switch选择语句
|
8月前
|
Go
跳出多层循环,goto语句助你一臂之力
跳出多层循环,goto语句助你一臂之力
135 0
|
Java Go C++
三分钟学 Go 语言——循环语句的多种形式、死循环、break/continue
三分钟学 Go 语言——循环语句的多种形式、死循环、break/continue
三分钟学 Go 语言——循环语句的多种形式、死循环、break/continue
|
JSON Go 数据格式
三分钟学 Go 语言——条件语句+switch和type switch
三分钟学 Go 语言——条件语句+switch和type switch
三分钟学 Go 语言——条件语句+switch和type switch
|
C语言
教你快速精通循环和分支语句,确定不进来?(和bug 郭一起学C系列2)(2)
教你快速精通循环和分支语句,确定不进来?(和bug 郭一起学C系列2)(2)
91 0
教你快速精通循环和分支语句,确定不进来?(和bug 郭一起学C系列2)(2)
【硬着头皮】switch很少看到,还是写 if 吧?
【硬着头皮】switch很少看到,还是写 if 吧?
【硬着头皮】switch很少看到,还是写 if 吧?