初识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)