作业帮 > 综合 > 作业

用c语言写程序;1.给定三个值x,y,z,返回以这三个值为边长的三角形面积,精确到0.000001,利用海伦公式

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/05/29 02:06:23
用c语言写程序;1.给定三个值x,y,z,返回以这三个值为边长的三角形面积,精确到0.000001,利用海伦公式
2.给定一个区间的上下限,返回函数x/1+x×x在该区间上的积分,精确到0.000001
3.求∫1 +∞ sinx/x dx(∫1 +∞是1到正无穷上积分)
第一题:
#include
#include
int main()
{
float a,b,c,p,S;
printf("Input a,b,c:");
scanf("%f%f%f",&a,&b,&c);
p = (a + b + c) / 2;
S = sqrt(p * (p - a) * (p - b) * (p - c)); /*海伦公式*/
printf("%f",S);
return 0;
}
第二题:∫x/1+x*x = ln(1+x*x)/2+C
#include
#include
int main()
{
float t;
double a,b;
printf("Input min,max:");
scanf("%lf%lf",&a,&b);
t = (log(1 + b * b)) / 2 - (log(1 + a * a)) / 2; /*log()即ln()*/
printf("%f",t);
return 0;
}/*本题也可以暴力求解,详见第三题*/
第三题:这个积分没法求,要用到级数,C中不能简单实现,下使用暴力求解
#include
#include
int main()
{
float dx = 0.00001; /*影响精度*/
float ans = 0,x = 1,t;
while((t = sin(x) / x * dx) >= 0.000001) /*精确到0.000001*/
{
x += dx;
ans += t;
}
printf("%f",ans);
return 0;
}
这几道题不难啊.主要是数学知识吧.
望采纳
再问: 我刚开始学C语言,这几个貌似是看不懂。。。不过还是谢谢。第三题是无法用C语言或者C 写吗
再答: 不是无法用c语言写,而是会比较麻烦。。 因为数学中∫sinx/x dx这个积分只能通过级数表达,而在C语言中使用级数相对直接按定积分定义进行暴力求解更繁琐,代码效率更低,所以采取暴力求解的方法 而用计算机求定积分大部分情况暴力求解都可以处理,所以我给出的第三题的代码是一种广义的解法,具有通用性。。简单点说就是直接套公式的懒人算法的意思。。 暴力求解定积分问题是无法得出精确值的。。即使精度再高也不行。。因为本身的算法就有偏差。。所以我写了“这个积分没法求,要用到级数,C中不能简单实现,下使用暴力求解”这句话。。 求采纳