《switch语句的应用ppt课件》由会员分享,可在线阅读,更多相关《switch语句的应用ppt课件(40页珍藏版)》请在金锄头文库上搜索。
1、第 七 章 switch 语句的应用,7.1 switch 语句: switch 语句是一条多分支选择语句. 在实际应用中,要在多种情况中选择一种情况,执行某一部分语句。 当然可以使用嵌套的if , if else if语句来处理,但其分支过多,程序冗长,难读, 不够灵巧。,switch语句是C语言中处理多路选择问题的一种更直观和有效的手段. 在测试某个表达式是否与一组常量表达式中的某一值相配时,switch语句显得更为方便.,一般形式如下:,switch(表达式 ) case 常量表达式1: 语句1 break; case 常量表达式2: 语句2 break; case 常量表达式n: 语句
2、n break; default: 语句n+1 ,说明: (1). 关于表达式: 表达式可以是整型、字符型等表达式。 有一个确定的值(不是逻辑值).,(2). 关于常量表达式1n: 只起到一个标号的作用,根据表达式的值来判断, 找到一个相匹配的入口处,程序往下执行。 各个case后的常量表达式的值必须互不相同.,(3). 每个case分支可有多条语句,可不用花括号 。,switch(表达式 ) case 常量表达式1: 语句1 break; case 常量表达式2: 语句2 break; case 常量表达式n: 语句n break; default: 语句n+1 ,(4). 各个case 语
3、句只是一个入口标号,并不确定执行的终止点.,(5). 一般在各个case 语句最后应该加一break语句, 可使程序流程跳出Switch结构. 否则会从入口处一直向下执行.,(6). 各个case和default出现的先后次序,并不影响执行结果. default可以没有.,(7). 多个case可共用一组执行语句. 例如为了统计一段文字中的数字,字母及分隔符的个数, 可用下列程序段实现:,switch(ch) case 0: case 1: . case 8: case 9: digit + ; break ; case : case n: case t: white+ ; break ; d
4、efault : character+; break; ,这里有一个空格.,表达式后都有一冒号”:” .,无break语句,switch(表达式),说明:,switch语句不等同于if语句: 1. switch只能进行值的相等性的检查. 2. if语句不但可以进行相等性的检查, 还可以计算关系表达式或逻辑表达式,进行逻辑判断的真假.,只进行值的相等性 的检查,不是逻辑判断!,例7.1 键盘输入0-6之间的整数,分别代表每周的星期日、星期一、星期六,#include int main( ) int day; printf(请输入星期的数字编号(0-6): ); scanf(%d, .,Ch7_7
5、_1.c,. switch (day) 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(输入有误,请输入0-6之间的数字!n); return 0; ,每个case分支可有多条语句,可不用花括号
6、,也可以用。,表达式有一个确定的值(不是逻辑值).,例7.2 求执行下列程序段后k的值 #include int main() char c=2; int k=1; switch (c+1-0) case 2: k+=1; case 2+1: k+=2; case 4: k+=3; printf(k=%dn,k); return 0; ,一般在各个case 语句最后应该加一break语句, 可使程序流程跳出Switch结构. 否则会从入口处一直向下执行.,0的ASCII值为48.,Ch7_7_2.c,例7.3 执行下列程序,当分别输入A、B、C、E时,求K的值. char c; int k=2
7、; scanf(“%c”, ,Ch7_7_3.c,例7.4 输入一字符,如果是Y, N或y, n,则分别执行一输出语句,如果是其他字母则执行另一输出语句。,#include void main() char ch; printf(Please input Y/N (y/n): ); scanf(%c, .,Ch7_7_4.c,. switch(ch) 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
8、 other char. n); ,多个case可共用一组执行语句.,表达式有一个确定的值(不是逻辑值).,例7.5 编写程序,实现如下功能。 输入一个实数后,屏幕显示如下菜单: 1. 输出相反数 2. 输出平方数 3. 输出平方根 4. 退出,#include void main() int i, c=5; float m; printf(输入任意一个整型数:n); scanf(%f, ,Ch7_7_5.c,. while(1) scanf(%d, ,Ch7_7_5.c,例7. 6 根据输入字符(0-9及A-F(af)显示与该字符所表示的十六进制数相对应的十进制数。 (例如,输入A,输出10
9、,输入0,输出0),#include #include int main( ) char ch; for(; ; ) printf(“n请输入十六进制数 0 F ( 输入Q 或 q 退出): ); scanf(%c, .,当输入一个字符,打一个回车后,输入结束. 但在输入缓冲区中存在二个字符:输入的字符,还有一个是n.,当打了一个回车后(其实是二个动作:回车,换行. c语言会把回车,换行自动转换为n.反之亦然.,switch( ch ) case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9:
10、 printf(十进制数: %dn, ch-0); break; case A: case B: case C: case D: case E: case F: printf(十进制数: %dn, ch-55); break; ,Ch7_7_6.c,ASCII值:0 48A 65a” 97,case a: case b: case c: case d: case e: case f: printf(十进制数: %dn, ch-87); break; case Q: case q: printf(退出程序n); exit(0); default: printf(输入有误!); return 0;
11、 ,ASCII值:0 48A 65a” 97,示例: 输入10个字符,分别统计出其中空格或回车、数字和其他字符的个数。,void main( ) int blank, digit, i, other; char ch; blank = digit = other = 0; printf(input 10 characters: ); .,for(i = 1; i = 10; i+) ch = getchar(); switch (ch) case : case n : blank +; break; case 0 : case 1 : case 2 : case 3: case 4 : cas
12、e 5 : case 6 : case 7 : case 8 : case 9 : digit +; break; default: other +; break; printf(“blank=%d, digit=%d, other=%dn”, blank, digit, other); ,input 10 characters: Reold 123? blank=1, digit=3, other=6,例: #include void main( ) int i ; for(i = 0; i 3; i+) switch(i) case 1: printf(%d,i); case 2: pri
13、ntf(%d,i); default: printf(%d,i); ,以下程序的输出结果是: A. 011122 B. 012 C. 012020 D. 120,注意所属关系,例7. 7 编写一个简易计算器.,Ch7_7_7.c,#include #include int main() float numb1 = 0, numb2 = 0; int menu = 1, flag; float total=0; char calType; .,for(;) flag=1; printf(nt希望进行哪种运算?nn); printf(t 1:加法n); printf(t 2:减法n); print
14、f(t 3:乘法n); printf(t 4:除法n); printf(t 0:退出计算器n); printf(nt输入你的选择:); .,. scanf(%d, .,退出程序.,switch(menu) case 1: total=numb1+numb2; calType=+; break; case 2: total=numb1-numb2; calType=-; break; case 3: total=numb1*numb2; calType=*;break; case 4: if(numb2=0) printf(nt不能被0除n); flag=0;break; total=numb1
15、/numb2; calType=/;break; default: printf(无效的选择!n); ,if(flag=1) printf(nn*); printf(nnt%.3f %c %.3f = %.3f, numb1, calType, numb2, total); printf(nn*nn); return 0; ,Ch7_7_7.c,第 七 章 多分支语句的应用结束,问输出为?: A) K=3 B) K=4 C)K=2 D)K=0 main( ) int k=0; char c=A; do swich(c+) case A: K+; break; case B: K-; case C: k+=2; break; case D: K=K%2; continue; case E: K=K*10; break; default: K=K/3; K+; while(cG