c语言程序设计选择结构程序设计

上传人:san****019 文档编号:70778633 上传时间:2019-01-18 格式:PPT 页数:56 大小:1.41MB
返回 下载 相关 举报
c语言程序设计选择结构程序设计_第1页
第1页 / 共56页
c语言程序设计选择结构程序设计_第2页
第2页 / 共56页
c语言程序设计选择结构程序设计_第3页
第3页 / 共56页
c语言程序设计选择结构程序设计_第4页
第4页 / 共56页
c语言程序设计选择结构程序设计_第5页
第5页 / 共56页
点击查看更多>>
资源描述

《c语言程序设计选择结构程序设计》由会员分享,可在线阅读,更多相关《c语言程序设计选择结构程序设计(56页珍藏版)》请在金锄头文库上搜索。

1、第4章 选择结构程序设计,C 语言程序设计,北京航空航天大学 交通科学与工程学院 徐国艳,2019/1/18,2,本章主要内容,4.1 关系运算符和关系表达式 4.2 逻辑运算符和逻辑表达式 4.3 if语句 4.1.1 if语句的一般形式 4.1.2 if语句的嵌套 4.4 switch语句 4.2.1 switch语句的一般形式 4.2.2 break语句 4.5 选择结构程序设计举例,2019/1/18,3,4.1 关系运算符和关系表达式 一、关系运算符及其优先顺序 1. 关系运算符:、=、= =、!=、,关系运算符的 优先级高于赋值运 算符,但低于算 术运算符,2. 优先顺序,例如:c

2、a+b等价于c(a+b) ab=c等价于(ab)=c,错误表达式,2019/1/18,4,二、关系表达式 用关系运算符将两个表达式连接起来的式子称为关系表达式,关系表达式 的值是一个逻 辑值,即“真” 或“假”,用 “1”或“0” 表示,例如:当a=1,b=2,c=3时, ab值为0,若有d=ab,则d的值为0 bc值为1,若有d=bc,则d的值为1,2019/1/18,5,4.2 逻辑运算符和逻辑表达式 一、逻辑运算符及其优先顺序 1. 逻辑运算符: 逻辑非:“!” 逻辑与:“&” 逻辑或:“|” 2. 优先顺序:参见P365附录C ( ) ! 算术 关系 位 逻辑 条件 赋值,高 低,高,

3、低,2019/1/18,6,3. 逻辑运算的真值表,2019/1/18,7,二、逻辑表达式 1. 用逻辑运算符将关系表达式或逻辑量连接起来的式子,称为逻辑表达式。 2. 逻辑表达式的运算结果,用“1”代 表“真”、“0” 代表“假”,2019/1/18,8,简单分支语句,语句一般格式 if (表达式) 语句,功能: 计算表达式的值,如果是一个非0值(即逻辑真),就执行内嵌语句,否则(即逻辑假)跳过内嵌语句,顺序执行后续语句。,4.3 if语句,2019/1/18,9,简单分支语句的算法:,例如: if (x0) m+; if ( ab ) c=a; a=b; b=c; ,2019/1/18,1

4、0,双重分支语句,语句一般格式 if (表达式) 语句1 else 语句2 功能: 计算表达式的值,如果它的值是一个非0值(逻辑真),就执行内嵌语句1,之后跳过内嵌语句2,执行后续语句;否则跳过内嵌语句1,执行内嵌语句2,之后执行后续语句。,2019/1/18,11,双重分支语句的算法:,例如: if (x0) m+; else m-; if ( ch= a ,2019/1/18,12,多重分支语句,语句一般格式 if (表达式1) 语句1 else if (表达式2) 语句2 else if (表达式m) 语句m else 语句 n 语句n+1 功能: 依次计算并判断表达式i,为非0时执行它

5、后面的语句,都为0时,执行语句n 无论执行完那个语句分支,都转到后续语句n+1,2019/1/18,13,多重分支语句的算法,流程图,2019/1/18,14,多重分支语句的算法,N-S结构图,例如: if (a0) x= -1 ; else if (a=0 ) x= 0 ; else x=1 ;,2019/1/18,15,if语句的简单应用,【例4.1】输入一个字符,如果是大写字母,则将其转换为小写字母输出,否则直接输出。,输入:用 getchar 或 scanf 函数 ch是否为大写字母: ch=A & ch=65 & ch = 90) 大写字母转换为小写字母: ch=ch+32 输出:用

6、 putchar 或 printf 函数,思路:,2019/1/18,16,程序:,#include “stdio.h“ void main( ) char ch; ch=getchar( ); if (ch=A ,程序运行情况如下: G g,可使用条件表达式代替,putchar(ch=A putchar (n);,条件运算符和条件表达式,有一种if语句,当被判别的表达式的值为“真”或“假” 时,都执行一个赋值语句且向同一个变量赋值 如:if (ab) max=a; else max=b;,max = (a b) ? a : b;,条件运算符,max = (a b) ? a : b;,条件表达

7、式,条件运算符和条件表达式,有一种if语句,当被判别的表达式的值为“真”或“假” 时,都执行一个赋值语句且向同一个变量赋值 如:if (ab) max=a; else max=b;,条件表达式的一般形式为 表达式?表达式: 表达式,条件运算符和条件表达式,条件运算符的执行顺序: 求解表达式1; 若为非0(真)则求解表达式2,此时表达式2的值就作为整个条件表达式的值; 若表达式1的值为0(假),则求解表达式3,表达式3的值就是整个条件表达式的值;,条件运算符和条件表达式,条件运算符优先于赋值运算符 条件运算符的结合方向为“自右至左” 以下为合法的使用方法: ab ? (max=a):(max=b

8、); ab ? printf(“%d”,a): printf(“%d”,b);,条件运算符和条件表达式,例4.1 输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。(用条件表达式),条件运算符和条件表达式,#include int main() char ch; scanf(“%c“, ,条件运算符和条件表达式,2019/1/18,24,4.3.2 if语句的嵌套,如果if的内嵌语句中又使用了一个if语句,则构成if语句的嵌套。,【例4.2】比较两个整数的关系。 #include void main( ) int x, y; printf

9、(“Enter integer X and Y:“); scanf (“%d%d“, ,应该正确判断: if的内嵌语句 if和else的配对,提倡锯齿形缩格书写 有利于阅读程序,2019/1/18,25,if语句嵌套的形式,简单if语句的嵌套形式 if (表达式) if 语句 双重(或多重)分支if语句的嵌套形式 if (表达式) if 语句 else if 语句,可以是各种形式的if语句,可以是各种形式的if语句,如果是简单if语句, 必须用“ ”括起,2019/1/18,26,例如:, if (c=50) printf(“50=50) printf(“50150n“); if (c=50)

10、 printf(“50=c=100n“); else printf(“c50n“),与哪个if 配对?,2019/1/18,27,再例如:,if(ab) if(ac) if(ad) m=1; else m=2; else m=3;,问题:哪一个 else 和哪一个 if 相匹配?,规则:在嵌套的ifelse语句中,else总是与上面的离它最近的尚未配对的if 配对。,2019/1/18,28,举例,【例4.3】输入一个数,判断它是奇数还是偶数,如果是奇数则进一步判断它是否为5的倍数。,2019/1/18,29,程序:,#include void main( ) int x; scanf (“%

11、d“, ,2019/1/18,30,学习if语句的难点,if else 语句的配对 正确用表达式描述条件 例如:当x大于5小于10时令x自增 if ( 5x10 ) x+;,正确判断内嵌语句 例如:if(xy) x=x+3; y=y-2; else x=x-3; y=y+2;,if (x5 , , ,2019/1/18,31,熟悉常用的if 表达式形式,例如有定义:int a=3,b=0; 下面哪个表达式执行语句“b=2 ;” ? 1: if (a=0) b=2; 2: if (a=1) b=2; 3: if (a!=0) b=2; 4: if (a=1) b=2; 5: if (a=0) b

12、=2; 6: if (a) b=2; 7: if (!a) b=2;,等价于,等价于,2019/1/18,32,4.4 switch语句,switch语句的一般形式 switch (表达式) case 常量表达式1: 语句序列1 case 常量表达式2: 语句序列2 case 常量表达式n: 语句序列n default : 语句序列n+1 功能: 计算表达式的值,与常量表达式的值比较,等于第i个值时,顺序执行语句序列i、i+1、 、 n+1 若与所有常量表达式值都不相等,执行语句序列n+1。,2019/1/18,33,switch语句的算法描述,N-S结构图,例如: switch (a) ca

13、se 5: printf(“ ,当a等于5,输出:&#$ 当a等于2,输出:#$ 当a是其他值,输出:$,2019/1/18,34,说明:,“case 常量表达式i:”等价于语句标号,计算出的表达式值等于哪个语句标号,就从哪个位置开始顺序向下执行语句序列。 语句位置影响运行结果,例如: switch (a) case 2: printf(“#“); default: printf(“$“); case 5: printf(“ ,switch与break语句结合才能实现 程序的分支,break; break; break;,2019/1/18,35,switch语句的简单应用,【例4.4】已知x

14、=100,y=15,要求输入一个算术运算符(+、-、* 或 / ),并对x和y进行指定的算术运算。,思路: 设x和y为float型变量并赋初值; 输入的运算符op为char型变量; 根据op的值(为+、-、*、/)进行x和y的相加、相减、相乘、相除运算(选择分支); 还要考虑到输入字符不是+、-、* 或 / 时的情况。,2019/1/18,36,程序:,#include “stdio.h “ #include “math.h “ void main( ) float x=100,y=15,z; char op; op=getchar( ); switch (op) case +: z=x+y;

15、 break; case -: z=x-y; break; case *: z=x*y; break; case /: z=x/y; break; default: z=0; if(fabs(z)1e-6) printf(“%f%c%f=%fn“,x,op,y,z); else printf (“%c is not an operatorn“,op); ,实型数通常不使用z=0或z!=0的比较 可用fabs(z) 代替,2019/1/18,37,注意:,switch语句的书写格式:语句体本身必须用花括号括起; case和default后面如果有多条语句,可以不必使用花括号; case和常量表达式之间必须有空格; default可以写在语句体的任何位置,也可以省略不写; break语句可以改变case的语句标号作用,终止后续case语句序列的执行。 switch语句和break语句结合,可以实现程序的选择控制(break语句还可以在循环语句中使用); 允许switch嵌套使用,但同一个switch语句中,任意两个case的常量表达式值不能相同。,2019/1/18,38,4.4 选择结构程序设计举例,【例4.5】求一元二次方程ax2+bx+c=0的根。,思路:一元二次方程的根取决于系数a,b,c 求根公式:,判别式d = b2- 4

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

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