第章选择结构程序设计

上传人:仙*** 文档编号:165192271 上传时间:2022-10-26 格式:PPT 页数:64 大小:680KB
收藏 版权申诉 举报 下载
第章选择结构程序设计_第1页
第1页 / 共64页
第章选择结构程序设计_第2页
第2页 / 共64页
第章选择结构程序设计_第3页
第3页 / 共64页
资源描述:

《第章选择结构程序设计》由会员分享,可在线阅读,更多相关《第章选择结构程序设计(64页珍藏版)》请在装配图网上搜索。

1、普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材第第3章章 选择结构程序设计选择结构程序设计 顺序结构程序由各种基本语句组成,并严格顺序结构程序由各种基本语句组成,并严格按照语句的书写顺序执行。在解决实际问题的过按照语句的书写顺序执行。在解决实际问题的过程中,常常需要程序根据对某个特定条件的测试程中,常常需要程序根据对某个特定条件的测试来决定下一步要进行的操作。为此,来决定下一步要进行的操作。为此,C 语言提供语言提供了可以进行程序流程选择控制的语句,这些语句了可以进行程序流程选择控制的语句,这些语句构成的程序结构称为选择结构,也称为分支结构构成的程序结构称为选择结构,也称

2、为分支结构,是结构化程序设计的三种基本结构之一。本章,是结构化程序设计的三种基本结构之一。本章主要介绍选择结构语句。主要介绍选择结构语句。普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材 3.1 选择结构的概念选择结构的概念 3.2 if语句语句 3.3 switch 语句语句 3.4 程序举例程序举例第第3 3章章 选择结构程序设计选择结构程序设计普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材3.1 选择结构的概念选择结构的概念 到目前为止,所介绍的程序都属于顺序结构,顺到目前为止,所介绍的程序都属于顺序结构,顺序结构程序中的所有语句都将被按照书写的

3、顺序执行序结构程序中的所有语句都将被按照书写的顺序执行一次。但是在实际应用中,常常需要根据不同情况选一次。但是在实际应用中,常常需要根据不同情况选择不同的执行语句,这时需要设计分支结构。择不同的执行语句,这时需要设计分支结构。例如,在例如,在前面前面我们介绍了用海伦公式求三条边长我们介绍了用海伦公式求三条边长分别为分别为 3、4、5 的三角形的面积。该程序的局限性很的三角形的面积。该程序的局限性很大,它不能判别三边长度是否满足构成三角形的条件大,它不能判别三边长度是否满足构成三角形的条件。为此,将该问题的算法用流程图和。为此,将该问题的算法用流程图和N-S图描述,如图描述,如图图3-1所示。所

4、示。普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材图图3-1 3-1 使用海伦公式求三角形面积的流程图和使用海伦公式求三角形面积的流程图和N-SN-S图描述图描述3.1 选择结构的概念选择结构的概念普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材#include#include void main()float a,b,c,p,s;/*定义单精度实型变量定义单精度实型变量a,b,c,p,s*/printf(input a,b,c=);/*输出提示信息输出提示信息*/scanf(%f,%f,%f,&a,&b,&c);/*通过键盘输入三角形的三边长通过键盘

5、输入三角形的三边长a,b,c的值的值*/if(a0|b0|c0|(a+bc)|(b+ca)|(c+ab)/*判断三边长度是否满足构成三角形的条件判断三边长度是否满足构成三角形的条件*/printf(data error!n);/*不满足构成三角形的条件,输出出错信息不满足构成三角形的条件,输出出错信息*/else p=0.5*(a+b+c);s=sqrt(p*(p-a)*(p-b)*(p-c);printf(s=%6.2fn,s);3.1 选择结构的概念选择结构的概念普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材程序运行结果:程序运行结果:input a,b,c=3,4,

6、5 s=6.00input a,b,c=0,2,3 data error!input a,b,c=9,2,4 data error!此程序在执行时,由用户键入三角形的三边长度,通过程序此程序在执行时,由用户键入三角形的三边长度,通过程序第第7行行“if()”判断输入数据是否满足构成三角形的条件:所有的判断输入数据是否满足构成三角形的条件:所有的边长大于边长大于0,并且所有两边之和均要大于第三边。若满足,并且所有两边之和均要大于第三边。若满足,则计算则计算并输出结果;反之,只要其中有一个条件不满足,就不能构成三并输出结果;反之,只要其中有一个条件不满足,就不能构成三角形,程序输出角形,程序输出“

7、data error!”出错信息。出错信息。在在C语言中,当需要根据选择条件来确定程序的执行流程,语言中,当需要根据选择条件来确定程序的执行流程,选择某一个分支来执行,这样的程序结构被称为选择结构(分支选择某一个分支来执行,这样的程序结构被称为选择结构(分支、结构)。、结构)。C语言提供了两种控制语句来实现这种选择结构:语言提供了两种控制语句来实现这种选择结构:if条件语句和条件语句和switch开关语句。开关语句。3.1 选择结构的概念选择结构的概念普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材3.2 if 语句语句 选择结构程序设计中条件语句的作用是选择结构程序设计中

8、条件语句的作用是,使程序按某种条件有选择地执行一条或多,使程序按某种条件有选择地执行一条或多条语句。用条语句。用if语句可以构成选择(分支)结构语句可以构成选择(分支)结构。它根据给定的条件进行判断,以决定执行。它根据给定的条件进行判断,以决定执行某个分支程序段。某个分支程序段。C语言的语言的if语句有三种基本语句有三种基本形式。形式。普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材3.2 if语句语句3.2.1 if语句的三种形式语句的三种形式1.第一种形式第一种形式(单分支选择结构单分支选择结构)语句格式如下:语句格式如下:if(表达式表达式)语句;语句;语句功能:首先

9、计算表达式语句功能:首先计算表达式的值的值,若表达式的值为真若表达式的值为真(非非0),则执行语句;若表达式的值为假则执行语句;若表达式的值为假(0),则该语句不起作用,继),则该语句不起作用,继续执行下面的语句。其流程图和续执行下面的语句。其流程图和N-S图描述,如图图描述,如图3-2所示。所示。普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材例例3.1 任意输入两个整数,输出其中的大数。任意输入两个整数,输出其中的大数。(a)流程图描述流程图描述(b)N-S图描述图描述 3.2 if语句语句普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材程序运行结果

10、程序运行结果:input a,b=5,3 max=5#include void main()int a,b,max;/*定义整型变量定义整型变量a,b,max*/printf(input a,b=);/*输出提示信息输出提示信息*/scanf(%d,%d,&a,&b);/*从键盘输入从键盘输入a,b的值的值*/max=a;/*把把a的值赋给变量的值赋给变量max*/if(maxb)/*若若max b,则把则把b的值赋予的值赋予max*/max=b;printf(max=%dn,max);/*输出输出max的值的值*/3.2 if语句语句普通高等教育普通高等教育“十一五十一五”国家级规划教材国家

11、级规划教材例例3.2 输入一个成绩,当成绩输入一个成绩,当成绩60时,输出时,输出“Pass!”,否则什么,否则什么都不输出。都不输出。#include void main()float score;/*定义整型变量定义整型变量score,用以表示成绩,用以表示成绩*/printf(input score:);/*输出提示信息输出提示信息*/scanf(%f,&score);/*从键盘输入一个成绩从键盘输入一个成绩*/if(score=60)/*判断成绩是否大于等于判断成绩是否大于等于60分分*/printf(Pass!);/*成绩大于等于成绩大于等于60分,输出分,输出Pass!*/程序运行

12、结果:程序运行结果:input score:75 Pass!/*成绩大于等于成绩大于等于60分输出分输出Pass!*/input score:55 /*成绩小于成绩小于60分什么都不输出分什么都不输出*/input score:95 Pass!/*成绩大于等于成绩大于等于60分输出分输出Pass!*/3.2 if语句语句普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材2第二种形式(双分支选择结构)第二种形式(双分支选择结构)语句格式:语句格式:if(表达式表达式)语句语句1;else 语句语句2;语句功能:首先计算表达式的值语句功能:首先计算表达式的值,若表达式的值为真若表

13、达式的值为真(非非0),则则执行语句执行语句1,否则执行语句,否则执行语句2。流程图和。流程图和NS图描述如图所示。图描述如图所示。(a)流程图描述流程图描述(b)N-S图描述图描述 3.2 if语句语句普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材例例3.3 任意输入两个整数,输出其中的大数。任意输入两个整数,输出其中的大数。(a)流程图描述流程图描述(b)N-S图描述图描述 3.2 if语句语句普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材#include void main()int a,b;/*定义整型变量定义整型变量a,b*/printf(

14、input a,b=);/*输出提示信息输出提示信息*/scanf(%d,%d,&a,&b);/*从键盘输入从键盘输入a,b的值的值*/if(ab)printf(max=%dn,a);/*若若ab,则把则把a赋给赋给max并输出并输出*/else printf(max=%dn,b);/*若若a=b,则把则把b赋给赋给max并输出并输出*/程序运行结果:程序运行结果:input a,b=33,55 max=55 3.2 if语句语句普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材例例3.4 输入一个成绩,当成绩输入一个成绩,当成绩60时,输出时,输出“Pass!”,否则输出,

15、否则输出“Fail!”。#include void main()float score;/*定义整型变量定义整型变量score,用以表示成绩,用以表示成绩*/printf(input score:);/*输出提示信息输出提示信息*/scanf(%f,&score);/*从键盘输入一个成绩从键盘输入一个成绩*/if(score=60)/*判断成绩是否大于等于判断成绩是否大于等于60分分*/printf(Pass!);/*成绩大于等于成绩大于等于60分,输出分,输出Pass!*/else /*否则成绩小于否则成绩小于60分分*/printf(Fail!);/*成绩小于成绩小于60分,输出分,输出F

16、ail!*/程序运行结果:程序运行结果:input score:75 Pass!input score:55 Fail!3.2 if语句语句普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材3第三种形式(多分支选择结构)第三种形式(多分支选择结构)前两种形式的前两种形式的if语句一般用于两个分支的情况。当有多个分语句一般用于两个分支的情况。当有多个分支选择时,可采用下列多分支选择结构。支选择时,可采用下列多分支选择结构。语句格式:语句格式:if(表达式表达式1)语句语句 1;else if(表达式表达式2)语句语句 2;else if(表达式表达式3)语句语句 3;else

17、if(表达式表达式n)语句语句 n;else 语句语句 n+1;语句功能语句功能:首先计算表达式首先计算表达式1的值的值,若表达式若表达式1的值为真的值为真(非非0),则执行语句,则执行语句1,否则计算表达式,否则计算表达式2的值,若表达式的值,若表达式2的值为真的值为真(非非0),则执行语句则执行语句2,否则计,否则计算表达式算表达式3的值,若表达式的值,若表达式3的值为真(非的值为真(非0),则执行语句),则执行语句3,所有的,所有的表达式的值都是表达式的值都是0时,执行语句时,执行语句n+1。3.2 if语句语句普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材(a)流

18、程图描述流程图描述 3.2 if语句语句普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材 图图3-6 多分支选择结构的执行过程多分支选择结构的执行过程(b)N-S图描述图描述 3.2 if语句语句普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材例例3.5 输入一个成绩,当成绩输入一个成绩,当成绩60时,输出时,输出“Fail!”;当成绩在;当成绩在6069之间时,之间时,输出输出“Pass!”;当成绩在;当成绩在7079之间时,输出之间时,输出“Good!”;当成绩;当成绩80时,输出时,输出“Very Good!”。(a)流程图描述流程图描述(b)N-

19、S图描述图描述 3.2 if语句语句普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材#include void main()float score;printf(input score:);scanf(%f,&score);if(score60)/*判断成绩是否小于判断成绩是否小于60分分*/printf(Fail!);/*成绩小于成绩小于60分,输出分,输出Fail!*/else if(score70)/*判断成绩是否小于判断成绩是否小于70分分*/printf(Pass!);/*成绩小于成绩小于70分,输出分,输出Pass!*/else if(score80)/*判断成

20、绩是否小于判断成绩是否小于80分分*/printf(Good!);/*成绩小于成绩小于80分,输出分,输出Good!*/else /*否则成绩大于等于否则成绩大于等于80分分*/printf(Very Good!);/*成绩大于等于成绩大于等于80分分,输出输出Very Good!*/程序运行结果:程序运行结果:input score:55 Fail!input score:65 Pass!input score:95 Very Good!3.2 if语句语句普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材关于关于if语句的说明和注意事项:语句的说明和注意事项:表达式一般为

21、关系表达式或逻辑表达式,表达式一般为关系表达式或逻辑表达式,C语言在进行判语言在进行判断时,只要表达式的值不为断时,只要表达式的值不为0,就认为是真。因此,表达,就认为是真。因此,表达式可以是任意类型的表达式(整型、实型、字符型等)。式可以是任意类型的表达式(整型、实型、字符型等)。例如:例如:if(c=getchar()printf(%c,c);输入一个字符,赋给变量输入一个字符,赋给变量c,只要输入的不是,只要输入的不是0,就输出输,就输出输入的字符。入的字符。3.2 if语句语句普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材关于关于if语句的说明和注意事项:语句的说

22、明和注意事项:当条件表达式是一个简单变量时,常用如下两种简当条件表达式是一个简单变量时,常用如下两种简 化形式。化形式。例如:例如:if(x!=0)可简化成可简化成 if(x)if(x=0)可简化成可简化成 if(!x)if语句中的语句中的“语句语句”从语法上讲只能是一条语句,从语法上讲只能是一条语句,而不能有多条语句。如果有多条语句的话,就要用而不能有多条语句。如果有多条语句的话,就要用花括号括起来组成一个复合语句。花括号括起来组成一个复合语句。3.2 if语句语句普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材例例3.6 任意输入任意输入2个整数,按代数值从小到大的顺序

23、输出这个整数,按代数值从小到大的顺序输出这2个个整数。整数。#include void main()int a,b,t;/*定义整型变量定义整型变量a,b,t*/printf(input a,b=);/*输出提示信息输出提示信息*/scanf(%d,%d,&a,&b);/*从键盘输入从键盘输入a,b的值的值*/if(ab)t=a;a=b;b=t;/*若若ab,则将则将a和和b互换互换,构成了一个复合语句构成了一个复合语句*/printf(%d%5dn,a,b);/*输出输出a,b的值的值*/程序运行结果:程序运行结果:input a,b=55,33 33 553.2 if语句语句普通高等教育普

24、通高等教育“十一五十一五”国家级规划教材国家级规划教材在程序中,如果将在程序中,如果将 if(ab)t=a;a=b;b=t;写成:写成:if(ab)t=a;a=b;b=t;当当a=55、b=33时,执行后可得时,执行后可得到到a=55和和b=33。当当a=33、b=55时,执行时,执行ab为为假,假,t=a不被执行,但不被执行,但a=b和和b=t要执行,若要执行,若t没有赋过值,则会没有赋过值,则会出错。出错。#include void main()int a,b,t;printf(input a,b=);scanf(%d,%d,&a,&b);if(ab)t=a;a=b;b=t;printf(

25、%d%5dn,a,b);例例3.6 任意输入任意输入2个整数,按代数值从小到大的顺序输出这个整数,按代数值从小到大的顺序输出这2个个整数。整数。3.2 if语句语句普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材 在在 if 语句中又包含一个或多个语句中又包含一个或多个if语句,称为语句,称为 if 语语句的嵌套。其一般形式如下:句的嵌套。其一般形式如下:if(表达式表达式1)if(表达式表达式2)语句语句1;else 语句语句2;else if(表达式表达式3)语句语句3;else 语句语句4;3.2.2 if 语句的的嵌套语句的的嵌套3.2 if语句语句普通高等教育普通

26、高等教育“十一五十一五”国家级规划教材国家级规划教材3.2 if语句语句普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材 在嵌套的在嵌套的if语句中规定,语句中规定,else总是与它上面最近的尚未总是与它上面最近的尚未与与else配对的配对的if配对。因此,配对。因此,在使用在使用if语句嵌套的时候,应语句嵌套的时候,应当注意当注意if与与else的配对关系。的配对关系。例如,对于下面的形式:例如,对于下面的形式:if(表达式表达式1)if(表达式表达式2)语句语句1;else if(表达式表达式2)语句语句2;else 语句语句3;程序设计者希望第三行的程序设计者希望第三

27、行的else与第与第一行的一行的if对应,但实际上对应,但实际上else总是与它总是与它前面最近的未配对的前面最近的未配对的if配对,因此第三配对,因此第三行的行的else是与第二行的是与第二行的if配对,因为它配对,因为它们相距最近。所以内嵌套的们相距最近。所以内嵌套的if语句也包语句也包含含else部分,如果部分,如果if与与else的数目不能一的数目不能一致,为实现程序设计者的意图,可以加致,为实现程序设计者的意图,可以加花括号来确定配对关系。例如:花括号来确定配对关系。例如:if(表达式表达式1)if(表达式表达式2)语句语句1;else 语句语句2;3.2 if语句语句普通高等教育普

28、通高等教育“十一五十一五”国家级规划教材国家级规划教材例例3.7 修改例修改例3.4,排除不可能的分数。,排除不可能的分数。例例 3.4 并不是一个完整的程序,它要求输入并不是一个完整的程序,它要求输入的分数应该是的分数应该是 0100 之间,否则不能给出正确之间,否则不能给出正确结果。例如输入结果。例如输入-5 或或 101,都将被认为是不正,都将被认为是不正确的。使用嵌套的确的。使用嵌套的 if 语句则可以排除不可能的分语句则可以排除不可能的分数。数。3.2 if语句语句普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材#include void main()float

29、score;/*定义整型变量定义整型变量score,用以表示成绩,用以表示成绩*/printf(input score:);/*输出提示信息输出提示信息*/scanf(%f,&score);/*从键盘输入一个成绩从键盘输入一个成绩*/if(score=0&score=60)/*判断成绩是否大于等于判断成绩是否大于等于60分分*/printf(Pass!);/*成绩大于等于成绩大于等于60分,输出分,输出Pass!*/else /*否则成绩小于否则成绩小于60分分*/printf(Fail!);/*成绩小于成绩小于60分,输出分,输出Fail!*/else printf(nError score

30、!);/*提示输入数据有误提示输入数据有误*/程序运行结果:程序运行结果:input score:75 Pass!input score:155 Error score!3.2 if语句语句普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材 本例是在本例是在ifelse形式的形式的if分支中又嵌套了一个分支中又嵌套了一个ifelse语句。前面介绍的很多程序都未对输入的数语句。前面介绍的很多程序都未对输入的数据是否符合实际情况进行判断,这其实不是一种好据是否符合实际情况进行判断,这其实不是一种好的设计思想。好的程序设计者应该了解所有被处理的设计思想。好的程序设计者应该了解所有被

31、处理的数据的范围,如果用户输入的数据不在正确范围的数据的范围,如果用户输入的数据不在正确范围内,应该提示用户输入数据有误。内,应该提示用户输入数据有误。3.2 if语句语句普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材例例3.8 有一分段函数有一分段函数编写程序,要求输入一个编写程序,要求输入一个x值,输出值,输出y值。值。)2(53)20(102)0(xxxxxxy3.2 if语句语句普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材)2(53)20(102)0(xxxxxxy3.2 if语句语句普通高等教育普通高等教育“十一五十一五”国家级规划教材国

32、家级规划教材(b)N-S图描述图描述)2(53)20(102)0(xxxxxxy3.2 if语句语句普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材3.2 if语句语句普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材#include#include void main()float x,y;printf(input x=);scanf(%f,&x);if(x=2)y=3*x+5;/*若若,则则y=3*x+5*/else y=2*x-10;/*若若,则则y=3*x+5*/printf(x=%7.3f,y=%7.3fn,x,y);/*输出输出x,y的值的值*

33、/程序运行结果:程序运行结果:input x=-3.0 x=-3.000,y=3.000input x=8.0 x=8.000,y=29.0003.2 if语句语句普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材3.3 switch语句语句 前面介绍的前面介绍的if语句,常用于两种情况的选语句,常用于两种情况的选择结构,要表示两种以上条件的选择结构,则择结构,要表示两种以上条件的选择结构,则要用要用if语句的嵌套形式,但如果嵌套的语句的嵌套形式,但如果嵌套的if语句语句比较多时,程序比较冗长且可读性降低。在比较多时,程序比较冗长且可读性降低。在C语言中,可直接用语言中,可直

34、接用switch语句来实现多种情况语句来实现多种情况的选择结构。的选择结构。普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材 在在C语言中,可直接用语言中,可直接用switch语句来实现多种情况语句来实现多种情况的选择结构。其一般形式如下:的选择结构。其一般形式如下:switch(表达式表达式)case 常量常量1:语句:语句1;case 常量常量2:语句:语句2;case 常量常量3:语句:语句3;case 常量常量n:语句:语句n;default 语句语句n+1;/*根据需要可有可无根据需要可有可无*/3.3 switch语句语句普通高等教育普通高等教育“十一五十一五”

35、国家级规划教材国家级规划教材switch语句的执行过程:语句的执行过程:首先计算表达式的值,首先计算表达式的值,并逐个与并逐个与case后面的常量的后面的常量的值相比较,当表达式的值值相比较,当表达式的值与某个常量的值相等时,与某个常量的值相等时,即执行其后的语句,然后即执行其后的语句,然后不再进行判断,继续执行不再进行判断,继续执行后面所有后面所有case后面的语句。后面的语句。如表达式的值与所有如表达式的值与所有case后后面的常量的值均不相等时面的常量的值均不相等时,则执行,则执行default后面的语后面的语句。句。图图3-10 switch语句的执行过程语句的执行过程3.3 swit

36、ch语句语句普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材 switch(class)case A:printf(GREAT!n);case B:printf(GOOD!n);case C:printf(OK!n);case D:printf(NO!n);default:printf(ERROR!n);若若class的值为的值为B,则输出结果是:,则输出结果是:GOOD!OK!NO!ERROR!若若class的值为的值为D,则输出结果是:,则输出结果是:NO!ERROR!若若class的值为的值为F,则输出结果是:,则输出结果是:ERROR!从例题可以看到从例题可以看到,

37、switch语句的功能语句的功能是:是:根据根据 switch 后面后面表达式的值找到匹表达式的值找到匹配的入口处,就从配的入口处,就从此入口处开始执行此入口处开始执行下去,不再进行判下去,不再进行判断。断。例如例如:3.3 switch语句语句普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材关于关于switch语句的说明和注意事项:语句的说明和注意事项:switch后面圆括号内表达式以及后面圆括号内表达式以及case后面后面的常量的值必须为整型、字符型或枚举类型,并的常量的值必须为整型、字符型或枚举类型,并且每个且每个case后面常量的类型应该与后面常量的类型应该与swi

38、tch后面圆括后面圆括号内表达式的类型一致。号内表达式的类型一致。case后面常量的值必须互不相同,否则会后面常量的值必须互不相同,否则会出现相互矛盾的现象。出现相互矛盾的现象。3.3 switch语句语句普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材 多个多个case可以共用一组执行语句。可以共用一组执行语句。例如:例如:switch(ch)case A:case B:case C:printf(=60n);该该switch语句表示当语句表示当ch的值为的值为A、B、C时,都会执行时,都会执行printf(=60n);语句。语句。case和常量之间要有空格。和常量之间要

39、有空格。case和和default可以出现在任何位置,其先后次序不影响执行可以出现在任何位置,其先后次序不影响执行 结果,但习惯上将结果,但习惯上将default放在放在switchcase结构的底部。结构的底部。3.3 switch语句语句普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材例例3.9 从键盘上输入一个大写字母,若字母为从键盘上输入一个大写字母,若字母为A输出输出GOOD!,字,字母为母为B输出输出OK!,字母为,字母为C输出输出NO!,输入其它字母,输出,输入其它字母,输出ERROR!。#include void main()char ch;printf(i

40、nput a character:);scanf(%c,&ch);switch(ch)case A:printf(GOOD!n);break;case B:printf(OK!n);break;case C:printf(NO!n);break;default:printf(ERROR!n);程序运行结果:程序运行结果:input a character:A GOOD!input a character:G ERROR!3.3 switch语句语句普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材也可以将程序中的也可以将程序中的switch结构改写成如下:结构改写成如下:#i

41、nclude void main()char ch;printf(input a character:);scanf(%c,&ch);switch(ch)default:printf(ERROR!n);break;case A:printf(GOOD!n);break;case B:printf(OK!n);break;case C:printf(NO!n);不影响执行的效果。但需要注意的是,当不影响执行的效果。但需要注意的是,当case与与default的顺序或各的顺序或各case之之间的顺序改变后,有关间的顺序改变后,有关case或或default后面的语句可能要做一些修改。例如,后面的语

42、句可能要做一些修改。例如,在上述修改中,要在原在上述修改中,要在原default中的语句后加一个中的语句后加一个break语句,原语句,原case C后面后面的的break语句可以去掉。语句可以去掉。3.3 switch语句语句普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材程序段的运行结果:程序段的运行结果:x=1,y=0 x=2 switch结构可以嵌套,即在一个结构可以嵌套,即在一个switch语句中嵌套另一个语句中嵌套另一个switch语句,这时可以用语句,这时可以用break语句使流程跳出语句使流程跳出switch结构,但结构,但是要注意是要注意break只能跳出

43、最内层的只能跳出最内层的switch语句。语句。int x=1,y=0;switch(x)case 1:switch(y)case 0:printf(x=1,y=0n);break;case 1:printf(y=1n);break;case 2:printf(x=2n);3.3 switch语句语句普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材例例 3.10 从键盘上输入一个数字,输出一个有关星期几的英从键盘上输入一个数字,输出一个有关星期几的英 文单词。文单词。图图3-11 例例3.10的流程图描述的流程图描述3.3 switch语句语句普通高等教育普通高等教育“十一

44、五十一五”国家级规划教材国家级规划教材#include void main()int a;printf(input integer number:);scanf(%d,&a);switch(a)/*a逐个与逐个与case后面的常量进行匹配后面的常量进行匹配*/case 1:printf(Mondayn);break;/*若若a=1,则输出给定的字符串则输出给定的字符串,并跳出并跳出switch语句语句*/case 2:printf(Tuesdayn);break;/*若若a=2,则输出给定的字符串则输出给定的字符串,并跳出并跳出switch语句语句*/case 3:printf(Wednesd

45、ayn);break;/*若若a=3,则输出给定的字符串则输出给定的字符串,并跳出并跳出switch语句语句*/case 4:printf(Thursdayn);break;/*若若a=4,则输出给定的字符串则输出给定的字符串,并跳出并跳出switch语句语句*/case 5:printf(Fridayn);break;/*若若a=5,则输出给定的字符串则输出给定的字符串,并跳出并跳出switch语句语句*/case 6:printf(Saturdayn);break;/*若若a=6,则输出给定的字符串则输出给定的字符串,并跳出并跳出switch语句语句*/case 7:printf(Sund

46、ayn);break;/*若若a=7,则输出给定的字符串则输出给定的字符串,并跳出并跳出switch语句语句*/default:printf(input error!n);/*若若a匹配不成功,则输出输入有误信息匹配不成功,则输出输入有误信息*/结果:结果:input integer number:5 Friday input integer number:55 input error!思考思考:若将程序中的所有若将程序中的所有break语语句去掉,程序的结果会正确吗?句去掉,程序的结果会正确吗?如果不正确将会出现什么情况?如果不正确将会出现什么情况?3.3 switch语句语句普通高等教育普

47、通高等教育“十一五十一五”国家级规划教材国家级规划教材3.4 3.4 程序举例程序举例普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材3.4 程序举例程序举例例例3.11 从键盘上输入一个字符,请判别输入字符的种类,即判从键盘上输入一个字符,请判别输入字符的种类,即判别它是数字字符、英文字符、空格或回车,还是其他字符。别它是数字字符、英文字符、空格或回车,还是其他字符。(a)流程图描述)流程图描述普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材(b)N-S图描述图描述3.4 程序举例程序举例普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划

48、教材#include void main()char ch;printf(Input a character:);ch=getchar();/*从键盘输入一个字符从键盘输入一个字符*/if(ch=|ch=n)/*若字符为空格或回车,则输出为空格或回车若字符为空格或回车,则输出为空格或回车*/printf(This is a blank or enter.n);else if(ch=0&ch=A&ch=a&ch=z)/*若值在若值在AZ或或az之间之间,则输出英文字符则输出英文字符*/printf(This is a letter.n);else /*否则输出其他字符否则输出其他字符*/prin

49、tf(This is another character.n);程序运行结果:程序运行结果:Input a haracter:55 This is a digit.Input a character:+This is anothercharacter.3.4 程序举例程序举例普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材例例3.12 编写一个程序,求一元二次方程编写一个程序,求一元二次方程 的根。的根。一元二次方程的求根公式为:一元二次方程的求根公式为:,因此,因此,程序必须对系数程序必须对系数 、的各种可能的情况分别进行处理:的各种可能的情况分别进行处理:(1)当)当

50、时,方程无解。时,方程无解。(2)当)当 时,方程的解为时,方程的解为 。(3)当)当 时,时,时,有两个不相等的实根。时,有两个不相等的实根。时,有两个相等的实根。时,有两个相等的实根。时,有两个共轭复根。时,有两个共轭复根。02cbxaxaacbbx2422,1abc00ba,00ba,bc/0a042 acb042 acb042 acb3.4 程序举例程序举例普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材(a)流程图描述流程图描述3.4 程序举例程序举例普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材(b)N-S图描述图描述3.4 程序举例程序举

51、例普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材#include#include void main()float a,b,c,d,r,p;/*定义单精度实型变量定义单精度实型变量a,b,c,d,r,p*/float x1,x2;/*定义单精度实型变量定义单精度实型变量x1,x2*/printf(input a,b,c=);/*输出提示信息输出提示信息*/scanf(%f,%f,%f,&a,&b,&c);/*从键盘输入从键盘输入a,b,c的值的值*/if(fabs(a)=1e-6)if(fabs(b)=1e-6)printf(No answer!n);/*若若a,b等于等

52、于0,则方程无解则方程无解*/else printf(x=%fn,-c/b);/*若若a=0,b0,则方程有一个实根则方程有一个实根*/3.4 程序举例程序举例普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材else d=b*b-4*a*c;if(fabs(d)1e-6)x1=(-b+sqrt(d)/(2*a);x2=(-b-sqrt(d)/(2*a);printf(x1=%ftx2=%fn,x1,x2);/*若若a0,b2-4ac0则有两个不相等的实根则有两个不相等的实根*/else r=-b/(2*a);p=sqrt(-d)/(2*a);/*若若a0,b2-4ac0则方

53、程有两个共轭复根则方程有两个共轭复根*/printf(x1=%f+%finx2=%f-%fin,r,p,r,p);3.4 程序举例程序举例普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材程序运行结果:程序运行结果:input a,b,c=2,6,1 x1=-0.177124 x2=-2.822876input a,b,c=1,3,5 x1=-1.500000+1.658312ix1=-1.500000-1.658312iinput a,b,c=2,4,2 x1=x2=-1.000000input a,b,c=0,0,1 No answer!我们在前面讲过,由于实数在计算和存

54、储时会有一些微小的误差,从而我们在前面讲过,由于实数在计算和存储时会有一些微小的误差,从而实数一般不能直接进行判断实数一般不能直接进行判断“相等相等”,而是判断接近或近似。因此,对于判,而是判断接近或近似。因此,对于判断实数断实数a、b、d是否等于是否等于0时,我们采用的办法是判别时,我们采用的办法是判别a、b、d的绝对值的绝对值fabs(a)、fabs(b)、fabs(d)是否小于一个很小的数是否小于一个很小的数(例如例如10-6)。如果小于此数。如果小于此数,就认为,就认为a、b、d等于等于0。3.4 程序举例程序举例普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材例例

55、 3.13 编写根据输入的学生成绩判断等级的程序,即从键盘上输入一个学编写根据输入的学生成绩判断等级的程序,即从键盘上输入一个学 生的百分制成绩赋值给变量生的百分制成绩赋值给变量score,按下列要求输出其等级。,按下列要求输出其等级。score90 等级为等级为A 80score90 等级为等级为B 70score80 等级为等级为C 60score70 等级为等级为D score60 等级为等级为E 此问题可以用此问题可以用else if语句编程解决,在这里用语句编程解决,在这里用switch语句来编程解决。根语句来编程解决。根据题目要求,若据题目要求,若score90,score可能是可

56、能是90,91,92,98,99,100,把,把这些值都列出来过于繁杂,可以利用两个整数相除,结果自动取整的方法,这些值都列出来过于繁杂,可以利用两个整数相除,结果自动取整的方法,即当即当90score100时,时,score/10只有只有10和和9两种情况,这样用两种情况,这样用switch语句来解语句来解决便简便了。决便简便了。3.4 程序举例程序举例普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材图图3-14 例例3.13的流程图描述的流程图描述3.4 程序举例程序举例普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材程序运行结果:程序运行结果:in

57、put a score(0-100):75 75:C#include void main()int score,grade;printf(input a score(0-100):);scanf(%d,&score);grade=score/10;/*将将score/10赋给赋给grade*/switch(grade)/*grade逐个与逐个与case后面的常量进行匹配后面的常量进行匹配*/case 10:case 9:printf(%d:An,score);break;/*score90,等级为等级为A*/case 8:printf(%d:Bn,score);break;/*80score9

58、,等级为等级为B*/case 7:printf(%d:Cn,score);break;/*70score80,等级为等级为C*/case 6:printf(%d:Dn,score);break;/*60score70,等级为等级为D*/case 5:case 4:case 3:case 2:case 1:case 0:printf(%d:En,score);break;/*score60,等级为等级为E*/default:printf(input error!n);/*显示输入有误信息显示输入有误信息*/3.4 程序举例程序举例普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教

59、材例例3.14 四则运算程序。用户输入两个运算量及一个运四则运算程序。用户输入两个运算量及一个运算符,输出运算结果。算符,输出运算结果。首先输入参加运算的两个数和一个运算符号,然首先输入参加运算的两个数和一个运算符号,然后根据运算符号来做相应的运算后根据运算符号来做相应的运算,但是在做除法运算时但是在做除法运算时,应判别除数是否为,应判别除数是否为0,如果为如果为0,运算非法运算非法,给出错误提给出错误提示。如果运算符号不是示。如果运算符号不是+、-、*、/,则同样是非法的,则同样是非法的,也给出错误提示。其他情况,输出运算的结果。,也给出错误提示。其他情况,输出运算的结果。3.4 程序举例程

60、序举例普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材图图3-15 例例3.14的流程图描述的流程图描述3.4 程序举例程序举例普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材#include void main()float a,b,result;int flag;char ch;flag=0;/*运算合法标志运算合法标志flag,置,置0为合法,置为合法,置1为非法为非法*/printf(input expressin:a+(-,*,/)bn);/*输出提示信息输出提示信息*/scanf(%f%c%f,&a,&ch,&b);/*从键盘输入从键盘输入a

61、,ch,b的值的值*/switch(ch)/*根据运算符来进行相关的运算根据运算符来进行相关的运算*/case+:result=a+b;break;/*加法运算加法运算*/case-:result=a-b;break;/*减法运算减法运算*/case*:result=a*b;break;/*乘法运算乘法运算*/case/:if(!b)printf(divisor is zero!n);/*若被除数为若被除数为0,则输出提示信息则输出提示信息*/flag=1;/*置运算合法标志置运算合法标志flag为为1*/else result=a/b;break;/*除法运算除法运算*/default:pr

62、intf(input error!n);/*显示非法运算符显示非法运算符*/flag=1;/*置运算合法标志置运算合法标志flag为为1*/if(!flag)/*若运算合法,则输出结果若运算合法,则输出结果*/printf(%f%c%f=%fn,a,ch,b,result);3.4 程序举例程序举例普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材程序运行结果:程序运行结果:input expressin:a+(-,*,/)b3+5 3.000000+5.000000=8.000000input expressin:a+(-,*,/)b9/0 divisor is zero!

63、input expressin:a+(-,*,/)b55!66 input error!3.4 程序举例程序举例普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材 通过本章的学习,要熟练掌握通过本章的学习,要熟练掌握if语句和语句和 switch 语句的使语句的使用。注意正确使用用。注意正确使用if语句的三种形式以及嵌套的语句的三种形式以及嵌套的if语句。在使语句。在使用用switch语句时,一定要注意,在没有使用语句时,一定要注意,在没有使用break语句的情况语句的情况下,下,case语句的各个语句是逐句执行的,而不是执行一条语语句的各个语句是逐句执行的,而不是执行一条语句就跳出句就跳出switch语句。语句。选择结构是结构化程序设计的一个基本结构。它根据输选择结构是结构化程序设计的一个基本结构。它根据输入的数据或中间结果的情况,选择一组语句执行入的数据或中间结果的情况,选择一组语句执行(在不同的情在不同的情况下,选择不同的语句组执行况下,选择不同的语句组执行)。在编程序时,必须将所有的。在编程序时,必须将所有的情况都考虑进去,并写出在各种情况下所对应的语句组。情况都考虑进去,并写出在各种情况下所对应的语句组。本本 章章 小小 结结

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!