switch (表达式的值) {
case 1:
语句1
break;
case 2:
语句2
break;
case 3:
语句3
break;
case 4:
语句4
break;
......
default:
默认语句
break;
1、适用于离散值的开关判断,可以转换成一段连续的范围
2、注意case穿透,break的使用。
3、可以把各个case值定义为enum枚举或者使用宏定义定义别名
1、使用switch语句完成:输入一个简单的两个数字加减乘除运算的式子,使用switch通过转换加减乘除符号计算各种情况下式子的值,也就是一个简单的计算器:
int a,b; float c; char sign; printf("请输入要运算的数字:"); scanf("%d",&a); getchar(); //在输入第一个数字后按回车确认,使用getchar在读取sign的时候会错误的把回车符读进来,所以先使用getchar把这个字符读走。 printf("请输入要进行的运算:"); sign=getchar(); printf("请输入要运算的数字:"); scanf("%d",&b); switch(sign) { case '+': c=a+b; break; case '-': c=a-b; break; case '*': c=a*b; break; case '/': if (b) { c=a/b; }else printf("除数不能为0 "); } printf("%d%c%d=%f ",a,sign,b,c);
2、使用海伦公式计算三角形的面积。海伦公式的面积为,其中p=(a+b+c)/2,a,b,c为三角形三条边长。
注意:本程序应先判断输入的三个边长是否符合三角形两边之和大于第三边,两边之差小于第三边的条件,如果不符合条件,则不是三角形,不能使用海伦公式往下计算,本程序忽略此判断,假设三个边长符合三角形的边长条件。此判断在下一个程序中会体现出来。
float a,b,c,p,s; printf("请输入三角形三个边长: "); scanf("%f%f%f", &a, &b, &c); p = (a+b+c)/2; s = sqrt((double)p * (p-a) * (p-b) * (p-c)); printf("三角形的面积是%.2f ",s);
3、输入三角形的三条边长,判断三角形是直角三角形还是等边、等腰、一般三角形。使用if嵌套完成。
float a, b, c; printf("请输入三角形三个边长: "); scanf("%f%f%f", &a, &b, &c); if (a>0 && b>0 && c>0) { if (a+b>c && a+c>b && b+c>a) { if (a==b && b==c) { printf("输入是正三角形 "); }else if(a==b || b==c || a==c){ if(a*a==b*b+c*c || a*a+b*b==c*c || a*a+c*c==b*b) printf("输入是等腰直角三角形 "); else printf("输入是等腰三角形 "); }else if(a*a==b*b+c*c || a*a+b*b==c*c || a*a+c*c==b*b){ printf("输入是直角三角形 "); }else printf("输入是一般三角形 "); } else printf("输入不是三角形 "); }else{ printf("输入不是三角形 "); }
4、输入一个百分制的成绩,使用switch语句把此成绩转换为A,B,C,D的等级制并输出:
int score=0;
char grade='0';
scanf("%d",&score); if (score>=0 && score<=100) { switch (score/10) { case 10: case 9: grade = 'A'; break; case 8: grade = 'B'; break; case 7: grade = 'C'; break; case 6: grade = 'D'; break; default: grade ='N'; break; } printf("该成绩转换为等级制为%c!!! ",grade); }else printf("输入不合法!!!! ");