初识C语言之条件结构篇——带你认知编程世界的逻辑之美!
目录
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语句,其形式如下:
-
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所示。
路程(KM) | 运费 |
s<250 |
没有折扣 |
250≤s<500 |
2%折扣 |
500≤s<1000 |
5%折扣 |
1000≤s<2000 |
8%折扣 |
2000≤s<3000 |
10%折扣 |
3000≤s |
15%折扣 |
-
#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语句进行嵌套也是可以实现的,不过其程序的可读性会降低。最后通过两种选择语句的比较来进行区分。
每文一语
遇雨撑伞,遇桥自渡
文章来源: wxw-123.blog.csdn.net,作者:王小王-123,版权归原作者所有,如需转载,请联系作者。
原文链接:wxw-123.blog.csdn.net/article/details/116174033
- 点赞
- 收藏
- 关注作者
评论(0)