之前课堂上要求的求三角形的面积,我用if-else多添加了一个判断三角形的类型的程序。代码如下:
#include<stdio.h>
#include<math.h>
main(void)
{
float a,b,c,s;
printf("请输入三角形的三边长:");
scanf("%f%f%f",&a,&b,&c);
{
if(a+b>c&&a+c>b&&b+c>a&&a-b<c&&a-c<b&&b-c<a&&b-a<c&&c-a<b&&c-b<a) //判断是否满足三角形的条件(两边之和大于第三边、两边只差小于第三边)
{if(a==b&&b==c) //判断a=b=c是否成立(不可用a==b==c)
printf("\n该三角形为等边三角形");
else
if(a==b||a==c||b==c) //如果不成立判断三边里是否有两边相等
if((pow(a,2)+pow(b,2))==pow(c,2)|| //判断是否满足勾股定理
(pow(a,2)+pow(c,2))==pow(b,2)||
(pow(c,2)+pow(b,2))==pow(a,2))
printf("\n该三角形为等腰直角三角形");
else
printf("\n该三角形为等腰三角形");
else
if((pow(a,2)+pow(b,2))==pow(c,2)||
(pow(a,2)+pow(c,2))==pow(b,2)||
(pow(c,2)+pow(b,2))==pow(a,2))
printf("\n该三角形为直角三角形");
else
printf("\n该三角形为普通三角形") ;
{
s=a+b+c;
s=s/2;
s=sqrt(s*(s-a)*(s-b)*(s-c));
printf("\n三角形的面积为:%f",s);
}
}
else
{
printf("\n该三角形不存在!");
}
}
return 0;
}
上边的注释里解释了一些比较长的代码的意义,这里做少许总结:
数学函数:sqrt意为开方
pow(x,y)意为x的y次方
几个新接触的逻辑符号:
&&为逻辑与运算,前后两者同时满足时结果为真(换句话说两者里任何一组不满足则结果都为假)
||为逻辑或运算,两者中至少有一者满足时结果则为真(换句话说只有两者同时不满足时结果才为假)
==为判断两者是否相等,两者相等为真,不相等为假
此处引出一下:
#include<stdio.h>
int main(void)
{
int a,b,c;
scanf("%d%d",&a,&b);
c=1;
if(a==b==c)
printf("A");
else
printf("B");
return 0;
}
若如此编程,想要输出A,只需要a,b两者相等便可。
解释:a==b==c是自左向右判断,a和b若相等,则结果为真,a==b便会等效为1,再是1与c来比较;相反,若a与b不等,则结果为假,a==b便会等效为0,再是0与c来比较。因此a==b==c运算时都是0与c比较或者1与c比较,若要让程序判断a,b,c三者是否相等,可以用与运算:a==b&&a==c来得到想要的结果。
嵌套:
嵌套是用if-else的定义来完成的,如果if括号内的条件满足,则执行if~else之间的程序,若条件不满足,则执行else下边的程序。如上程序里,第一个if是判断输入的三条边是否满足任意两边之和大于第三边、任意两边只差小于第三边,如果满足,则继续判断该三角形的类别,注意看可以发现,第一个if下边打了个花括号{},一直到最后一个else之前才截止,若不打这个花括号,系统就会判定你这个else之前没有if;若else后有多个条件,只有else紧接着的第一条命令是不满足条件才执行的则不需要加花括号,此后的命令无论条件是否满足都会正常执行;如若else后有多条是不满足条件才执行的命令,那么就需要将在这几条命令全部用花括号括起来。第一个代码里:
{ s=a+b+c; s=s/2; s=sqrt(s*(s-a)*(s-b)*(s-c)); printf("\n三角形的面积为:%f",s); }
只要第一个if满足条件这串代码都会执行。
总的来讲就是:
if(条件)
{
代码段1 //在代码段1内又可以有下一个if-else函数或者其他函数
}
else
代码段2 //在代码段2内也可以有更多的函数,如果后面还有无论满足条件与否都要执行的命令,则代码段2需要用花括号括起来
注意:if与else之间的多于两条命令的代码都需要用花括号括起来!