一道数据结构(c语言描述)题,希望大佬帮我看看,萌新不会?

如题所述

代码文本:

#include "stdio.h"

struct PLU{

double r,i;

};

PLU plu_add(PLU a,PLU b,char c){//运算函数

PLU t;

if(c=='+'){//+

t.r=a.r+b.r;

t.i=a.i+b.i;

}

else if(c=='-'){//-

t.r=a.r-b.r;

t.i=a.i-b.i;

}

else if(c=='*'){//*

t.r=a.r*b.r-a.i*b.i;

t.i=a.r*b.i+b.r*a.i;

}

else if(c=='/'){///

t.r=(a.r*b.r+a.i*b.i)/(b.r*b.r+b.i*b.i);

t.i=(a.i*b.r-a.r*b.i)/(b.r*b.r+b.i*b.i);

}

return t;

}


int main(int argc,char *argv[]){

PLU x,y,t;

char f;

printf("Please enter the 2 plural(like a+bi)...\nx = ");

scanf("%lf%c%lf",&x.r,&f,&x.i);

if(getchar(),f=='-')

x.i=-x.i;

printf("y = ");

scanf("%lf%c%lf",&y.r,&f,&y.i);

if(getchar(),f=='-')

y.i=-y.i;

t=plu_add(x,y,'+');

printf("\n(%g%+gi) + (%g%+gi) = %g%+gi\n",x.r,x.i,y.r,y.i,t.r,t.i);

t=plu_add(x,y,'-');

printf("(%g%+gi) - (%g%+gi) = %g%+gi\n",x.r,x.i,y.r,y.i,t.r,t.i);

t=plu_add(x,y,'*');

printf("(%g%+gi) * (%g%+gi) = %g%+gi\n",x.r,x.i,y.r,y.i,t.r,t.i);

t=plu_add(x,y,'/');

printf("(%g%+gi) / (%g%+gi) = %g%+gi\n",x.r,x.i,y.r,y.i,t.r,t.i);

return 0; 

供参考……

追问

感觉看得有点懵

追答

哪里懵,说具体点我好解释……

追问

额,从t.r开始就懵了。。

追答

    t是主函数中声明的PLU型结构体变量,它有r和i两个成员,r当作复数的实部,i当作复数的虚部。主函数中t=plu_add(x,y,'+')等就是调用复数运算函数plu_add把复数x、y按第三个参数'+'、'-'、'*'、'/'分别进行运算且把结果赋给t。

    主函数中没有独立的r,r在自定义函数plu_add中就是一个简单int型变量。所以主函数中出现r的地方都是t.r,t.r表示结构体变量t中的成员变量r。

追问

f=='-'以及int argc ,char *[]argv这两个参数不懂

追答

    由于在输入语句scanf("%lf%c%lf",&x.r,&f,&x.i);中用了全%c控制符,所以当输入a-bi形式时,x.i并得不到负号,负号被f接收了,所以用f=='-'判断一下x.i到底是正是负并处理一下。

    int argc ,char *[]argv这是C语言主函数的标准定义的部分内容,是调用代码形成.exe文件后直接调用用的。现在的编译器可以允许不写,空着或写个void即可。不过应该知道main的标准定义和各参数的意义才好。

来自:求助得到的回答
温馨提示:答案为网友推荐,仅供参考
第1个回答  2021-02-12
typedef struct {
double r, i;
} ComplexNum;
ComplexNum complex_add(ComplexNum c1, ComplexNum c2)
{
ComplexNum result;
result.i = c1.i + c2.i;
result.r = c1.r + c2.r;
return result;
}
void complex_print(ComplexNum c)
{
printf("%.6lf + %.6lfi", c.r, c.i);
}
int main()
{
ComplexNum c1, c2;
c1.r = 1;
c1.i = 1;
c2.r = 1;
c2.i = -1;
ComplexNum result = complex_add(c1, c2);
complex_print(result);
return 0;
}
供参考,只实现了+法,相信其余的运算你也搞得定。
代码运行系统:Win10
代码编译开发环境:Visual Studio 2019 社区版
相似回答