第7章 switch语句的应用

更新时间:2023-08-28 02:53:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第七章switch 语句的应用

7.1

switch 语句:

switch 语句是一条多分支选择语句. 在实际应用中,要在多种情况中选择一种情况,执行某 一部分语句。 当然可以使用嵌套的if , if else if语句来处理,但其分支 过多,程序冗长,难读, 不够灵巧。

switch语句是C语言中处理多路选择问题的一种更直观 和有效的手段. 在测试某个表达式是否与一组常量表达式 中的某一值相配时,switch语句显得更为方便.

一般形式如下:

switch(表达式 ) { case 常量表达式1: 语句1 [break]; case 常量表达式2: (2). 关于常量表达式1~n: 只起到 语句2 一个标号的作用,根据表达式的值来 [break]; 判断, 找到一个相匹配的入口处,程 … 序往下执行。 各个case后的常量表达式的值 case 常量表达式n: 必须互不相同. 语句n [break]; [default: (3). 每个case分支可有多条语句 语句n+1] ,可不用花括号{ }。 }

说明: (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] 行结果. }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; }

switch(表达式)真(非0)

有break语句语句序列1

表达式==常量表达式1?

break

假(0)表达式==常量表达式2? 假(0)

无break语句真(非0)

有break语句

语句序列2 无break语句

break

有break语句真(非0)

表达式==常量表达式n?假(0)

语句序列n 无break语句 语句序列n+1

break

说明:switch语句不等同于if语句:只进行值的相等性 的检查,不是逻辑判断!

1. switch只能进行值的相等性的检查.

2. if语句不但可以进行相等性的检查, 还可以计算关系表达式或逻辑表达式,进行逻辑判断的真假.

例7.1 键盘输入0-6之间的整数,分别代表每周的星期 日、星期一、…、星期六#include <stdio.h> int main( ) { int day; printf("请输入星期的数字编号(0-6): "); scanf("%d", &day); ….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("输入有误,请输入0-6之间的数字!\n"); } return 0;

}

例7.2 求执行下列程序段后k的值#include <stdio.h> int main() { char c= 2 ; int k=1;‘0‘的ASCII值为48.

switch (c+1-'0'){ case 2: k+=1; case 3: k+=2; case 4: k+=3; } printf("k=%d\n",k); return 0; }一般在各个case 语句最后应该加 一break语句, 可使程序流程跳出 Switch结构. 否则会从入口处一直向下执行.

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);Ch7_7_3.c

例7.4 输入一字符,如果是Y, N或y, n,则分别执行一 输出语句,如果是其他字母则执行另一输出语句。

#include <stdio.h> void main() { char ch; printf("Please input Y/N (y/n): ");

scanf("%c", &ch);….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"); }

}

例7.5 编写程序,实现如下功能。输入一个实数后,屏幕显示如下菜单: 1. 输出相反数 2. 输出平方数 3. 输出平方根 4. 退出

#include <stdio.h> #include<math.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 ……

…..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. 6根据输入字符(0-9及A-F(a~f))显示与该字符所表示的十六进制数相对应的十进制数。 (例如,输入‘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); getchar( );

当打了一个回车后(其实是两个动作 :回车,换行. printf("输入的是:%c", ch); c语言会把回车,换行自动转换

为 …. ’\n’.反之亦然.

本文来源:https://www.bwwdw.com/article/7tii.html

Top