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

简介: 初识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(表达式)  语句

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

image.png

【实例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;
}

image.png

【实例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;

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

image.png

【实例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;
}

image.png

【实例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;
}

image.png

【实例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;
}

image.png

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语句执行流程如图

image.png

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:
    默认情况语句块;
}

image.png

多路开关模式的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所示。image.png

#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;
}

image.png

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


目录
打赏
0
0
0
0
14
分享
相关文章
【C语言程序设计——选择结构程序设计】预测你的身高(头歌实践教学平台习题)【合集】
分支的语句,这可能不是预期的行为,这种现象被称为“case穿透”,在某些特定情况下可以利用这一特性来简化代码,但在大多数情况下,需要谨慎使用。编写一个程序,该程序需输入个人数据,进而预测其成年后的身高。根据提示,在右侧编辑器补充代码,计算并输出最终预测的身高。分支下的语句,提示用户输入无效。常量的值必须是唯一的,且在同一个。语句的作用至关重要,如果遗漏。开始你的任务吧,祝你成功!,程序将会继续执行下一个。常量都不匹配,就会执行。来确保程序的正确性。
52 10
|
1月前
|
【C语言程序设计——基础】顺序结构程序设计(头歌实践教学平台习题)【合集】
目录 任务描述 相关知识 编程要求 测试说明 我的通关代码: 测试结果: 任务描述 相关知识 编程编写一个程序,从键盘输入3个变量的值,例如a=5,b=6,c=7,然后将3个变量的值进行交换,使得a=6,b=7,c=5。面积=sqrt(s(s−a)(s−b)(s−c)),s=(a+b+c)/2。使用输入函数获取半径,格式指示符与数据类型一致,实验一下,不一致会如何。根据提示,在右侧编辑器补充代码,计算并输出圆的周长和面积。
39 10
【C语言程序设计——选择结构程序设计】求一元二次方程的根(头歌实践教学平台习题)【合集】
本任务要求根据求根公式计算并输出一元二次方程的两个实根,精确到小数点后两位。若方程无实根,则输出提示信息。主要内容包括: - **任务描述**:使用求根公式计算一元二次方程的实根。 - **相关知识**:掌握 `sqrt()` 函数的基本使用方法,判断方程是否有实根。 - **编程要求**:根据输入的系数,计算并输出方程的根或提示无实根。 - **测试说明**:提供两组测试数据及预期输出,确保代码正确性。 - **通关代码**:包含完整的 C 语言代码示例,实现上述功能。 通过本任务,你将学会如何处理一元二次方程的求解问题,并熟悉 `sqrt()` 函数的使用。
31 5
【C语言程序设计——选择结构程序设计】按从小到大排序三个数(头歌实践教学平台习题)【合集】
本任务要求从键盘输入三个数,并按从小到大的顺序排序后输出。主要内容包括: - **任务描述**:实现三个数的排序并输出。 - **编程要求**:根据提示在编辑器中补充代码。 - **相关知识**: - 选择结构(if、if-else、switch) - 主要语句类型(条件语句) - 比较操作与交换操作 - **测试说明**:提供两组测试数据及预期输出。 - **通关代码**:完整代码示例。 - **测试结果**:展示测试通过的结果。 通过本任务,你将掌握基本的选择结构和排序算法的应用。祝你成功!
36 4
【C语言程序设计——选择结构程序设计】求阶跃函数的值(头歌实践教学平台习题)【合集】
本任务要求输入x的值,计算并输出特定阶跃函数的结果。主要内容包括: 1. **选择结构基本概念**:介绍if、if-else、switch语句。 2. **主要语句类型**:详细解释if、if-else、switch语句的使用方法。 3. **跃迁函数中变量的取值范围**:说明如何根据条件判断变量范围。 4. **计算阶跃函数的值**:通过示例展示如何根据给定条件计算函数值。 编程要求:在右侧编辑器Begin-End之间补充代码,实现阶跃函数的计算和输出。测试说明提供了多个输入及其预期输出,确保代码正确性。最后提供通关代码和测试结果,帮助理解整个过程。
32 0
【C语言程序设计——选择结构程序设计】判断一个数是不是5和7的倍数(头歌实践教学平台习题)【合集】
本任务要求输入一个正整数,判断其是否同时是5和7的倍数,若是输出&quot;Yes&quot;,否则输出&quot;No&quot;。内容涵盖选择结构的基本概念、主要语句类型(if、if-else、switch)及条件判断逻辑,帮助理解编程中的分支执行与条件表达式。测试用例包括正数、负数及非倍数情况,确保代码逻辑严谨。通关代码示例如下: ```cpp #include &quot;stdio.h&quot; int main(){ int a; scanf(&quot;%d&quot;, &a); if (a &lt;= 0){ printf(&quo
48 0
【C语言程序设计——选择结构程序设计】求输入的日期是该年的第几天(头歌实践教学平台习题)【合集】
本任务要求编写程序,根据用户输入的年月日(以空格或回车分隔),计算并输出该天是该年的第几天,需注意判断闰年。主要内容包括: 1. **任务描述**:实现从键盘输入年月日,计算该天是当年的第几天。 2. **相关知识**: - `switch` 结构的基本语法及使用注意事项。 - 判断闰年的条件:能被4整除但不能被100整除,或能被400整除的年份为闰年。 3. **编程要求**:根据提示补充代码,确保程序正确处理输入并输出结果。 4. **测试说 示例代码展示了如何使用 `switch` 语句和闰年判断逻辑来完成任务。通过此练习,掌握 `switch` 语句的应用及闰年判断方法。
29 0
【C语言】数据类型全解析:编程效率提升的秘诀
在C语言中,合理选择和使用数据类型是编程的关键。通过深入理解基本数据类型和派生数据类型,掌握类型限定符和扩展技巧,可以编写出高效、稳定、可维护的代码。无论是在普通应用还是嵌入式系统中,数据类型的合理使用都能显著提升程序的性能和可靠性。
77 8
|
2月前
|
【C语言】逻辑操作符详解 - 《真假美猴王 ! 》
C语言中有三种主要的逻辑运算符:逻辑与(`&&`)、逻辑或(`||`)和逻辑非(`!`)。这些运算符用于执行布尔逻辑运算。
93 7
C 语言递归算法:以简洁代码驾驭复杂逻辑
C语言递归算法简介:通过简洁的代码实现复杂的逻辑处理,递归函数自我调用解决分层问题,高效而优雅。适用于树形结构遍历、数学计算等领域。