第章选择结构程序设计ppt课件

上传人:cn****1 文档编号:586470033 上传时间:2024-09-04 格式:PPT 页数:64 大小:672KB
返回 下载 相关 举报
第章选择结构程序设计ppt课件_第1页
第1页 / 共64页
第章选择结构程序设计ppt课件_第2页
第2页 / 共64页
第章选择结构程序设计ppt课件_第3页
第3页 / 共64页
第章选择结构程序设计ppt课件_第4页
第4页 / 共64页
第章选择结构程序设计ppt课件_第5页
第5页 / 共64页
点击查看更多>>
资源描述

《第章选择结构程序设计ppt课件》由会员分享,可在线阅读,更多相关《第章选择结构程序设计ppt课件(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所示。所示。普通高等教育普通高等教育“十一五十一五”国家国家级规划教材划教材图图3-1 3-1 运用海伦公式求三角形面积的

4、流程图和运用海伦公式求三角形面积的流程图和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); /* 经过键盘输入三角形的三边经过键盘输入三角形的三边长长a,b,c的值的值*/ if(a0|b0|c0|(a+bc)|(b+ca)|(c

5、+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,5 s=6.00input a,b,c=0,2,3 data error!input a

6、,b,c=9,2,4 data error! 此此程程序序在在执行行时,由由用用户键入入三三角角形形的的三三边长度度,经过程程序序第第7行行“if()判判别输入入数数据据能能否否满足足构构成成三三角角形形的的条条件件:一一切切的的边长大大于于0,并并且且一一切切两两边之之和和均均要要大大于于第第三三边。假假设满足足,那那么么计算算并并输出出结果果;反反之之,只只需需其其中中有有一一个个条条件件不不满足足,就就不不能能构构成三角形,程序成三角形,程序输出出“data error!出出错信息。信息。 在在C言言语中中,当当需需求求根根据据选择条条件件来来确确定定程程序序的的执行行流流程程,选择某某

7、一一个个分分支支来来执行行,这样的的程程序序构构造造被被称称为选择构构造造分分支支、构构造造。C言言语提提供供了了两两种种控控制制语句句来来实现这种种选择构构造造:if条条件件语句和句和switch开关开关语句。句。3.1 选择构造的概念选择构造的概念普通高等教育普通高等教育“十一五十一五”国家国家级规划教材划教材3.2 if 语句语句 选择构构造造程程序序设计中中条条件件语句句的的作作用用是是,使使程程序序按按某某种种条条件件有有选择地地执行行一一条条或或多多条条语句句。用用if语句句可可以以构构成成选择分分支支构构造造。它它根根据据给定定的的条条件件进展展判判别,以以决决议执行行某个分支程

8、序段。某个分支程序段。C言言语的的if语句有三种根本方式。句有三种根本方式。普通高等教育普通高等教育“十一五十一五”国家国家级规划教材划教材3.2 if语句语句3.2.1 if语句的三种方式语句的三种方式1. 第第一一种种方方式式(单单分分支支选选择择构造构造) 语句格式如下:语句格式如下: if(表达式表达式) 语句;语句; 语语句句功功能能:首首先先计计算算表表达达式式的的值值,假假设设表表达达式式的的值值为为真真(非非0),那那么么执执行行语语句句;假假设设表表达达式式的的值值为为假假0,那那么么该该语语句句不不起起作作用用,继继续续执执行行下下面面的的语语句句。其其流流程程图图和和N-

9、S图描画,如图图描画,如图3-2所示。所示。普通高等教育普通高等教育“十一五十一五”国家国家级规划教材划教材例例3.1 恣意输入两个整数,输出其中的大数。恣意输入两个整数,输出其中的大数。(a) 流程图描画流程图描画 (b) N-S图描画图描画 3.2 if语句语句普通高等教育普通高等教育“十一五十一五”国家国家级规划教材划教材程序运程序运转结果:果:input a,b=5,3 max=5#include void main() int a,b,max; /* 定义整型变量定义整型变量a,b,max */ printf(input a,b=); /* 输出提示信息输出提示信息 */ scanf

10、(%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语句语句普通高等教育普通高等教育“十一五十一五”国家国家级规划教材划教材例例3.2 输入入一一个个成成果果,当当成成果果60时,输出出“Pass!,否否那那么么什什么都不么都不输出。出。#include void main() float score; /* 定定义义整整

11、型型变变量量score,用用以以表表示示成成果果 */ printf(input score:); /* 输出提示信息输出提示信息 */ scanf(%f,&score); /* 从键盘输入一个成果从键盘输入一个成果 */ if(score=60) /* 判别成果能否大于等于判别成果能否大于等于60分分*/ printf(Pass!); /* 成成果果大大于于等等于于60分分,输输出出Pass! */ 程序运程序运转结果:果:input score:75 Pass! /* 成成果果大大于于等等于于60分分输出出Pass! */input score:55 /* 成成果果小小于于60分分什什么么

12、都都不不输出出 */input score:95 Pass! /* 成果大于等于成果大于等于60分分输出出Pass! */3.2 if语句语句普通高等教育普通高等教育“十一五十一五”国家国家级规划教材划教材2第二种方式第二种方式 双分支双分支选择选择构造构造 语语句格式:句格式: if(表达式表达式) 语语句句1; else 语语句句2; 语语句句功功能能:首首先先计计算算表表达达式式的的值值,假假设设表表达达式式的的值值为为真真(非非0),那那么么执执行行语语句句1,否否那那么么执执行行语语句句2。流流程程图图和和NS图图描描画画如如下下图图。(a) 流程图描画流程图描画 (b) N-S图描

13、画图描画 3.2 if语句语句普通高等教育普通高等教育“十一五十一五”国家国家级规划教材划教材例例3.3 恣意输入两个整数,输出其中的大数。恣意输入两个整数,输出其中的大数。(a) 流程图描画流程图描画 (b) N-S图描画图描画 3.2 if语句语句普通高等教育普通高等教育“十一五十一五”国家国家级规划教材划教材#include void main() int a,b; /* 定义整型变量定义整型变量a,b */ printf(input a,b=); /* 输出提示信息输出提示信息 */ scanf(%d,%d,&a,&b); /* 从键盘输入从键盘输入a,b的值的值 */ if(ab)

14、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!,否否那那么么输出出“Fail!。#include void main() float score; /* 定定义义整整型型变变量量score,用用以以表表

15、示示成果成果 */ printf(input score:); /* 输出提示信息输出提示信息 */ scanf(%f,&score); /* 从键盘输入一个成果从键盘输入一个成果 */ if(score=60) /* 判别成果能否大于等于判别成果能否大于等于60分分*/ printf(Pass!); /* 成成果果大大于于等等于于60分分,输输出出Pass! */ else /* 否那么成果小于否那么成果小于60分分*/ printf(Fail!); /* 成果小于成果小于60分,输出分,输出Fail! */程序运程序运转结果:果:input score:75 Pass!input scor

16、e:55 Fail! 3.2 if语句语句普通高等教育普通高等教育“十一五十一五”国家国家级规划教材划教材3第三种方式第三种方式 多分支多分支选择选择构造构造 前前两两种种方方式式的的if语语句句普普通通用用于于两两个个分分支支的的情情况况。当当有多个分支有多个分支选择时选择时,可采用以下多分支,可采用以下多分支选择选择构造。构造。 语语句格式:句格式: if(表达式表达式1) 语语句句 1; else if(表达式表达式2) 语语句句 2; else if(表达式表达式3) 语语句句 3; else if(表达式表达式n) 语语句句 n; else 语语句句 n+1; 语句句功功能能:首首先

17、先计算算表表达达式式1的的值,假假设表表达达式式1的的值为真真(非非0),那那么么执行行语句句1,否否那那么么计算算表表达达式式2的的值,假假设表表达达式式2的的值为真真(非非0),那那么么执行行语句句2,否否那那么么计算算表表达达式式3的的值,假假设表表达达式式3的的值为真真非非0,那那么么执行行语句句3,一一切切的的表表达达式式的的值都是都是0时,执行行语句句n+1。3.2 if语句语句普通高等教育普通高等教育“十一五十一五”国家国家级规划教材划教材(a) 流程图描画流程图描画 3.2 if语句语句普通高等教育普通高等教育“十一五十一五”国家国家级规划教材划教材 图图3-6 多分支选择构造

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

19、f(input score:); scanf(%f,&score); if(score60) /* 判别成果能否小于判别成果能否小于60分分 */ printf(Fail!); /* 成果小于成果小于60分,输出分,输出Fail! */ else if(score70) /* 判别成果能否小于判别成果能否小于70分分 */ printf(Pass!); /* 成果小于成果小于70分,输出分,输出Pass! */ else if(score80) /* 判别成果能否小于判别成果能否小于80分分 */ printf(Good!); /* 成果小于成果小于80分,输出分,输出Good! */ els

20、e /* 否那么成果大于等于否那么成果大于等于80分分 */ printf(Very Good!); /*成成果果大大于于等等于于80分分,输输出出Very Good! */程序运程序运转结果:果: input score:55 Fail! input score:65 Pass! input score:95 Very Good! 3.2 if语句语句普通高等教育普通高等教育“十一五十一五”国家国家级规划教材划教材关于关于if语句的句的阐明和本卷明和本卷须知:知: 表表达达式式普普通通为关关系系表表达达式式或或逻辑表表达达式式,C言言语在在进展展判判别时,只只需需表表达达式式的的值不不为0,

21、就就以以为是是真真。因因此此,表表达达式式可可以以是是恣恣意意类型型的的表表达达式式整整型型、实型型、字字符符型型等等。例例如:如: if(c=getchar( ) printf(%c,c); 输入入一一个个字字符符,赋给变量量c,只只需需输入入的的不不是是0,就,就输出出输入的字符。入的字符。3.2 if语句语句普通高等教育普通高等教育“十一五十一五”国家国家级规划教材划教材关于关于if语句的句的阐明和本卷明和本卷须知:知: 当当条条件件表表达达式式是是一一个个简单变量量时,常常用用如如下下两种两种简 化方式。化方式。 例如:例如: if(x!=0) 可可简化成化成 if(x) if(x=0

22、) 可可简化成化成 if(!x) if语句句中中的的“语句句从从语法法上上讲只只能能是是一一条条语句句,而而不不能能有有多多条条语句句。假假设有有多多条条语句句的的话,就要用花括号括起来,就要用花括号括起来组成一个复合成一个复合语句。句。3.2 if语句语句普通高等教育普通高等教育“十一五十一五”国家国家级规划教材划教材例例3.6 恣恣意意输输入入2个个整整数数,按按代代数数值值从从小小到到大大的的顺顺序序输输出出这这2个个整整数。数。#include void main() int a,b,t; /* 定义整型变量定义整型变量a,b,t */ printf(input a,b=); /* 输

23、出提示信息输出提示信息 */ 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语句语句普通高等教育普通高等教育“十一五十一五”国家国家级规划教材划教材在程序中,假设将在程序中,假设将 if(ab) t=a; a=b; b=t; 写成:写成: if(ab) t=a; a=b

24、; 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(%d%5dn,a,b);例例3.6 恣恣意意输输入入2个个整整数数,按按代代数数值值从从小小到到大大的的顺顺序序输输出出这这2个个整整数。数。3.2

25、 if语句语句普通高等教育普通高等教育“十一五十一五”国家国家级规划教材划教材 在在 if 语语句句中中又又包包含含一一个个或或多多个个if语语句句,称称为为 if 语语句的嵌套。其普通方式如下:句的嵌套。其普通方式如下: if(表达式表达式1) if(表达式表达式2) 语句语句1; else 语句语句2; else if(表达式表达式3) 语句语句3; else 语句语句4;3.2.2 if 语句的的嵌套语句的的嵌套3.2 if语句语句普通高等教育普通高等教育“十一五十一五”国家国家级规划教材划教材3.2 if语句语句普通高等教育普通高等教育“十一五十一五”国家国家级规划教材划教材 在在嵌嵌

26、套套的的if语语句句中中规规定定,else总总是是与与它它上上面面最最近近的的尚尚未未与与else配配对对的的if配配对对。因因此此,在在运运用用if语语句句嵌嵌套套的的时时候候,该该当当留留意意if与与else的的配配对对关关系系。例例如如,对于下面的方式:对于下面的方式: if(表达式表达式1) if(表达式表达式2) 语句语句1; else if(表达式表达式2) 语句语句2; else 语句语句3; 程程序序设设计计者者希希望望第第三三行行的的else与与第第一一行行的的if对对应应,但但实实践践上上else总总是是与与它它前前面面最最近近的的未未配配对对的的if配配对对,因因此此第第

27、三三行行的的else是是与与第第二二行行的的if配配对对,由由于于它它们们相相距距最最近近。所所以以内内嵌嵌套套的的if语语句句也也包包含含else部部分分,假假设设if与与else的的数数目目不不能能一一致致,为为实实现现程程序序设设计计者者的的意意图图,可可以以加加花括号来确定配对关系。例如:花括号来确定配对关系。例如: if(表达式表达式1) if(表达式表达式2) 语句语句1; else 语句语句2;3.2 if语句语句普通高等教育普通高等教育“十一五十一五”国家国家级规划教材划教材例例3.7 修正例修正例3.4,排除不能够的分数。,排除不能够的分数。 例例 3.4 并并不不是是一一个

28、个完完好好的的程程序序,它它要要求求输输入入的的分分数数应应该该是是 0100 之之间间,否否那那么么不不能能给给出出正正确确结结果果。例例如如输输入入 -5 或或 101 ,都都将将被被以以为为是是不不正正确确的的。运运用用嵌嵌套套的的 if 语语句句那那么么可可以以排排除除不不能能够够的分数。的分数。3.2 if语句语句普通高等教育普通高等教育“十一五十一五”国家国家级规划教材划教材#include void main() float score; /* 定定义义整整型型变变量量score,用用以以表表示示成果成果 */ printf(input score:); /* 输出提示信息输出提

29、示信息 */ scanf(%f,&score); /* 从键盘输入一个成果从键盘输入一个成果 */ if(score=0&score=60) /* 判别成果能否大于等于判别成果能否大于等于60分分*/ printf(Pass!); /* 成成果果大大于于等等于于60分分,输输出出Pass! */ else /* 否那么成果小于否那么成果小于60分分*/ printf(Fail!); /* 成果小于成果小于60分,输出分,输出Fail! */ else printf(nError score!); /*提示输入数据有误提示输入数据有误*/程序运程序运转结果:果:input score:75 Pa

30、ss!input score:155 Error score!3.2 if语句语句普通高等教育普通高等教育“十一五十一五”国家国家级规划教材划教材 本本例例是是在在ifelse方方式式的的if分分支支中中又又嵌嵌套套了了一一个个ifelse语句句。前前面面引引见的的很很多多程程序序都都未未对输入入的的数数据据能能否否符符合合实践践情情况况进展展判判别,这其其实不不是是一一种种好好的的设计思思想想。好好的的程程序序设计者者应该了了解解一一切切被被处置置的的数数据据的的范范围,假假设用用户输入入的的数数据据不在正确范不在正确范围内,内,应该提示用提示用户输入数据有入数据有误。3.2 if语句语句普

31、通高等教育普通高等教育“十一五十一五”国家国家级规划教材划教材例例3.8 有一分段函数有一分段函数编写程序,要求输入一个编写程序,要求输入一个x值,输出值,输出y值。值。 3.2 if语句语句普通高等教育普通高等教育“十一五十一五”国家国家级规划教材划教材3.2 if语句语句普通高等教育普通高等教育“十一五十一五”国家国家级规划教材划教材(b) N-S图描画图描画3.2 if语句语句普通高等教育普通高等教育“十一五十一五”国家国家级规划教材划教材3.2 if语句语句普通高等教育普通高等教育“十一五十一五”国家国家级规划教材划教材#include #include void main() flo

32、at 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的值的值 */ 程序运程序运转结果:果:input x=-3.0 x=-3.000,y=3.000input x=8.0 x=8.000,y=29.0003.2 if语句语句普通高等教育普通高等教育“十一五十一五”国家国家级规划教材划教材3.3 switch语句语句 前前面面引引

33、见见的的if语语句句,常常用用于于两两种种情情况况的的选选择择构构造造,要要表表示示两两种种以以上上条条件件的的选选择择构构造造,那那么么要要用用if语语句句的的嵌嵌套套方方式式,但但假假设设嵌嵌套套的的if语语句句比比较较多多时时,程程序序比比较较冗冗长长且且可可读读性性降降低低。在在C言言语语中中,可可直直接接用用switch语语句句来来实实现现多多种种情情况的选择构造。况的选择构造。普通高等教育普通高等教育“十一五十一五”国家国家级规划教材划教材 在在C言言语语中中,可可直直接接用用switch语语句句来来实实现现多多种种情情况况的选择构造。其普通方式如下:的选择构造。其普通方式如下:

34、switch(表达式表达式) case 常量常量1:语句:语句1; case 常量常量2:语句:语句2; case 常量常量3:语句:语句3; case 常量常量n:语句:语句n; default 语句语句n+1; /*根据需求可有可无根据需求可有可无*/ 3.3 switch语句语句普通高等教育普通高等教育“十一五十一五”国家国家级规划教材划教材switch语句的执行过程:语句的执行过程: 首首先先计计算算表表达达式式的的值值,并并逐逐个个与与case后后面面的的常常量量的的值值相相比比较较,当当表表达达式式的的值值与与某某个个常常量量的的值值相相等等时时,即即执执行行其其后后的的语语句句,

35、然然后后不不再再进进展展判判别别,继继续续执执行行后后面面一一切切case后后面面的的语语句句。如如表表达达式式的的值值与与一一切切case后后面面的的常常量量的的值值均均不不相相等等时时,那那么么执执行行default后后面面的的语语句。句。图图3-10 switch语句的执行过程语句的执行过程3.3 switch语句语句普通高等教育普通高等教育“十一五十一五”国家国家级规划教材划教材 switch(class) case A:printf(GREAT!n); case B:printf(GOOD!n); case C:printf(OK!n); case D:printf(NO!n); d

36、efault:printf(ERROR!n); 假假设设class的的值值为为B,那那么么输输出出结结果果是:是: GOOD! OK! NO! ERROR! 假假设设class的的值值为为D,那那么么输输出出结结果果是:是: NO! ERROR! 假假设设class的的值值为为F,那那么么输输出出结结果果是:是: ERROR! 从例题可以看到,从例题可以看到,switch语句的功能是:语句的功能是: 根据根据 switch 后面后面表达式的值找到匹表达式的值找到匹配的入口处,就从配的入口处,就从此入口处开场执行此入口处开场执行下去,不再进展判下去,不再进展判别。别。例如:例如: 3.3 swi

37、tch语句语句普通高等教育普通高等教育“十一五十一五”国家国家级规划教材划教材关于关于switch语句的句的阐明和本卷明和本卷须知:知: switch后后面面圆括括号号内内表表达达式式以以及及case后后面面的的常常量量的的值必必需需为整整型型、字字符符型型或或枚枚举类型型,并并且且每每个个case后后面面常常量量的的类型型应该与与switch后面后面圆括号内表达式的括号内表达式的类型一致。型一致。 case后后面面常常量量的的值必必需需互互不不一一样,否否那么会出那么会出现相互矛盾的景象。相互矛盾的景象。3.3 switch语句语句普通高等教育普通高等教育“十一五十一五”国家国家级规划教材划

38、教材 多个多个case可以共用一可以共用一组执行行语句。句。 例如:例如: switch(ch) case A: case B: case C: printf(=60n); 该switch语句句表表示示当当ch的的值为A、B、C时,都都会会执行行printf(=60n); 语句。句。 case和常量之和常量之间要有空格。要有空格。 case和和default可以出如今任何位置,其先后次序不影响可以出如今任何位置,其先后次序不影响执行行 结果,但果,但习惯上将上将default放在放在switchcase构造的底部。构造的底部。3.3 switch语句语句普通高等教育普通高等教育“十一五十一五”

39、国家国家级规划教材划教材例例3.9 从从键键盘盘上上输输入入一一个个大大写写字字母母,假假设设字字母母为为A输输出出GOOD!,字字母母为为B输输出出OK!,字字母母为为C输输出出NO!,输输入入其其它它字字母母,输输出出ERROR!。 #include void main() char ch; printf(input 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:

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

41、OOD!n); break; case B: printf(OK!n); break; case C: printf(NO!n); 不不影影响响执执行行的的效效果果。但但需需求求留留意意的的是是,当当case与与default的的顺顺序序或或各各case之之间间的的顺顺序序改改动动后后,有有关关case或或default后后面面的的语语句句能能够够要要做做一一些些修修正正。例例如如,在在上上述述修修正正中中,要要在在原原default中中的的语语句句后加一个后加一个break语句,原语句,原case C后面的后面的break语句可以去掉。语句可以去掉。3.3 switch语句语句普通高等教育普

42、通高等教育“十一五十一五”国家国家级规划教材划教材程序段的运程序段的运转结果:果:x=1,y=0x=2 switch构构造造可可以以嵌嵌套套,即即在在一一个个switch语句句中中嵌嵌套套另另一一个个switch语句句,这时可可以以用用break语句句使使流流程程跳跳出出switch构构造造,但但是要留意是要留意break只能跳出最内只能跳出最内层的的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

43、: printf (x=2n); 3.3 switch语句语句普通高等教育普通高等教育“十一五十一五”国家国家级规划教材划教材例例 3.10 从键盘上输入一个数字,输出一个有关星期几的英从键盘上输入一个数字,输出一个有关星期几的英 文单词。文单词。图图3-11 例例3.10的流程图描画的流程图描画3.3 switch语句语句普通高等教育普通高等教育“十一五十一五”国家国家级规划教材划教材#include void main() int a; printf(input integer number:); scanf(%d,&a); switch(a) /* a逐个与逐个与case后面的常量进展匹

44、配后面的常量进展匹配 */ case 1: printf(Mondayn); break; /* 假假设设a=1,那那么么输输出出给给定定的的字字符符串串,并并跳出跳出switch语句语句 */ case 2: printf(Tuesdayn); break; /* 假假设设a=2,那那么么输输出出给给定定的的字字符符串串,并并跳出跳出switch语句语句 */ case 3: printf(Wednesdayn); break; /*假假设设a=3,那那么么输输出出给给定定的的字字符符串串,并跳出并跳出switch语句语句 */ case 4: printf(Thursdayn); brea

45、k; /* 假假设设a=4,那那么么输输出出给给定定的的字字符符串串,并跳出并跳出switch语句语句 */ case 5: printf(Fridayn); break; /* 假假设设a=5,那那么么输输出出给给定定的的字字符符串串,并并跳出跳出switch语句语句 */ case 6: printf(Saturdayn); break; /* 假假设设a=6,那那么么输输出出给给定定的的字字符符串串,并跳出并跳出switch语句语句 */ case 7: printf(Sundayn); break; /* 假假设设a=7,那那么么输输出出给给定定的的字字符符串串,并并跳出跳出switc

46、h语句语句 */ default: printf(input error!n); /* 假假设设a匹匹配配不不胜胜利利,那那么么输输出出输输入入有误信息有误信息 */ 结果:果: input integer number: 5 Friday input integer number: 55 input error!思思索索:假假设将将程程序序中中的的一一切切break语句句去去掉掉,程程序序的的结果果会会正正确确吗?假假设不不正正确确将将会会出出现什什么么情情况况?3.3 switch语句语句普通高等教育普通高等教育“十一五十一五”国家国家级规划教材划教材3.4 3.4 程序举例程序举例普通高

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

48、:); 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 /* 否那么否那么输输出其他字符出其他字符 */ printf(This is another character

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

50、为 。3当当 时,时, 时,有两个不相等的实根。时,有两个不相等的实根。 时,有两个相等的实根。时,有两个相等的实根。 时,有两个共轭复根。时,有两个共轭复根。3.4 程序举例程序举例普通高等教育普通高等教育“十一五十一五”国家国家级规划教材划教材 (a) 流程流程图描画描画3.4 程序举例程序举例普通高等教育普通高等教育“十一五十一五”国家国家级规划教材划教材(b) N-S图描画图描画3.4 程序举例程序举例普通高等教育普通高等教育“十一五十一五”国家国家级规划教材划教材#include #include void main() float a,b,c,d,r,p; /* 定定义义单单精精度

51、度实实型型变变量量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等等于于0,那那么么方方程无解程无解 */ else printf(x=%fn,-c/b); /* 假假设设a=0,b0,那那么么方方程程有有一一个个

52、实实根根 */ 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那么方程有两个共那么方程有两个共轭轭复根复根 */ printf(x1=%f+%finx2=%f-%

53、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 程序举例程序举例普通高等教育普通高等教育“十一五十一五”国家国家级规划教材划教材例例 3.13 编写写根根据据输入入的的学学生生成成果果判判别等等级的的程程序序,即即从从键盘上上输入入一一个个学学 生的百分制成果生的百分制成果赋值给变量

55、量score,按以下要求,按以下要求输出其等出其等级。 score90 等等级为A 80score90 等等级为B 70score80 等等级为C 60score70 等等级为D score60 等等级为E 此此问题可可以以用用else if语句句编程程处理理,在在这里里用用switch语句句来来编程程处理理。根根据据标题要要求求,假假设score90,score能能够是是90,91,92,98,99,100,把把这些些值都都列列出出来来过于于繁繁杂,可可以以利利用用两两个个整整数数相相除除,结果果自自动取取整整的的方方法法,即即当当90score100时,score/10只只需需10和和9两

56、两种种情情况况,这样用用switch语句句来来处理便理便简便了。便了。3.4 程序举例程序举例普通高等教育普通高等教育“十一五十一五”国家国家级规划教材划教材图图3-14 例例3.13的流程图描画的流程图描画3.4 程序举例程序举例普通高等教育普通高等教育“十一五十一五”国家国家级规划教材划教材程序运程序运转结果:果:input a score(0-input a score(0-100):75100):7575:75:C C#include void main( ) int score,grade; printf(input a score(0-100):); scanf(%d,&score

57、); 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,等等级为级为B */ case 7: printf(%d: Cn,score);break; /*70score80,等等级为级为C */ case 6: printf(

58、%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 程序举例程序举例普通高等教育普通高等教育“十一五十一五”国家国家级规划教材划教材例例3.14 四四那那么么运运算算程程序序。用用户户输输入入两两个个运运算算量量及及一一个个运算符,输出运算结果。

59、运算符,输出运算结果。 首首先先输输入入参参与与运运算算的的两两个个数数和和一一个个运运算算符符号号,然然后后根根据据运运算算符符号号来来做做相相应应的的运运算算,但但是是在在做做除除法法运运算算时时,应应判判别别除除数数能能否否为为0,假假设设为为0,运运算算非非法法,给给出出错错误误提提示示。假假设设运运算算符符号号不不是是+、-、*、/,那那么么同同样样是是非非法法的的,也给出错误提示。其他情况,输出运算的结果。也给出错误提示。其他情况,输出运算的结果。3.4 程序举例程序举例普通高等教育普通高等教育“十一五十一五”国家国家级规划教材划教材图图3-15 例例3.14的流程图描画的流程图描

60、画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,ch,b的值的值 */ switch(ch) /* 根据运算符来进展相关的运算根据运

61、算符来进展相关的运算 */ 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:

62、 printf(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+(-,*,/

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

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号