c++复数的加减乘除 结构体、初始化代码和主函数已经给出 补充正确的Add、Sub、Mul、Div函数代码即可

#include <math.h>
typedef struct _cmplx
{
double x;
double y;
}*Complex;
Complex Add(Complex z1,Complex z2);//这是加法函数,return z1+z2 z1和z2的值不能更改
Complex Sub(Complex z1,Complex z2);//这是减法函数,return z1-z2 z1和z2的值不能更改
Complex Mul(Complex z1,Complex z2);//这是乘法函数,return z1*z2 z1和z2的值不能更改
Complex Div(Complex z1,Complex z2);//这是除法函数,return z1/z2 z1和z2的值不能更改

Complex Init(double x,double y)//初始化函数,给复数指针分配空间,并赋初值
{
Complex z=malloc(sizeof(*z));
z->x=x;
z->y=y;
return z;
}
void PrintComplex(Complex z)//打印输出成a+bi的形式
{
printf("%.2f",z->x+z->y);
}
main()//程序运行举例
{
double x1,y1;
double x2,y2;
Complex A,S,M,D,z1,z2;
scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2);
z1=Init(x1,y1),z2=Init(x2,y2);
A=Add(z1,z2);S=Sub(z1,z2);M=Mul(z1,z2);D=Div(z1,z2);
PrintComplex(A);
PrintComplex(S);
PrintComplex(M);
PrintComplex(D);

}
//--------------------------------------------------------------
/*注意!线上面的内容是不能够更改的*/
Complex Add(Complex z1,Complex z2)
{

}
Complex Sub(Complex z1,Complex z2)
{

}
Complex Mul(Complex z1,Complex z2)
{

}
Complex Div(Complex z1,Complex z2)
{

}
为什么不行啊
Complex Add(Complex z1,Complex z2)
{
Complex z;
z->x=z1->x+z2->x;
z->y=z1->y+z2->y;
return z;
}
Complex Sub(Complex z1,Complex z2)
{
Complex z;
z->x=z1->x-z2->x;
z->y=z1->y-z2->y;
return z;
}
Complex Mul(Complex z1,Complex z2)
{

Complex z;
z->x=z1->x*z2->x-z1->y*z2->y;
z->y=z1->x*z2->x+z1->y*z2->y;
return z;
}
Complex Div(Complex z1,Complex z2)
{
Complex z;
z->x=(z1->x*z2->x+z1->y*z2->y)/(z2->x*z2->x+z2->y*z2->y);
z->y=(z1->y*z2->x-z1->x*z2->y)/(z2->x*z2->x+z2->y*z2->y);
return z;
}

第1个回答  推荐于2016-01-27
定义的comlex z没有初始化,所以在运行的时候导致内存溢出。正确的代码:

Complex Add(Complex z1,Complex z2)
{
Complex temp;
temp=Init(0,0);
temp->x = z1->x + z2->x;
temp->y = z1->y + z2->y;
return temp;
}
Complex Sub(Complex z1,Complex z2)
{
Complex temp;
temp=Init(0,0);
temp->x = z1->x - z2->x;
temp->y = z1->y - z2->y;
return temp;
}
Complex Mul(Complex z1,Complex z2)
{
Complex temp;
temp=Init(0,0);
temp->x = z1->x * z2->x;
temp->y = z1->y * z2->y;
return temp;
}
Complex Div(Complex z1,Complex z2)
{
Complex temp;
temp=Init(0,0);
temp->x = z1->x / z2->x;
temp->y = z1->y / z2->y;
return temp;

}

=========================================
另外那个线上的主函数部分也是有问题的,如果不改的话,是没办法直接编译通过的。同样帮你改了一下:

#include <math.h>
#include <stdio.h> //标准输入输出头文件!(printf和scanf函数)
#include <stdlib.h>//standard library标准库头文件(malloc函数)
typedef struct _cmplx
{
double x;
double y;
}*Complex;
Complex Add(Complex z1,Complex z2);//这是加法函数,return z1+z2 z1和z2的值不能更改
Complex Sub(Complex z1,Complex z2);//这是减法函数,return z1-z2 z1和z2的值不能更改
Complex Mul(Complex z1,Complex z2);//这是乘法函数,return z1*z2 z1和z2的值不能更改
Complex Div(Complex z1,Complex z2);//这是除法函数,return z1/z2 z1和z2的值不能更改

Complex Init(double x,double y)//初始化函数,给复数指针分配空间,并赋初值
{
Complex z=(Complex)malloc(sizeof(*z));//malloc需要声明类型这里表示开辟Complex类型的空间
z->x=x;
z->y=y;
return z;
}
void PrintComplex(Complex z)//打印输出成a+bi的形式
{
printf("%.2f\n",z->x+z->y);
}
void main()//程序运行举例//没有函数返回类型所以增加void
{
double x1,y1;
double x2,y2;
Complex A,S,M,D,z1,z2;
scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2);
z1=Init(x1,y1),z2=Init(x2,y2);
A=Add(z1,z2);S=Sub(z1,z2);M=Mul(z1,z2);D=Div(z1,z2);
PrintComplex(A);
PrintComplex(S);
PrintComplex(M);
PrintComplex(D);

}
//--------------------------------------------------------------
/*注意!线上面的内容是不能够更改的*/本回答被提问者采纳
第2个回答  2011-04-10
对于懒得出奇的人我 懒得鄙视
相似回答