在C语言程序中,我们有时候需要完成一些不同的判断操作,这是我们利用的就是if语句。
if语句就如同十字路口的红绿灯一样,通过判断不同的条件,决定是否进行操作
在if语句中,首先判断表达式的值,然后根据该值的情况控制程序流程。表达式的值不等于0就是真值,反之为假值。if语句有if、if…else、else…if这三种形式,下面我们将会为大家一一介绍。
if语句通过对表达式进行判断,根据判断的结果决定是否进行相应的操作。
if语句的一般形式如下:
if(表达式)
{
语句
}
其语句的执行流程图如下:
if后面的括号中的表达式就是要继续判断的条件,后面的语句部分则是对应的操作。如果if判断括号中的表达式为真,就执行后面语句的操作,反之则不执行。下面是一个简单的例子
if(num == 1)
{
printf("Hello CSDN");
}
这行代码的含义其实很简单,我们判断变量num == 1的表达式。如果条件成立,那么我们就执行下列的语句,打印处”Hello CSDN“,反之如果为假,则不进入if语句内部执行语句。
在C语言中,我们除了可以指定在条件为真时执行某些语句之外,我们还可以在条件为假是执行另外一段代码。这在C语言中我们可以利用else语句来完成,其一般形式如下:
if(表达式)
语句块1;
else
语句块2;
其语句的执行流程图如下所示:
在if后的括号判断表达式的结果,如果判断的结果是真值,则执行紧跟在if后的语句块中的内容:如果判断的结果为假值,则执行else语句后的语句块内容。简单来讲就是,当if语句检验的条件为假的时候,就执行相应的else语句后面的语句或者语句块,我们可以举一个小例子:
if(price)
{
printf("the price is ture");
}
else
{
printf("the price is false");
}
在上面代码中,如果if判断变量price的值为真,则执行if后面的语句块,如果if判断的结果为假值,则执行else下面的语句块。
利用if和else语句的组合我们还可以实现else if语句,这是对一系列互斥的条件进行检验,一般形式如下:
if(表达式1)
{
语句1;
}
else if(表达式2)
{
语句2;
}
...
else if(表达式m)
{
语句m;
}
else(表达式n)
{
语句n;
}
由流程图我们不难看出,首先对if语句中的表达式1进行判断,如果结果为真值,则执行后面跟着的语句1,然后跳过else if语句和else语句,反之如果判断为假值,则判断表达式2,接下来就都是一样的套路了,当所有的判断都不成立的时候,即都为假值是,就会执行else后的语句块。
一起来看这个例子:
if(num == 1)
{
... //语句块1
}
else if(num == 2)
{
... //语句块2
}
else if(num == 3)
{
... //语句块3
}
else
{
... //语句块4
}
上述代码的含义就是使用if语句判断变量num的值是否为1,如果为1,则执行后面语句块中的内容,然后跳过后面else if和else语句的判断与执行。如果不为1,那么接下来会判断num和2之间的关系,如果判断结果为真,则进入语句块2执行,后续也是一样的流程,如果都判断不成立,则会执行最后else内的语句块。
if语句中又含有一个或多个if语句,这种情况我们就将其称为if语句的嵌套
一般形式如下:
if(表达式1)
{
if(表达式2)
{
语句块1
}
else
{
语句块2
}
}
else
{
if(表达式3)
{
语句块3
}
else
{
语句块4
}
}
使用if语句的嵌套形式,可对判断的条件进行细化,然后在进行相应的操作。
这里就不举额外的实例了,大家可以自己尝试一下,其实就是个举一反三的过程,你懂了if语句的正确使用,那么学会使用基础的嵌套也自然不在话下。
我们在使用if语句的时候,可以通过表达式判断表达式为”真“或”假“,从而执行相应的表达式,举个小例子
if(a > b)
{
min = b;
}
else
{
min = a;
}
上面的代码我们就可以使用条件运算符"?:"来进行简化,例如:
min = (a > b) ? b : a;
条件运算符可对一个表达式的值的真假情况进行检验,然后根据检验结果返回另外两个表达式中,其一般形式如下:
表达式1 ? 表达式2 : 表达式3;
在运算中,首先会对第一个表达式的值进行检验,如果值为真,则返回第二个表达式的结果值。如果表达式为假,则返回第三个表达式的结果值。例如上面那个代码,实现判断表达式a>b,如果判断为真,则将b的值赋给min变量,如果判断为假,则把a的值赋给max变量。
从上文的介绍我们可以知道,if语句只有两个分支可供选择,而我们在解决实际问题中常常需要用到多分支的选择。当然,如果选择用if语句层层嵌套,也可以实现这一目的,但这容易使得程序冗杂,可读性差。这个时候,switch语句在处理多分支选择情况的优势就体现出来了。
switch语句是多分支选择语句。例如,我们现在要检测某个变量的所有可能取值,我们就可以使用switch语句,如下所示:
switch(表达式)
{
case 1:
语句块1;
case 2:
语句块2;
case 3:
语句块3;
case 4:
语句块4;
...
case n:
语句块n;
default:
默认情况语句块;
}
流程图如下:
由流程图我们可以知道,switch后面括号的表达式就是要进行判断的条件。在switch的语句块中,使用case关键字表示检验条件符合的各种情况,其紧跟后的语句就是相关的操作了。此外,我们还可以看到有一个default的关键词,这个关键字和else…if语句中的else异曲同工之妙,如果没有符合条件的情况,那么就会执行default后的默认情况语句。
我们可以来看一段实例:
switch(num)
{
case 1:
printf("Java\n");
break;
case 2:
printf("Python\n");
break;
case 3:
printf("MySQL\n");
break;
default:
printf("Error\n");
break;
}
其中switch判断变量num的值,利用case语句检验num值的不同情况。假设返回的是2,则执行case为2时的情况,执行后通过break跳出switch语句,不再执行switch下面的代码。
注:每个switch语句只能有一个default语句,而且default语句是可以省略的。
这里直接用语言描述过于抽象,我们先来看一段代码:
switch(表达式)
{
case 1:
语句1
break;
case 2:
case 3:
语句2
break;
...
default:
某人语句
break;
}
我们可以看到,如果在case2后不使用break语句,那么符合检验时与case3检验时的效果是一样的。也就是说,使用多路开关模式使得多种检验条件使用一种解决方式。
通过上文的介绍,我知道if…else语句以及switch语句都用于根据不同的情况检验条件并做出相应的判断。那么二者之间有无区别呢?接下来我们会从二者的语法和效率两方面进行比较。
①.语法的比较
if需要配合else关键字来使用,switch需要配合case关键字来使用:if语句是先对条件进行判断,switch语句是后进行判断。
②.效率的比较
if…else结构对于少量的检验,判断速度是比较快的,但是随着检验的增长,判断的速度会越来越慢,其中默认情况是最慢的。
而switch结构中,除了default默认情况之外,所有的case检验速度都是相同的,default默认情况比其他情况都要快。
本文介绍了选择结构的程序设计方式,包括if语句和switch语句,同时对if…else语句和else…if语句的形式进行了分析,还区分了if…else语句和switch语句的差异。希望本文对大家有所帮助,一键三连哦!