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