各位大佬,我想问一下为什么这个函数用sqrt表根号会显示错误呢。(s算的是三角形面...
#include <stdio.h>#include <math.h>
int main()
{ int a,b,c,p,s;
a=3;
b=4;
c=5;
p=(1.0/2)*(a+b+c);
s=sqrt(p*(p-a)*(p-b)*(p-c));
printf("a=%d,b=&d,c=%d,p=%d,s=%d",a,b,c,p,s);
} 本帖最后由 yuweb 于 2019-10-30 09:00 编辑
1、p,s用double存储,除非你能保证p=(a+b+c)/2;始终是整除才用int
2、int main()添加return 0;防止警告
3、printf("a=%d,b=&d,c=%d,p=%d,s=%d \n",a,b,c,p,s);中b=&d错了,应该是b=%d
改成printf("a=%d,b=%d,c=%d,p=%lf,s=%lf \n",a,b,c,p,s);
#include <stdio.h>
#include <math.h>
int main()
{
int a,b,c;
double p,s;
a=3;
b=4;
c=5;
p=(a+b+c)/2;
s=sqrt(p*(p-a)*(p-b)*(p-c));
printf("a=%d,b=%d,c=%d,p=%lf,s=%lf \n",a,b,c,p,s);
return 0;
} 本帖最后由 bin554385863 于 2019-10-30 09:06 编辑
楼上说的没错,
眼花了233 bin554385863 发表于 2019-10-30 08:56
你试图对一个负数在实数域内开平方,你是存心刁难编译器么→_→
p=4 c=5
p-c=-1
p=6 yuweb 发表于 2019-10-30 08:56
1、p,s用double存储,除非你能保证p=(a+b+c)/2;始终是整除才用int
2、int main()添加return 0;防止警告
3 ...
会啦会啦,谢谢大哥!!! bin554385863 发表于 2019-10-30 08:56
你试图对一个负数在实数域内开平方,你是存心刁难编译器么→_→
p=4 c=5
p-c=-1
发现问题啦,谢谢哥 yuweb 发表于 2019-10-30 09:01
p=6
晕,看错了(⊙o⊙) 秦九域 发表于 2019-10-30 09:04
会啦会啦,谢谢大哥!!!
我还想问一下%d和%f和%lf的是用场合分别是什么呀? 秦九域 发表于 2019-10-30 09:15
我还想问一下%d和%f和%lf的是用场合分别是什么呀?
%d对应int
%f对应float
%lf对应double
%ld对应long
%lld对应long long 1、%d用于int
2、关于%f和%lf
%f和%lf在printf中使用没有区别,因为当printf函数当遇到float类型时会自动转化为double
在scanf中double应该用%lf,而float用%f,这个不能随便写,否则会出错的 yuweb 发表于 2019-10-30 11:55
1、%d用于int
2、关于%f和%lf
%f和%lf在printf中使用没有区别,因为当printf函数当遇到float类型时会自动 ...
好的好的,谢谢啦!
页:
[1]