《switch语句的应用》PPT课件.ppt_第1页
《switch语句的应用》PPT课件.ppt_第2页
《switch语句的应用》PPT课件.ppt_第3页
《switch语句的应用》PPT课件.ppt_第4页
《switch语句的应用》PPT课件.ppt_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第 七 章 switch 语句的应用,7.1 switch 语句: switch 语句是一条多分支选择语句. 在实际应用中,要在多种情况中选择一种情况,执行某一部分语句。 当然可以使用嵌套的if , if else if语句来处理,但其分支过多,程序冗长,难读, 不够灵巧。,switch语句是C语言中处理多路选择问题的一种更直观和有效的手段. 在测试某个表达式是否与一组常量表达式中的某一值相配时,switch语句显得更为方便.,一般形式如下:,switch(表达式 ) case 常量表达式1: 语句1 break; case 常量表达式2: 语句2 break; case 常量表达式n: 语句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 语句只是一个入口标号,并不确定执行的终止点.,(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 ; default : 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_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分支可有多条语句,可不用花括号 ,也可以用。,表达式有一个确定的值(不是逻辑值).,例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; 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 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,输入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: 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 48 A 65 a” 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; ,ASCII值: 0 48 A 65 a” 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 : case 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: printf(“%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“); printf(“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/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); 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,注: 每次执行switch(C+)时,先取C的值,找到入 口,然后C增1. 当执行到continue时,流程跳过do-while语句 中当未执行的语句,而直接转向while的条件表 达式,判循环是否进行.,第7章后练习,练习与实践: 1百分制转换成五分制. #include int main() int x; printf(“请输入学生百分制成绩:n输入负数结束程序:n“); scanf(“%d“, ,课本 P101: 1题,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题, printf(“请输入学生百分制成绩:n输入负数结束程序:n“); scanf(“%d“, ,#in

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论