




已阅读5页,还剩59页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
普通高等教育“十一五” 国家级规划教材 第4章 选择结构程序 设计 顺顺序结结构程序由各种基本语语句组组成,并严严格 按照语语句的书书写顺顺序执执行。在解决实际问题实际问题 的 过过程中,常常需要程序根据对对某个特定条件的测测 试试来决定下一步要进进行的操作。为为此,C 语语言提 供了可以进进行程序流程选择选择 控制的语语句,这这些语语 句构成的程序结结构称为选择结为选择结 构,也称为为分支结结 构,是结结构化程序设计设计 的三种基本结结构之一。本 章主要介绍选择结绍选择结 构语语句。 普通高等教育“十一五” 国家级规划教材 4.1 选择结构的概念 4.2 if语语句 4.3 switch 语句 4.4 程序举例 第4章 选择结构程序 设计 普通高等教育“十一五” 国家级规划教材 4.1 选择结构的概念 到目前为止,所介绍的程序都属于顺序结构,顺 序结构程序中的所有语句都将被按照书写的顺序执行 一次。但是在实际应用中,常常需要根据不同情况选 择不同的执行语句,这时需要设计分支结构。 例如,在前面我们介绍了用海伦公式求三条边长 分别为 3、4、5 的三角形的面积。该程序的局限性很 大,它不能判别三边长度是否满足构成三角形的条件 。为此,将该问题的算法用流程图和N-S图描述,如 图3-1所示。 普通高等教育“十一五” 国家级规划教材 图3-1 使用海伦公式求三角形面积的流程图和N-S图描述 4.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的值*/ if(a void main() int a,b,max; /* 定义整型变量a,b,max */ printf(“input a,b=“); /* 输出提示信息 */ scanf(“%d,%d“, /* 从键盘输入a,b的值 */ max=a; /* 把a的值赋给变量max */ if(max void main() float score; /* 定义整型变量score,用以表示成绩 */ printf(“input score:“); /* 输出提示信息 */ scanf(“%f“, /* 从键盘输入一个成绩 */ if(score=60) /* 判断成绩是否大于等于60分*/ printf(“Pass!“); /* 成绩大于等于60分,输出Pass! */ 程序运行结果: input score:75 Pass! /* 成绩大于等于60分输出Pass! */ input score:55 /* 成绩小于60分什么都不输出 */ input score:95 Pass! /* 成绩大于等于60分输出Pass! */ 4.2 if语句 普通高等教育“十一五” 国家级规划教材 2第二种形式(双分支选择结构) 语句格式: if(表达式) 语句1; else 语句2; 语句功能:首先计算表达式的值,若表达式的值为真(非0),则 执行语句1,否则执行语句2。流程图和NS图描述如图所示。 (a) 流程图描述 (b) N-S图描述 4.2 if语句 普通高等教育“十一五” 国家级规划教材 例4.3 任意输入两个整数,输出其中的大数。 (a) 流程图描述 (b) N-S图描述 4.2 if语句 普通高等教育“十一五” 国家级规划教材 #include void main() int a,b; /* 定义整型变量a,b */ printf(“input a,b=“); /* 输出提示信息 */ scanf(“%d,%d“, /* 从键盘输入a,b的值 */ if(ab) printf(“max=%dn“,a); /* 若ab,则把a赋给max并输出*/ else printf(“max=%dn“,b); /*若a void main() float score; /* 定义整型变量score,用以表示成绩 */ printf(“input score:“); /* 输出提示信息 */ scanf(“%f“, /* 从键盘输入一个成绩 */ if(score=60) /* 判断成绩是否大于等于60分*/ printf(“Pass!“); /* 成绩大于等于60分,输出Pass! */ else /* 否则成绩小于60分*/ printf(“Fail!“); /* 成绩小于60分,输出Fail! */ 程序运行结果: input score:75 Pass! input score:55 Fail! 4.2 if语句 普通高等教育“十一五” 国家级规划教材 4第三种形式(多分支选择结构) 前两种形式的if语句一般用于两个分支的情况。当有多个分 支选择时,可采用下列多分支选择结构。 语句格式: if(表达式1) 语句 1; else if(表达式2) 语句 2; else if(表达式3) 语句 3; else if(表达式n) 语句 n; else 语句 n+1; 语句功能:首先计算表达式1的值,若表达式1的值为真(非0),则执行语句 1,否则计算表达式2的值,若表达式2的值为真(非0),则执行语句2,否则计 算表达式3的值,若表达式3的值为真(非0),则执行语句3,所有的 表达式的值都是0时,执行语句n+1。 4.2 if语句 普通高等教育“十一五” 国家级规划教材 (a) 流程图描述 4.2 if语句 普通高等教育“十一五” 国家级规划教材 图3-6 多分支选择结构的执行过程 (b) N-S图描述 4.2 if语句 普通高等教育“十一五” 国家级规划教材 例4.5 输入一个成绩,当成绩 void main() float score; printf(“input score:“); scanf(“%f“, if(score void main() int a,b,t; /* 定义整型变量a,b,t */ printf(“input a,b=“); /* 输出提示信息 */ scanf(“%d,%d“, /* 从键盘输入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 55 4.2 if语句 普通高等教育“十一五” 国家级规划教材 在程序中,如果将 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“, if(ab) t=a; a=b; b=t; printf(“%d%5dn“,a,b); 例4.6 任意输入2个整数,按代数值从小到大的顺序输出这2个整 数。 4.2 if语句 普通高等教育“十一五” 国家级规划教材 在 if 语句中又包含一个或多个if语句,称为 if 语 句的嵌套。其一般形式如下: if(表达式1) if(表达式2) 语句1; else 语句2; else if(表达式3) 语句3; else 语句4; 4.2.2 if 语句的的嵌套 4.2 if语句 普通高等教育“十一五” 国家级规划教材 4.2 if语句 普通高等教育“十一五” 国家级规划教材 在嵌套的if语句中规定, else总是与它上面最近的尚未 与else配对的if配对。因此, 在使用if语句嵌套的时候,应 当注意if与else的配对关系。 例如,对于下面的形式: if(表达式1) if(表达式2) 语句1; else if(表达式2) 语句2; else 语句3; 程序设计者希望第三行的else与第 一行的if对应,但实际上else总是与它 前面最近的未配对的if配对,因此第三 行的else是与第二行的if配对,因为它 们相距最近。所以内嵌套的if语句也包 含else部分,如果if与else的数目不能一 致,为实现程序设计者的意图,可以加 花括号来确定配对关系。例如: if(表达式1) if(表达式2) 语句1; else 语句2; 4.2 if语句 普通高等教育“十一五” 国家级规划教材 例4.7 修改例4.4,排除不可能的分数。 例 4.4 并不是一个完整的程序,它要求输入 的分数应该是 0100 之间,否则不能给出正确 结果。例如输入 -5 或 101 ,都将被认为是不正确 的。使用嵌套的 if 语句则可以排除不可能的分数 。 4.2 if语句 普通高等教育“十一五” 国家级规划教材 #include void main() float score; /* 定义整型变量score,用以表示成绩 */ printf(“input score:“); /* 输出提示信息 */ scanf(“%f“, /* 从键盘输入一个成绩 */ if(score=0 /* 成绩大于等于60分,输出Pass! */ else /* 否则成绩小于60分*/ printf(“Fail!“); /* 成绩小于60分,输出Fail! */ else printf(“nError score!“); /*提示输入数据有误*/ 程序运行结果: input score:75 Pass! input score:155 Error score! 4.2 if语句 普通高等教育“十一五” 国家级规划教材 本例是在ifelse形式的if分支中又嵌套了一个 ifelse语句。前面介绍的很多程序都未对输入的数 据是否符合实际情况进行判断,这其实不是一种好 的设计思想。好的程序设计者应该了解所有被处理 的数据的范围,如果用户输入的数据不在正确范围 内,应该提示用户输入数据有误。 4.2 if语句 普通高等教育“十一五” 国家级规划教材 例4.8 有一分段函数 编写程序,要求输入一个x值,输出y值。 4.2 if语句 普通高等教育“十一五” 国家级规划教材 4.2 if语句 普通高等教育“十一五” 国家级规划教材 (b) N-S图描述 4.2 if语句 普通高等教育“十一五” 国家级规划教材 4.2 if语句 普通高等教育“十一五” 国家级规划教材 #include #include void main() float x,y; printf(“input x=“); scanf(“%f“, 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.000 input x=8.0 x=8.000,y=29.000 4.2 if语句 普通高等教育“十一五” 国家级规划教材 4.3 switch语句 前面介绍的if语句,常用于两种情况的选 择结构,要表示两种以上条件的选择结构,则 要用if语句的嵌套形式,但如果嵌套的if语句 比较多时,程序比较冗长且可读性降低。在C 语言中,可直接用switch语句来实现多种情况 的选择结构。 普通高等教育“十一五” 国家级规划教材 在C语言中,可直接用switch语句来实现多种情况 的选择结构。其一般形式如下: switch(表达式) case 常量1:语句1; case 常量2:语句2; case 常量3:语句3; case 常量n:语句n; default 语句n+1; /*根据需要可有可无*/ 4.3 switch语句 普通高等教育“十一五” 国家级规划教材 switch语句的执行过程: 首先计算表达式的值, 并逐个与case后面的常量的 值相比较,当表达式的值 与某个常量的值相等时, 即执行其后的语句,然后 不再进行判断,继续执行 后面所有case后面的语句。 如表达式的值与所有case后 面的常量的值均不相等时 ,则执行default后面的语 句。 图3-10 switch语句的执行过程 4.3 switch语句 普通高等教育“十一五” 国家级规划教材 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! 从例题可以看到 ,switch语句的功能 是: 根据 switch 后面 表达式的值找到匹 配的入口处,就从 此入口处开始执行 下去,不再进行判 断。 例如: 4.3 switch语句 普通高等教育“十一五” 国家级规划教材 关于switch语句的说明和注意事项: switch后面圆括号内表达式以及case后面的 常量的值必须为整型、字符型或枚举类型,并且 每个case后面常量的类型应该与switch后面圆括号 内表达式的类型一致。 case后面常量的值必须互不相同,否则会 出现相互矛盾的现象。 4.3 switch语句 普通高等教育“十一五” 国家级规划教材 多个case可以共用一组执行语句。 例如: switch(ch) case A: case B: case C: printf(“=60n“); 该switch语句表示当ch的值为A、B、C时,都会执行 printf(“=60n“); 语句。 case和常量之间要有空格。 case和default可以出现在任何位置,其先后次序不影响执行 结果,但习惯上将default放在switchcase结构的底部。 4.3 switch语句 普通高等教育“十一五” 国家级规划教材 例4.9 从键盘上输入一个大写字母,若字母为A输出GOOD!,字 母为B输出OK!,字母为C输出NO!,输入其它字母,输出 ERROR!。 #include void main() char ch; printf(“input a character:“); scanf(“%c“, 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! 4.3 switch语句 普通高等教育“十一五” 国家级规划教材 也可以将程序中的switch结构改写成如下: #include void main() char ch; printf(“input a character:“); scanf(“%c“, 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后面的语句可能要做一些修改。例如,在 上述修改中,要在原default中的语句后加一个break语句,原case C后面的 break语句可以去掉。 4.3 switch语句 普通高等教育“十一五” 国家级规划教材 程序段的运行结结果 : x=1,y=0 x=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: printf (“x=2n“); 4.3 switch语句 普通高等教育“十一五” 国家级规划教材 例 4.10 从键盘上输入一个数字,输出一个有关星期几的英 文单词。 图3-11 例3.10的流程图描述 4.3 switch语句 普通高等教育“十一五” 国家级规划教材 #include void main() int a; printf(“input integer number:“); scanf(“%d“, switch(a) /* a逐个与case后面的常量进行匹配 */ 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“); break; /* 若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,则输出给定的字符串,并跳出switch语句 */ default: printf(“input error!n“); /* 若a匹配不成功,则输出输入有误信息 */ 结果: input integer number: 5 Friday input integer number: 55 input error! 思考:若将程序中的所有break语 句去掉,程序的结果会正确吗? 如果不正确将会出现什么情况? 4.3 switch语句 普通高等教育“十一五” 国家级规划教材 4.4 程序举例 普通高等教育“十一五” 国家级规划教材4.4 程序举例 例4.11 从键盘上输入一个字符,请判别输入字符的种类,即判 别它是数字字符、英文字符、空格或回车,还是其他字符。 (a)流程图描述 普通高等教育“十一五” 国家级规划教材 (b) N-S图描述 4.4 程序举例 普通高等教育“十一五” 国家级规划教材 #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 /* 定义单精度实型变量a,b,c,d,r,p */ float x1,x2; /* 定义单精度实型变量x1,x2 */ printf(“input a,b,c=“); /* 输出提示信息 */ scanf(“%f,%f,%f“, /* 从键盘输入a,b,c的值 */ if(fabs(a)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-4ac void main( ) int score,grade; printf(“input a score(0-100):“); scanf(“%d“, 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; /*80score void main( ) float a,b,result; int flag; char ch; flag=0; /* 运算合法标志flag,置
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年教师招聘之《幼儿教师招聘》题库必背100题附答案详解(综合卷)
- 2025呼伦贝尔农垦集团有限公司社会招聘50人备考含答案详解
- 2025年教师招聘之《幼儿教师招聘》基础试题库含答案详解【基础题】
- 2025内蒙古呼伦贝尔扎兰屯市教育系统“校园引才”27人笔试备考完整参考答案详解
- 教师招聘之《幼儿教师招聘》从业资格考试真题附答案详解【满分必刷】
- 教师招聘之《小学教师招聘》考试综合练习附参考答案详解(基础题)
- 教师招聘之《小学教师招聘》通关检测卷【必刷】附答案详解
- 2025年教师招聘之《小学教师招聘》通关题库及参考答案详解【考试直接用】
- 2025年教师招聘之《小学教师招聘》练习题库(夺分金卷)附答案详解
- 押题宝典教师招聘之《幼儿教师招聘》题库带答案详解(达标题)
- 导管室护理查房
- 【复习资料】08886会展心理学(章节串讲)
- 占道施工申请书怎么写范文
- 医院耗材SPD解决方案(技术方案)
- 室内工装施工方案
- 护理投诉案例分析医学课件
- 四川省家庭经济困难学生认定申请表(样表)
- Android移动应用开发高职PPT完整全套教学课件
- 中国哲学史教案
- 云计算技术及应用PPT完整全套教学课件
- 辽宁省房屋面积测量与计算细则修订稿
评论
0/150
提交评论