C语言switch语句
一般在各个case 语句最后应该加 一break语句, 可使程序流程跳出 Switch结构. 否则会从入口处一直向下执行.
}
09:28:26 Ch7_7_2.c
例7.3 执行下列程序,当分别输入A、B、C、E时,求K的值.
char c; int k=2; scanf(“%c”, &c); switch (c-’A’) { case 0: k++; case 1: K += 2; break; default: k *= k; case 4: k *= 3; } printf(“k=%d”,k);
default可以没有.
09:28:26
(7). 多个case可共用一
组执行语句. 例如为了统计一段文 字中的数字,字母及分隔
符的个数,
可用下列程序段实现:
switch(ch) 表达式后都有 一冒号”:” . { case ‘0’: case ‘1’: …. 这里有 case ‘8’: 一个空格. case ‘9’: digit ++ ; break ; case ‘ ’: case ‘\n’: case ‘\t’: white++ ; break ; default : character++; break; }
for(i = 0; i < 3; i++)
switch(i)
注意所属关系
{ case 1: printf("%d",i);
case 2: printf("%d",i);
default: printf("%d",i);
}
09:28:26
例7. 7 编写一个简易计算器.
Ch7_7_7.c 09:28:26
无break语句 语句序列n+1
09:28:26
说明:
switch语句不等同于if语句:
只进行值的相等性 的检查,不是逻辑判断!
1. switch只能进行值的相等性的检查.
2. if语句不但可以进行相等性的检查, 还可以计算关
系表达式或逻辑表达式,进行逻辑判断的真假.
09:28:26
例7.1 键盘输入0-6之间的整数,分别代表每周的星期日、星期一、 …、星期 六
}
09:28:26
例7.5 编写程序,实现如下功能。
输入一个实数后,屏幕显示如下菜单: 1. 输出相反数 2. 输出平方数 3. 输出平方根 4. 退出
09:28:26
#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
一般形式如下:
09:28:26
switch(表达式 ) { case 常量表达式1: 语句1 [break]; case 常量表达式2: (2). 关于常量表达式1~n: 只起到 语句2 一个标号的作用,根据表达式的值来 [break]; 判断, 找到一个相匹配的入口处,程 … 序往下执行。 各个case后的常量表达式的值 case 常量表达式n: 必须互不相同. 语句n [break]; [default: (3). 每个case分支可有多条语句 语句n+1] ,可不用花括号{ }。 }
09:28:26
switch(表达式)
真(非0)
有break语句
语句序列1
表达式==常量表达式1?
break
假(0)
表达式=常量表eak语句
语句序列2
break
无break语句 有break语句
真(非0)
表达式=常量表达式n?
假(0)
语句序列n
break
….
09:28:26
for(i = 1; i <= 10; i++){ ch = getchar(); switch (ch) { case ‘‘ : input 10 characters: Reold 123? case ’\n‘ : blank ++; blank=1, digit=3, other=6 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;
09:28:26
….. 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 09:28:26 }
09:28:26
说明: (1). 关于表达式: 表达式可以是 整型、字符型等表达式。 有一个确定的值(不是逻辑值).
switch(表达式 ) { case 常量表达式1: (4). 各个case 语句只是一 语句1 个入口标号,并不确定执行 [break]; 的终止点. case 常量表达式2: 语句2 (5). 一般在各个case 语句最后应 该加一break语句, 可使程序流程 [break]; 跳出Switch结构. … case 常量表达式n: 否则会从入口处一直向下执行. 语句n [break]; (6). 各个case和default [default: 出现的先后次序,并不影响执 语句n+1] 行结果. }
ASCII值: ‘0’ 48 ‘A’ 65 ‘a” 97
case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': printf("十进制数: %d\n", ch-55); break;
…
Ch7_7_6.c
09:28:26
case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': printf("十进制数: %d\n", ch-87); break; case 'Q': case 'q': printf("退出程序\n"); exit(0);
#include <stdio.h> #include <stdlib.h> int main() { float numb1 = 0, numb2 = 0; int menu = 1, flag; float total=0; char calType; ….
}
09:28:26
例7.2 求执行下列程序段后k的值
#include <stdio.h> int main() { char c=‘2’; int k=1;
switch (c+1-'0')
‘0‘的ASCII值为48.
{ case 2: k+=1; case 2+1: k+=2; case 4: k+=3; } printf("k=%d\n",k); return 0;
#include <stdio.h> int main( ) { int day; printf("请输入星期的数字编号(0-6): "); scanf("%d", &day); ….
Ch7_7_1.c
09:28:26
表达式有一个确定的 …. 值(不是逻辑值). 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("输入有误,请输入0-6之间的数字!\n"); } return 0;