当前位置:文档之家› 选择结构

选择结构


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语句比用if方 便。其中,构造swtich后的表达式是程序设计 的关键。
2019/5/24
举例
main() { int a,b=0;
clrscr(); printf(“\na=“); scanf(“%d”,&a); switch(a)
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 配对。
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) ;
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语句的嵌套形式
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);
default: printf("$"); break; case 5: printf("&"); break;
} switch与break语句结合才能实现 程序的分支
2019/5/24
switch语句的简单应用
25
【例4.3】已知x=100,y=15,要求输入一个 算术运算符(+、-、* 或 / ),并 对x和y进行指定的算术运算。
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
程序:
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')
运行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;
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:");
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值。
思路:
• 设x和y为float型变量并赋初值;
• 输入的运算符op为char型变量;
• 根据op的值(为'+'、'-'、'*'、'/')进行x和y的 相加、相减、相乘、相除运算(选择分支);
• 还要考虑到输入字符不是+、-、* 或 / 时的情 况
2019/5/24
程序:
26
#include "stdio.h"
例如:当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 ;语句?
当a等于5,输出:&#$ 当a等于2,输出:#$ 当a是其他值,输出:$
2019/5/24
说明:
24
“case 常量表达式i:”等价于语句标号, 计算出的表达式值等于哪个语句标号,就 从哪个位置开始顺序向下执行语句序列。
∴ 语句位置影响运行结果
例如: switch (a) { case 2: printf("#"); break;
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 语句的配对 正确用表达式描述条件
22
switch语句的一般形式
switch (表达式) { case 常量表达式1: 语句序列1
case 常量表达式2: 语句序列2 …… case 常量表达式n: 语句序列n default : 语句序列n+1 }
功能:
– 计算表达式的值,与常量表达式的值比较,等于第i个值 时,顺序执行语句序列i、i+1、 …、 n+1
计算机程序设计 第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 (表达式) 语句
可为算术、关系、逻辑、赋值 等表达式
内嵌语句,可为:
赋值语句 函数调用语句 控制语句 复合语句 空语句
功能:
– 计算表达式的值,如果是一个非0值(即 逻辑真),就执行内嵌语句,否则(即逻 辑假)跳过内嵌语句,顺序执行后续语句。
2019/5/24
简单分支语句的算法:
4
流程图
N-S结构图
有以下几种写法,请判断哪些是正确的?
程序1: main ( )
程序2:将上面程序的if语 句改为:
{ int x, y; scanf("%d", &x); if (x<0) y= –1; else if (x= =0) y=0;
相关主题