C语言程序设计三大基本结构之选择结构

简介: 前言:文章目录:•  关系运算符与关系表达式•  逻辑运算符与逻辑表达式•   if语句 •   switch语句•   if语句的嵌套•   switch语句的使用引言:一,关系运算符与关系表达式1. 关系运算符及其优先级2.关系表达式3.逻辑运算符及其优先级4.if语句的三种形式5.条件运算符6.switch语句

前言:

●由于作者水平有限,文章难免存在谬误之处,敬请读者斧正,俚语成篇,恳望指教!

文章目录:

•  关系运算符与关系表达式

•  逻辑运算符与逻辑表达式

•   if语句 •   switch语句

•   if语句的嵌套

•   switch语句的使用

引言:

C语言提供了可以进行逻辑判断的选择语句,由选择语句构成的选择结构,将根据逻辑判断的结果决定程序的不同流程。     选择结构又称分支结构,是结构化程序设计的三种基本结构之一。

一,关系运算符与关系表达式

  在程序中经常需要比较两个量的大小关系,以决定程序下一步的工作。比较两个量的运算符称为关系运算符。

1. 关系运算符及其优先级

                                                    C语言提供了6种关系运算符

含义

运算符

操作数个数

优先级

结合性

小于

双目

6

左结合

<=

小于或等于

双目

大于

双目

>=

大于或等于

双目

==

等于

双目

     7

左结合

!=

不等于

双目

说明:

(1)关系运算符都是双目运算符,其结合性为左结合。

(2)六个关系运算符分为两级,前四种(<,<=,>,>=)为同级运算符,后两种(==和!=)优先级相同,且前四种的优先级高于后两种。

(3)关系运算符的优先级低于算术运算符,高于赋值运算符。

2.关系表达式

用关系运算符把两个表达式连接起来的式子称为关系表达式。

一般形式为:         <表达式1>  <关系运算符>  <表达式2>    

说明:

(1)表达式1和表达式2可以是算术表达式、逻辑表达式、赋值表达式、关系表达式、字符表达式。

(2)关系表达式的值是一个逻辑值,即“真”或者“假”。C语言没有逻辑型数据,所以用“1”表示真,用“0”表示假。

(3)字符常量是以它对应的ASCII码参与运算的。

3.逻辑运算符及其优先级

                                           C语言中提供了3种逻辑运算符

含义

运算符

操作数个数

优先级

结合性

!

非运算

单目

2

右结合

&&

与运算

双目

11

左结合

||

或运算

双目

12

左结合

说明:

(1)基本逻辑运算真值表如下表所示:当两个操作数为不同的逻辑值时,其基本逻辑运算的运算结果。

a

b

!a

a&&b

a||b

F

F

T

F

F

F

T

T

F

T

T

F

F

F

T

T

T

F

T

T

(2)!为单目运算符,具有右结合性。&&和||均为双目运算符,具有左结合性。逻辑运算符和其它运算符优先级的运算顺序由高到低表示如下: !→算术运算符→关系运算符→&&→||→赋值运算符

用逻辑运算符把表达式连接起来的式子称为逻辑表达式。    

一般形式为: [<表达式1>]  <逻辑运算符>  <表达式2>    

说明:

(1)表达式1和表达式2可以是关系表达式,也可以是逻辑表达式。如(!6)||(8<=2)。

(2)与关系表达式相同,由于C语言没有逻辑型数据,所以逻辑表达式的运算结果也是用“1”表示真,用“0”表示假。但反过来在判断一个量是为“真”还是“假”时,把“0”认为“假”,而所有非“0”的数值认为“真”。

(3)在逻辑表达式求解中,并不是所有逻辑运算都被执行。

① a&&b&&c中,由与运算符特点得知,全真为真,其余为假。所以当“&&”一端为0,则不必再计算另一端,该表达式的值肯定为0。

② a||b||c中,由或运算符特点得知,全假为假,其余为真。所以当“||”一端为1,则不必再计算另一端,该表达式的值肯定为1。

4.if语句的三种形式

(1). 单分支结构:                 if(<表达式>)    语句;    

其语义是:先判断条件,如果表达式的值为真,则执行其后的语句,否则不执行该语句。该语句可以是复合语句,即用花括号括起来的多个语句。。

image.gif编辑

(2). 双分支结构:

if(<表达式>) 语句1;

else 语句2;    

if(<表达式>) 
语句1; 
else 
语句2;

image.gif

其语义是:如果表达式的值为真,则执行语句1,否则执行语句2 。

image.gif编辑

(3).多分支结构:    

if-else-if是一种多分支选择结构,

if-else-if是一种多分支选择结构,其一般形式为:
if(<表达式1>)              语句1;
else  if(<表达式2>)         语句2;
else  if(<表达式3>)         语句3;
else  if(表达式n-1)         语句n-1;
else                       语句n;

image.gif

其语义是:依次判断表达式的值,当出现某个值为真时,则执行其对应的语句。然后跳到整个if语句之外继续执行程序。 如果所有的表达式均为假,则执行语句n。然后继续执行后续程序。

image.gif编辑

说明:    

在使用if语句时应注意以下问题:

(1)if语句中的表达式必须用括号括起来,类型通常是逻辑表达式或关系表达式,但也可以是其它表达式,如赋值表达式等,甚至可以是一个变量。

(2)在if语句中,所有的语句应为单个语句,如果要想在满足条件时执行一组(多个)语句,则必须把这一组语句用{ }括起来组成一个复合语句。但要注意的是在}之后不能再加分号。

   当if语句中的执行语句又是if语句时,则构成了if 语句嵌套的情形:  

if(<表达式>) 
        if语句; 
    或者为
        if(<表达式>) 
            if语句; 
        else 
            if语句;

image.gif

在嵌套内的if语句允许出现if-else,对出现多个if和多个else重叠的情况,需要特别注意if和else的配对问题。

  5.条件运算符

条件运算符是C语言中惟一的三目运算符。由问号“?”和“:”两个字符组成,用于连接3个运算对象。     其一般形式为: <表达式1>?<表达式2>∶<表达式3>    

其运算过程为:如果表达式1的值为真(非0),则以表达式2的值作为条件表达式的值,否则表达式3的值为条件表达式的值。    

说明:

(1)在if语句中,当被判别的表达式的值为“真”或“假” ,都执行一个赋值语句且向同一个变量赋值时,可以用一个条件运算符来处理。

(2) 条件运算符优先级别为13,仅仅高于赋值运算符 ,低于关系运算符和算术运算符。其结合方向为“自右至左”。 (3) “表达式2”和“表达式3”不仅可以是数值表达式,还可以是赋值表达式或函数表达式。

   C语言提供了另一种用于多分支选择的switch语句,以更方便的实现深层嵌套的if-else逻辑。

6.switch语句

switch语句是多分支选择结构,

switch语句是多分支选择结构,其一般形式为:
switch(表达式)
{       case  <常量表达式1>:  语句1;
         case  <常量表达式2>:  语句2;
         case  <常量表达式n>:  语句n;
        default:               语句n+1;
}

image.gif

switch语句的语义是:     先计算switch后面表达式的值,并与case后面常量表达式的值逐个比较。      当与某个常量表达式的值相等时,即执行此常量表达式后面的语句,并且在执行该语句结束后不再进行判断,继续执行后面所有的语句。      如表达式的值与所有case后面常量表达式均不相同时,则执行default后的语句。

说明:使用switch语句时应注意以下几点:

(1)在case后的各常量表达式的值不能相同,否则会出现错误。

(2)在case后,允许有多个语句,可以不用{}括起来。

(3)各case和default子句先后顺序可以变动,不会影响程序执行结果。

(4)default子句可以省略不用。

应用举例:

例. 编写程序,对任意输入的两个实型数以及一个运算符(+、-、*、/),能够输出算式和计算结果:

#include  "stdio.h"
void main( )
{float data1,data2,data3;char op;
printf("\nType in your expression:");     
scanf("%f%c%f",&data1,&op,&data2);     
switch(op)     
{ 
case '+':  data3=data1+data2 ;break;      
case '-':  data3=data1-data2;break;      
case '*':  data3=data1*data2;break;      
case '/':  if(data2==0)       exit(1);       
data3=data1/data2;break;
}
printf("%6.2f%c%6.2f=%6.2f\n",data1,op,data2,data3);
}

image.gif

●由于作者水平有限,文章难免存在谬误之处,敬请读者斧正,俚语成篇,恳望指教!

相关文章
|
27天前
|
网络协议 编译器 Linux
【C语言】结构体内存对齐:热门面试话题
【C语言】结构体内存对齐:热门面试话题
|
19天前
|
编译器 C语言 Python
C语言结构
C语言结构
14 0
|
2月前
|
存储 算法 C语言
数据结构基础详解(C语言): 二叉树的遍历_线索二叉树_树的存储结构_树与森林详解
本文从二叉树遍历入手,详细介绍了先序、中序和后序遍历方法,并探讨了如何构建二叉树及线索二叉树的概念。接着,文章讲解了树和森林的存储结构,特别是如何将树与森林转换为二叉树形式,以便利用二叉树的遍历方法。最后,讨论了树和森林的遍历算法,包括先根、后根和层次遍历。通过这些内容,读者可以全面了解二叉树及其相关概念。
|
2月前
|
存储 C语言
C语言程序设计核心详解 第十章:位运算和c语言文件操作详解_文件操作函数
本文详细介绍了C语言中的位运算和文件操作。位运算包括按位与、或、异或、取反、左移和右移等六种运算符及其复合赋值运算符,每种运算符的功能和应用场景都有具体说明。文件操作部分则涵盖了文件的概念、分类、文件类型指针、文件的打开与关闭、读写操作及当前读写位置的调整等内容,提供了丰富的示例帮助理解。通过对本文的学习,读者可以全面掌握C语言中的位运算和文件处理技术。
|
2月前
|
存储 C语言
C语言程序设计核心详解 第七章 函数和预编译命令
本章介绍C语言中的函数定义与使用,以及预编译命令。主要内容包括函数的定义格式、调用方式和示例分析。C程序结构分为`main()`单框架或多子函数框架。函数不能嵌套定义但可互相调用。变量具有类型、作用范围和存储类别三种属性,其中作用范围分为局部和全局。预编译命令包括文件包含和宏定义,宏定义分为无参和带参两种形式。此外,还介绍了变量的存储类别及其特点。通过实例详细解析了函数调用过程及宏定义的应用。
|
2月前
|
存储 人工智能 C语言
C语言程序设计核心详解 第八章 指针超详细讲解_指针变量_二维数组指针_指向字符串指针
本文详细讲解了C语言中的指针,包括指针变量的定义与引用、指向数组及字符串的指针变量等。首先介绍了指针变量的基本概念和定义格式,随后通过多个示例展示了如何使用指针变量来操作普通变量、数组和字符串。文章还深入探讨了指向函数的指针变量以及指针数组的概念,并解释了空指针的意义和使用场景。通过丰富的代码示例和图形化展示,帮助读者更好地理解和掌握C语言中的指针知识。
|
2月前
|
存储 机器学习/深度学习 C语言
数据结构基础详解(C语言): 树与二叉树的基本类型与存储结构详解
本文介绍了树和二叉树的基本概念及性质。树是由节点组成的层次结构,其中节点的度为其分支数量,树的度为树中最大节点度数。二叉树是一种特殊的树,其节点最多有两个子节点,具有多种性质,如叶子节点数与度为2的节点数之间的关系。此外,还介绍了二叉树的不同形态,包括满二叉树、完全二叉树、二叉排序树和平衡二叉树,并探讨了二叉树的顺序存储和链式存储结构。
|
2月前
|
存储 C语言
C语言程序设计核心详解 第九章 结构体与链表概要详解
本文档详细介绍了C语言中的结构体与链表。首先,讲解了结构体的定义、初始化及使用方法,并演示了如何通过不同方式定义结构体变量。接着,介绍了指向结构体的指针及其应用,包括结构体变量和结构体数组的指针操作。随后,概述了链表的概念与定义,解释了链表的基本操作如动态分配、插入和删除。最后,简述了共用体类型及其变量定义与引用方法。通过本文档,读者可以全面了解结构体与链表的基础知识及实际应用技巧。
|
18天前
|
C语言 C++
C语言 之 内存函数
C语言 之 内存函数
30 3
|
C语言
《C语言程序设计》一 第 1 章 程序设计概述
本节书摘来自华章出版社《C语言程序设计》一 书中的第1章,第1.1节,作者:赵宏 陈旭东 马迪芳,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1157 0