📄 file2.cpp
字号:
#include<iostream.h>
#include<math.h>
#define N 8
#define NN 3
const double pi=acos(-1);
struct fushu{
double r,i;
};//定义复数结构
struct fushu x[N]={0};
struct fushu x0[N]={0};
struct fushu X[N]={0};
struct fushu a1[N]={0};
struct fushu b1[N]={0};
//**************该函数将数组重新分组****************//
double f1(int a)
{double b(0),s(0);
for(int m=0;m<NN;m++){
b=a%2;
a/=2;
s+=(pow(2,NN-1-m)*b);}
return s;}
//************该函数计算两个复数相乘时的实部*************//
double fun1(double xr,double xi,double yr,double yi){
double ss;
ss=xr*yr-xi*yi;
return ss; }
//************该函数计算两个复数相乘时的虚部*************//
double fun2(double xr,double xi,double yr,double yi){
double ss;
ss=xr*yi+xi*yr;
return ss;}
//************该函数计算w的实数部分*******************//
double f2(int n){
double x;
x=cos(-2*pi*n/N);
return x;}
//***********该函数计算w的虚数部分*******************//
double f3(int n){
double x;
x=sin(-2*pi*n/N);
return x;}
//************该函数为快速FFT计算**********************//
void f4(int l){
for(int k=0,count=0;count<=N/pow(2,l);count++){
for(int j=0;j<pow(2,l-1);j++){
double p,q,y,z;
int a2=k+j;
int b2=k+pow(2,l-1)+j;
p=f2(N*j/pow(2,l));
q=f3(N*j/pow(2,l));
y=fun1(b1[b2].r,b1[b2].i,p,q);
z=fun2(b1[b2].r,b1[b2].i,p,q);
a1[a2].r=b1[a2].r+y;
a1[a2].i=b1[a2].i+z;
a1[b2].r=b1[a2].r-y;
a1[b2].i=b1[a2].i-z;
}
k+=pow(2,l);
}
}
//**********主函数**************//
void main(){
cout<<"输入初始数组:";
for(int i=0;i<N;i++) cin>>x[i].r>>x[i].i;
for(int i1=0;i1<N;i1++){
int h=f1(i1);
x0[i1].r=x[h].r;
x0[i1].i=x[h].i;}
for(int i2=0;i2<N;i2++){b1[i2].r=x0[i2].r;
b1[i2].i=x0[i2].i;}
f4(1);
for(int i3=0;i3<N;i3++){b1[i3].r=a1[i3].r;
b1[i3].i=a1[i3].i;}
f4(2);
for(int i4=0;i4<N;i4++){b1[i4].r=a1[i4].r;
b1[i4].i=a1[i4].i;}
f4(3);
for(int i5=0;i5<N;i5++){X[i5].r=a1[i5].r;
X[i5].i=a1[i5].i;}
for(int g=0;g<N;g++)cout<<"X["<<g<<"]="<<X[g].r<<"+("<<X[g].i<<"j)"<<endl;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -