0

我正在尝试用 C 编写一个程序来添加两个复数数组。

我正在使用以下代码:

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

typedef struct cplx
{
    int re;
    int im;
} cplx;

cplx* sum(cplx *x, cplx *y,int n)
{
    int i;
    cplx *z = malloc(n * sizeof(cplx));
    if (z == NULL) {return NULL;}
    for(i=0;i<n;i++)
    {
    z[i].re=x[i].re+y[i].re;
    z[i].im=x[i].im+y[i].im;
    }
    return z;
}

cplx* difference(cplx *x, cplx *y, int n)
{
    int i;
    cplx *z = malloc(n * sizeof(cplx));
    if (z == NULL) {return NULL;}
    for(i=0;i<n;i++)
    {
    z[i].re=x[i].re-y[i].re;
    z[i].im=x[i].im-y[i].im;
    }
    return z;
}

cplx* sumdiff(cplx *x,cplx *y, int n,cplx* (*op)())
{
    return(op(x,y,n));
}

int main(void)
{
    cplx *z1,*z2,*s,*diff;
    int m,n,i;
    printf("Give the number of complex numbers to add and subtract:");
    scanf("%d",&n);
    z1=malloc(n*sizeof(cplx));
    z2=malloc(n*sizeof(cplx));
    s=malloc(n*sizeof(cplx));
    diff=malloc(n*sizeof(cplx));
    if ( z1==NULL || z2==NULL || s==NULL || diff==NULL)
    {
        printf("Allocation failed.\nEnding program.");
        exit(0);
    }
    printf("Give the numbers of the first vector:\n");
    for(i=0;i<n;i++)
    {
        printf("Re(z1[%d])=",i+1); scanf("%d",&m);
        z1[i].re=m;
        printf("Im(z1[%d])=",i+1); scanf("%d",&(z1[i].im));
    }
    printf("Give the numbers of the second vector:\n");
    for(i=0;i<n;i++)
    {
        printf("Re(z2[%d])=",i+1); scanf("%d",&(z2[i].re));
        printf("Im(z2[%d])=",i+1); scanf("%d",&(z2[i].im));
    }
    s=sum(z1,z2,n);
    diff=difference(z1,z2,n);
    s=sumdiff(z1,z2,n,sum);
    diff=sumdiff(z1,z2,n,difference);
    for(i=0;i<n;i++)
    {
        printf("z1[%d]+z2[%d]=%d+j(%d)\nz1[%d]+z2[%d]=%d+j(%d)\n",i+1,i+1,s[i+1].re,s[i+1].im,i,i,diff[i+1].re,diff[i+1].im);
    }
    free(z1); free(z2); free(s); free(diff);
return 0;
}

但是当我输入:

Give the number of complex numbers to add and subtract:1
Give the numbers of the first vector:
Re(z1[1])=1
Im(z1[1])=1
Give the numbers of the second vector:
Re(z2[1])=1
Im(z2[1])=1

输出是:

z1[1]+z2[1]=760368231+j(134222413)
z1[1]+z2[1]=1884507195+j(4685)

我只得到随机数。

我究竟做错了什么?

4

1 回答 1

1

改变

printf("z1[%d]+z2[%d]=%d+j(%d)\nz1[%d]+z2[%d]=%d+j(%d)\n",i+1,i+1,s[i+1].re,s[i+1].im,i,i,diff[i+1].re,diff[i+1].im);

printf("z1[%d]+z2[%d]=%d+j(%d)\nz1[%d]-z2[%d]=%d+j(%d)\n",i+1,i+1,s[i].re,s[i].im,i+1,i+1,diff[i].re,diff[i].im);

注意:重复。

s=sum(z1,z2,n);
diff=difference(z1,z2,n);
s=sumdiff(z1,z2,n,sum);
diff=sumdiff(z1,z2,n,difference);
于 2013-05-15T22:18:37.703 回答