【C语言】"if" "switch" "goto"

  在C语言中有两种选择语句:if语句和switch语句。
  if语句
  一般形式如下:
  if(表达式)
   语句1
  else
    语句2
  表达的意思是:如果表达式的结果为真,则执行语句1,否则执行语句2。
  if语句中的“表达式”可以是关系表达式、逻辑表达式,也可以是数值表达式。
  常用的三种形式:
  ⑴ if(表达式)   语句1     (无else子句部分)
  ⑵ if(表达式)
     语句1
    else
    语句2
  ⑶ if(表达式1)      语句1    (在else部分又嵌套了多层的if语句)
    else if(表达式2)   语句2
    else if(表达式3)   语句3
      ┆          ┆
    else if(表达式m)   语句m
    else          语句m+1
  注意:
  ⑴适当的使用{}可以使代码的逻辑更加清楚。
  ⑵bool值和0比较。C语言中bool值的语义是:0表示假,非0表示真

#define FALSE 0
#define TRUE 1

  我们常使用整型变量来充当一个bool变量的角色,如:

int flag;
if (flag)//如果是真
{
    //...
}
if (!flag)//如果是假
{
    //...
}

  ⑶整型变量和0比较:

int num = 10;
if (num == 5)//注意此处为==(判断),不是=(赋值)
{
    printf("hello");
}

  ⑷浮点型和0比较:

double i = 20.0;
double j = i / 7.0;
if (j * 7.0 == i)
    //…
else
    //…

  因为浮点数在内存中的存储方式,故有些浮点数在内存中无法精确的存储,这样就必然有精度的丢失。一旦丢失就可能计算不够准确。无法使用 == 直接判断两个浮点数是否相等。那该怎么做呢?
  设置一个能接受的精度,保证误差在精度范围内就可以了。于是判断一个浮点数是不是等于0.0的写法如下:

#define EXP 0.0000000001
float f = 0.0000001;
if ((f > -EXP) && (f < EXP))
{
    //if中表达式结果若为真就意味着f是无限接近0的数字,就约等于0
}

  switch语句
  switch语句是多分支选择语句。其一般形式如下:
  switch(表达式)
  {
  case 常量1:语句1
  case 常量2:语句2
   ┆   ┆   ┆
  case 常量n:语句n
  default:   语句n+1
  }
  switch后面的表达式值的类型应为整数类型(包括字符型)。case后面跟一个常量(或者常量表达式)。
  一般情况下,在执行一个case子句后,应当用break语句(实现真正的分支)使流程跳出switch结构,即终止switch语句的执行。default语句中可以不加break语句。
  举个例子:

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;

  注意:
  ⑴必须当switch后面的表达式的值和某个case后面的常量相同时,才执行该case后面的语句,如果没有与switch表达式相匹配的case常量,就执行default后面的语句。
  ⑵default标号可以没有,但有且只能由一个,它可以出现在语句列表的任何位置。
  ⑶每一个case常量必须互不相同。
  ⑷多个case标号可以共用一组执行语句,如下代码:

int day = 0;
switch (day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
    printf("weekday\n");
    break;
case 6:
case 7:
    printf("weekend\n");
    break;
}

  goto语句
  goto语句并不是一种选择语句,而是无条件转移语句,其语义是改变程序流向,转去执行语句标号所标识的语句。一般格式为:goto 语句标号;其中语句标号是按标识符规定书写的符号,放在某一语句行的前面,标号后加冒号(:)。语句标号起标识语句的作用,与goto语句配合使用。
  goto语句通常与条件语句配合使用,可用来实现条件转移,构成循环,跳出循环体等功能。
  在结构化程序设计中一般不主张使用goto语句,以免造成程序流程的混乱,使理解和调试程序都产生困难。但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过程,例如一次跳出两层或多层循环,这种情况使用break是达不到目的的。如下:

for (...)
for (...)
{
    for (...)
    {
        if (disaster)
            goto error;
    }
}
…
error :
// 处理错误情况

  选择语句就介绍到这里,在后面的学习中,大家要谨记if语句和switch语句中的注意事项,谨慎使用goto语句。

猜你喜欢

转载自blog.csdn.net/Sunshine_R9H15Chen/article/details/78380554