鱼C论坛

 找回密码
 立即注册
查看: 2008|回复: 10

[已解决]各位大佬,我想问一下为什么这个函数用sqrt表根号会显示错误呢。(s算的是三角形面...

[复制链接]
发表于 2019-10-30 08:34:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#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);

}
最佳答案
2019-10-30 08:56:22
本帖最后由 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-10-30 08:56:22 | 显示全部楼层    本楼为最佳答案   
本帖最后由 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-30 08:56:49 From FishC Mobile | 显示全部楼层
本帖最后由 bin554385863 于 2019-10-30 09:06 编辑

楼上说的没错,
眼花了233
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-30 09:01:07 | 显示全部楼层
bin554385863 发表于 2019-10-30 08:56
你试图对一个负数在实数域内开平方,你是存心刁难编译器么→_→
p=4 c=5
p-c=-1

p=6
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-30 09:04:23 | 显示全部楼层
yuweb 发表于 2019-10-30 08:56
1、p,s用double存储,除非你能保证p=(a+b+c)/2;始终是整除才用int
2、int main()添加return 0;防止警告
3 ...

会啦会啦,谢谢大哥!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-30 09:05:13 | 显示全部楼层
bin554385863 发表于 2019-10-30 08:56
你试图对一个负数在实数域内开平方,你是存心刁难编译器么→_→
p=4 c=5
p-c=-1

发现问题啦,谢谢哥
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-30 09:05:59 From FishC Mobile | 显示全部楼层
yuweb 发表于 2019-10-30 09:01
p=6

晕,看错了(⊙o⊙)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-30 09:15:50 | 显示全部楼层
秦九域 发表于 2019-10-30 09:04
会啦会啦,谢谢大哥!!!

我还想问一下%d和%f和%lf的是用场合分别是什么呀?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-30 10:58:44 From FishC Mobile | 显示全部楼层
秦九域 发表于 2019-10-30 09:15
我还想问一下%d和%f和%lf的是用场合分别是什么呀?

%d对应int
%f对应float
%lf对应double
%ld对应long
%lld对应long long
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-30 11:55:54 | 显示全部楼层
1、%d用于int
2、关于%f和%lf
%f和%lf在printf中使用没有区别,因为当printf函数当遇到float类型时会自动转化为double
在scanf中double应该用%lf,而float用%f,这个不能随便写,否则会出错的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-11 23:38:09 | 显示全部楼层
yuweb 发表于 2019-10-30 11:55
1、%d用于int
2、关于%f和%lf
%f和%lf在printf中使用没有区别,因为当printf函数当遇到float类型时会自动 ...

好的好的,谢谢啦!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-16 12:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表