Tsukinai的第五十四个程序(利用结构体求复数之积)

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);
}
  • 11
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值