switch语句的应用
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Ch7_7_2.c
例7.3 执行下列程序,当分别输入A、B、C、E 执行下列程序,当分别输入A 的值. 时,求K的值.
char c; int k=2; scanf(“%c”, &c); switch (c-’A’) (c{ case 0: k++; case 1: K += 2; break; default: k *= k; case 4: k *= 3; } printf(“k=%d”,k);
表达式有一个确定的 表达式 有一个确定的 不是逻辑值). 值(不是逻辑值 不是逻辑值
例7.2 求执行下列程序段后k的值 求执行下列程序段后k
#include <stdio.h> int main() { char c=‘2’; int k=1;
‘0‘的ASCII值为 的 值为48. 值为
switch (c+1-'0') c+1-'0')
一般形式如下: 一般形式如下:
switch(表达式 ) 表达式 常量表达式1: { case 常量表达式 : 语句1 语句 [break]; case 常量表达式 常量表达式2: (2). 关于常量表达式 关于常量表达式1~n: 只起到 语句2 语句 一个标号的作用,根据表达式的值来 一个标号的作用 根据表达式的值来 [break]; ; 判断, 找到一个相匹配的入口处,程 判断 找到一个相匹配的入口处 程 … 序往下执行。 序往下执行。 各个case后的常量表达式的值 各个 后的常量表达式的值 case 常量表达式 常量表达式n: 必须互不相同. 必须互不相同 语句n 语句 [break]; [default: (3). 每个 每个case分支可有多条语句 分支可有多条语句 语句n+1] 语句 可不用花括号{ 。 ,可不用花括号 }。 }
第七章 switch 语句的应用
7.1
switch 语句 语句:
switch 语句是一条多分支选择语句 语句是一条多分支选择语句 是一条多分支选择语句. 在实际应用中,要在多种情况中选择一种情况 执行某 在实际应用中,要在多种情况中选择一种情况,执行某 一部分语句。 一部分语句。 当然可以使用嵌套的if 语句来处理, 当然可以使用嵌套的 , if else if语句来处理,但其分支 语句来处理 过多,程序冗长,难读, 不够灵巧。 过多,程序冗长,难读 不够灵巧。
例7. 6
根据输入字符(0-9及A-F(a~f))显示与该字符所表示 F(a~f))显示与该字符所表示 根据输入字符( 的十六进制数相对应的十进制数。 的十六进制数相对应的十进制数。 例如,输入‘ 输出10,输入‘ 输出0 (例如,输入‘A’,输出10,输入‘0’,输出0)
#include<stdio.h> #include<stdlib.h> 当输入一个字符,打一个回车后 输 当输入一个字符 打一个回车后,输 打一个回车后 int main( ) 入结束. 入结束 { 但在输入缓冲区中存在二个字符:输 但在输入缓冲区中存在二个字符 输 char ch; 入的字符,还有一个是 还有一个是’\n’. 入的字符 还有一个是 for(; ; ) { printf(“\n请输入十六进制数 0 ~ F ( 输入 或 q 退出 "); 输入Q 退出): 请输入十六进制数 scanf("%c", &ch);
switch语句是 语言中处理多路选择问题的一种更直观 语句是C语言中处理多路选择问题的一种 语句是 语言中处理多路选择问题的一种更直观 和有效的手段. 在测试某个表达式是否与一组常量表达式 和有效的手段 在测试某个表达式是否与一组常量表达式 一组常量 语句显得更为方便. 中的某一值相配时,switch语句显得更为方便 的某一值相配时 语句显得更为方便
Ch7_7_3.c
例7.4 输入一字符,如果是Y, N或y, n,则分别执行一 输入一字符,如果是Y, N或 n, 输出语句,如果是其他字母则执行另一输出语句。 输出语句,如果是其他字母则执行另一输出语句。
#include <stdio.h> void main() { char ch; printf("Please input Y/N (y/n): "); scanf("%c", &ch); ….
Ch7_7_1.c
…. switch (day) 每个case分支可有多条 每个 分支可有多条 { case 0: 语句,可不用花括号{ printf("星期日 \n"); 语句,可不用花括号 } 星期日 也可以用。 也可以用。 break; case 1: printf("星期一 \n"); break; 星期一 case 2: printf("星期二 \n"); break; 星期二 case 3: printf("星期三 \n"); break; 星期三 case 4: printf("星期四 \n"); break; 星期四 case 5: printf("星期五 \n"); break; 星期五 case 6: printf("星期六 \n"); break; 星期六 default: printf("输入有误,请输入 之间的数字!\n"); 输入有误, 之间的数字! 输入有误 请输入0-6之间的数字 } return 0; }
Ch7_7_4.c
…. switch(ch) { 多个case可共用 多个 可共用 case 'y': 一组执行语句. 一组执行语句 case 'Y': printf("this is 'Y' or 'y'. \n"); break; case 'n': case 'N': printf("this is 'N' or 'n'. \n"); break; default: printf("this is other char. \n"); } }
switch(表达式 表达式) 表达式
真(非0) 非
有break语句 语句 语句序列1 语句序列1
表达式==常量表达式 表达式 常量表达式1? 常量表达式 假(0) 表达式=常量表达式 表达式 常量表达式2? 常量表达式 假(0)
break
无break语句 语句
真(非0) 非
有break语句 语句
Baidu Nhomakorabea
例7.1 键盘输入0 之间的整数, 键盘输入0-6之间的整数,分别代表每周的星期 星期一、 日、星期一、…、星期六
#include <stdio.h> int main( ) { int day; printf("请输入星期的数字编号 请输入星期的数字编号(0-6): "); 请输入星期的数字编号 scanf("%d", &day); ….
只进行值的相等性 只进行值的相等性 的检查,不是逻辑判断 不是逻辑判断! 的检查 不是逻辑判断
1. switch只能进行值的相等性的检查 只能进行值的相等性的检查. 只能进行值的相等性的检查 2. if语句不但可以进行相等性的检查 还可以计算关 语句不但可以进行相等性的检查, 语句不但可以进行相等性的检查 系表达式或逻辑表达式 进行逻辑判断的真假 表达式或逻辑表达式,进行逻辑判断的真假. 或逻辑表达式 进行逻辑判断的真假
语句序列2 语句序列
break
无break语句 语句 有break语句 语句
真(非0) 非
表达式=常量表达式 表达式 常量表达式n? 常量表达式 假(0)
语句序列n 语句序列
break
无break语句 语句 语句序列n+1 语句序列
说明: 说明:
switch语句不等同于 语句 语句不等同于if语句 语句不等同于 语句:
说明: 说明 (1). 关于表达式 表达式可以是 关于表达式 表达式: 整型、字符型等表达式。 整型、字符型等表达式。 有一个确定的值(不是逻辑值 不是逻辑值). 有一个确定的值 不是逻辑值
switch(表达式 ) 表达式 常量表达式1: { case 常量表达式 : (4). 各个 各个case 语句只是一 语句1 语句 个入口标号,并不确定执行 个入口标号 并不确定执行 [break]; 的终止点. 的终止点 case 常量表达式 常量表达式2: 语句2 语句 (5). 一般在各个 一般在各个case 语句最后应 该加一break语句 可使程序流程 语句, 该加一 语句 [break]; ; 跳出Switch结构 结构. 跳出 结构 … 否则会从入口处一直向下执行. case 常量表达式 常量表达式n: 否则会从入口处一直向下执行 语句n 语句 [break]; (6). 各个case和default 各个case和 case [default: 出现的先后次序, 出现的先后次序,并不影响执 语句n+1] 语句 行结果. 行结果. }
{ case 2: k+=1; case 2+1: k+=2; case 4: k+=3; } printf("k=%d\ printf("k=%d\n",k); return 0; }
一般在各个case 语句最后应该加 一般在各个 语句, 一break语句 可使程序流程跳出 语句 Switch结构 结构. 结构 否则会从入口处一直向下执行. 否则会从入口处一直向下执行
当打了一个回车后(其实是二个动作 当打了一个回车后 其实是二个动作 回车,换行 回车 换行. printf("输入的是:%c", ch); 输入的是: :回车 换行 输入的是 c语言会把回车 换行自动转换为 语言会把回车,换行自动转换为 语言会把回车 …. ’\n’.反之亦然 反之亦然. 反之亦然
….. while(1) { scanf("%d", &c); switch(c) { case 1: printf("输出相反数 %f\n", -m);break; 输出相反数: 输出相反数 case 2: printf("输出平方数 %f\n", m*m); break; 输出平方数: case 3: printf("输出平方根 %f\n", sqrt(m)); 输出平方根: break; case 4: break; default: printf("请输入 请输入1~4之间的数字!\n"); 之间的数字! 请输入 之间的数字 } if ( c==4 ) break; Ch7_7_5.c } }
表达式有一个确定的 表达式 有一个确定的 不是逻辑值). 值(不是逻辑值 不是逻辑值
例7.5 编写程序,实现如下功能。 编写程序,实现如下功能。 输入一个实数后,屏幕显示如下菜单: 输入一个实数后,屏幕显示如下菜单: 1. 输出相反数 2. 输出平方数 3. 输出平方根 4. 退出
#include <stdio.h> void main() { int i, c=5; float m; printf("输入任意一个整型数:\n"); 输入任意一个整型数: 输入任意一个整型数 scanf("%f", &m); printf("****************************\n"); printf("1,输出相反数 ,输出相反数\n"); printf("2,输出平方数 ,输出平方数\n"); printf(“3,输出开方根 ,输出开方根\n"); printf("4,退出 ,退出\n"); printf("****************************\n"); …… Ch7_7_5.c
default可以没有. default可以没有. 可以没有
(7). 多个 多个case可共用一 可共用一 组执行语句. 组执行语句 例如为了统计一段文 字中的数字,字母及分隔 字中的数字 字母及分隔 符的个数, 符的个数 可用下列程序段实现: 可用下列程序段实现
switch(ch) 表达式后都有 一冒号”:” . 一冒号 { case ‘0’: case ‘1’: …. 这里有 case ‘8’: 一个空格. 一个空格 case ‘9’: digit ++ ; break ; case ‘ ’: case ‘\n’: case ‘\t’: white++ ; break ; default : character++; break; }