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

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

相关文章
|
1月前
|
存储 C语言
【C语言程序设计——函数】递归求斐波那契数列的前n项(头歌实践教学平台习题)【合集】
本关任务是编写递归函数求斐波那契数列的前n项。主要内容包括: 1. **递归的概念**:递归是一种函数直接或间接调用自身的编程技巧,通过“俄罗斯套娃”的方式解决问题。 2. **边界条件的确定**:边界条件是递归停止的条件,确保递归不会无限进行。例如,计算阶乘时,当n为0或1时返回1。 3. **循环控制与跳转语句**:介绍`for`、`while`循环及`break`、`continue`语句的使用方法。 编程要求是在右侧编辑器Begin--End之间补充代码,测试输入分别为3和5,预期输出为斐波那契数列的前几项。通关代码已给出,需确保正确实现递归逻辑并处理好边界条件,以避免栈溢出或结果
66 16
|
1月前
|
算法 C语言
【C语言程序设计——循环程序设计】求解最大公约数(头歌实践教学平台习题)【合集】
采用欧几里得算法(EuclideanAlgorithm)求解两个正整数的最大公约数。的最大公约数,然后检查最大公约数是否大于1。如果是,就返回1,表示。根据提示,在右侧编辑器Begin--End之间的区域内补充必要的代码。作为新的参数传递进去。这个递归过程会不断进行,直到。有除1以外的公约数;变为0,此时就找到了最大公约数。开始你的任务吧,祝你成功!是否为0,如果是,那么。就是最大公约数,直接返回。
77 18
|
1月前
|
Serverless C语言
【C语言程序设计——循环程序设计】利用循环求数值 x 的平方根(头歌实践教学平台习题)【合集】
根据提示在右侧编辑器Begin--End之间的区域内补充必要的代码,求解出数值x的平方根;运用迭代公式,编写一个循环程序,求解出数值x的平方根。注意:不能直接用平方根公式/函数求解本题!开始你的任务吧,祝你成功!​ 相关知识 求平方根的迭代公式 绝对值函数fabs() 循环语句 一、求平方根的迭代公式 1.原理 在C语言中,求一个数的平方根可以使用牛顿迭代法。对于方程(为要求平方根的数),设是的第n次近似值,牛顿迭代公式为。 其基本思想是从一个初始近似值开始,通过不断迭代这个公式,使得越来越接近。
57 18
|
1月前
|
C语言
【C语言程序设计——循环程序设计】统计海军鸣放礼炮声数量(头歌实践教学平台习题)【合集】
有A、B、C三艘军舰同时开始鸣放礼炮各21响。已知A舰每隔5秒1次,B舰每隔6秒放1次,C舰每隔7秒放1次。编程计算观众总共听到几次礼炮声。根据提示,在右侧编辑器Begin--End之间的区域内补充必要的代码。开始你的任务吧,祝你成功!
52 13
|
1月前
|
存储 编译器 C语言
【C语言程序设计——函数】分数数列求和2(头歌实践教学平台习题)【合集】
函数首部:按照 C 语言语法,函数的定义首部表明这是一个自定义函数,函数名为fun,它接收一个整型参数n,用于指定要求阶乘的那个数,并且函数的返回值类型为float(在实际中如果阶乘结果数值较大,用float可能会有精度损失,也可以考虑使用double等更合适的数据类型,这里以float为例)。例如:// 函数体代码将放在这里函数体内部变量定义:在函数体中,首先需要定义一些变量来辅助完成阶乘的计算。比如需要定义一个变量(通常为float或double类型,这里假设用float。
37 3
|
1月前
|
存储 算法 安全
【C语言程序设计——函数】分数数列求和1(头歌实践教学平台习题)【合集】
if 语句是最基础的形式,当条件为真时执行其内部的语句块;switch 语句则适用于针对一个表达式的多个固定值进行判断,根据表达式的值与各个 case 后的常量值匹配情况,执行相应 case 分支下的语句,直到遇到 break 语句跳出 switch 结构,若没有匹配值则执行 default 分支(可选)。例如,在判断一个数是否大于 10 的场景中,条件表达式为 “num> 10”,这里的 “num” 是程序中的变量,通过比较其值与 10 的大小关系来确定条件的真假。常量的值必须是唯一的,且在同一个。
20 2
|
1月前
|
存储 编译器 C语言
【C语言程序设计——函数】回文数判定(头歌实践教学平台习题)【合集】
算术运算于 C 语言仿若精密 “齿轮组”,驱动着数值处理流程。编写函数求区间[100,500]中所有的回文数,要求每行打印10个数。根据提示在右侧编辑器Begin--End之间的区域内补充必要的代码。如果操作数是浮点数,在 C 语言中是不允许直接进行。的结果是 -1,因为 -7 除以 3 商为 -2,余数为 -1;注意:每一个数据输出格式为 printf("%4d", i);的结果是 1,因为 7 除以 -3 商为 -2,余数为 1。取余运算要求两个操作数必须是整数类型,包括。开始你的任务吧,祝你成功!
52 1
|
1月前
|
存储 算法 C语言
【C语言程序设计——函数】素数判定(头歌实践教学平台习题)【合集】
本内容介绍了编写一个判断素数的子函数的任务,涵盖循环控制与跳转语句、算术运算符(%)、以及素数的概念。任务要求在主函数中输入整数并输出是否为素数的信息。相关知识包括 `for` 和 `while` 循环、`break` 和 `continue` 语句、取余运算符 `%` 的使用及素数定义、分布规律和应用场景。编程要求根据提示补充代码,测试说明提供了输入输出示例,最后给出通关代码和测试结果。 任务核心:编写判断素数的子函数并在主函数中调用,涉及循环结构和条件判断。
63 23
|
1月前
|
算法 C语言
【C语言程序设计——函数】利用函数求解最大公约数和最小公倍数(头歌实践教学平台习题)【合集】
本文档介绍了如何编写两个子函数,分别求任意两个整数的最大公约数和最小公倍数。内容涵盖循环控制与跳转语句的使用、最大公约数的求法(包括辗转相除法和更相减损术),以及基于最大公约数求最小公倍数的方法。通过示例代码和测试说明,帮助读者理解和实现相关算法。最终提供了完整的通关代码及测试结果,确保编程任务的成功完成。
68 15

热门文章

最新文章