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

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

相关文章
|
16天前
|
C语言
C语言之分支结构
C语言之分支结构
23 0
|
13天前
|
C语言
【精通C语言】:分支结构if语句的灵活运用
【精通C语言】:分支结构if语句的灵活运用
24 1
|
13天前
|
C语言
PTA 浙大版《C语言程序设计(第3版)》题目集 习题8-4 报数 (20分)
PTA 浙大版《C语言程序设计(第3版)》题目集 习题8-4 报数 (20分)
|
13天前
|
C语言
C语言 浙大版《C语言程序设计(第3版)》题目集 练习8-8 移动字母 (10分)
C语言 浙大版《C语言程序设计(第3版)》题目集 练习8-8 移动字母 (10分)
|
13天前
|
C语言
浙大版《C语言程序设计(第3版)》题目集 练习8-2 计算两数的和与差 (10分)
浙大版《C语言程序设计(第3版)》题目集 练习8-2 计算两数的和与差 (10分)
|
13天前
|
C语言
pta浙大版《C语言程序设计(第3版)》 习题6-4 使用函数输出指定范围内的Fibonacci数 (20分)
pta浙大版《C语言程序设计(第3版)》 习题6-4 使用函数输出指定范围内的Fibonacci数 (20分)
|
14天前
|
C语言
PTA 浙大版《C语言程序设计(第3版)》题目集 习题8-6 删除字符 (20分)
PTA 浙大版《C语言程序设计(第3版)》题目集 习题8-6 删除字符 (20分)
|
14天前
|
C语言
pta 浙大版《C语言程序设计(第3版)》题目集 习题6-6 使用函数输出一个整数的逆序数 (20分)
pta 浙大版《C语言程序设计(第3版)》题目集 习题6-6 使用函数输出一个整数的逆序数 (20分)
|
14天前
|
C语言
(浙大版《C语言程序设计(第3版)》 习题6-5 使用函数验证哥德巴赫猜想 (20分)
(浙大版《C语言程序设计(第3版)》 习题6-5 使用函数验证哥德巴赫猜想 (20分)
|
17天前
|
编译器 Linux C语言
C语言:结构体(自定义类型)知识点(包括结构体内存对齐的热门知识点)
C语言:结构体(自定义类型)知识点(包括结构体内存对齐的热门知识点)