选择结构程序设计优秀课件

上传人:re****.1 文档编号:590942913 上传时间:2024-09-16 格式:PPT 页数:53 大小:1.20MB
返回 下载 相关 举报
选择结构程序设计优秀课件_第1页
第1页 / 共53页
选择结构程序设计优秀课件_第2页
第2页 / 共53页
选择结构程序设计优秀课件_第3页
第3页 / 共53页
选择结构程序设计优秀课件_第4页
第4页 / 共53页
选择结构程序设计优秀课件_第5页
第5页 / 共53页
点击查看更多>>
资源描述

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

1、第四章第四章选选 择择 结结 构构 程程 序序 设设 计计1顺序结构与选择结构流程对照顺序结构与选择结构流程对照顺序结构与选择结构流程对照顺序结构与选择结构流程对照 顺序结构顺序结构选择结构选择结构 p代表一个条件,当代表一个条件,当p条件成立条件成立(或称为或称为“真真”)时执行时执行A,否则执,否则执行行B。注意,只能执行。注意,只能执行A或或B之一。两条路径汇合在一起然后出口。之一。两条路径汇合在一起然后出口。2 两个选择结构的程序实例:两个选择结构的程序实例:两个选择结构的程序实例:两个选择结构的程序实例: 【例】【例】if条件语句。条件语句。 if(x0) return 1; els

2、e return 1; ; 【例】【例】switch多分支选择语句。多分支选择语句。 switch (month) case 1: : case 3: : day=31; ; case 4: : case 6: : day=30; ; 34.1 if4.1 if语句语句语句语句 4.1.1 if语句的三种基本形式语句的三种基本形式 1、if结构结构 if语句语句单分支选择结构单分支选择结构单分支选择结构单分支选择结构的语法形式是的语法形式是: if(if(表达式表达式表达式表达式) ) 语句语句语句语句1 1; 【例】【例】if( x0 ) y=1; 其中其中“x0”是一个关系表达式。是一个关

3、系表达式。语义图语义图表达式表达式语句语句1非非004 【例】下列错误的语句是(【例】下列错误的语句是( )。)。 A)if(ab) printf(“%d”,a); B)if(a0) ; a=n; C)if(2) a=m; D)if(&) ;a=m;D5 【例】输入一个整数,判断其奇偶性,若为奇数就显示输出。【例】输入一个整数,判断其奇偶性,若为奇数就显示输出。按照语法含义图写出程序的流程,并编写程序代码:按照语法含义图写出程序的流程,并编写程序代码:是奇数吗?是奇数吗?用用printf语句输出语句输出否否是是6 程序如下:程序如下: #include main( ) int x; scanf

4、(“x=%d”,&x); if(x%2!=0) printf(“%d is odd numbern”,x); 运行结果:运行结果:x7 7 is odd number7 2、if else结构结构 if语句语句双分支选择结构双分支选择结构双分支选择结构双分支选择结构的语法形式为的语法形式为: if(if(表达式表达式表达式表达式) ) 语句语句语句语句1 1 ; else else 语句语句语句语句2 2 ; 【例】【例】if( x0 ) y=1; else y=-1;语义图语义图8【例】从键盘上输入两个整数,输出其中的大数。【例】从键盘上输入两个整数,输出其中的大数。【例】从键盘上输入两个整

5、数,输出其中的大数。【例】从键盘上输入两个整数,输出其中的大数。 写出选择结构的语义图:写出选择结构的语义图:写出选择结构的语义图:写出选择结构的语义图:语义图语义图xyxyxyxy输出输出x x输出输出y y9 【题目】从键盘上输入两个整数,输出其中的大数。【题目】从键盘上输入两个整数,输出其中的大数。 include main( ) int x, y; printf(“Enter x and y:”); /*为了提高程序的可读性为了提高程序的可读性*/ scanf(“%d%d”, &x, &y); printf(“x=%d, y=%dn”, x, y); /*提高程序的可读性提高程序的可读

6、性*/ if(xy) printf(“max=%dn”, x) ; ; else printf(“max=%dn”,y) ; ; 10 思考问题:思考问题:思考问题:思考问题: 1、如果双边、如果双边if语句语句 if(表达式)(表达式) 语句语句1; else 语句语句2; 语句语句1和语句和语句2是个语句体,该如何表示?是个语句体,该如何表示? 【例【例】比较比较a和和b的大小,如果的大小,如果ab,交换,交换a和和b的值的值,否则什么都不做。否则什么都不做。 if(ab) temp=a;a=b;b=temp; else ;if(表达式)(表达式) 语句体语句体1;else 语句语句2;

7、【例】【例】if(ab) temp=a;a=b;b=temp;复合语句复合语句11 【例】写出下面程序的输出结果。【例】写出下面程序的输出结果。运行结果:运行结果:123、ifelse if结构结构 ifelse if语句为语句为多分支选择结构多分支选择结构多分支选择结构多分支选择结构,一般形式为:,一般形式为: if(表达式表达式1) 语句语句1; else if(表达式表达式2) 语句语句2; else if (表达式表达式3 ) 语句语句3; else if(表达式表达式n) 语句语句n; else 语句语句n+1;13多分支选择结构多分支选择结构ifelse if语句的语义图:语句的语

8、义图:14 【例】有一函数:【例】有一函数: -1 (x0) , -1 (x0) 1 (x0) 分析:分析:分析:分析: 输入输入 x x 如果如果 x 0 x 0 x 0,则,则y = 1 y = 1 输出输出y y;1516 4.1.2 if 4.1.2 if语句的嵌套形式语句的嵌套形式 在在ifif语句中又包含一个或多个语句中又包含一个或多个ifif语句称为语句称为ifif语句的嵌套。语句的嵌套。语义图语义图表达式表达式非非00表达式表达式22语句语句3语句语句4非非00语句语句1表达式表达式11语句语句2非非00if(表达式)(表达式) if(表达式(表达式11) 语句语句1; els

9、e 语句语句2;else if(表达式(表达式22) 语句语句3; else 语句语句4;语法形式语法形式17 【使用注意事项】【使用注意事项】elseelse子句总是与它前面最近的、尚未配对的子句总是与它前面最近的、尚未配对的ifif子句进行匹配;子句进行匹配; 【例】【例】if(a= =b)if(a= =b) if(b= =c) if(b= =c) printf(“a=b=cn”); printf(“a=b=cn”); else else printf(“b!=cn”); printf(“b!=cn”); 184.2 4.2 条件表达式条件表达式条件表达式条件表达式 条件运算条件运算条件运

10、算符连接表达式构成的运算;条件运算符连接表达式构成的运算; 1、条件运算符、条件运算符 形式:形式:形式:形式: ? : 2、条件表达式、条件表达式 形式:形式:表达式表达式1?表达式?表达式2:表达式:表达式3 语义:语义:先计算表达式先计算表达式1的值,若结果为非的值,若结果为非0,则以表达式,则以表达式2的值作的值作为整个条件表达式的值;若为为整个条件表达式的值;若为0,则以表达式,则以表达式3的值作为整个表达式的值作为整个表达式的值;的值;19 执行过程如下:执行过程如下:20 【例】(【例】(x0)?)?1:-1 若表达式若表达式1为真为真,返回返回1,否则返回,否则返回-1说明:说

11、明:说明:说明: 表达式表达式2和表达式和表达式3通常为同类型,若不同则整个条件表达通常为同类型,若不同则整个条件表达 式的数据类型取两个表达式中较高的类型;式的数据类型取两个表达式中较高的类型; 各类运算符的优先级:各类运算符的优先级:算术运算符算术运算符 关系运算符关系运算符 逻辑运算符逻辑运算符 条件运算符条件运算符 赋值运算赋值运算符符 高高低低表达式表达式1 1表达式表达式2 2表达式表达式3 321 条件运算符的结合方向是条件运算符的结合方向是“自右至左自右至左”的;的; 【例例】 ab ab?a a:cdcd?c c:d d ab ? a:(:(cd?c:d) 【例】设有:【例】

12、设有:int a1,b2,c=3,d4,m2,n2;求;求下列表达式的值。下列表达式的值。 (1)a+bc?m*a:m*b4224.3 switch4.3 switch语句语句语句语句 看下面这个例子:看下面这个例子: if (ch=Z) z=z+1; else if (ch=W) w=w+1; else if (ch=C) c=c+1; else if (ch=Q) q=q+1; else if (ch=S) s=s+1; 23 1、switch语句的结构语句的结构 形式:形式:形式:形式:switch(表达式)(表达式) case 常量表达式常量表达式常量表达式常量表达式1 1:语句:语句

13、1; case 常量表达式常量表达式常量表达式常量表达式2 2:语句:语句2; case 常量表达式常量表达式常量表达式常量表达式n n:语句:语句n; default:语句:语句n+1; 24 用用switch语句语句改写上面的程序:改写上面的程序: switch(ch) case Z: z=z+1; case W: w=w+1; case C: c=c+1; case Q: q=q+1; case S: s=s+1; 【例】要求按照考试成绩等级打印出百分制分数段可以用【例】要求按照考试成绩等级打印出百分制分数段可以用switch语句语句实现:实现: 流程图见下图:流程图见下图:2526根据

14、语义图写出根据语义图写出根据语义图写出根据语义图写出switchswitch语句结构:语句结构:语句结构:语句结构:2728运行结果:运行结果:29 2、switch与与break配合使用配合使用 break语句是中断语句,常与语句是中断语句,常与switch语句配合使用,语句配合使用,程序执行到程序执行到程序执行到程序执行到breakbreak语句时,跳出语句时,跳出语句时,跳出语句时,跳出switchswitch语句体语句体语句体语句体。 用用switch和和break语句语句改写上面的程序:改写上面的程序:30运行结果:运行结果:31【例】从键盘输入一个分数,使用【例】从键盘输入一个分数

15、,使用【例】从键盘输入一个分数,使用【例】从键盘输入一个分数,使用switchswitch语句判断是否及格。语句判断是否及格。语句判断是否及格。语句判断是否及格。32错误错误【例】下述程序段中,正确的是(【例】下述程序段中,正确的是( )。)。 A)int x=0,y=10; switch(x) case y:x+;break; case y+2:x+=10;break; case y-1:x=-7;break; 33 B)int x=0,y; switch(x) case x0:y=1;break; case x= =0:y=0;break; case x0:y=-1;break; 错误错误

16、34 C)#define y 20 int x=10,y; switch(x) case 12: z=3;break; case y+1: x+=10;break; case y-8: x-=3;break; 错误错误35 D)int x=0,y; switch(x) case 3: case -1: y=2;break; case 2: break; 正确正确364.4 4.4 应用举例应用举例应用举例应用举例 【例】判断从键盘输入的字符是否为小写字母,若是,则将其转换【例】判断从键盘输入的字符是否为小写字母,若是,则将其转换为大写字母并输出;若不是,则原样输出。为大写字母并输出;若不是,则

17、原样输出。 流程图如下所示:流程图如下所示:是小写字母吗?是小写字母吗?输入字符输入字符转换为大写字母转换为大写字母原样输出原样输出是是否否37 #include main( ) char ch; printf(“please input a character:”); scanf(“%c”,&ch); if (ch=a & ch=z) printf(“the character is:%cn”,ch-32); else printf(“the character is:%cn”,ch); 38 【例】编写程序,判断某一年是否闰年(用嵌套的【例】编写程序,判断某一年是否闰年(用嵌套的if语句)

18、。语句)。 分析题目:分析题目:分析题目:分析题目:判断某一年是否是闰年的表达式判断某一年是否是闰年的表达式。#includemain( ) int year; printf(please input year:); scanf(%d,&year); if( (year%4=0 & year%100!=0) | (year%400=0) ) printf(%d is run-year!n, year); else printf(“%d is not run-year!n”, year);39 【例】编写程序,判断某一年是否闰年(用嵌套的【例】编写程序,判断某一年是否闰年(用嵌套的if语句)。语

19、句)。 分析题目:分析题目:分析题目:分析题目:我们用下图来表示判别闰年的算法。以变量我们用下图来表示判别闰年的算法。以变量leap代代表是否闰年的信息。若某年为闰年,则令表是否闰年的信息。若某年为闰年,则令leap=1;若为非闰年,令;若为非闰年,令leap=0。最后判断。最后判断leap是否为是否为1(真真),若是,则输出,若是,则输出“闰年闰年”信息。信息。40编写程序如下:编写程序如下: include main( ) int year, leap; scanf(d,&year); if(year4=0) if(year100=0) if if(year400=0) leap=1; e

20、lse else leap=0; else leap=1; else leap=0;41 if if(leap) printf(d is a leap year.n ,year); else else printf(“d is not a leap year.n ”,year); 运行结果:运行结果: 1989 1989 is not a leap year. 2000 2000 is a leap year.42实验习题课43【习题【习题1】预测程序运行后的输出值。】预测程序运行后的输出值。 #include main( ) char x,y,z; x=a; y=t; z=b; printf

21、(“The line 1 is:%c%c%cn”,x,y,z); printf(“The line 2 is:%c%c%c%cn”,x,y,y,z); 运行结果为:运行结果为:44 【习题【习题2】编写程序,输入一个】编写程序,输入一个3位的正整数,分别以顺序和倒序位的正整数,分别以顺序和倒序按列输出其中的每一位数字。按列输出其中的每一位数字。 例如:输入例如:输入 519 输出输出 5 9 1 1 9 545#includemain( ) printf(“x=?”); /*提高程序的可读性提高程序的可读性*/ scanf(“%3d”,&x); a=x/100; b=(x-a*100)/10;

22、 c=x%10; printf(“%d %dn%d %dn%d %dn”,a,c,b,b,c,a); int a,b,c,x;46【习题【习题3 3】阅读程序,预测程序的输出值。】阅读程序,预测程序的输出值。main( )main( ) unsigned v=65535; unsigned v=65535; w =“programming”; w =“programming”; printf(“%d,%2d,%6d,%06dn”,i,i,i,i); printf(“%d,%2d,%6d,%06dn”,i,i,i,i); printf(“%08dn”,v); printf(“%08dn”,v);

23、 printf(“%11.7sn”,w); printf(“%11.7sn”,w);int i=1234,j=047;int i=1234,j=047;#include#include printf(“%d”,j); printf(“%d”,j); 1234,1234,_1234,0012341234,1234,_1234,001234_program_program-0000001-0000001393947 2 21616=65536 65535=2=65536 65535=21616-1-11 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

24、 01 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 12 216162 215152 214142 213132 212122 211112 210102 29 92 28 82 27 72 26 62 25 52 24 42 23 32 22 22 21 12 20 02 215152 214142 213132 212122 211112 210102 29 92 28 82 27 72 26 62 25 52 24 42 23 32 22 22 21 12 20 065535=265535=21616-1-12 21616=65536=655

25、3648【习题【习题4 4】对下面的程序按题目要求完成规定的操作。】对下面的程序按题目要求完成规定的操作。 includeinclude main( ) main( ) int a,b;float x,y; int a,b;float x,y; char c1,c2; char c1,c2; scanf(“ scanf(“ (1) (1) ”,&c1,&c2);”,&c1,&c2); scanf(“ scanf(“ (2) (2) ”,&a,&b,&x,&y);”,&a,&b,&x,&y); printf(“a=%dtb=%dn”,a,b); printf(“a=%dtb=%dn”,a,b);

26、 printf(“x=%6.2fty=%en”,x,y); printf(“x=%6.2fty=%en”,x,y); printf(“c1=%ctc2=%cn”,c1,c2); printf(“c1=%ctc2=%cn”,c1,c2); printf(“ printf(“ (3) (3) ”);”); a=12 b=678a=12 b=678a=12 b=678a=12 b=678x=34.55 y=1.81930e+02x=34.55 y=1.81930e+02x=34.55 y=1.81930e+02x=34.55 y=1.81930e+02c1=$ c2=&c1=$ c2=&c1=$ c

27、2=&c1=$ c2=&输出空的一行输出空的一行输出空的一行输出空的一行bye!bye!bye!bye!$ &$ &$ &$ &12 345 678 34.55 181.9312 345 678 34.55 181.9312 345 678 34.55 181.9312 345 678 34.55 181.93%c%*c%cn%c%*c%cn%d%*d%d%f%f%d%*d%d%f%fnbye!nbye!49 【习题【习题5】以下】以下if语句用于对所给的分段函数求值,有错误,请用语句用于对所给的分段函数求值,有错误,请用整齐的缩进格式将该整齐的缩进格式将该if语句改写为正确。语句改写为正确。

28、x=1 a0,b0,c02 a0,b0,c0,b=04 a0)if(b0)if(c0) x=1;else x=2;else x=3;else x=4else x=5;程序错在哪里了?程序错在哪里了?50画出语义图:画出语义图:a0a0真真假假b0b0真真假假x=4x=4c0c0x=3x=3假假真真x=1x=1c0c0) if(b0) if(c0) x=1; else if(c0,b0,c02 a0,b0,c0,b=04 a=05 分段函数分段函数:52【习题【习题6】用】用switch语句编写程序实现下面的函数计算。语句编写程序实现下面的函数计算。y=x2 0=x1x2-5 1=x2x2-2x-1 2=x3x2+6x-18 3=x4#inclduemain( ) float x,y;scanf(“%f”,&x);switch(int)x) case 0:y=x*x; break; case 1:y=x*x-5; break; case 2:y=x*x-2*x-1; break; case 3:y=x*x+6*x-18; break; default:exit( ); printf(“x=%f,y=%fn”,x,y); 53

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

最新文档


当前位置:首页 > 办公文档 > 工作计划

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