选择结构

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
当条件具有特殊规律时,用switch语句比用if方 便。其中,构造swtich后的表达式是程序设计 的关键。
2019/5/24
举例
main() { int a,b=0;
clrscr(); printf(“\na=“); scanf(“%d”,&a); switch(a)
2019/5/24
4.1.2 if语句的嵌套
12
如果if的内嵌语句中又使用了一个if语句,
则构成if语句的嵌套。
【例4.a】比较两个整数的关系。 应该正确判断:
#include <stdio.h>
• if的内嵌语句
main( )
• if和else的配对
{ int x, y;
printf ("Enter integer X and Y:");
表达式非0? N
Y 语句
表达式非0
T
F
语句
例如: ⑴ if (x>0) m++; ⑵ if ( a>b ) { c=a; a=b; b=c; }
2019/5/24
双重分支语句
5
语句一般格式
if (表达式) 语句1 else 语句2
功能:
– 计算表达式的值,如果它的值是一个非0值 (逻辑真),就执行内嵌语句1,之后跳过内 嵌语句2,执行后续语句;否则跳过内嵌语句 1,执行内嵌语句2,之后执行后续语句。
2019/5/24
程序:
11
#include "stdio.h"
main( )
{ char ch;
ch=getchar( );
if (ch>='A' && ch<='Z')
ch=ch+32;
printf("%c\n",ch );
}
可使用条件表达式代替
程Gpu序tc运ha行r情(ch况>如='下A:' && ch<='Z' ? ch+32:ch); gputchar (' \n')
22
switch语句的一般形式
switch (表达式) { case 常量表达式1: 语句序列1
case 常量表达式2: 语句序列2 …… case 常量表达式n: 语句序列n default : 语句序列n+1 }
功能:
– 计算表达式的值,与常量表达式的值比较,等于第i个值 时,顺序执行语句序列i、i+1、 …、 n+1
scanf ("%d%d", &x, &y);
if ( x != y )
if ( x > y ) printf ("X>Y\n"); else printf ("X<Y\n"); else printf ("X=Y\n");
提倡缩格书写 有利于阅读程序
}
2019/5/24
if语句嵌套的形式
13
简单if语句的嵌套形式
与 哪 个
if 配 对
⑵ if (c<=100) if (c>=50) printf("50<=c<=100\n"); else printf("c<50\n"); else if (c<=150) printf("100<c<=150\n"); else printf("c>150\n");
? ⑶ if (c<=100)
if (a==0) b=2; if (a==1) b=2; if (a!=0) b=2; if (a=1) b=2; if (a=0) b=2; if (a) b=2; 等价于 if (!a) b=2; 等价于
19
2019/5/24
–1 (x<0)
20
举例3: 有一函数 y= 0 (x=0)
1 (x>0) 编一程序,输入一个x值,输出y值。
else x=1 ;
表达式m?
T
F
语句m 语句n
2019/5/24
if语句的简单应用
10
【例4.1】输入一个字符,如果是大写字母, 则将其转换为小写字母输出,否则 直接输出。
思路:
输入:用 getchar 或 scanf 函数 ch是否为大写字母: ch>='A' && ch<='Z'
(或 ch>=65 && ch <= 90) 大写字母转换为小写字母: ch=ch+32 输出:用 putchar 或 printf 函数
计算机程序设计 第4章 选择结构程序设计
本章主要内容
2
4.1 if语句 4.1.1 if语句的一般形式 4.1.2 if语句的嵌套
4.2 switch语句 4.2.1 switch语句的一般形式 4.2.2 break语句
4.3 选择结构程序设计举例
2019/5/24
简单分支语句
3
语句一般格式 if (表达式) 语句
可为算术、关系、逻辑、赋值 等表达式
内嵌语句,可为:
赋值语句 函数调用语句 控制语句 复合语句 空Fra Baidu bibliotek句
功能:
– 计算表达式的值,如果是一个非0值(即 逻辑真),就执行内嵌语句,否则(即逻 辑假)跳过内嵌语句,顺序执行后续语句。
2019/5/24
简单分支语句的算法:
4
流程图
N-S结构图
break; break; break;
z==0或z!=0的比较 • 可用if((int)z) 代替
default: z=0;
}
if((int)z!=0) printf("%f%c%f=%f\n",x,op,y,z);
else printf ("%c is not an operator\n",op);
当a等于5,输出:&#$ 当a等于2,输出:#$ 当a是其他值,输出:$
2019/5/24
说明:
24
“case 常量表达式i:”等价于语句标号, 计算出的表达式值等于哪个语句标号,就 从哪个位置开始顺序向下执行语句序列。
∴ 语句位置影响运行结果
例如: switch (a) { case 2: printf("#"); break;
思路:
• 设x和y为float型变量并赋初值;
• 输入的运算符op为char型变量;
• 根据op的值(为'+'、'-'、'*'、'/')进行x和y的 相加、相减、相乘、相除运算(选择分支);
• 还要考虑到输入字符不是+、-、* 或 / 时的情 况
2019/5/24
程序:
26
#include "stdio.h"
default: printf("$"); break; case 5: printf("&"); break;
} switch与break语句结合才能实现 程序的分支
2019/5/24
switch语句的简单应用
25
【例4.3】已知x=100,y=15,要求输入一个 算术运算符(+、-、* 或 / ),并 对x和y进行指定的算术运算。
– 若与所有常量表达式值都不相等,执行语句序列n+1。
2019/5/24
switch语句的算法描述
23
N-S结构图
常量表达式1 语句序列1
计算 常量表达式2 语句序列2
表达式
…… 常量表达式n
…… 语句序列n
default
语句序列n+1
例如: switch (a)
{ case 5: printf("&"); case 2: printf("#"); default:printf("$"); }
printf ("x=%d, y=%d\n", x, y);
} 2019/5/24
程序3: 将上述if语句改为:
y= –1;
if (x! =0)
×
if (x>0) y=1;
else
y=0;
程序4:
y=0;
if (x>=0)
if (x>0) y=1;
×
else y= –1;
21
2019/5/24
4.2 switch语句
允许switch嵌套使用,但同一个switch语句中,任 意两个case的常量表达式值不能相同。
2019/5/24
注意:
28
switch后面的“表达式”,可以是int、char和 枚举型中的一种。如果是数值型,不对其值四舍 五入。case后的常量要求只能是整数、字符或 常量表达式。
用switch语句实现的多分支结构程序,完全可 以用if语句或if语句的嵌套来实现。
2019/5/24
举例
16
【例4.4】输入一个数,判断它是奇数还是 偶数,如果是奇数则进一步判断 它是否为5的倍数。
定义变量x
输入x的值
x是奇数
T
F
输出“odd”
x是5的倍数
输出“even”
T
F
是5的倍数
2019/5/24
程序:
17
main( ) { int x;
scanf ("%d",&x); if (x%2 != 0) { printf("%d is an odd \n",x) ;
有以下几种写法,请判断哪些是正确的?
程序1: main ( )
程序2:将上面程序的if语 句改为:
{ int x, y; scanf("%d", &x); if (x<0) y= –1; else if (x= =0) y=0;
else y=1;
if (x>=0) if (x>0) y=1; else y=0; else y= –1;
if (表达式) if 语句
可以是各种形式的 if语句
双重(或多重)分支if语句的嵌套形式
if (表达式)
if 语句 else
如果是简单if语句, 必须用“{ }”括起
if 语句
可以是各种形式的 if语句
2019/5/24
例如:
14
⑴ if (c<=100)
if (c>=50) printf("50<=c<=100\n");
2019/5/24
双重分支语句的算法:
6
流程图
N-S结构图
Y 表达式非0? N
语句1
语句2
表达式非0
T
F
语句1 语句2
例如:
⑴ if (x>0) m++; else m--; ⑵ if ( ch>= 'a' && ch<= 'z' )
{ ch=ch-32 ; printf(" %c\n",ch); } else printf(" %c\n",ch) ;
2019/5/24
多重分支语句
7
语句一般格式
if (表达式1) 语句1 else if (表达式2) 语句2
else 语句3
…… else if (表达式m) 语句m else 语句 n
功能:
– 依次计算并判断表达式i,为非0时执行后面 的语句,都为0时,执行语句n
– 无论执行完那个语句分支,都转到后续语句
2019/5/24
多重分支语句的算法
8
流程图
Y
表达式1?
N
语句1
Y 语句2
表达式2?
N…
Y 语句m
表达式m ? N 语句n
2019/5/24
多重分支语句的算法
9
N-S结构图
表达式1?
T
语句1
表达式2? T
F F
语句2 …
例如:
if (a<0) x= -1 ; else if (a==0 ) x= 0 ;
if (x%5==0) printf("%d is the times of 5 \n",x) ;
} else
printf("%d is an even \n",x) ; }
思考:如果没有,算法和输出如何?
2019/5/24
学习if语句的难点
if ~else 语句的配对 正确用表达式描述条件
运行jc4_3
main( )
{ float x=100,y=15,z; char op;
op=getchar( );
switch (op)
{ case '+': z=x+y; break; • 实型数通常不使用
case '-': z=x-y; case '*': z=x*y; case '/': z=x/y;
if (c>=50) printf("50<=c<=100\n");
else printf("c<50\n")
2019/5/24
再例如:
15
if(a>b) if(a>c) if(a>d) m=1; else m=2; else m=3;
问题:哪一个 else 和哪一个 if 相匹配?
规则:在嵌套的if~else语句中,else总是与 上面的离它最近的尚未配对的if 配对。
例如:当x大于5小于10时令x自增 iiff((x>55<x&<&10x<)10x) +x++;+;
正确判断内嵌语句 例如:if(x<y) { x=x+3; y=y-2; } else { x=x-3; y=y+2; }
18
2019/5/24
熟悉常用的if 表达式形式
例如有定义:int a,b=0; a等于什么值时,执行b=2 ;语句?
}
2019/5/24
注意:
27
switch语句的书写格式:语句体本身必须用花括号 括起;case和default后面如果有多条语句,则可 以不必使用花括号;case和常量表达式之间必须 有空格;default可以写在语句体的任何位置,也 可以省略不写
break语句可以改变case的语句标号作用,终止后 续case语句序列的执行。 switch语句和break语句 结合,可以实现程序的选择控制(break语句还可 以在循环语句中使用)
相关文档
最新文档