单分支if语句的执行过程如图3.3所示。使用if语句实现单分支选择结构程序时还需要注意下面两点:图3.3if语句的执行流程①作为条件的表达式一般来说应该是关系表达式或逻辑表达式,但C语言中允许表达式是任何可以求出0值或非0值的表达式。同时还需要提醒读者,此处分析的关于条件表达的方法在C程序设计的所有控制结构中都是相同的,今后涉及此问题时不再赘述。......
2023-11-20
在实际问题中,我们经常遇到多分支选择问题。所谓“多分支”,指的是在某个条件下存在着多种选择。例如,一个4分支的情况如图3.6所示。
图3.6 程序的4分支结构示意图
对于一般的多分支情况,程序设计语言中没有直接对应的控制语句,需要首先对其分解,然后用单分支或者双分支控制结构的嵌套进行处理。例如,图3.6所示的4分支结构可以有两种分解法方式,如图3.7和图3.8所示。
图3.7 分支结构对称分解示意图
图3.8 分支结构不对称分解示意图
1.使用if语句嵌套组成多分支结构程序
如果if结构或者else结构的语句部分又是另外一个if结构,称为if语句的嵌套。例如,在一个二分支if语句的两个语句部分分别嵌入一个二分支if语句的形式为(对应图2.5的分解方式):
【例3.6】 某公司按照销售人员收到的订单金额评定其等级。规则为:订单总金额≥10 000为A等,5 000~9 999为B等,2 500~4 999为C等,2 500以下为D等。编程序实现如下功能:输入某人的订单总金额数后,判定其对应的等级并输出结果。
在C程序中,也可能出现上述形式的各种变形,例如:if和else的语句部分中只有一个是if结构、嵌套和被嵌套的if结构中一个或者两个都是不平衡的if结构(即没有else部分的结构)等。特别地,当被嵌套的if结构均被嵌套在else的语句部分时,形成了一种称为else…if的多分支选择结构,这是if…else多重嵌套的变形(对应图2.6的分解方式),其一般形式为:
在这种特殊的else…if结构中,表示条件的表达式是相互排斥的,执行该结构时控制流程从exp1开始判断,一旦有一个条件表达式值为非0(真)时,就执行与之匹配的语句,然后退出整个选择结构;如果所有表示条件的表达式值均为0(假),则在执行语句sentenceN+1后退出整个选择结构;如果当所有的条件均为假时不需要进行任何操作,则最后的一个else和语句sentenceN+1可以缺省。
【例3.7】 重写例3.6的程序,要求用不对称分解方式处理多分支。
在包含了if语句嵌套结构的程序中,else子句与if的配对原则是非常重要的,按不同的方法配对则得到不同的程序结构。C语言规定:else子句不能独立出现,程序中的else子句与在它前面距它最近的且尚未匹配的if配对。无论将程序书写为何种形式,系统总是按照上面的规定来解释程序的结构。
2.使用switch语句组成多分支结构程序
使用if语句嵌套可以处理所有多分支的问题,但如果分支的条件不是某个区间的连续条件,而是若干个分散的条件点时,C语言提供了switch语句更加简洁地处理该类多分支问题。switch语句结构的一般形式如下:
C程序中使用switch结构时要注意以下几点:
·作为条件的表达式值只能是整型、字符型、枚举型三者之一;
·case后的语句段可以是单条语句,也可以是多条语句,但多条语句并不构成复合语句,不需要使用花括号{};
·结构中的常数值应与表示条件的表达式值对应一致,且各常数的值不能相同;(www.chuimin.cn)
·结构中的break语句和default项可根据需要确定是否选用;
·switch结构允许嵌套。
switch语句结构执行过程是:首先对作为条件的表达式(expression)求值;然后在语句结构的花括号内从上至下地查找所有case分支,当找到与条件表达式值相匹配(相同)的case时,将其作为控制流程执行的入口并从此处开始执行相应的语句段直到遇到break语句或者是到switch语句结构的右花括号“}”为止。
【例3.8】 从键盘上输入一个字符,判断它是数字、空格还是其他键;若是数字,还要求显示出是哪一个数字。
需要特别注意的是,在嵌套的switch结构中,内层switch结构执行中遇到break语句时,退出的仅仅是内层switch结构,下面的代码段说明了这个问题。
有关C语言程序设计基础(第3版)的文章
单分支if语句的执行过程如图3.3所示。使用if语句实现单分支选择结构程序时还需要注意下面两点:图3.3if语句的执行流程①作为条件的表达式一般来说应该是关系表达式或逻辑表达式,但C语言中允许表达式是任何可以求出0值或非0值的表达式。同时还需要提醒读者,此处分析的关于条件表达的方法在C程序设计的所有控制结构中都是相同的,今后涉及此问题时不再赘述。......
2023-11-20
双分支if语句的执行过程如图3.5所示。任意输入3个整数,求出它们中的最大值。从键盘上输入一个英文字母,若输入的是大写字母则转换为小写字母输出;若输入的是小写字母则转换为大写字母输出。......
2023-11-20
A.与参数x的类型相同B.无法确定C.void类型D.int类型3.为了避免嵌套的条件语句if-else的二义性,C语言规定()。A.else与缩排位置相同的if配对B.else与同一行上的if配对C.else与其之后最近的if配对D.else与其之前最近的尚未配对的if配对4.设x、y、z和k都是int型变量,则执行表达式:x=后,x的值为()。A.7 B.6 C.5 D.47.在C语言程序中,用关键字()定义无符号型变量。else语句实现两个分支。......
2023-09-19
在程序设计中,许多问题的解“隐藏”在多个可能之中。在一个集合内对集合中的每一个元素进行一一测试的方法称为穷举法。穷举方法的实现主要依赖于以下两个基本要点:·搜寻可能值的范围如何确定。程序设计中应据问题的描述具体分析,确定时应尽量缩小搜索范围,提高程序效率。编写程序找出所有的“水仙花数”。程序可以依次取出区间[100,999]之间的每一个数,然后将该数分解为3个数字,按照判定条件判定即可。......
2023-11-20
图5.7两层函数嵌套调用示意图函数的嵌套调用即一个函数在被调用的过程中又调用了另外的一个函数。函数fac和powers的返回值类型均被设计为double型,其主要目的是为了避免n!x:0.5//0.5从键盘输入的数据0.50 powers of e=1.648721//程序执行结果......
2023-11-20
C语言中逻辑运算符及其含义见表3.2。表3.2逻辑运算符及其含义逻辑运算符“&&”和“||”是双目运算符,具有左结合性;“!”表3.3逻辑运算真值表C语言中进行逻辑表达式求值运算时,不但要注意逻辑运算符本身的运算规则,而且还必须要遵循下面的两条原则:·对逻辑表达式从左到右进行求解。......
2023-11-20
一个函数直接或间接地调用自己,称为函数的递归调用。所以函数递归调用的实现必须依靠系统提供一个特殊部件(堆栈)存放未完成的操作,以保证当递归调用结束回溯时不会丢失任何应该执行而没有执行的操作。为了理解函数递归调用的特性,参照例5.9的程序讨论函数递归调用的执行过程,为了讨论方便为程序加上行号。函数递归调用示例。......
2023-11-20
针对不同的实际应用,数据排序方法有很多种。本节介绍两种常用排序方法的基本思想和实现方法,帮助读者初步理解排序方法的计算机解决思路。②不考虑已排好序的数据,将剩下的数据作为待排序列。编写程序实现冒泡排序算法,对随机生成的10个3位整数按升序进行排序并输出。......
2023-11-20
相关推荐