版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 计算思维 与 程序设计C 规规则则1:如果动物有毛发,且分泌乳汁,则该动物是哺乳动:如果动物有毛发,且分泌乳汁,则该动物是哺乳动物。物。 规规则则2:如果动物有羽毛,则该动物是鸟。:如果动物有羽毛,则该动物是鸟。 规规则则3:如果动物是哺乳动物,且是黄褐色的、有暗斑点,:如果动物是哺乳动物,且是黄褐色的、有暗斑点,则该动物是是金钱豹。则该动物是是金钱豹。 规规则则4:如果动物是哺乳动物,且是黄褐色的、有黑条纹,:如果动物是哺乳动物,且是黄褐色的、有黑条纹,则该动物是虎。则该动物是虎。 规则规则5:如果动物是鸟,且善飞,则该动物是信天翁。:如果动物是鸟,且善飞,则该动物是信天翁。 规则规则6:
2、如果动物是鸟,且不会飞、善游泳和潜水、黑白二:如果动物是鸟,且不会飞、善游泳和潜水、黑白二色,则该动物是企鹅。色,则该动物是企鹅。 从从以上描述可以看出,这是一个典型的选择问题。在本例以上描述可以看出,这是一个典型的选择问题。在本例中提出的中提出的6条规则,给出了识别动物的判定条件。可以根据这条规则,给出了识别动物的判定条件。可以根据这些条件设立问答题,通过用户的回答判断出动物的种类。不难些条件设立问答题,通过用户的回答判断出动物的种类。不难发现,发现,6条规则可分为两个层次:第一层区分哺乳动物与鸟;条规则可分为两个层次:第一层区分哺乳动物与鸟;第二层确定具体动物。第二层确定具体动物。 求求解
3、选择问题的第一要素是构筑计算机所能识解选择问题的第一要素是构筑计算机所能识别的判定条件,一般情况下,采用关系表达式和逻别的判定条件,一般情况下,采用关系表达式和逻辑表达式描述条件(辑表达式描述条件(switch语句例外)。语句例外)。 C语言中的关系运算符共有语言中的关系运算符共有6个个。 表表4-1列出了各种运算符的含义、优先级和结合方向列出了各种运算符的含义、优先级和结合方向。 表表4-1 关系运算符及其含义、优先级、结合方关系运算符及其含义、优先级、结合方向向 表中表中将关系运算符按优先级高低分为两组,同一组运算符将关系运算符按优先级高低分为两组,同一组运算符的优先级相同。的优先级相同。
4、运算符运算符含义含义优先级优先级结合方向结合方向 大于大于=大于或等于大于或等于= =等于等于低低!=不等于不等于 关关系运算符是双目运算符。用关系运算符将两个运算数连系运算符是双目运算符。用关系运算符将两个运算数连接起来组成的表达式称为接起来组成的表达式称为关系表达式关系表达式。其中,运算数可以是常。其中,运算数可以是常量,也可以是算术表达式、关系表达式、赋值表达式等。量,也可以是算术表达式、关系表达式、赋值表达式等。 关关系表达式的值是一个逻辑值,即只有两种可能:系表达式的值是一个逻辑值,即只有两种可能:“真真”或或“假假”。当一个关系表达式所表示的条件成立时,认为此关。当一个关系表达式所
5、表示的条件成立时,认为此关系表达式的值为系表达式的值为“真真”;否则为;否则为“假假”。C语言中没有专门的逻语言中没有专门的逻辑型数据,而是用辑型数据,而是用0表示表示“假假”,用,用1(或非(或非0)表示)表示“真真”。 例例4-1设有变量定义:设有变量定义:int a = 1, b = 2, c = 3, x = 4;试判断下试判断下列关系表达式的值:列关系表达式的值: (1) x != 0 (2) c a + b (3) y x (4) c a a + b的值为的值为0; y x的值为的值为0; c a 3,该不等式显然不成立,所以,该不等式显然不成立,所以 c a + b的值为的值为0
6、;(3) 表表达式达式 y x中的两个运算数是字符型常量,应该比较它们中的两个运算数是字符型常量,应该比较它们的的ASCII码,而码,而x和和y的的ASCII码分别为码分别为120和和121,所以,所以y x的的值为值为0。(4) 按按照自左至右的结合方向,先计算照自左至右的结合方向,先计算c a的值,结果为的值,结果为0;再计;再计算算0 b的值,结果为的值,结果为1,所以表达式,所以表达式c a b的值为的值为1。 逻逻辑运算及其表达式辑运算及其表达式 在在实际应用中,需要进行判断的条件往往是由多个条件复实际应用中,需要进行判断的条件往往是由多个条件复合而成的。例如:在平面直角坐标系中确定
7、一个点(合而成的。例如:在平面直角坐标系中确定一个点(x , y)在第)在第三象限内的条件是三象限内的条件是“x0且且y 0 & x 0 | x 0) 解解: x 0 & x 0 | x 0)的值为的值为0。逻逻辑运算及其表达式辑运算及其表达式具具体分析如下:体分析如下:(1) “x 0 & x 0且且x 0 & x 0 | x 0 或或 x 0 | x 0)表示表示“x0”的反面,即的反面,即x 0)的值为的值为0。 逻逻辑运算及其表达式辑运算及其表达式一般地,逻辑运算的基本规则可用表一般地,逻辑运算的基本规则可用表4-3所示的真值表加以所示的真值表加以描述描
8、述。其中,其中,x、y、z代表运算数。代表运算数。 表表4-3 逻辑运算真值表逻辑运算真值表 xyx & yx | y!x00001010111001011110逻逻辑运算及其表达式辑运算及其表达式应用中,有时会出现算术运算、关系运算和逻辑运算的混应用中,有时会出现算术运算、关系运算和逻辑运算的混合运算,各种运算符之间的优先级排列如下:合运算,各种运算符之间的优先级排列如下: !(高)(高) 算算术运算符术运算符 关关系运算符系运算符 &、| 赋赋值运算符(低)值运算符(低) 逻逻辑运算及其表达式辑运算及其表达式 需需要说明的是,逻辑运算有时会引起要说明的是,逻辑运算有时会引起
9、“短路短路”。对于如下。对于如下的逻辑表达式:的逻辑表达式: (表达式表达式1) & (表达式表达式2) 当当表达式表达式1的值为的值为0时,可直接得出整个表达式的值也为时,可直接得出整个表达式的值也为0,所以所以C语言不再求表达式语言不再求表达式2的值,以提高运算效率。不过,表达的值,以提高运算效率。不过,表达式式2不被计算的事实应当注意。例如:求解表达式不被计算的事实应当注意。例如:求解表达式“x & (+y)”时,若已知时,若已知x、y的值分别为的值分别为0和和1,则可得表达式,则可得表达式“x & (+y)”的值为的值为0,而,而“+y”得不到运算。所以,运算后
10、的得不到运算。所以,运算后的y值值并没有变成并没有变成2。 逻逻辑运算及其表达式辑运算及其表达式 同同样,对于逻辑表达式:样,对于逻辑表达式:(表达式表达式1) | (表达式表达式2),如果表达,如果表达式式1的值为的值为1,直接得出整个表达式的值也为,直接得出整个表达式的值也为1,而不再计算表达,而不再计算表达式式2的值。的值。 if条件语句一般用于只有两种选择的情况。满足判定条件条件语句一般用于只有两种选择的情况。满足判定条件执行一种操作,否则执行另一种操作。对执行一种操作,否则执行另一种操作。对if条件语句进行嵌套,条件语句进行嵌套,可以处理多种选择情况。可以处理多种选择情况。 if语句
11、语句 if语句用于单分支选择结构。基本格式如下:语句用于单分支选择结构。基本格式如下: if (表达式表达式) 语语句块句块S 其其中,表达式一般为关系表达式或逻辑表达式;语句块可以中,表达式一般为关系表达式或逻辑表达式;语句块可以是一条语句,也可以是多条语句组成的复合语句。复合语句应是一条语句,也可以是多条语句组成的复合语句。复合语句应该用该用“ ”括起来。括起来。 if语句语句 if语句的执行过程如下:语句的执行过程如下: 若若表达式的值为真(非表达式的值为真(非0),则执行语句块),则执行语句块S;否则跳过语句;否则跳过语句块块S执行后续语句。如图执行后续语句。如图4-2所示。所示。 图
12、图4-2 单分支选择结构单分支选择结构 if语句语句 例例4-3用用if语句求两个整数中的最大值语句求两个整数中的最大值。 问问题分析:题分析:首先需要输入两个待比较的整数,并分别赋给变量首先需要输入两个待比较的整数,并分别赋给变量x和和y。再设置一个用于存储最大值的变量。再设置一个用于存储最大值的变量max,其初值可设为,其初值可设为x。若。若y比比x大,则将大,则将y的值赋给的值赋给max。最后输出。最后输出max的值。的值。 if语句语句 算算法设计:法设计:根据以上分析,可画出本例根据以上分析,可画出本例的的算算法流程图,如图法流程图,如图4-3所示。所示。 图图4-3例例4-3的算法
13、流程图的算法流程图 if语句语句程序设计程序设计: #include void main( ) int x, y, max; printf (“Please enter x and y:”); scanf (%d%d, &x, &y); max = x; /*把把x的值赋给的值赋给max*/ if (y max) /*如果如果y max,则把,则把y赋给赋给max*/ max = y; printf (max=%dn, max); /*输出输出max的值的值*/ if语句语句运行结果:运行结果:程序运行时若输入:程序运行时若输入:5 9 ,结,结果果如下如下图。图。 if-el
14、se语语句句 if-else语句用于双分支选择结构。根据条件的判定结果,选语句用于双分支选择结构。根据条件的判定结果,选择执行两种操作中的一种。择执行两种操作中的一种。if-else语句的基本格式如下:语句的基本格式如下: if (表达式表达式) 语语句块句块S1 else 语语句块句块S2 if-else语句语句 if-else 语句的执行过程如下语句的执行过程如下: 若若表达式的值为真,则执行语句块表达式的值为真,则执行语句块S1;否则执行语句块;否则执行语句块S2。 if-else语句语句 例例4-4 输入输入3个边长,若能构成三角形,则计算并输出三角形个边长,若能构成三角形,则计算并输
15、出三角形的面积;否则输出信息:的面积;否则输出信息:“构不成三角形构不成三角形”。 问问题分析:题分析:对给定的对给定的3个边长,可按照条件个边长,可按照条件“任意两边之和大任意两边之和大于第三边于第三边”进行判定。若条件满足,则使用海伦公式计算面积进行判定。若条件满足,则使用海伦公式计算面积,否则显示,否则显示“构不成三角形构不成三角形”。 算算法设计:法设计:解决本问题的算法流程图第三章已经给出。参见图解决本问题的算法流程图第三章已经给出。参见图3-14。 if-else语句语句程程序设计:序设计: #include #include void main( ) float a, b, c,
16、 p, area; printf (请输入请输入3个边长个边长:); scanf (%f%f%f, &a, &b, &c); p = (a + b + c) / 2; /*求三角形的半周长求三角形的半周长*/注意:注意:由于求平方根由于求平方根运算需要调用标准库运算需要调用标准库函数函数sqrt ( ),该函数,该函数定义在头文件定义在头文件math.h中,故在程序首部应中,故在程序首部应该包含该包含“math.h”。 if-else语句语句 if (a + b) c & (a + c) b & (b + c) a) /*如果条件成立如果条件成立*/ a
17、rea = sqrt (p * (p - a) * (p - b) * (p - c); /*用海伦公式求三角形面积用海伦公式求三角形面积*/ printf (所构成三角形的面积为:所构成三角形的面积为:%.2fn, area); /*输出面积,保留两位小数输出面积,保留两位小数*/ else/*否则否则*/ printf (构不成三角形构不成三角形n); /*输出输出“构不成三角形构不成三角形”*/ if-else语句语句运运行结果:行结果:程序运行时若输入程序运行时若输入3 4 5 ,结果,结果如如下下图所图所示。示。 if-else语句语句例例4-5 用用if-else语句求两个整数中的
18、最大值。语句求两个整数中的最大值。问问题分析:题分析:在例在例4-3中用中用if语句求出了两个整数中的最大值,实语句求出了两个整数中的最大值,实现这一功能也可以采用现这一功能也可以采用if-else语句。方法是:比较两个变量语句。方法是:比较两个变量x和和y的值,如果的值,如果xy则输出则输出x,否则输出,否则输出y。 if-else语句语句算算法设计:法设计:参照例参照例4-3可直可直接接画画出本出本例的例的算法流程图算法流程图,如图所如图所示。示。 if-else语句语句程序设计程序设计:#include void main( ) int x, y; printf (Please ente
19、r x and y:); scanf (%d%d, &x, &y); if (x y) printf (max=%dn, x); else printf (max=%dn, y); if-else语句语句运行结果运行结果: 程程序运行时若输入:序运行时若输入:5 9 ,结果与例,结果与例4-3的完全相同。的完全相同。 if-else语句语句 例例4-6 本章在引例中提出了本章在引例中提出了4种动物的识别问题,现在先进行种动物的识别问题,现在先进行简单分类:将简单分类:将“老虎、金钱豹、信天翁、企鹅老虎、金钱豹、信天翁、企鹅”分为哺乳类和分为哺乳类和鸟类,划分标准是:如果动物有毛
20、发,且分泌乳汁,则该动物鸟类,划分标准是:如果动物有毛发,且分泌乳汁,则该动物是哺乳动物,否则是鸟(仅限于此是哺乳动物,否则是鸟(仅限于此4种动物)。种动物)。 if-else语句语句问问题分析:题分析:目前只需要对动物分成两类。依题意,分类的条件目前只需要对动物分成两类。依题意,分类的条件应为应为 “动物有毛发,且分泌乳汁动物有毛发,且分泌乳汁”,条件为真时输出,条件为真时输出“是哺乳是哺乳动物动物”;否则输出;否则输出“是鸟是鸟”。算算法设计:法设计:本例算法简单,采用本例算法简单,采用if-else语句可实现该功能。算法语句可实现该功能。算法流程图略。流程图略。 if-else语句语句程
21、程序设计:序设计:#include void main( ) int val; printf (-动物分类系统动物分类系统,请回答下面的问题:请回答下面的问题:-n);printf (如果有物有毛发且能分泌乳汁,回答如果有物有毛发且能分泌乳汁,回答1,否则回,否则回答答0n); scanf (%d, &val); if (val) printf (是哺乳动物是哺乳动物n); else printf (是鸟是鸟n); if-else语句语句运行结果运行结果: 程程序运行时若输入序运行时若输入1 ,结果如,结果如图。图。 条件表达式条件表达式 条条件表达式是一种简化的选择结构,常用于赋值语
22、句中有件表达式是一种简化的选择结构,常用于赋值语句中有选择地进行赋值。选择地进行赋值。 条件表达式条件表达式 1. 条件运算符条件运算符 条条件运算符由件运算符由“?”和和“:”组成。是三目运算符,需要组成。是三目运算符,需要3个个运算数;结合方向为自右至左;优先级低于逻辑运算符、高于运算数;结合方向为自右至左;优先级低于逻辑运算符、高于赋值运算符。赋值运算符。 条件表达式条件表达式 2. 条件表达式条件表达式 条条件表达式的格式是:件表达式的格式是: 表表达式达式1? 表达式表达式2 :表达式:表达式3 其其中,表达式中,表达式1一般为关系表达式或逻辑表达式,表达式一般为关系表达式或逻辑表达
23、式,表达式2和表达式和表达式3可以是常量、变量或表达式。可以是常量、变量或表达式。 条条件表达式的执行过程是:件表达式的执行过程是:若表达式若表达式1的值为真,将表达式的值为真,将表达式2的值作为整个表达式的值;否则将表达式的值作为整个表达式的值;否则将表达式3的值作为整个表达的值作为整个表达式的值。式的值。 条件表达式条件表达式例例4-7 通过条件表达式求两个整数中最大的数。通过条件表达式求两个整数中最大的数。问问题分析:题分析:这一问题已经分别在例这一问题已经分别在例4-3和例和例4-5中加以解决,此处中加以解决,此处,采用条件表达式表示更加简捷。,采用条件表达式表示更加简捷。算法设计:算
24、法设计:算法思想较为简单,采用条件表达式将算法思想较为简单,采用条件表达式将x和和y中的最中的最大值赋给变量大值赋给变量max后输出后输出max的值即可。的值即可。 条件表达式条件表达式程序设计:程序设计:#includevoid main( )int x, y, max;printf (Please enter x and y:);scanf (%d%d, &x, &y);max = x y ? x : y; /*将条件表达式将条件表达式 x y ? x : y的值赋给变量的值赋给变量max */ printf (max=%dn, max); 条件表达式条件表达式运行结果:运
25、行结果:程序运行时若输入:程序运行时若输入:5 9 ,则结果与例,则结果与例4-3、例、例4-5相同。相同。 通通过对例过对例4-3、例、例4-5、例、例4-7的讨论可以看出,同一个问题的讨论可以看出,同一个问题既可用既可用if条件语句实现,也可用条件表达式实现,可见条件语句实现,也可用条件表达式实现,可见C语言中语言中解决问题的灵活性。解决问题的灵活性。 if条件语句的嵌套条件语句的嵌套 对对于多分支的选择结构可以通过于多分支的选择结构可以通过if条件语句的嵌套加以实条件语句的嵌套加以实现,即在现,即在if或或else的分支下包含另一个的分支下包含另一个if语句或语句或if-else语句。语
26、句。if条条件语句的嵌套位置和层次是灵活的,有两种格式较为常用。件语句的嵌套位置和层次是灵活的,有两种格式较为常用。 if条件语句的嵌套条件语句的嵌套格式一:格式一: if(表达式表达式1) if(表达式表达式2) 语语句块句块1 else 语语句块句块2 else if(表达式表达式3) 语语句块句块3 else 语语句块句块4 if条件语句的嵌套条件语句的嵌套执执行过程如下:行过程如下: 若若表达式表达式1的值为真的值为真,则判定则判定表达式表达式2,决定,决定执执行语句块行语句块1还是语句块还是语句块2;否否则则判定判定表达式表达式3,决,决定定执执行语行语句块句块3还是语句块还是语句块
27、4。无论哪无论哪个语句块执行个语句块执行完完后都直后都直接退出嵌套结构接退出嵌套结构。 if条件语句的嵌套条件语句的嵌套 在在if条件语句的嵌套结构中要注意条件语句的嵌套结构中要注意if与与else的匹配关系。的匹配关系。C语语言规定言规定else总是和离它最近的上一个总是和离它最近的上一个if配对。为清晰可见,书写配对。为清晰可见,书写语句时要尽量缩进对齐。语句时要尽量缩进对齐。 if条件语句的嵌套条件语句的嵌套例例4-8求三个整数的最小值。求三个整数的最小值。问问题分析:题分析:设三个整数分别存放在变量设三个整数分别存放在变量x、y、z中。首先中。首先x和和y比比较较,求出较小者和,求出较
28、小者和z比较。比较。算算法设计:法设计:根据以上分析,可以设计出解决该问题的算法流程根据以上分析,可以设计出解决该问题的算法流程图,如图,如图所图所示。示。 if条件语句的嵌套条件语句的嵌套 if条件语句的嵌套条件语句的嵌套程序设计:程序设计:#includevoid main( )int x, y, z;printf(请输入三个整数:请输入三个整数:n); scanf (%d%d%d, &x, &y, &z);if (x y) /*若若xy,下一步需要对,下一步需要对x和和z作作比较求最小值比较求最小值*/if (x z)printf (最小值为:最小值为:%dn,
29、x);elseprintf (最小值为:最小值为:%dn, z); if条件语句的嵌套条件语句的嵌套 else /*此时此时xy,下一步需要对,下一步需要对y和和z作比较求最小值作比较求最小值*/if (y z)printf (最小值为:最小值为:%dn, y); elseprintf (最小值为:最小值为:%dn,z); if条件语句的嵌套条件语句的嵌套运行结果:运行结果:程程序运行时若输入:序运行时若输入:8 3 6 ,结果,结果如如下下图。图。 if条件语句的嵌套条件语句的嵌套格格式二:式二: if (表达式表达式1) 语语句块句块1 else if (表达式表达式2) 语语句块句块2
30、else if (表达式表达式n) 语语句块句块n else 语语句块句块n+1 if条件语句的嵌套条件语句的嵌套执执行过程如下:行过程如下: 若若表达式表达式1的值为真,则执行语句块的值为真,则执行语句块1;否则若表达式;否则若表达式2的值为的值为真,则执行语句块真,则执行语句块2;如如此下去此下去,若所,若所有有表表达式的值都假,则执达式的值都假,则执行行语语句块句块n+1。无论哪。无论哪个个语语句块执行完后都直句块执行完后都直接接退退出嵌套结构出嵌套结构。 if条件语句的嵌套条件语句的嵌套例例4-9求下列分段函数的值求下列分段函数的值。问问题分析:题分析:本例中需要根据本例中需要根据x值
31、取值范围的不同,赋予值取值范围的不同,赋予y不同的不同的值。上述函数关系可表述为:如果值。上述函数关系可表述为:如果x 1,则,则y = x;否则,如果;否则,如果x 10,则,则y = 2*x - 1;否则,;否则,x = 3*x + 11。不能发现,采用嵌套。不能发现,采用嵌套格式格式2求解该问题较为合适。求解该问题较为合适。 if条件语句的嵌套条件语句的嵌套算法设计:算法设计:根据以上分析根据以上分析,可可以得以得出算出算法流程图。法流程图。 if条件语句的嵌套条件语句的嵌套程序设计:程序设计:#include void main( ) int x, y; printf (x=? );s
32、canf (%d, &x);if (x 1) y = x;elseif (x 10) /* 此时此时x满足:满足: 1 x 10 */y=2*x-1; else /* 此此时时x满足:满足: x 10 */y = 3 * x + 11; printf (x=%dny=%dn, x, y); if条件语句的嵌套条件语句的嵌套运行结果:运行结果:程序运行时若输入程序运行时若输入3 ,结果如,结果如图所图所示。示。 if条件语句的嵌套条件语句的嵌套例例4-10求解一元二次方程。求解一元二次方程。问问题分析:题分析:一元二次方程一元二次方程ax2+bx+c=0的解依赖于的解依赖于a、b、c的取
33、值的取值。这里首先分。这里首先分a0和和a0两种情况。若两种情况。若a=0则不构成二次方程,则不构成二次方程,输出输出“不是一元二次方程不是一元二次方程”;若;若a0,则需要进一步根据,则需要进一步根据b2-4ac的值分别讨论。的值分别讨论。 if条件语句的嵌套条件语句的嵌套算法设计算法设计: if条件语句的嵌套条件语句的嵌套程序设计:程序设计:#include #include /*由于用到由于用到exit函数,所以需要包含该头文件函数,所以需要包含该头文件*/#include /*由于用到由于用到sqrt函数,所以需要包含该头文件函数,所以需要包含该头文件*/void main( ) fl
34、oat a, b, c, q, x1, x2; printf (请输入一元二次方程中系数请输入一元二次方程中系数a、b、c的值:的值:n); scanf (%f%f%f, &a, &b, &c); if条件语句的嵌套条件语句的嵌套 if (a = 0) printf (不是一元二次方程:不是一元二次方程:n); exit(0); /*正常终止整个程序运行,强制返回操作系统正常终止整个程序运行,强制返回操作系统*/ q = b * b - 4 * a * c; if (q 0) x1 = (-b + sqrt (q) / (2 * a); x2 = (-b - sqrt
35、(q) / (2 * a); printf (方程有两个解方程有两个解:nx1 = %f, x2 = %f n, x1, x2); else if (q = 0) printf (方程只有一个解方程只有一个解:x = %fn, - b / (2 * a) ); else printf (方程无实数解!方程无实数解!n); if条件语句的嵌套条件语句的嵌套运运行结果行结果:程程序运行时若输入:序运行时若输入:1 -5 6 ,结果,结果如如下下图。图。 引引例的例的if条件语句实现条件语句实现 对对于本章引例中提出的关于动物识别的问题,在于本章引例中提出的关于动物识别的问题,在4.1.3中已中已经
36、给出解决方案,实现该方案可采用嵌套的经给出解决方案,实现该方案可采用嵌套的if条件语句。条件语句。 引引例的例的if条件语句实现条件语句实现算法算法设计设计: 引引例的例的if条件语句实现条件语句实现程程序设计:序设计:#include void main( ) int m1 = 0, m2 = 0, m3 = 0, m4 = 0; printf (-简单的动物识别专家系统简单的动物识别专家系统-nn);printf (-请回答问题请回答问题-n);printf (动物有毛发吗动物有毛发吗?n 1:YES n 0:NO n);scanf(%d, &m1);printf (分泌乳汁吗分泌
37、乳汁吗?n 1:YES n 0:NO n);scanf(%d, &m2); 引引例的例的if条件语句实现条件语句实现 if (m1 & m2) printf (-是哺乳动物是哺乳动物-nn);printf (是黄褐色吗是黄褐色吗?n 1:YES n 0:NO n);scanf (%d, &m1);printf (有暗斑吗有暗斑吗?n 1:YES n 0:NO n);scanf (%d, &m2); if (m1 & m2) printf (-该动物是金钱豹该动物是金钱豹-n); 引引例的例的if条件语句实现条件语句实现 else printf (有黑条纹
38、吗有黑条纹吗?n 1:YES n 0:NO n);scanf (%d, &m3);if (m1 & m3)printf (-该动物是虎该动物是虎-n);elseprintf (-该动物不是金钱豹也不是虎该动物不是金钱豹也不是虎-n); 引引例的例的if条件语句实现条件语句实现 else if (!m1 & !m2) printf (有羽毛吗有羽毛吗?n 1:YES n 0:NO n);scanf (%d, &m3);if(m3)printf (-是鸟是鸟-nn); printf (善飞吗善飞吗?n 1:YES n 0:NO n);scanf(%d,&m1
39、); 引引例的例的if条件语句实现条件语句实现 if (m1) printf (-该动物是信天翁该动物是信天翁-n); else printf (是黑白二色吗是黑白二色吗?n 1:YES n 0:NO n); scanf (%d, &m2); printf (会游泳和潜水吗会游泳和潜水吗?n 1:YES n 0:NO n); scanf (%d, &m3); if (m2 & m3) printf (-该动物是企鹅该动物是企鹅-n); else printf (-该该动物不是信天翁动物不是信天翁,也不是企鹅也不是企鹅-n); 引引例的例的if条件语句实现条件语句实现 e
40、lse printf (-不是哺乳动物也不是鸟。请等待系统升不是哺乳动物也不是鸟。请等待系统升级级-n); else printf (-不是哺乳动物也不是鸟。请等待系统升级不是哺乳动物也不是鸟。请等待系统升级-n); 引引例的例的if条件语句实现条件语句实现运运行结果:行结果:程序运行后程序运行后,如如果依次回果依次回答答0、0、1、0、1、1则则得图得图4-18所示的运行结果所示的运行结果。 用用嵌套的嵌套的if条件语句实现多分支选择,会使程序随着问题条件语句实现多分支选择,会使程序随着问题的复杂化而变得臃肿,导致可读性降低。的复杂化而变得臃肿,导致可读性降低。C语言中提供了专门处语言中提供
41、了专门处理多分支情况的理多分支情况的switch语句。语句。 switch语句的格式语句的格式switch语句也称开关语句,可以根据给定的表达式,选择多个语句也称开关语句,可以根据给定的表达式,选择多个分支语句中一个分支来执行。分支语句中一个分支来执行。switch语句的基本格式如下:语句的基本格式如下: switch (表达式表达式) case常量表达式常量表达式1: 语句块语句块1 case常量表达式常量表达式2: 语句块语句块2 case常量表达式常量表达式n: 语句块语句块n default:语句块语句块n+1 switch语句的格式语句的格式switch语句的执行过程如下:语句的执行
42、过程如下: 先先计算表达式的值,然后依次与各个常量表达式的值进行计算表达式的值,然后依次与各个常量表达式的值进行比较,若与常量表达式比较,若与常量表达式i的值相等的值相等(i=1,2,n),则执行语句,则执行语句块块i,然后顺序执行语句块,然后顺序执行语句块i后的各个语句块;若表达式的值与所后的各个语句块;若表达式的值与所有常量表达式的值都不相等,则执行有常量表达式的值都不相等,则执行default中的语句块。中的语句块。 switch语句的格式语句的格式右右图描图描述述了了switch语语句的执行过句的执行过程程。 switch语句的格式语句的格式说明:说明:(1)switch后面的表达式和
43、各个常量表达式的值只能是整型、后面的表达式和各个常量表达式的值只能是整型、字符型或枚举类型。字符型或枚举类型。(2)各各case中的常量表达式的值必须互不相同。中的常量表达式的值必须互不相同。(3)case和和default出现的次序不影响选择结果;出现的次序不影响选择结果;(4)所所有的语句块都不需要带有的语句块都不需要带“”。 switch语句的格式语句的格式例例4-11假设某宾馆通过电脑控制房间设备的开关,键盘上假设某宾馆通过电脑控制房间设备的开关,键盘上数字键数字键14的功能分别是:的功能分别是:1开窗户;开窗户;2开房灯;开房灯;3开空调;开空调;4关所有设备。下面的程序实现打印当前
44、按下的键关所有设备。下面的程序实现打印当前按下的键及其功能,试分析该程序运行结果。及其功能,试分析该程序运行结果。 switch语句的格式语句的格式程程序清单序清单:#include void main( ) int num; printf (Please enter a number: ); scanf (%d, &num); switch (num) case 1: printf (开窗户开窗户n); case 2: printf (开房灯开房灯n); case 3: printf (开空调开空调n); default: printf (关所有设备关所有设备n); switch语句
45、的格式语句的格式运运行结果:行结果:程序运行时若输入:程序运行时若输入:1 ,结果如,结果如图。图。 switch语句的格式语句的格式 按按照设计要求,程序运行时用户输入数字后应该只有对应照设计要求,程序运行时用户输入数字后应该只有对应的设备作出响应。但程序的设备作出响应。但程序的的运行结果表明,当输入数字运行结果表明,当输入数字1时,程时,程序不仅执行了序不仅执行了case 1中的语句块,还顺序执行了其后的所有语句中的语句块,还顺序执行了其后的所有语句块,显然与设计目的不符。语言提供的块,显然与设计目的不符。语言提供的break语句可以消除这语句可以消除这一现象。一现象。 switch中的中
46、的break语句语句 break语句一般用于语句一般用于switch语句和循环语句,带语句和循环语句,带break的的switch语句格式如下:语句格式如下: switch(表达式表达式) case常量表达式常量表达式1: 语句块语句块1; break; case常量表达式常量表达式2: 语句块语句块2; break; case常量表达式常量表达式n: 语句块语句块n; break; default:语句语句n+1; switch中的中的break语句语句 可可以看到,格式中每一个以看到,格式中每一个case子句中都增加了子句中都增加了break语句,语句,执行完一个语句块后,由执行完一个语句
47、块后,由break语句控制跳出整个语句控制跳出整个switch结构,结构,而不会顺序执行其后的其他语句块。这一过而不会顺序执行其后的其他语句块。这一过程程如下图如下图所所示。示。 switch中的中的break语句语句 switch中的中的break语句语句 例例4-12 修改例修改例4-11的程序,在的程序,在switch语句中加入语句中加入break语句。语句。 switch中的中的break语句语句改改进后的程序清单:进后的程序清单:#includevoid main( ) int num;printf (Please enter a number: );scanf (%d, &
48、num);switch (num) case 1: printf (开窗户开窗户n); break; case 2: printf (开房灯开房灯n); break; case 3: printf (开空调开空调n); break; default: printf (关所有设备关所有设备n); switch中的中的break语句语句运行结果:运行结果:程序运行时若输入:程序运行时若输入:1 ,结果如,结果如图所图所示。示。 switch中的中的break语句语句例例4-13 将键盘上输入的分数(将键盘上输入的分数(int型)转换成相应等级。对应关型)转换成相应等级。对应关系如下:系如下:分数分
49、数901008089707960690 59等级等级ABCDE switch中的中的break语句语句问题分析:问题分析:本例需要将同一分数段中的分数映射到相同的等级本例需要将同一分数段中的分数映射到相同的等级,采用,采用switch语句解决这一问题,首先需要将分数段用常量值表语句解决这一问题,首先需要将分数段用常量值表示。利用语言中示。利用语言中“两个整数的商为整数两个整数的商为整数”的特点可以实现这的特点可以实现这一转换。设键盘上输入的分数保存在变量一转换。设键盘上输入的分数保存在变量score中,用中,用score/10作作为划分各分数段的表达式,其值共有为划分各分数段的表达式,其值共有
50、11个(如表个(如表4-4所示),可所示),可作为各种作为各种case子句中的常量表达式。子句中的常量表达式。 switch中的中的break语句语句表表4-4例例4-13中的分数段转换为数值中的分数段转换为数值分数段分数段901008089707960690 59除以除以10所得的所得的商商9、108760、1、2、3、4、5 switch中的中的break语句语句算算法法设设计计: switch中的中的break语语句句程程序设计序设计: #include void main( ) int score; printf (请输入学生分数(百分制):请输入学生分数(百分制):n); scanf
51、 (“%d”, &score); if ( score 100) printf (您输入的分数超出范围。您输入的分数超出范围。n); switch中的中的break语句语句 else switch (score / 10) case 10: case 9: putchar(A); putchar(n); break; case 8: putchar(B); putchar(n); break; case 7: putchar(C); putchar(n); break; case 6: putchar(D); putchar(n); break; default: putchar(E)
52、; putchar(n); switch中的中的break语句语句运行结果:运行结果:程序运行时若输入:程序运行时若输入:98 ,结果如,结果如图所图所示。示。 引引例的例的switch语句实现语句实现 对对于本章引例中提出的动物识别问题,在于本章引例中提出的动物识别问题,在4.3.5中采用嵌套的中采用嵌套的if条件语句实现了功能,本节采用条件语句实现了功能,本节采用switch语句解决该问题。语句解决该问题。 引引例的例的switch语句实现语句实现 引引例的例的switch语句实现语句实现程序清单:程序清单:#include #include void main( ) int specie
53、s = 0, m1 = 0, m2 = 0, m3 = 0, m4 = 0; printf (-简单的动物识别专家系统简单的动物识别专家系统-n);printf (-请回答问题请回答问题-n); printf (动物有毛发吗动物有毛发吗?n 1:YES n 0:NO n);scanf(%d, &m1);printf (分泌乳汁吗分泌乳汁吗?n 1:YES n 0:NO n);scanf(%d, &m2); 引引例的例的switch语句实现语句实现 if (m1 & m2) species =1; else if (!m1 & !m2) printf (有羽毛吗有
54、羽毛吗?n 1:YES n 0:NO n); scanf (%d, &m3); if(m3) species =2; switch(species ) 引引例的例的switch语句实现语句实现 case 1: printf (-是哺乳动物是哺乳动物-nn); printf (是黄褐色吗是黄褐色吗?n 1:YES n 0:NO n); scanf (%d, &m1); printf (有暗斑吗有暗斑吗?n 1:YES n 0:NO n); scanf (%d, &m2); if (m1 & m2) printf (-该动物是金钱豹该动物是金钱豹-n); else
55、printf (有黑条纹吗有黑条纹吗?n 1:YES n 0:NO n);scanf (%d, &m3);if (m1 & m3)printf (-该动物是虎该动物是虎-n);elseprintf (-该动物不是金钱豹也不是虎该动物不是金钱豹也不是虎-n); break; 引引例的例的switch语句实现语句实现 case 2: printf (-是鸟是鸟-nn); printf (善飞吗善飞吗?n 1:YES n 0:NO n); scanf(%d,&m1); if (m1) printf (-该动物是信天翁该动物是信天翁-n); else printf (是黑白二色
56、吗是黑白二色吗?n 1:YES n 0:NO n);scanf (%d, &m2);printf (会游泳和潜水吗会游泳和潜水吗?n 1:YES n 0:NO n);scanf (%d, &m3);if (m2 & m3) printf (-该动物是企鹅该动物是企鹅-n);elseprintf (-该动物不是信天翁该动物不是信天翁,也不是企鹅也不是企鹅-n); break; 引引例的例的switch语句实现语句实现 default: printf (-不是哺乳动物也不是鸟。请等待系不是哺乳动物也不是鸟。请等待系统升级统升级-n); 引引例的例的switch语句实现语句实现 程程序运行结果与序运行结果与4.3.5中采用中采用if条件语句实现的结果相条件语句实现的结果相同同,参参见见4.3.5程序运行结果图程序运行结果图。 本本章系统讲解了章系统讲解了关系运算和逻辑运算的基本规则关系运算和逻辑运算的基本规则、if语句语句、if-else语句语句和和switch语句的基本语法语句的基本语法、以及、以及分析和解决选择类分析和解决选择类问题的一般方法问题的一般方法。通过本章的学习应该初步建立计算机求解选。通过本章的学习应该初步建立计算机求解选择问题的思维方式,提高算法设计及程序设计能力。择问题的思维
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 26年银发贫血反复解决方案课件
- 商务部面试个人规划
- 煤矿试题解析
- ISO91-质量体系-要求
- 东南大学吴健雄学院微机课程设计电梯控制器
- 九年级化学下册第10单元酸和碱课题2酸和碱的中和反应第一课时作业
- 菱形课件2025-2026学年数学人教版八年级下册
- 军人健康防护手册
- 记账实操-套裁成本计算公式
- 政策研究:停火落地、谈判启动-美伊冲突向何方
- 诊所转让合同范本
- 免疫失衡纠正机制与治疗策略
- 2025年温州理工学院辅导员考试真题
- DB4404-T 51-2023 软土地区基坑工程周边环境影响控制技术及管理规范
- 2025年华三硬件笔试题及答案
- 2025年地铁隧道安全检测合同协议
- 2025广东广州黄埔区云埔街道办事处面向社会招聘政府聘员、专职网格员及党建组织员15人考试参考试题及答案解析
- 用友U8(V10.1)会计信息化应用教程 (王新玲)全套教案课件
- 电解铝项目技术方案
- 2025年招标采购人员专业能力评价考试(招标采购专业实务初、中级)综合练习题及答案一
- 2025有限空间作业安全培训考试试题及答案
评论
0/150
提交评论