u3t9:
编写一个程序,输入3个实数,判断这些值能否作为一个三角形的三条边的长,如果能够成三角形,要求输出三角形的面积。
我写的代码如下:
#include <stdio.h>
#include<math.h>
int main()
{
double a,b,c,s;//这里用了double,后文中我做了改动
printf("请输入三边长:\n");
scanf("%f%f%f",&a,&b,&c);
if((a+b>c)&&(a+c>b)&&(b+c>a))
{
s=sqrt((a+b+c)*(a+b-c)*(a-b+c)*(b+c-a)/16.0);
printf("可以。面积为:%f",s);
}
else printf("不可以。");
return 0;
}
用3 4 5检验得到结果却是“不能”
但是如果把上面的double换成float,得到的结果就是对的了
#include <stdio.h>
#include<math.h>
int main()
{
float a,b,c,s;//这里我把double换成了float!!!
printf("请输入三边长:\n");
scanf("%f%f%f",&a,&b,&c);
if((a+b>c)&&(a+c>b)&&(b+c>a))
{
s=sqrt((a+b+c)*(a+b-c)*(a-b+c)*(b+c-a)/16.0);
printf("可以。面积为:%f",s);
}
else printf("不可以。");
return 0;
}
或者,如果我把上面的%f变成%lf,答案也是对的,如下
double a,b,c,s;//这里仍然用double
printf("请输入三边长:\n");
scanf("%lf%lf%lf",&a,&b,&c);//这里把f改成了lf!
为什么会这样?
----------------------------------------分界线----------------------------------------------------------
类似的题:编写程序,输入3对实数,若每对实数分别作为平面坐标系中点的坐标,判断这3个点是否能构成一个三角形。若能构成三角形,判断这个三角形的特征:是直角三角形、等边三角形、等腰三角形还是普通三角形等。
我写的代码如下:
#include <stdio.h>
#include<math.h>
int main()
{
double x1,y1,x2,y2,x3,y3,l12,l23,l13;
int sign=1;
printf("请输入第一个点的x,y:\n");
**scanf("%lf%lf",&x1,&y1);**
printf("请输入第二个点的x,y:\n");
**scanf("%lf%lf",&x2,&y2);**
printf("请输入第三个点的x,y:\n");
**scanf("%lf%lf",&x3,&y3);**
l12=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
l13=sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3));
l23=sqrt((x2-x3)*(x2-x3)+(y2-y3)*(y2-y3));
if(l12+l23>l13&&l23+l13>l12&&l12+l13>l23)
{
printf("可以。\n");
if(l12*l12+l23*l23==l13||l23*l23+l13*l13==l12*l12||l12*l12+l13*l13==l23*l23)
{printf("而且是直角三角形。\n");sign=0;}
if(l12==l23==l13)
{printf("而且是等边三角形。\n");sign=0;}
else if(l12==l23==l13)
{printf("而且是等腰三角形。\n");sign=0;}
if(sign==1)
printf("是普通三角形。\n");
}
else printf("不能。"\n);
return 0;
}
结果是正确的。
但是如果把%lf改成%f,即从原来的:
printf("请输入第一个点的x,y:\n");
**scanf("%lf%lf",&x1,&y1);**
printf("请输入第二个点的x,y:\n");
**scanf("%lf%lf",&x2,&y2);**
printf("请输入第三个点的x,y:\n");
**scanf("%lf%lf",&x3,&y3);**
变成:
printf("请输入第一个点的x,y:\n");
**scanf("%f%f",&x1,&y1);**
printf("请输入第二个点的x,y:\n");
**scanf("%f%f",&x2,&y2);**
printf("请输入第三个点的x,y:\n");
**scanf("%f%f",&x3,&y3);**
用345直角三角形检验却是“不能构成三角形”,如下:
于是在输出“不能”的那行加了一行命令来输出三边长:
else printf("不能。l12=%f,l23=%f,l13=%f\n",&l12,&l23,&l13);
(或者上面的%f应该写成%lf吗?我不知道TuT)//不要这么做!
结果如下:
已解决:对printf()来说不管是float还是double都用%f;对scanf()来说float用%f,double用%lf (っ•̀ω•́)っ✎⁾⁾