合并两个数组的条目作为另一个数组的偶数和奇数条目。

时间:2013-04-02 14:10:26

标签: c arrays sorting dynamic-arrays

我有一个能够产生2个数组的函数,一个在索引'i'是偶数时,一个在索引'i'是奇数时,所以我最终得到两个数组。偶数'i'数组称为W_e,由N个元素组成,奇数'i'数组称为W_o,也由N个元素组成。

我现在需要将这两个数组合并到另一个数组Wn(具有2 * N个元素)中,使得它看起来像Wn = [W_e [0],W_o [0],W_e [1],W_o [1 ],...,W_e [N-1],W_o [N-1]]但我不知道该怎么办。我试图使用嵌套循环,但它不起作用。数组W_e和W_o是根据我的计算正确生成的,我只是无法将条目组合成一个数组。

这是我到目前为止所拥有的。我没有在main函数中做任何事情,除了调用给我带来麻烦的函数“double * MakeWpowers(int N);”。请记住这适用于N> 2,我还没有处理N = 1或N = 2。

任何帮助将不胜感激。谢谢!!

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <complex.h>

#define pi 4*atan(1)

double *MakeWpowers(int N);
void print_vector(double *x,int N);
double *make_vector(double *x,int N);

int main(void)
{   int N;
double *Wn;
printf("\n Please enter the size of the NxN matrix:\n");
scanf("%d",&N);
Wn=MakeWpowers(N);
//print_vector(Wn,N);
free(Wn);
return(0);
}

double *MakeWpowers(int N)
{
double *Wn,*W_e,*W_o;
int i,j;

Wn=make_vector(Wn, 2*N);
W_e=make_vector(W_e, N);
W_o=make_vector(W_o, N);


for(i=0;i<=N-1;i++)
{
    if(i%2==0)

    {
        W_e[i]=cos((2*i*pi)/N);
    }
    else 
    {
            W_o[i]=sin((2*i*pi)/N);
    }

}

printf("\nThis is the even vector W_e:\n");
print_vector(W_e, N);
printf("\nThis is the odd vector W_o:\n");
print_vector(W_o, N);


for(j=0;j<2*N;j++)
{
    if(j%2==0)
    {Wn[j]=W_e[i];}
        //++i;}
    else 
    {Wn[j]=W_o[i];}
        //++i;}
    printf("\nthis is Wn:\n\n");
    print_vector(Wn, 2*N);
 //Wn[j]=W_o[i];
 //j++;
}

return(Wn);
   }
 void print_vector(double *x,int N)
{
int i;
for (i=0; i<N; i++) 
{
    printf ("%9.4f  \n", x[i]);
}
printf("\n"); 
}


double *make_vector(double *x,int N)
{   int i;
double xi;

x=(double *)malloc((N)*sizeof(double));

for(i=0;i<N;i++)
{
    x[i]=(double)xi;
}
return(x);
}

2 个答案:

答案 0 :(得分:3)

以下是它的一般逻辑:

LET a, b, merge BE ARRAYS
FOR k IN 0..length(a)
    merge[2*k]   = a[i]
    merge[2*k+1] = b[i]
RETURN merge

a使偶数条目(2k),b成为奇数条目(2k+1)。

答案 1 :(得分:0)

这可能是错误的

double *make_vector(double *x,int N)
{   int i;
double xi;

您必须初始化变量xi同样适用于*Wn,*W_e,*W_o