代码文本:
#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的标准定义和各参数的意义才好。