初识C语言之条件结构篇——带你认知编程世界的逻辑之美!

目录

IF语句

if语句

IF语句的基本的形式

if…else语句形式

else if语句形式

IF嵌套形式

if的嵌套形式

条件运算符

switch语句

switch语句的基本形式

多路开关模式的switch语句

if else语句和switch语句的区别

选择结构程序应用

每文一语


IF语句

if语句

在日常生活中,为了使交通畅通有序,一般会在路口设立交通信号灯。在信号灯显示为绿色时车辆可以行驶通过,当信号灯转为红色时车辆就要停止行驶。可见,信号灯给出了信号,人们通过不同的信号进行判断,然后根据判断的结果进行相应的操作。

在C语言程序中,想要完成这样的判断操作,利用的就是if语句。if语句的功能就像路口的信号灯一样,根据判断不同的条件,决定是否进行操作。

据说第一台数字计算机是用来进行决策操作的,使得之后的计算机都继承了这项功能。程序员将决策表示成对条件的检验,即判断一个表达式值的真假。除了没有任何返回值的函数和返回无法判断真假的结构函数外,几乎所有表达式的返回值都可以判断真假。

IF语句的基本的形式

if语句通过对表达式进行判断,根据判断的结果选择是否进行相应的操作。if语句的一般形式为:

if(表达式)  语句

其语句执行流程如图所示。

【实例6.1】 使用if语句模拟信号灯指挥车辆行驶。在本实例中,为了模拟十字路口上信号灯指挥车辆行驶,要使用if语句判断信号灯的状态。如果信号灯为绿色,则说明车辆可以行驶通过,通过输出语句进行信息提示说明车辆的行动状态。


  
  1. #include<stdio.h>
  2. int main()
  3. {
  4. int iSignal; /*定义变量表示信号灯的状态*/
  5. printf("the Red Light is 0,the Green Light is 1\n");/*输出提示信息*/
  6. scanf("%d",&iSignal); /*输入iSignal变量*/
  7. if(iSignal==1) /*使用if语句进行判断*/
  8. {
  9. printf("the Light is green,cars can run\n"); /*判断结果为真时输出*/
  10. }
  11. return 0;
  12. }

【实例6.2】 完善if语句的使用。原程序中仅对绿灯情况下做出相应的操作,为进一步完善信号灯为红灯时的操作,在程序中再添加一次if语句对信号灯为红灯时的判断,并且在条件成立时给出相应的操作。


  
  1. #include<stdio.h>
  2. int main()
  3. {
  4. int iSignal; /*定义变量表示信号灯的状态*/
  5. printf("the Red Light is 0,the Green Light is 1\n");/*输出提示信息*/
  6. scanf("%d",&iSignal); /*输入iSignal变量*/
  7. if(iSignal==1) /*使用if语句进行判断*/
  8. {
  9. printf("the Light is green,cars can run\n");/*判断结果为真时输出*/
  10. }
  11. if(iSignal==0) /*使用if语句进行判断*/
  12. {
  13. printf("the Light is red,cars can't run\n");/*判断结果为真时输出*/
  14. }
  15. return 0;
  16. }

if…else语句形式

除了可以指定在条件为真时执行某些语句外,还可以在条件为假时执行另外一段代码。这在C语言中是利用else语句来完成的,其一般形式为:

if(表达式)

  语句块1;

else

  语句块2;

其语句执行流程如图所示。

【实例6.3】 使用if…else语句进行选择判断。在本实例中,使用if…else语句判断用户输入的数值,输入的数字为0表示条件为假,输入的数字为非0表示条件为真。


  
  1. #include<stdio.h>
  2. int main()
  3. {
  4. int iNumber; /*定义变量*/
  5. printf("Enter a number\n"); /*显示提示信息*/
  6. scanf("%d",&iNumber); /*输入数字*/
  7. if(iNumber) /*判断变量的值*/
  8. {
  9. /*判断为真时执行输出*/
  10. printf("the value is true and the number is: %d\n",iNumber);
  11. }
  12. else /*判断为假时执行输出*/
  13. {
  14. printf("the value is flase and the number is: %d\n",iNumber);
  15. }
  16. return 0;
  17. }

【实例6.4】 使用if…else语句得到两个数的最大值。本实例要实现的功能是比较两个数值的大小,这两个数值由用户输入,然后将其中相对较大的数值输出显示。


  
  1. #include<stdio.h>
  2. int main()
  3. {
  4. int iNumber1,iNumber2; /*定义变量*/
  5. printf("please enter two numbers:\n"); /*信息提示*/
  6. scanf("%d%d",&iNumber1,&iNumber2); /*输入数据*/
  7. if(iNumber1>iNumber2) /*判断iNumber1是否大于iNumber2*/
  8. {
  9. printf("the bigger number is %d\n",iNumber1);
  10. }
  11. else /*判断结果为假,则执行下面语句*/
  12. {
  13. printf("the bigger number is %d\n",iNumber2);
  14. }
  15. return 0;
  16. }

【实例6.5】 使用if…else语句模拟信号灯。多数路口的信号灯还有一个黄灯,是用来提示车辆准备行驶或者停车的。6.2.1节使用if语句模拟信号灯,在本实例中使用if…else语句进一步完善这个程序,使得信号灯具有黄灯相应的功能。


  
  1. #include<stdio.h>
  2. int main()
  3. {
  4. int iSignal; /*定义变量表示信号灯的状态*/
  5. printf("the Red Light is 0,\nthe Green Light is 1,\nthe Yellow Light is other number\n"); /*输出提示信息*/
  6. scanf("%d",&iSignal); /*输入iSignal变量*/
  7. if(iSignal==1) /*当信号灯为绿色时*/
  8. {
  9. printf("the Light is green,cars can run\n");/*判断结果为真时输出*/
  10. }
  11. if(iSignal==0) /*当信号灯为红灯时*/
  12. {
  13. printf("the Light is red,cars can't run\n"); /*判断结果为真时输出*/
  14. }
  15. else /*当信号灯为黄灯时*/
  16. {
  17. printf("the Light is yellow,cars are ready\n");
  18. }
  19. return 0;
  20. }

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语句表示不为休息日时的相应操作。代码如下所示。


  
  1. if(iDay>Friday) /*判断为休息日的情况*/
  2. {
  3. if(iDay==Saturday) /*判断为周六时的操作*/
  4. {}
  5. else /*为周日时的操作*/
  6. {}
  7. }
  8. else /*不为休息日的情况*/
  9. {
  10. if(iDay==Monday) /*判断为周一时的操作*/
  11. {}
  12. else
  13. {}
  14. }

条件运算符

在使用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语句的一般形式如下:


  
  1. switch (表达式)
  2. {
  3. case 情况1:
  4. 语句块1;
  5. case 情况2:
  6. 语句块2;
  7. case 情况n:
  8. 语句块n;
  9. default:
  10. 默认情况语句块;
  11. }

switch语句的程序流程如图所示 

多路开关模式的switch语句

设计多路开关模式的switch语句,其形式如下:


  
  1. switch(表达式)
  2. {
  3. case 1:
  4. 语句1
  5. break;
  6. case 2:
  7. case 3:
  8. 语句2
  9. break;
  10. ……
  11. default:
  12. 默认语句
  13. break;
  14. }

可以看到如果在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%折扣


  
  1. #include<stdio.h>
  2. int main()
  3. {
  4. int iDiscount; /*表示折扣*/
  5. int iSpace; /*表示路程*/
  6. int iSwitch; /*表示折扣的检验情况*/
  7. float fPrice,fWeight,fAllPrice;
  8. printf("enter the price , weight and space\n");
  9. scanf("%f%f%d",&fPrice,&fWeight,&iSpace);
  10. if(iSpace>3000)
  11. {
  12. iSwitch=12; /*折扣的检验情况为12*/
  13. }
  14. else
  15. {
  16. iSwitch=iSpace/250; /*计算折扣的检验情况*/
  17. }
  18. switch(iSwitch) /*使用switch进行检验*/
  19. {
  20. case 0:
  21. iDiscount=0;
  22. break;
  23. case 1:
  24. iDiscount=2;
  25. break;
  26. case 2:
  27. case 3:
  28. iDiscount=5;
  29. break;
  30. case 5:
  31. case 6:
  32. case 7:
  33. iDiscount=8;
  34. break;
  35. case 8:
  36. case 9:
  37. case 10:
  38. case 11:
  39. iDiscount=10;
  40. break;
  41. case 12:
  42. iDiscount=12;
  43. break;
  44. default:
  45. break;
  46. }
  47. fAllPrice=fPrice*fWeight*iSpace*(1-iDiscount/100.0); /*计算总价格*/
  48. printf("AllPrice is :%.4f\n",fAllPrice); /*输出结果*/
  49. return 0;
  50. }

 

本本介绍了选择结构的程序设计方式,包括if语句和switch语句。同时对if…else语句和else if语句的形式也进行了介绍,为选择结构程序提供了更多的控制方式。然后介绍了switch语句,当switch语句用在当检验的条件较多时,如果使用if语句进行嵌套也是可以实现的,不过其程序的可读性会降低。最后通过两种选择语句的比较来进行区分。

每文一语

遇雨撑伞,遇桥自渡

文章来源: blog.csdn.net,作者:王小王-123,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/weixin_47723732/article/details/116174033

(完)