搜索
查看: 597|回复: 5
打印 上一主题 下一主题

迭代计算A=sinx+x,编译成功但运行不了,万望解答,不胜感激。

[复制链接]
跳转到指定楼层
楼主
发表于 2015-11-27 20:42:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
5啊哈币
#include <stdio.h>
#include<math.h>
main()
{
float a,D,b=0.014,A,v,i,q,sol,s=3,l,y,z;
printf("input q(m^3/s),D(m),v(m/s)\n");
scanf("%lf\n%lf\n%lf\n",&q,&D,&v);
A=q/v;
sol=8*A/pow(D,2);
a=sol+sin(s);
do
{
s=a;
a=sol+sin(s);
l=abs(s-a);
}
while(l>0.001);
z=a-sin(a);
i=pow(20.16*b*q*pow(a,2/3)/(pow(z,5/3)*pow(D,8/3)),2);
y=(1-cos(a/2))/2;
printf("i=%d\n",i);
printf("y=%d\n",y);
return 0;
}


沙发
发表于 2015-11-27 22:46:47 | 只看该作者
不太懂,不过查了一下abs的头文件是 <stdlib.h>..
板凳
发表于 2015-11-27 22:51:10 | 只看该作者
本帖最后由 小榛鼠 于 2015-11-27 22:58 编辑

abs原型是int abs(int i);
浮点数绝对值似乎应该用fabs,头文件是<math.h>
地板
 楼主| 发表于 2015-11-28 00:36:29 | 只看该作者
小榛鼠 发表于 2015-11-27 22:46
不太懂,不过查了一下abs的头文件是 ..

嗯嗯,谢谢。这个已经改过来了,但运行计算结果是错误的。应该是运用pow函数时,幂次不能是非整数,这个怎么解决呢?
5#
 楼主| 发表于 2015-11-28 00:38:04 | 只看该作者
本帖最后由 xudansmile 于 2015-11-28 00:40 编辑
xudansmile 发表于 2015-11-28 00:36
嗯嗯,谢谢。这个已经改过来了,但运行计算结果是错误的。应该是运用pow函数时,幂次不能是非整数,这个 ...

#include <stdio.h>
#include <stdlib.h>
#include<math.h>
main()
{
float t=3,a,l,A,q,i,v,D,n=0.014;printf("input q(m^3/s),D(m),v(m/s)\n");
scanf("%lf\n%lf\n%lf\n",&q,&D,&v);
v=pow(i,3/2)*pow(D,8)/pow(n*q*20.16,3);
printf("v=%lf",v);
do
{
a=pow(v*pow(t-sin(t),5),1/2);
l=fabs(t-a);
t=a;
}
while(l>0.0000001);
printf("t=%lf",t);
system("pause");
return 0;
}
6#
发表于 2015-11-28 13:53:45 | 只看该作者
科学计算需要的肯定不是float,而且后面你用的占位符也是double的%lf
牛顿迭代法的实现没看,因为那堆变量名看不懂
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表