目录
IF语句
if语句
在日常生活中,为了使交通畅通有序,一般会在路口设立交通信号灯。在信号灯显示为绿色时车辆可以行驶通过,当信号灯转为红色时车辆就要停止行驶。可见,信号灯给出了信号,人们通过不同的信号进行判断,然后根据判断的结果进行相应的操作。
在C语言程序中,想要完成这样的判断操作,利用的就是if语句。if语句的功能就像路口的信号灯一样,根据判断不同的条件,决定是否进行操作。
据说第一台数字计算机是用来进行决策操作的,使得之后的计算机都继承了这项功能。程序员将决策表示成对条件的检验,即判断一个表达式值的真假。除了没有任何返回值的函数和返回无法判断真假的结构函数外,几乎所有表达式的返回值都可以判断真假。
IF语句的基本的形式
if语句通过对表达式进行判断,根据判断的结果选择是否进行相应的操作。if语句的一般形式为:
if(表达式) 语句
其语句执行流程如图所示。
【实例6.1】 使用if语句模拟信号灯指挥车辆行驶。在本实例中,为了模拟十字路口上信号灯指挥车辆行驶,要使用if语句判断信号灯的状态。如果信号灯为绿色,则说明车辆可以行驶通过,通过输出语句进行信息提示说明车辆的行动状态。
#include<stdio.h> int main() { int iSignal; /*定义变量表示信号灯的状态*/ printf("the Red Light is 0,the Green Light is 1\n");/*输出提示信息*/ scanf("%d",&iSignal); /*输入iSignal变量*/ if(iSignal==1) /*使用if语句进行判断*/ { printf("the Light is green,cars can run\n"); /*判断结果为真时输出*/ } return 0; }
【实例6.2】 完善if语句的使用。原程序中仅对绿灯情况下做出相应的操作,为进一步完善信号灯为红灯时的操作,在程序中再添加一次if语句对信号灯为红灯时的判断,并且在条件成立时给出相应的操作。
#include<stdio.h> int main() { int iSignal; /*定义变量表示信号灯的状态*/ printf("the Red Light is 0,the Green Light is 1\n");/*输出提示信息*/ scanf("%d",&iSignal); /*输入iSignal变量*/ if(iSignal==1) /*使用if语句进行判断*/ { printf("the Light is green,cars can run\n");/*判断结果为真时输出*/ } if(iSignal==0) /*使用if语句进行判断*/ { printf("the Light is red,cars can't run\n");/*判断结果为真时输出*/ } return 0; }
if…else语句形式
除了可以指定在条件为真时执行某些语句外,还可以在条件为假时执行另外一段代码。这在C语言中是利用else语句来完成的,其一般形式为:
if(表达式)
语句块1;
else
语句块2;
其语句执行流程如图所示。
【实例6.3】 使用if…else语句进行选择判断。在本实例中,使用if…else语句判断用户输入的数值,输入的数字为0表示条件为假,输入的数字为非0表示条件为真。
#include<stdio.h> int main() { int iNumber; /*定义变量*/ printf("Enter a number\n"); /*显示提示信息*/ scanf("%d",&iNumber); /*输入数字*/ if(iNumber) /*判断变量的值*/ { /*判断为真时执行输出*/ printf("the value is true and the number is: %d\n",iNumber); } else /*判断为假时执行输出*/ { printf("the value is flase and the number is: %d\n",iNumber); } return 0; }
【实例6.4】 使用if…else语句得到两个数的最大值。本实例要实现的功能是比较两个数值的大小,这两个数值由用户输入,然后将其中相对较大的数值输出显示。
#include<stdio.h> int main() { int iNumber1,iNumber2; /*定义变量*/ printf("please enter two numbers:\n"); /*信息提示*/ scanf("%d%d",&iNumber1,&iNumber2); /*输入数据*/ if(iNumber1>iNumber2) /*判断iNumber1是否大于iNumber2*/ { printf("the bigger number is %d\n",iNumber1); } else /*判断结果为假,则执行下面语句*/ { printf("the bigger number is %d\n",iNumber2); } return 0; }
【实例6.5】 使用if…else语句模拟信号灯。多数路口的信号灯还有一个黄灯,是用来提示车辆准备行驶或者停车的。6.2.1节使用if语句模拟信号灯,在本实例中使用if…else语句进一步完善这个程序,使得信号灯具有黄灯相应的功能。
#include<stdio.h> int main() { int iSignal; /*定义变量表示信号灯的状态*/ printf("the Red Light is 0,\nthe Green Light is 1,\nthe Yellow Light is other number\n"); /*输出提示信息*/ scanf("%d",&iSignal); /*输入iSignal变量*/ if(iSignal==1) /*当信号灯为绿色时*/ { printf("the Light is green,cars can run\n");/*判断结果为真时输出*/ } if(iSignal==0) /*当信号灯为红灯时*/ { printf("the Light is red,cars can't run\n"); /*判断结果为真时输出*/ } else /*当信号灯为黄灯时*/ { printf("the Light is yellow,cars are ready\n"); } return 0; }
else if语句形式
利用if和else关键字的组合可以实现else if语句,这是对一系列互斥的条件进行检验,其一般形式如下:if(表达式1) 语句1
else if(表达式2) 语句2
else if(表达式3) 语句3
…
else if(表达式m) 语句m
else 语句n
else if语句执行流程如图
IF嵌套形式
if的嵌套形式
在if语句中又包含一个或多个if语句称为if语句的嵌套。一般形式如下:
if(表达式1)
if(表达式2) 语句块1
else 语句块2
else
if(表达式3) 语句块3
else 语句块4
使用if语句嵌套的形式功能是对判断的条件进行细化,然后进行相应的操作。
这就好比人们在生活中,每天早上醒来的时候想一下今天是星期几,如果是周末就是休息日,如果不是周末就要上班;同时,休息日可能是星期六或者是星期日,星期六就和朋友去逛街,星期日就陪家人在家。
根据这个比喻来看一下上述一般形式表示:if语句判断表达式1就像判断今天是星期几,假设判断结果为真,则用if语句判断表达式2,这就好像判断出今天是休息日,然后去判断今天是不是周六;如果if语句判断表达式2为真,那么执行语句块1中的内容。如果不为真,那么执行语句块2中的内容。就比如,如果为星期六就陪朋友逛街,如果为星期日就陪家人在家。外面的else语句表示不为休息日时的相应操作。代码如下所示。
if(iDay>Friday) /*判断为休息日的情况*/ { if(iDay==Saturday) /*判断为周六时的操作*/ {} else /*为周日时的操作*/ {} } else /*不为休息日的情况*/ { if(iDay==Monday) /*判断为周一时的操作*/ {} else {} }
条件运算符
在使用if语句时,可以通过判断表达式为“真”或“假”,而执行相应的表达式。例如:
if(a>b)
{max=a;}
else
{max=b;}
上面的代码可以用条件运算符“? :”来进行简化,例如:
max=(a>b)?a:b;
条件运算符对一个表达式的真或假值结果进行检验,然后根据检验结果返回另外两个表达式中的一个。条件运算符的一般形式:
表达式1?表达式2:表达式3;
在运算中,首先对第一个表达式的值进行检验。如果值为真,则返回第二个表达式的结果值;如果值为假,则返回第3个表达式的结果值。例如上面使用条件运算符的代码,首先判断表达式a>b是否成立,成立则说明结果为真,否则为假。当为真时,将a的值赋给max变量;如果为假,则将b的值赋给max变量。
switch语句
switch语句的基本形式
switch语句是多分支选择语句。例如,如果只需要检验某一个整型变量的可能取值,那么可以用更简便的switch语句。switch语句的一般形式如下:
switch (表达式) { case 情况1: 语句块1; case 情况2: 语句块2; … case 情况n: 语句块n; default: 默认情况语句块; }
多路开关模式的switch语句
设计多路开关模式的switch语句,其形式如下:
switch(表达式) { case 1: 语句1 break; case 2: case 3: 语句2 break; …… default: 默认语句 break; }
可以看到如果在case 2后不使用break语句,那么符合检验时与符合case 3检验时的效果是一样的。也就是说,使用多路开关模式使得多种检验条件使用一种解决方式。
if else语句和switch语句的区别
if else语句和switch语句都用于根据不同的情况检验条件做出相应的判断。那么if else语句和switch语句有什么区别呢?下面从两者的语法和效率的比较进行讲解。
语法的比较
if是配合else关键字进行使用的,而switch是配合case使用的;if语句先对条件进行判断,而switch后进行判断。
效率的比较
if else结构对开始少量的检验判断速度比较快,但是随着检验的增长会逐渐变慢,其中的默认情况是最慢的。使用if else结构可以判断表达式,但是也不能减少选择深度的增加使得检验速度变慢的趋势,并且也不容易进行后续的添加扩充。
switch结构中,对其中每一项case检验的速度都是相同的,但除去default的默认情况,default默认情况比其他情况都快。
当判定的情况占少数时,if else结构比swtich结构检验速度快。也就是说,如果分支在3或者4个以下,用if else比较好,否则选择switch结构。
选择结构程序应用
【实例6.14】 使用switch语句计算运输公司的计费。某运输公司的收费按照用户运送货物的路程进行计费。路程(s)越远,每公里运费越低,收费标准如表6.1所示。
#include<stdio.h> int main() { int iDiscount; /*表示折扣*/ int iSpace; /*表示路程*/ int iSwitch; /*表示折扣的检验情况*/ float fPrice,fWeight,fAllPrice; printf("enter the price , weight and space\n"); scanf("%f%f%d",&fPrice,&fWeight,&iSpace); if(iSpace>3000) { iSwitch=12; /*折扣的检验情况为12*/ } else { iSwitch=iSpace/250; /*计算折扣的检验情况*/ } switch(iSwitch) /*使用switch进行检验*/ { case 0: iDiscount=0; break; case 1: iDiscount=2; break; case 2: case 3: iDiscount=5; break; case 5: case 6: case 7: iDiscount=8; break; case 8: case 9: case 10: case 11: iDiscount=10; break; case 12: iDiscount=12; break; default: break; } fAllPrice=fPrice*fWeight*iSpace*(1-iDiscount/100.0); /*计算总价格*/ printf("AllPrice is :%.4f\n",fAllPrice); /*输出结果*/ return 0; }
本本介绍了选择结构的程序设计方式,包括if语句和switch语句。同时对if…else语句和else if语句的形式也进行了介绍,为选择结构程序提供了更多的控制方式。然后介绍了switch语句,当switch语句用在当检验的条件较多时,如果使用if语句进行嵌套也是可以实现的,不过其程序的可读性会降低。最后通过两种选择语句的比较来进行区分。