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


相关文章
|
1月前
|
网络协议 编译器 Linux
【C语言】结构体内存对齐:热门面试话题
【C语言】结构体内存对齐:热门面试话题
|
2月前
|
C语言
C语言判断逻辑的高阶用法
在C语言中,高级的判断逻辑技巧能显著提升代码的可读性、灵活性和效率。本文介绍了六种常见方法:1) 函数指针,如回调机制;2) 逻辑运算符组合,实现复杂条件判断;3) 宏定义简化逻辑;4) 结构体与联合体组织复杂数据;5) 递归与分治法处理树形结构;6) 状态机管理状态转换。通过这些方法,可以更高效地管理和实现复杂的逻辑判断,使代码更加清晰易懂。
225 88
|
2天前
|
存储 搜索推荐 算法
【数据结构】树型结构详解 + 堆的实现(c语言)(附源码)
本文介绍了树和二叉树的基本概念及结构,重点讲解了堆这一重要的数据结构。堆是一种特殊的完全二叉树,常用于实现优先队列和高效的排序算法(如堆排序)。文章详细描述了堆的性质、存储方式及其实现方法,包括插入、删除和取堆顶数据等操作的具体实现。通过这些内容,读者可以全面了解堆的原理和应用。
33 16
|
1月前
|
NoSQL C语言 索引
十二个C语言新手编程时常犯的错误及解决方式
C语言初学者常遇错误包括语法错误、未初始化变量、数组越界、指针错误、函数声明与定义不匹配、忘记包含头文件、格式化字符串错误、忘记返回值、内存泄漏、逻辑错误、字符串未正确终止及递归无退出条件。解决方法涉及仔细检查代码、初始化变量、确保索引有效、正确使用指针与格式化字符串、包含必要头文件、使用调试工具跟踪逻辑、避免内存泄漏及确保递归有基准情况。利用调试器、编写注释及查阅资料也有助于提高编程效率。避免这些错误可使代码更稳定、高效。
143 12
|
24天前
|
编译器 C语言 Python
C语言结构
C语言结构
14 0
|
1月前
|
编译器 C语言 C++
【C语言】精妙运用内存函数:深入底层逻辑的探索
【C语言】精妙运用内存函数:深入底层逻辑的探索
|
2月前
|
存储 编译器 程序员
C语言程序的基本结构
C语言程序的基本结构包括:1)预处理指令,如 `#include` 和 `#define`;2)主函数 `main()`,程序从这里开始执行;3)函数声明与定义,执行特定任务的代码块;4)变量声明与初始化,用于存储数据;5)语句和表达式,构成程序基本执行单位;6)注释,解释代码功能。示例代码展示了这些组成部分的应用。
87 10
|
2月前
|
C语言
C语言程序设计核心详解 第四章&&第五章 选择结构程序设计&&循环结构程序设计
本章节介绍了C语言中的选择结构,包括关系表达式、逻辑表达式及其运算符的优先级,并通过示例详细解释了 `if` 语句的不同形式和 `switch` 语句的使用方法。此外,还概述了循环结构,包括 `while`、`do-while` 和 `for` 循环,并解释了 `break` 和 `continue` 控制语句的功能。最后,提供了两道例题以加深理解。
|
2月前
|
存储 算法 C语言
数据结构基础详解(C语言): 二叉树的遍历_线索二叉树_树的存储结构_树与森林详解
本文从二叉树遍历入手,详细介绍了先序、中序和后序遍历方法,并探讨了如何构建二叉树及线索二叉树的概念。接着,文章讲解了树和森林的存储结构,特别是如何将树与森林转换为二叉树形式,以便利用二叉树的遍历方法。最后,讨论了树和森林的遍历算法,包括先根、后根和层次遍历。通过这些内容,读者可以全面了解二叉树及其相关概念。
|
2月前
|
C语言
C语言程序设计核心详解 第三章:顺序结构,printf(),scanf()详解
本章介绍顺序结构的基本框架及C语言的标准输入输出。程序从`main()`开始依次执行,框架包括输入、计算和输出三部分。重点讲解了`printf()`与`scanf()`函数:`printf()`用于格式化输出,支持多种占位符;`scanf()`用于格式化输入,需注意普通字符与占位符的区别。此外还介绍了`putchar()`和`getchar()`函数,分别用于输出和接收单个字符。