nug9966 2021-08-30 21:53 采纳率: 66.7%
浏览 66
已结题

关于复数 我的结果总是0+0i

/*
复数抽象数据类型ADT的描述
ADT Complex{
数据对象:D={c1,c2|c1,c2∈ FloatSet}
数据关系:R={<c1,c2>,c1是复数的实部,c2是复数的虚部};
基本操作:创建一个复数 creat(a);
输出一个复数 output(a);
求两个复数相加 add(a,b);
求两个复数相乘 multi(a,b)
*/

#include<stdio.h>

struct ADTComplex{
float c1;//复数实部
float c2;//复数虚部
};

struct ADTComplex creat(struct ADTComplex A)//创建一个复数
{
float a,b;
scanf("%f %f",&a,&b);

A.c1=a;A.c2=b;
return A;

}

void output(struct ADTComplex sum) //输出一个复数
{
if(sum.c2<0) printf("%.2f%.2fi\n",sum.c1,sum.c2);
else printf("%.2f+%.2fi\n",sum.c1,sum.c2);
}

struct ADTComplex add(struct ADTComplex A,struct ADTComplex B)//求两个复数相加
{
struct ADTComplex sum;
sum.c1=A.c1+B.c1;
sum.c2=A.c2+B.c2;
return sum;
}

struct ADTComplex multi(struct ADTComplex A,struct ADTComplex B)//求两个复数相乘
{
struct ADTComplex chengji;
chengji.c1=A.c1B.c1-A.c2B.c2 ;
chengji.c2=A.c1B.c2+A.c2B.c1;
return chengji;
}

int main()
{
struct ADTComplex A,B,sum,chengji;

creat(A);
creat(B);

sum=add(A,B);
chengji=multi(A,B);

output(sum);
output(chengji);


return 0;

}

  • 写回答

2条回答 默认 最新

  • Pliosauroidea 2021-08-30 22:02
    关注

    未更新A和B,具体见下方代码注释
    目前简单测试能够正常输出
    有帮助望采纳

    
    #include <stdio.h>
    
    struct ADTComplex
    {
        float c1; //复数实部
        float c2; //复数虚部
    };
    
    struct ADTComplex creat(struct ADTComplex A) //创建一个复数
    {
        float a, b;
        scanf("%f %f", &a, &b);
    
        A.c1 = a;
        A.c2 = b;
        return A;
    }
    
    void output(struct ADTComplex sum) //输出一个复数
    {
        if (sum.c2 < 0)
            printf("%.2f%.2fi\n", sum.c1, sum.c2);
        else
            printf("%.2f+%.2fi\n", sum.c1, sum.c2);
    }
    
    struct ADTComplex add(struct ADTComplex A, struct ADTComplex B) //求两个复数相加
    {
        struct ADTComplex sum;
        sum.c1 = A.c1 + B.c1;
        sum.c2 = A.c2 + B.c2;
        return sum;
    }
    
    struct ADTComplex multi(struct ADTComplex A, struct ADTComplex B) //求两个复数相乘
    {
        struct ADTComplex chengji;
        chengji.c1 = A.c1 * B.c1 - A.c2 * B.c2;
        chengji.c2 = A.c1 * B.c2 + A.c2 * B.c1;
        return chengji;
    }
    
    int main()
    {
        struct ADTComplex A, B, sum, chengji;
    
        //~~~~~~~~~~~~~~~没将A和B更新~~~~~~~~~~~~~~~~~
        A = creat(A);
        B = creat(B);
    
        sum = add(A, B);
        chengji = multi(A, B);
    
        output(sum);
        output(chengji);
    
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 8月30日
  • 已采纳回答 8月30日
  • 创建了问题 8月30日

悬赏问题

  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分