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

举报
王小王-123 发表于 2021/05/27 02:12:39 2021/05/27
【摘要】 目录 IF语句 if语句 IF语句的基本的形式 if…else语句形式 else if语句形式 IF嵌套形式 if的嵌套形式 条件运算符 switch语句 switch语句的基本形式 多路开关模式的switch语句 if else语句和switch语句的区别 选择结构程序应用 每文一语 IF语句 if语句 在日常生活中,为了使交通畅通有序,...

目录

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语句进行嵌套也是可以实现的,不过其程序的可读性会降低。最后通过两种选择语句的比较来进行区分。

每文一语

遇雨撑伞,遇桥自渡

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

原文链接:wxw-123.blog.csdn.net/article/details/116174033

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。