在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语句。