看看哪里错?二级c编程

来源:百度知道 编辑:UC知道 时间:2024/05/19 05:23:54
#include<stdio.h>
#include<math.h>
#define N 100000
void main()
{
double r(double a,double b,double d);
double a,b,d,PI=3.14159265,eps=8.85418782E-12,r1,Q,q,w;
printf("输入椭圆的长轴、短轴和两个椭圆的中心距离:");
scanf("%f,%f,%f",&a,&b,&d);
printf("输入椭圆带电电量:");
scanf("%f",&Q);
q=Q/N;
r1=r(a,b,d);
w=q*q*r1/(8*PI*eps);
printf("所求电势能是:%f",w);
}
double r(double a,double b,double d)
{
double x1,x2,y1,y2,f1,f2=0,f3=0,f4=0,f5=0,m,n;
m=2*a/N,n=2*b/N;
f1=1/sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
for(y2=-a*sqrt(1-(x2-d)*(x2-d)/b*b);y2<=a*sqrt(1-(x2-d)*(x2-d)/b*b);y2+=m)
f2+=f1*m;
for(x2=d-b;x2<=d+b;x2+=n)
f3+=f2*n;
for(y1=-b*sqrt(1-x1*x1/a*a);y1<b*sqrt(1-x1*x1/a*a);y1+=n)
f4+=f3*n;
for(x1=-a;x1<=a;x1+=m)
f5+=f4*m;
return (f5);
}

求出来的值为0,不知道为什么!

是因为for(y2=-a*sqrt(1-(x2-d)*(x2-d)/b*b);y2<=a*sqrt(1-(x2-d)*(x2-d)/b*b);y2+=m)
f2+=f1*m;这个循环还有for(y1=-b*sqrt(1-x1*x1/a*a);y1<b*sqrt(1-x1*x1/a*a);y1+=n)
f4+=f3*n; 这个循环,两个循环都由于条件表达式的问题(第一次就不满足)而一次也没执行!!!导致了f2和f4还是初始值0!

而正是由于f4是0,导致了返回值f5是0。

不信的话,你把f2,f4初始值设成1试试就明白了!

所以问题是出在那两个for的条件表达式上了,请楼主斟酌。

楼主可否满意?

又:为什么条件表达式有问题??很可能与你x1,x2没给初值有关,它们都是野值。这样参与到你的条件表达式中来当然极易引发问题,但,初始值还要楼主具体安排了呵呵。

函数都有问题