Tsukinai的第五十四个程序
求复数之积。利用结构变量求解如下两组复数之积。
za={3,4}, zb={5,6}
za={10,20}, zb={30,40}
**输出格式要求:"(%d+%di)(%d+%di)=" “(%d+%di)\n”
程序运行示例如下:
(3+4i)(5+6i)=(-9+38i)
(10+20i)*(30+40i)=(-500+1000i)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct motherfucker
{
int real;
int imag;
} COM;
void multi(COM a[], int i, int j, int k);
int main()
{
COM a[6] = {{3, 4}, {5, 6}, {10, 20}, {30, 40}};
multi(a, 0, 1, 4);
multi(a, 2, 3, 5);
printf("(%d+%di)*(%d+%di)=(%d+%di)\n", a[0].real, a[0].imag, a[1].real, a[1].imag, a[4].real, a[4].imag);
printf("(%d+%di)*(%d+%di)=(%d+%di)\n", a[2].real, a[2].imag, a[3].real, a[3].imag, a[5].real, a[5].imag);
system("pause");
return 0;
}
void multi(COM a[], int i, int j, int k)
{
a[k].real = a[i].real * a[j].real - a[i].imag * a[j].imag;
a[k].imag = a[i].real * a[j].imag + a[i].imag * a[j].real;
}
标答做法
#include <stdio.h>
#include <stdlib.h>
struct complx
{
int real;
int im;
};
int main()
{
static struct complx za = {3, 4};
static struct complx zb = {5, 6};
struct complx x, y, z;
struct complx cmult();
void cpr();
z = cmult(za, zb);
cpr(za, zb, z);
x.real = 10;
x.im = 20;
y.real = 30;
y.im = 40;
z = cmult(x, y);
cpr(x, y, z);
system("pause");
return 0;
}
struct complx cmult(struct complx za, struct complx zb)
{
struct complx w;
w.real = za.real * zb.real - za.im * zb.im;
w.im = za.real * zb.im + za.im * zb.real;
return w;
}
void cpr(struct complx za, struct complx zb, struct complx z)
{
printf("(%d+%di)*(%d+%di)=", za.real, za.im, zb.real, zb.im);
printf("(%d+%di)\n", z.real, z.im);
}
我把这题又写了一遍
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct motherfucker
{
int real;
int imag;
} COM;
COM multi(COM a, COM b);
void pri(COM a, COM b, COM c);
int main()
{
COM za = {3, 4};
COM zb = {5, 6};
pri(za, zb, multi(za, zb));
COM zaa = {10, 20};//不能继续定义COM za,会报错重定义
COM zbb = {30, 40};
pri(zaa, zbb, multi(zaa, zbb));
system("pause");
return 0;
}
COM multi(COM a, COM b)
{
COM result;
result.real = a.real * b.real - a.imag * b.imag;
result.imag = a.imag * b.real + a.real * b.imag;
return result;
}
void pri(COM a, COM b, COM c)
{
printf("(%d+%di)*(%d+%di)=(%d+%di)\n", a.real, a.imag, b.real, b.imag, c.real, c.imag);
}