选择结构与程序设计-分支结构
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
– –
计算表达式的值,与常量表达式的值比较,等于第i个值 时,顺序执行语句序列i、i+1、 …、 n+1 若与所有常量表达式值都不相等,执行语句序列n+1。
2017/10/4
switch语句的算法描述
30
N-S结构图
常量表达式1 语句序列1 常量表达式2 语句序列2 计算 …… …… 表达式 常量表达式n 语句序列n default 语句序列n+1 例如: switch (a) { case 5: printf("&"); 当a等于5,输出:&#$ case 2: printf("#"); 当a等于2,输出:#$ default:printf("$"); 当a是其他值,输出:$ }
27
2017/10/4
3.1.3&3.1.4 switch和break语句 当某一表达式有n个取值,每一取 值执行一语句,则如果用内嵌 if 十分繁锁,而用switch简单。
28
2017/10/4
3.1.3&3.1.4 switch和break语句
29
switch语句的一般形式 switch (表达式) { case 常量表达式1: 语句序列1 case 常量表达式2: 语句序列2 …… case 常量表达式n: 语句序列n default : 语句序列n+1 } 功能:
例如:
⑴ if (c<=100) if (c>=50) printf("50<=c<=100\n"); ⑵ 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");
2017/10/4
熟悉常用的if 表达式形式(参见表达式专题) 例如有定义:int a,b=0; a等于什么值时,执行b=2 ;语句? 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; 等价于
# include <stdio.h> int main(void) { double x, y; printf("Enter x:"); scanf("%lf", &x); if (x < 0) { y = 0; } else if (x <= 15) { y = 4 * x / 3;} else {y = 2.5 * x - 10.5;} printf("f(%.2f) = %.2f\n", x, y); return 0; }
22
规则:在嵌套的if~else语句中,else总是与 上面的离它最近的尚未配对的if 配对。
2017/10/4
举例
【例3-7】输入一个数,判断它是奇数还是 偶数,如果是奇数则进一步判断 它是否为5的倍数。
定义变量x 输入x的值 x是奇数 T 输出“odd” x是5的倍数 T F 是5的倍数 F
23
8
输入:用 getchar 或 scnaf 函数 ch是否为大写字母: ch>='A' && ch<='Z' (或 ch>=65 && ch <= 90) 大写字母转换为小写字母: ch=ch+32 输出:用 putchar 或 printf 函数
2017/10/4
程序:
#include "stdio.h" getchar( )是字符输 main( ) 入函数 { char ch; ch=getchar( ); if (ch>='A' && ch<='Z') ch=ch+32; printf("%c\n",ch ); } 可使用条件表达式代替
2017/10/4
17
【例3.5】分段计算水费的问题。 居民应交水费y(元)与月用水量x(吨)的函数 关系式如下,并编程实现。
0,x 0 4x y f(x) ,0 x 15 3 2.5 x 10.5,x 15
2017/10/4
源程序-分段计算水费
24
思考:如果没有,算法和输出如何?
2017/10/4
学习if语句的难点
if ~else 语句的配对 正确用表达式描述条件 例如:当x大于5小于10时令x自增 if && x<10) x++; if (x>5 ( 5<x<10 ) x++;
25
正确判断内嵌语句 例如:if(x<y) { x=x+3; y=y-2; else { x=x-3; y=y+2;
18
2017/10/4
3.1.2 if语句的嵌套
如果if的内嵌语句中又使用了一个if语句, 则构成if语句的嵌套。 【例3-6】比较两个整数的关系。
19
#include <stdio.h> main( ) { int x, y; printf ("Enter integer X and Y:"); 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"); }
2017/10/4
说明:
“case 常量表达式i:”等价于语句标号, 计算出的表达式值等于哪个语句标号,就 从哪个位置开始顺序向下执行语句序列。 ∴ 语句位置影响运行结果
例如: switch (a) { case 2: printf("#"); break; default: printf("$"); break; case 5: printf("&"); break; }
程序运行情况如下: putchar(ch>='A' && ch<='Z' ? ch+32:ch); G putchar (' \n') g
9
2017/10/4
10
二、双重分支语句一般格式 if (表达式) 语句1 else 语句2
功能:
–
计算表达式的值,如果它的值是一个非0值 (逻辑真),就执行内嵌语句1,之后跳过内 嵌语句2,执行后续语句;否则跳过内嵌语句 1,执行内嵌语句2,之后执行后续语句。
scanf ("%f, %f", &a, &b);
if (a>b) {t=a; a=b; b=t;} printf (“a=%5.2f,b= %5.2f\n", a, b); return 0 ; }
2017/10/4
7
【例3.2】输入三个数,按大小顺序输出。
main ( ) {float a, b, c,t; scanf("%f,%f,%f", &a, &b,&c);
输出“even”
2017/10/4
程序:
main( ) { int x; scanf ("%d",&x); if (x%2 != 0) { printf("%d is an odd \n",x) ; if (x%5==0) printf("%d is the times of 5 \n",x) ; } else printf("%d is an even \n",x) ; }
}
}
2017/10/4
26
【例3-8】 #include"stdio.h" int main(void) {int x,y; scanf("%d%d",&x,&y); if(x<y) {x=x+3; y=y-2; } else {x=x-3;y=y+2;} printf("x=%d,y=%d\n",x,y); return 0; }
1
主讲教师: 滕永晨
Tyc_Tbf@sina.com
兰州理工大学计通学院
2014年10月
2017/10/4
C 语言程序设计
Chap03 选择结构程序设计
分支结构
本节主要内容
1. if语句 3.1.1 if语句的一般形式 3.1.2 if语句的嵌套 2. switch语句 3.1.3 switch语句的一般形式 3.1.4 break语句 3. 选择结构程序设计举例
2017/10/4
判断数字的奇偶性 【例3.4】
12
输入1个整数,判断该数是奇数还是偶数。 读入一个整数 if (该数能被2整除) number % 2 == 0 则该数为偶数 else 该数为奇数
2017/10/4
源程序-判断数字的奇偶性
#include <stdio.h> int main(void) { int number; printf("Enter a number: "); scanf("%d", &number); if(number % 2 == 0) { printf("Tne number is even. \n"); } else {printf("Tne number is odd. \n"); } return 0; } 此处条件内由于只有一条
if (a>b)
{t=a; a=b; b=t;} if (a>c)
{t=a; a=c; c=t;}
if (b>c) {t=b; b=c; c=t;} printf("%5.2f, %5.2f, %5.2f\n", a, b, c); }
2017/10/4
if语句的简单应用
【例3.3】输入一个字符,如果是大写字母, 则将其转换为小写字母输出,否则 直接输出。 思路:
2017/10/4
if语句嵌套的形式
简单if语句的嵌套形式 if (表达式) 可以是各种形式的 if语句 if 语句 双重(或多重)分支if语句的嵌套形式 if (表达式) 如果是简单if语句, if 语句 必须用“{ }”括起 else if 语句 可以是各种形式的
20
if语句
2017/10/4
2017/10/4
简单分支语句的算法:
流程图
表达式非0? Y 语句
5
N-S结构图
N
表达式非0 T F 语句
例如: ⑴ if (x>0) m++; ⑵ if ( a>b ) { c=a; a=b; b=c; }
2017/10/4
6
【例3.1】输入两个实数,按代数值由小到 大次序输出这两个数。
int main (void ) { float a, b, t;
2017/10/4
双重分支语句的算法:
流程图
Y
语句1
表达式非0?
11百度文库
N-S结构图
N
语句2 表达式非0
T
语句1
F
语句2
例如:
⑴ if (x>0) m++; else m--; ⑵ if ( ch>= 'a' && ch<= 'z' ) { ch=ch-32 ; printf(" %c\n",ch); } else printf(" %c\n",ch) ;
3
2017/10/4
3.1.1 语句一般格式
4
一、简单分支语句一般格式 if (表达式) 语句
可为算术、关系、逻辑、赋值 等表达式
内嵌语句,可为: 赋值语句 函数调用语句 控制语句 复合语句 空语句
功能:
–
计算表达式的值,如果是一个非0值(即逻 辑真),就执行内嵌语句,否则(即逻辑假) 跳过内嵌语句,顺序执行后续语句。
语句,故{ }可省略
13
2017/10/4
14
三、多重分支语句一般格式 if (表达式1) 语句1 else if (表达式2) 语句2 …… else if (表达式m) 语句m else 语句 n
功能:
– –
依次计算并判断表达式i,为非0时执行后面 的语句,都为0时,执行语句n 无论执行完那个语句分支,都转到后续语句
21
与 哪 个 if 配 对 ? ⑶ if (c<=100) if (c>=50) printf("50<=c<=100\n"); else printf("c<50\n")
2017/10/4
再例如:
if(a>b) if(a>c) if(a>d) m=1; else m=2; else m=3; 问题:哪一个 else 和哪一个 if 相匹配?
2017/10/4
多重分支语句的算法
15
流程图
Y
表达式1?
N
N … Y 语句m
表达式m ?
语句1
Y 语句2
表达式2?
N 语句n
2017/10/4
多重分支语句的算法
16
N-S结构图
表达式1?
T
表达式2? 语句1 T 语句2 …
F
F 表达式m? T F 语句m 语句n
例如:
if (a<0) x= -1 ; else if (a==0 ) x= 0 ; else x=1 ;
计算表达式的值,与常量表达式的值比较,等于第i个值 时,顺序执行语句序列i、i+1、 …、 n+1 若与所有常量表达式值都不相等,执行语句序列n+1。
2017/10/4
switch语句的算法描述
30
N-S结构图
常量表达式1 语句序列1 常量表达式2 语句序列2 计算 …… …… 表达式 常量表达式n 语句序列n default 语句序列n+1 例如: switch (a) { case 5: printf("&"); 当a等于5,输出:&#$ case 2: printf("#"); 当a等于2,输出:#$ default:printf("$"); 当a是其他值,输出:$ }
27
2017/10/4
3.1.3&3.1.4 switch和break语句 当某一表达式有n个取值,每一取 值执行一语句,则如果用内嵌 if 十分繁锁,而用switch简单。
28
2017/10/4
3.1.3&3.1.4 switch和break语句
29
switch语句的一般形式 switch (表达式) { case 常量表达式1: 语句序列1 case 常量表达式2: 语句序列2 …… case 常量表达式n: 语句序列n default : 语句序列n+1 } 功能:
例如:
⑴ if (c<=100) if (c>=50) printf("50<=c<=100\n"); ⑵ 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");
2017/10/4
熟悉常用的if 表达式形式(参见表达式专题) 例如有定义:int a,b=0; a等于什么值时,执行b=2 ;语句? 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; 等价于
# include <stdio.h> int main(void) { double x, y; printf("Enter x:"); scanf("%lf", &x); if (x < 0) { y = 0; } else if (x <= 15) { y = 4 * x / 3;} else {y = 2.5 * x - 10.5;} printf("f(%.2f) = %.2f\n", x, y); return 0; }
22
规则:在嵌套的if~else语句中,else总是与 上面的离它最近的尚未配对的if 配对。
2017/10/4
举例
【例3-7】输入一个数,判断它是奇数还是 偶数,如果是奇数则进一步判断 它是否为5的倍数。
定义变量x 输入x的值 x是奇数 T 输出“odd” x是5的倍数 T F 是5的倍数 F
23
8
输入:用 getchar 或 scnaf 函数 ch是否为大写字母: ch>='A' && ch<='Z' (或 ch>=65 && ch <= 90) 大写字母转换为小写字母: ch=ch+32 输出:用 putchar 或 printf 函数
2017/10/4
程序:
#include "stdio.h" getchar( )是字符输 main( ) 入函数 { char ch; ch=getchar( ); if (ch>='A' && ch<='Z') ch=ch+32; printf("%c\n",ch ); } 可使用条件表达式代替
2017/10/4
17
【例3.5】分段计算水费的问题。 居民应交水费y(元)与月用水量x(吨)的函数 关系式如下,并编程实现。
0,x 0 4x y f(x) ,0 x 15 3 2.5 x 10.5,x 15
2017/10/4
源程序-分段计算水费
24
思考:如果没有,算法和输出如何?
2017/10/4
学习if语句的难点
if ~else 语句的配对 正确用表达式描述条件 例如:当x大于5小于10时令x自增 if && x<10) x++; if (x>5 ( 5<x<10 ) x++;
25
正确判断内嵌语句 例如:if(x<y) { x=x+3; y=y-2; else { x=x-3; y=y+2;
18
2017/10/4
3.1.2 if语句的嵌套
如果if的内嵌语句中又使用了一个if语句, 则构成if语句的嵌套。 【例3-6】比较两个整数的关系。
19
#include <stdio.h> main( ) { int x, y; printf ("Enter integer X and Y:"); 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"); }
2017/10/4
说明:
“case 常量表达式i:”等价于语句标号, 计算出的表达式值等于哪个语句标号,就 从哪个位置开始顺序向下执行语句序列。 ∴ 语句位置影响运行结果
例如: switch (a) { case 2: printf("#"); break; default: printf("$"); break; case 5: printf("&"); break; }
程序运行情况如下: putchar(ch>='A' && ch<='Z' ? ch+32:ch); G putchar (' \n') g
9
2017/10/4
10
二、双重分支语句一般格式 if (表达式) 语句1 else 语句2
功能:
–
计算表达式的值,如果它的值是一个非0值 (逻辑真),就执行内嵌语句1,之后跳过内 嵌语句2,执行后续语句;否则跳过内嵌语句 1,执行内嵌语句2,之后执行后续语句。
scanf ("%f, %f", &a, &b);
if (a>b) {t=a; a=b; b=t;} printf (“a=%5.2f,b= %5.2f\n", a, b); return 0 ; }
2017/10/4
7
【例3.2】输入三个数,按大小顺序输出。
main ( ) {float a, b, c,t; scanf("%f,%f,%f", &a, &b,&c);
输出“even”
2017/10/4
程序:
main( ) { int x; scanf ("%d",&x); if (x%2 != 0) { printf("%d is an odd \n",x) ; if (x%5==0) printf("%d is the times of 5 \n",x) ; } else printf("%d is an even \n",x) ; }
}
}
2017/10/4
26
【例3-8】 #include"stdio.h" int main(void) {int x,y; scanf("%d%d",&x,&y); if(x<y) {x=x+3; y=y-2; } else {x=x-3;y=y+2;} printf("x=%d,y=%d\n",x,y); return 0; }
1
主讲教师: 滕永晨
Tyc_Tbf@sina.com
兰州理工大学计通学院
2014年10月
2017/10/4
C 语言程序设计
Chap03 选择结构程序设计
分支结构
本节主要内容
1. if语句 3.1.1 if语句的一般形式 3.1.2 if语句的嵌套 2. switch语句 3.1.3 switch语句的一般形式 3.1.4 break语句 3. 选择结构程序设计举例
2017/10/4
判断数字的奇偶性 【例3.4】
12
输入1个整数,判断该数是奇数还是偶数。 读入一个整数 if (该数能被2整除) number % 2 == 0 则该数为偶数 else 该数为奇数
2017/10/4
源程序-判断数字的奇偶性
#include <stdio.h> int main(void) { int number; printf("Enter a number: "); scanf("%d", &number); if(number % 2 == 0) { printf("Tne number is even. \n"); } else {printf("Tne number is odd. \n"); } return 0; } 此处条件内由于只有一条
if (a>b)
{t=a; a=b; b=t;} if (a>c)
{t=a; a=c; c=t;}
if (b>c) {t=b; b=c; c=t;} printf("%5.2f, %5.2f, %5.2f\n", a, b, c); }
2017/10/4
if语句的简单应用
【例3.3】输入一个字符,如果是大写字母, 则将其转换为小写字母输出,否则 直接输出。 思路:
2017/10/4
if语句嵌套的形式
简单if语句的嵌套形式 if (表达式) 可以是各种形式的 if语句 if 语句 双重(或多重)分支if语句的嵌套形式 if (表达式) 如果是简单if语句, if 语句 必须用“{ }”括起 else if 语句 可以是各种形式的
20
if语句
2017/10/4
2017/10/4
简单分支语句的算法:
流程图
表达式非0? Y 语句
5
N-S结构图
N
表达式非0 T F 语句
例如: ⑴ if (x>0) m++; ⑵ if ( a>b ) { c=a; a=b; b=c; }
2017/10/4
6
【例3.1】输入两个实数,按代数值由小到 大次序输出这两个数。
int main (void ) { float a, b, t;
2017/10/4
双重分支语句的算法:
流程图
Y
语句1
表达式非0?
11百度文库
N-S结构图
N
语句2 表达式非0
T
语句1
F
语句2
例如:
⑴ if (x>0) m++; else m--; ⑵ if ( ch>= 'a' && ch<= 'z' ) { ch=ch-32 ; printf(" %c\n",ch); } else printf(" %c\n",ch) ;
3
2017/10/4
3.1.1 语句一般格式
4
一、简单分支语句一般格式 if (表达式) 语句
可为算术、关系、逻辑、赋值 等表达式
内嵌语句,可为: 赋值语句 函数调用语句 控制语句 复合语句 空语句
功能:
–
计算表达式的值,如果是一个非0值(即逻 辑真),就执行内嵌语句,否则(即逻辑假) 跳过内嵌语句,顺序执行后续语句。
语句,故{ }可省略
13
2017/10/4
14
三、多重分支语句一般格式 if (表达式1) 语句1 else if (表达式2) 语句2 …… else if (表达式m) 语句m else 语句 n
功能:
– –
依次计算并判断表达式i,为非0时执行后面 的语句,都为0时,执行语句n 无论执行完那个语句分支,都转到后续语句
21
与 哪 个 if 配 对 ? ⑶ if (c<=100) if (c>=50) printf("50<=c<=100\n"); else printf("c<50\n")
2017/10/4
再例如:
if(a>b) if(a>c) if(a>d) m=1; else m=2; else m=3; 问题:哪一个 else 和哪一个 if 相匹配?
2017/10/4
多重分支语句的算法
15
流程图
Y
表达式1?
N
N … Y 语句m
表达式m ?
语句1
Y 语句2
表达式2?
N 语句n
2017/10/4
多重分支语句的算法
16
N-S结构图
表达式1?
T
表达式2? 语句1 T 语句2 …
F
F 表达式m? T F 语句m 语句n
例如:
if (a<0) x= -1 ; else if (a==0 ) x= 0 ; else x=1 ;