C语言switch语句,if语句一般用于处理一个或两个分支的选择结构,如果分支较多,就需要使用if语句的嵌套,但嵌套的if语句层数越多,程序越复杂,可读性就越差。C语句提供的switch语句能同时处理多个分支选择结构。其语法格式为:
switch(表达式)
{
case常量1:语句组1
case常量2:语句组2
…
case常量n:语句组n
default:语句组n+1
}
switch语句在执行过程中,首先计算表达式的值,当表达式的值与某一个case后面的常量表达式的值相等、相匹配时,就去执行此case后面的语句。如果所有的case中的常量表达式的值都与“表达式”的值都不相匹配,就执行default(默认)后面的语句。
这里要说明的是:
- switch后面括号内的 “表达式”可以是任何类型的数据。可以是整型表达式、字符型表达式,也可以是枚举类型数据。
- 每个case的常量表达式的值必须互不相同,否则会产生错误的选择。
- 各个case和default的出现次序不影响执行的结果。
- 在执行switch语句时,根据switch后面表达式的值找到匹配的入口标号,执行完该case语句后,继续执行下一个case语句,不再进行标号判断。case常量表达式只起到入口标示的作用。
示例:输入考试成绩的等级,打印出百分制分数段(A等:85分以上,B等:70~84,C等:60~69,D等:60分以下)。
#include <stdio.h>
void main()
{
char grade; /*定义一个字符型变量*/
scanf("%c", &grade); /*输入一个字符型的值*/
switch (grade) /*判读输入的值*/
{
case 'A':
printf("85~100\n");
case 'B':
printf("70~84\n");
case 'C':
printf("60~69\n");
case 'D':
printf("<60\n");
default:
printf("Error\n");
}
}
程序运行时,当输入:A↙
程序运行的结果为:
85~100
70~84
60~69
<60
Error
程序运行时,当输入:B↙
程序运行的结果为:
70~84
60~69
<60
Error
从上面的运行结果可以看出,当switch后面圆括号中表达式的值与某个case后面的常量表达式的值相等时,就执行此case后面的语句,然后自动进入下一个case语句继续执行。如果这样执行,会得到一些我们不需要的结果,为了解决这个问题,需要使用break语句,执行一个case后,跳出switch语句。一般形式为:
switch(表达式)
{
case常量1:语句1;break;
case常量2:语句2; break;
…
case常量n:语句n; break;
default:语句n+1;
}
#include <stdio.h>
void main()
{
char grade; /*定义一个字符型变量*/
scanf("%c", &grade); /*输入一个字符型的值*/
switch (grade) /*判读输入的值*/
{
case 'A':
printf("85~100\n");
break;
case 'B':
printf("70~84\n");
break;
case 'C':
printf("60~69\n");
break;
case 'D':
printf("<60\n");
break;
default:
printf("Error\n");
}
}
程序运行时,当输入:A↙
程序运行的结果为:
85~100
程序运行时,当输入:B↙
程序运行的结果为:
70~84
这里需要说明的是,switch-case语句中,default总是放在最后,这里default后不需要break语句,而default也不是必需的,如果switch-case语句中没有default部分,当switch后面圆括号中表达式的值与所有case后面的常量表达式的值都不相等时,则不执行任何一个分支,直接退出switch语句。
- 在switch-case语句中,多个case可以共用一条执行语句。
示例:输入年号和月号,计算这一年的这个月有多少天。
#include <stdio.h>
void main()
{
int year, month, day;
printf("请输入年月:\n");
scanf("%d,%d", &year, &month);
switch (month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
day = 31;
break;
case 4:
case 6:
case 9:
case 11:
day = 30;
break;
case 2:
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
day = 29;
else
day = 28;
break;
default:
printf("输入的月份是错误的!\n");
}
printf("year:%d,month:%d,day=%d\n", year, month, day);
}
程序运行的结果为:
请输入年月:
2008,2↙
year:2008,month:2,day=29
酷客网(coolcou.com) – 专注IT精品教程和实例
评论前必须登录!
注册