版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C语言程序设计谭浩强,选择结构程序设计,第五章,第五章 选择结构程序设计,5.1 if - else 分支语句 5.2 if 分支语句 5.3 条件分支的嵌套 5.4 if - else if 分支语句 5.5 switch开关分支语句 5.6 习题,分支结构程序设计,在 C 语言程序中,条件分支结构是通过 if 语句和 switch 语句实现的。if 语句有 if、if-else 和 if-else if 三种形式。,分支结构是程序的基本结构。所谓分支结构,就是根据不同的条件,选择不同的程序块(分程序)进行处理。,if-else,ifelse 嵌套,if,if-else if,if(表达式)
2、 语句;,if (表达式) 语句; else 语句;,if(表达式) 语句; if(表达式) 语句; else 语句; else 语句;,if(表达式) 语句; else if(表达式) 语句; else if(表达式) 语句; else 语句;,switch,switch(表达式) case常量1 :语句1 ; case常量2 :语句2 ; case常量n :语句n ; default : 语句n+1 ; ,格式:,功能:,S1、S2是一个语句或分程序(程序块),也可以是空语句。,e 的结果为真(非0), 则执行 S1。 e 的结果为假 (0) , 则执行 S2。,5.1 if else 分
3、支语句,if(表达式e) 语句S1; else 语句S2; ,没有表达式,关系或逻辑表达式等,#include “stdio.h” main( ) int a,b; printf(“n Please input a and b:”); scanf(“%d,%d”, ,Please input a and b: 100,99CR min=99,运行程序,例5-1 : 输入两个整数,将较小的数输出。,5.2 if 分支语句,if ( 表达式e ) S; ,e 的结果为假 (0) , 则执行S。,e 的结果为真(非0), 则执行 S。 e 的结果为假 (0) , 则什么也不做。,格式:,功能:,if
4、 ( ! ( e ) ) S;,关系或逻辑表达式等,S是一个语句或程序块,Please input a:99 CR OK!,#include “stdio.h” main( ) int a; printf(“n Please input a:”); scanf(“%d”, ,运行程序,例5-2 : 若输入一个整数是3的倍数, 则显示“ OK!”。 否则什么也不显示。,找出错误的if语句: (1) if(xy); (2) if(xy) a=10 else a=100; (3) if(x=y) a=10; printf(“%d”,a);else a=100; (4) if(5) a=10;,(2)
5、 (3),5.3 条件分支的嵌套,if ( e1 ) if ( e2 ) S3; else S4; else if ( e3 ) S5; else S6;,入口,入口,分支嵌套应注意: if 和 else 的配对关系。 程序的走向,即程序的入口和出口、执行部分和非执行(跳出)部分。,if ( e1 ) S1; else S2;,条件分支嵌套就是在一个分支中包含(嵌套)另一个分支。,main( ) int x,y,z,min; printf(“n Please input x, y, z :”); scanf(“%d %d %d”, ,Please input x, y, z: 100 5 29
6、CR min=5,运行程序,例5-2 : 任意输入三个整数,求其中最小的数。,if ( e1 ) if ( e2 ) S1; else if ( e3 ) S2; else S3; else S4;,入口,真,e 3,e 1,e 2,S1,S2,S3,真,真,假,假,假,出口,出口,出口,出口, if 与 else 配对关系:一个 else 总是与其上面距它最近的,并且没有其它 else 与其配对的 if 相配对。, 程序的走向,即程序的入口和出口、执行部分和非执行( 跳出) 部分。, 每个if-else 有一个入口,两个出口。,if 与 else 配对关系与程序的走向:,S4,if ( e1
7、 ) if ( e2 ) s1; else if ( e3 ) s2; else s3;,入口,出口,if 与 else 配对关系:,例如:,例:假定a=b=c=0,x=35,下列程序段执行后, x的值是: if(!a) x-; else if(b); if(c)x=3; else x=4; A) 34 B) 4 C)35 D)3,答案: B,5.4 if-else if 分支语句,if ( e1 ) S1; else if ( e2 ) S2; else if ( e3 ) S3; . else if ( en ) Sn; else Sn+1;,if - else if 结构是条件分支嵌套常
8、用的一种形式。 其一般形式为:,例5-3:计算并输出y的值 3x-1 x=25,#include “stdio.h” #include “math.h” main( ) float x,y; scanf(“%f”, ,=90, A. (90-100)。 =80, B. (80-89)。 =70, C. (70-79)。 =60, D. (60-69)。 =0, E. (0-59)。,main( ) float score; printf(“n Enter a score(0-100):”); scanf(“%f”, ,例 5-4 :学生成绩分A、B、C、D、E 五等。任给一个成绩,判断它属于哪
9、一等,用 if-else if 分支语句编程。,5.5 switch 开关分支,在计算机程序设计中,实际问题常常需要用到多分支的选择。 if 语句只能有两个分支可供选择,不能满足多分支的需要。 if-else if 嵌套形式可以满足要求。但也可选用switch语句,switch是多分支选择语句。,其中, e是表达式。c1、是常量表达式。S1、S2Sn、Sn+1是一个语句或程序块。,开关分支是分支结构的另一种形式,该语句执行时它根据条件的取值来选择程序中的一个分支。switch 分支语句形式如下:,switch ( e ) case 判断值c1: S1; break; case 判断值c2: S
10、2; break; case 判断值cn: Sn; break; default : Sn+1; break; ,main( ) char a; printf(“Please input the salary level n ”); printf(“Between 1 to 5, which is char type. n”); scanf(“%c”, ,例 5-5 : 输出不同工资水平的税率。,switch ( e ) case c1: S1; break; case c2: S2; break; case cn: Sn; break; default : Sn+1; break; ,例:
11、main( ) char a; switch (5+6/3) . . switch (a ) . . ,常量表达式,字符型变量,switch 后面的e表达式 可以是整型常量或变量、字符型常量或变量、枚举类型表达式。其结果值必须是整型数据或字符型数据。,使用 switch-case 分支语句时,应注意以下几点:,switch ( e ) case c1: S1; break; case c2: S2; break; case cn: Sn; break; default : Sn+1; break; ,例: case 1: case a: case 120:,(2) case后面的ci 为常量表
12、达式, 可以是一个整型、字符型常量数据或枚举常量。,switch ( e ) case c1: S1; break; case cn: Sn; break; default : Sn+1; break; case c2: S2; break; ,(3) 各个case及default (default 之后有break语句时) 的次序是任意的,但各case后的常量(判断)值必须不同。,次序任意,switch ( e ) case c1: S1; break; case c2: S2; break; case cn: Sn; break; ,建议使用它。增加 default 会给 switch 分
13、支的逻辑检查带来方便。,(4) 在switch开关分支语句结构中, default部分不是必须的, 如果没有default部分, 则当e表达式的值与各case后的ci常量表达式的值都不一致时, 则程序不执行该结构中的任何部分。,例:switch ( c ) case A: uppernum+; case a: lowernum+; default: sum+; ,1. 若c的取值是A,则三个分支即 uppernum+、lowernum+、 sum+都被执行 2. 若c的取值是a,则最后两个分支即 lowernum+、sum+被执行 3. 若c的取值即不是A也不是a,则只执行 sum+,(5)
14、各分支语句中的 break 语句作用是控制程序退出 switch 结构。若程序没有break语句,则程序将继续执行下面一个case中的程序块。,(6) 在开关分支语句中,最后的 break语句也可以省略(其作用也就消失),一般情况应使用它。,switch ( e ) case c1: S1; break; case c2: S2; break; case cn: Sn; break; default : Sn+1; break; ,最后的break语句可 省略,但建议使用它,例:switch ( c ) case 1: case 2: case 3: printf(“taxis=30% n”)
15、; break; case 4: printf(“taxis=8% n”); break; default : printf(“taxis=0% n”); break; 程序中case 1、 case 2 和 case 3共用case 3语句。,(7) 在switch开关分支语句结构中, 如果几种情况(多个表达式取值)都执行相同的程序块时, 则对应的多个case可共同使用同一个程序块。,(8) switch语句用来实现多分支结构,条件判断如果有两个以上基于同一个数据类型变量的条件表达式时,选用 switch 语句比选用if-else if 语句的嵌套形式更方便。,main( ) int c,g
16、rade; printf(input grade(0-100): ); scanf(%d, break: ,input grade (0-100):89 grade B,运行程序,例: 5-6 根据百分成绩,输出等级成绩 A B C D E。用switch分支语句编程。,main( ) int grade; printf(input grade(0-100):); scanf(“%d”, ,例5-7: 用if-else if根据百分成绩, 输出等级 A B C D。 100或者0: 出错, 90-100: A, 80-89: B,70-79: C, 60-69: D, 60: 不及格。,运行程
17、序,main( ) int a=2,b=7,c=5; switch(a0) case 1: switch(b0) case 0: printf(“!”); break; case 1: printf(“”); break; default: printf(“+”); break; break; case 0: switch (c= =5) case 0: printf(“*”); break; case 1: printf(“#”); break; default: printf(“$”); break; break; default: printf(“ ,例:5-8 读下面的程序,写出程序的
18、输出结果。,如果没有break结果?,如果这里也没有break结果?,! !# !# scanf(%f,%f,%f, ,ax2+bx+c=0,P=b2-4ac,P0,P0,例:5-9 求一元二次方程根的解。,else rpart=(-b)/(2*a); ipart=sqrt(fabs(p)/(2*a); printf(“There are two complex roots:”); printf(“nx1=%f+%f i”,rpart,ipart); printf(“nx2=%f-%f i”,rpart,ipart); ,缩排良好的写作习惯,缩排是书写程序的一种方法。即语句相对于上一条语句后退
19、若干个字符位置的书写方法(像写文章,每个段落的开始均缩进两个字的位置)。 缩排的目的是使源程序的层次清晰明了,增加源程序的可读性。,main( ) int x,y,z,max; printf(“n Please input x,y,z :”); scanf(“%d %d %d”, ,例如: 在分支程序中,用缩排的书写方法,可清楚的看出程序的条件为真、条件为假时,程序的分支情况。,习题 5.1 什么是算术运算?什么是关系运算?什么是逻辑运算? 5.2 C语言中如何表示“真”和“假”?系统如何判断一个量的“真”和“假”? 5.3 写出下面各逻辑表达式的值。设a=3,b=4,c=5。 (1) abc & b=c
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广东省江门市鹤山市实验中学2025-2026学年九年级上学期第二次月考数学试题(含答案)
- 甘肃省2025-2026学年高一(上)期末物理试卷(含答案)
- 河南省许昌市鄢陵县彭店镇王铁学校2025-2026学年六年级上册英语期末试题(含答案无听力原文无听力音频)
- 西师大版四年级数学上册期中考试卷及答案【真题】
- 脑肿瘤切片科普
- 雅安市雨城区陇西河流域水生态治理项目环境影响报告书
- 肾结石考试题目及答案
- 乳腺外科考试试题及答案
- 小儿肺炎的护理干预效果评价方法
- 氧疗与吸氧护理
- 青年积分培养管理办法
- 市级应急广播管理制度
- 智慧检验与大数据分析知到智慧树期末考试答案题库2025年温州医科大学
- T/CPPC 1032-2021建筑生产资源分供商评价规范
- 机耕合同协议书范本简单
- 送车免责合同协议书模板
- 琼脂糖-纤维素复合分离介质
- 2025年招商引资项目可行性研究报告范文
- 常见的盐(第1课时)-九年级化学人教版(2024)下册
- 大棚转让合同范本
- T-ZSA 232-2024 特种巡逻机器人通.用技术要求
评论
0/150
提交评论