[求助]程序哪编错了,请行家指点
#include <stdio.h>
#include <math.h>
main()
{
int i,j,k,m;
scanf("%d%d%d",&i,&j,&k);
m=(i+j+k)/2;
printf("%d\n",sqrt(m*(m-i)*(m-k)*(m-j)));
}
语法是对的,可我输入三个数的时候,输出是0,怎么回事?`
搜索更多相关的解决方案:
行家
----------------解决方案--------------------------------------------------------
以下是引用frog555在2006-11-22 21:36:29的发言:
#include <stdio.h>
#include <math.h>
main()
{
int i,j,k,m;
scanf("%d%d%d",&i,&j,&k);
m=(i+j+k)/2;
printf("%d\n",sqrt(m*(m-i)*(m-k)*(m-j)));
}
语法是对的,可我输入三个数的时候,输出是0,怎么回事?`
要保证输入的三个数符合三角行三边关系.还有m不能是整型.假如m取整后和三边中有一相等,那就是0
----------------解决方案--------------------------------------------------------
我输6,8,10都符合你的要求可输出是0
----------------解决方案--------------------------------------------------------
还有一个 输出格式不是%d,而是%lf.
----------------解决方案--------------------------------------------------------
看了你的问题我想到一个问题,那个输入是怎么回事?
你是怎么在键盘上输入的?
6空格8空格10空格回车?
我的问题就是直接输入6810回车,结果怎么样?这几个数字怎么样落在i,j,k里?
谭浩强那本烂书我前段看了下,关于SCANF我就总结了一句话,键盘输入和格式串对等+回车,我知道会有些例外,不过他罗嗦的说了那么多,谁记的住,我还没编过程序,别笑我问的简单啊.
----------------解决方案--------------------------------------------------------
要区别一个数,不就是用空格隔开吗.
直接6810,会认为是一个数.
----------------解决方案--------------------------------------------------------
#include <stdio.h>
#include <math.h>
int main()
{
int i,j,k;
float m; /*要得出精确的结果就要用到 float 型*/
scanf("%d,%d,%d",&i,&j,&k); /*我觉的最好%d和%d之间还是用一下逗号比较好*/
m=(i+j+k)/2.0; /*因为i,j,k都是整型的,如果写成2的话,得出的结果小数部分会被舍去,所以用2.0*/
printf("%f\n",sqrt(m*(m-i)*(m-k)*(m-j))); /*得出的结果是float型的,所以用 %f */
getch();
return 0;
}
----------------解决方案--------------------------------------------------------
最好每个数字都用浮点型的,因为(i+j+k)/2是取的整,小数部分有可能略掉了。再者注意三个数字关系,否则出现sqrt下的数小于0。
----------------解决方案--------------------------------------------------------
要区别一个数,不就是用空格隔开吗.
直接6810,会认为是一个数.
谢谢
没错
程序继续等待输入了?
----------------解决方案--------------------------------------------------------
你的程序没有语法错误!!!!!!!!!!!!!
可以正常运行!!!!!!!!!
----------------解决方案--------------------------------------------------------