C语言问题呀!!急呀1高手快点帮帮忙呀!

2024-11-26 10:00:15
推荐回答(2个)
回答1:

公式是:(加了些括号,避免歧义)
α=
-4∑(-1)^n1/((n1^2+c^2*n2^2)/(1+c^2))^(1/2)
-2∑(-1)^n1/((n1^2+c^2*n2^2)/(1+c^2))^(1/2)
-1∑(-1)^n1/((n1^2+c^2*n2^2)/(1+c^2))^(1/2)

其中第一项的取值范围是n1,n2都是{(-n+1),(n-1)}
第二项的取值范围是n1(-n,n),n2{(-n+1),(n-1)}
第三项的取值范围是n1,n1都是(-n,n)

同时,上述的三项中,n1+n2不能为奇数!~

代码修改如下:
#include
#include
#define c 1

float A(int n)
{
int i,j;
float m=0;float s;

for(i=(-n+1);i<=n-1;i++)
for(j=(-n+1);j<=n-1;j++)
{
if(i*i+j*j*(float)c*c==0)//这句是新加的
continue;//这句是新加的 避免分母为0
if((i+j)%2==0)
{
if(abs(i)%2==0)
s=1;
else
s=-1;
//if (i==0)
//continue;//这两句应该去掉
m=m+s/sqrt((i*i+j*j*(float)c*c)/(1+(float)c*c));
}
//else
//continue;//这两句也是无用的代码
}
return(-4*m);
}

float B(int n)
{
int i,j;
float s,m=0;

for(i=-n;i<=n;i++) //这句是新加的
for(j=(-n+1);j<=n-1;j++)
{
if(i*i+j*j*(float)c*c==0)//这句是新加的
continue;//这句是新加的 避免分母为0
if((i+j)%2==0)//n修改为i
{
if(abs(i)%2==0) //n修改为i
s=1;
else
s=-1;
m=m+s/sqrt((i*i+j*j*(float)c*c)/(1+(float)c*c)); //n修改为i
}
//else
//continue;//这两句也是无用的代码
}
return(-2*m);
}

float C(int n)
{
int i,j;
float s,m=0;
for(i=-n;i<=n;i++) //这句是新加的
for(j=-n;j<=n;j++) //这句是新加的
{//这句是新加的
if(i*i+j*j*(float)c*c==0)//这句是新加的
continue;//这句是新加的 避免分母为0
if((i+j)%2==0)//这句是新加的
{//这句是新加的
if(abs(i)%2==0) //n修改为i
s=1;
else
s=-1;
m=m+s/sqrt((i*i+j*j*(float)c*c)/(1+(float)c*c)); //n修改为i和j
}//这句是新加的
}//这句是新加的
return(-m);
}

main()
{
int a;

printf("insert n:");
scanf("%d",&a);
printf("%f\n", A(a)+B(a)+C(a));
getchar();
}

回答2:

撒大苏打