先前通过if-else语句编写了下列根据情况选择不同计算公式的代码,今天在课堂上见到了多分枝switch-case的语句,便将其进行了更改。
#include<stdio.h>
#include<math.h>
int main()
{int a;
float r,c,s,v;
printf("请输入圆的半径:");
scanf("%f",&r);
printf("\n求圆的周长请输入1\n求圆的面积请输入2\n求球的面积请输入3\n求球的体积请输入4\n");
scanf("%d",&a);
if(a==1)
{
c=2*3.14*r;
printf("圆的周长为:%.2f",c);
}
else
{
if(a==2)
{
s=3.14*pow(r,2);
printf("圆的面积为:%.2f",s);
}
else
{
if(a==3)
{
s=4*3.14*pow(r,2);
printf("球的面积为:%.2f",s);
}
else
{
v=3*3.14*pow(r,3)/4;
printf("球的体积为:%.2f",v);
}
}
}
return 0;
}
更改后的语句:
#include<stdio.h>
#include<math.h>
int main()
{int a;
float r,c,s,v;
printf("请输入圆的半径:");
scanf("%f",&r);
printf("\n求圆的周长请输入1\n求圆的面积请输入2\n求球的面积请输入3\n求球的体积请输入4\n");
scanf("%d",&a);
switch(a)
{
case 1:
{
c=2*3.14*r;
printf("圆的周长为:%.2f",c);
}
break;
case 2:
{
s=3.14*pow(r,2);
printf("圆的面积为:%.2f",s);
}
break;
case 3:
{
s=4*3.14*pow(r,2);
printf("球的面积为:%.2f",s);
}
break;
case 4:
{
v=3*3.14*pow(r,3)/4;
printf("球的体积为:%.2f",v);
}
break;
default:
printf("error");
}
return 0;
}
更改时,鉴于if-else的用法(if、else后若有多条执行语句,若不在其后加上{}便只会执行第一条命令)便在case后也加上了{},但通过自己的测试,发现case后不加{}也能把case-break之间的命令全部执行。
这里单独说一下我总结的if-else和switch-case:
if-else:
if(条件语句)
{
命令1;
命令2;
}
else
{
命令3;
命令4;
}
此时条件满足则执行命令1和命令2;若条件不满足则执行命令3和命令4,但如果不加上{}呢?
if(条件语句)
命令1;
命令2;
else
命令3;
命令4;
命令5;
此时编译会显示'else' without a previous 'if',如若删除命令2,条件满足则执行命令1,不满足则执行命令3、命令4及命令5.
如若需要命令5无论满足条件与否都要执行,那么需要将命令3和命令4用花括号括起来;同理,只将命令3括起来那么无论满足组条件与否都会执行命令4和命令5.
switch-case:
switch(判断依据)
{
case 语句1:
命令1;
命令2;
break;
case 语句2:
命令3;
命令4;
default:
printf(“error");
}
此时判断依据满足语句1则执行命令1和命令2;若判断语句满足语句2则执行命令3和命令4;若将命令1和命令2用{}括起来,命令3和命令4也用{}括起来:
switch(判断依据)
{
case 语句1:
{
命令1;
命令2;
}
break;
case 语句2:
{
命令3;
命令4;
}
default:
printf(“error");
}
此时执行结果与没加{}的结果一致!
注意:switch下边的所有case和default及其执行语句都要用{}括起来!
注:switch的判断依据可以进行算术运算:如switch(a/10)