这是数据结构老师要求我们写的作业,其实挺简单的。但是不知道为什么,班里就是有人不会写。可能过了一个学期大家都把C语言给忘了,其实班上同学的水平本来就不怎么好,就一两个是比较厉害的。而我刚好在暑假的时候看了下书并且敲了些代码,所以感觉挺容易的。自己还的多练练啊!
code 1:
#include
/*实现计算加法下的实部和虚部*/
double Add(double x, double y)
{
return x + y;
}
/*实现减法下的实部和虚部*/
double Sub(double x, double y)
{
return x - y;
}
/*实现乘法下的实部*/
double Multiply1(double x, double y, double m, double n)
{
return x * m - y * n;
}
/*实现乘法下的虚部*/
double Multiply2(double x, double y, double m, double n)
{
return x * n + y * m;
}
/*实现除法下的实部*/
double Div1(double x, double y, double m, double n)
{
return (x * m + n * y)/(m * m + n * n);
}
/*实现除法下的虚部*/
double Div2(double x, double y, double m, double n)
{
return (m * y - n * x)/(m * m + n * n);
}
/*定义一个输出函数,便于控制输出*/
void print(double a, double b)
{
if(a == (int)a)
{
printf("%.0f ", a);
if(b == (int)b)
printf("%.0f\n", b);
else
printf("%.2f\n", b);
} //上述功能是如果实部或虚部是整数,则输出整数;否则保留两位小数输出
else
{
printf("%.2f ", a);
if(b == (int)b)
printf("%.0f\n", b);
else
printf("%.2f\n", b);
}
}
int main()
{
double a1, b1, c1, d1;
double a, b;
printf("分别输入复数 1 和复数 2 的实部和虚部:\n");
while(scanf("%lf%lf%lf%lf", &a1, &b1, &c1, &d1) != EOF) //重复输入,可以输入多组测试用例
{
/*计算加法下的实部和虚部*/
a = Add(a1, c1);
b = Add(b1, d1);
printf("加法后的实部和虚部分别是:\n");
print(a, b);
/*计算减法下的实部和虚部*/
a = Sub(a1, c1);
b = Sub(b1, d1);
printf("减法后的实部和虚部分别是:\n");
print(a, b);
/*计算乘法下的实部和虚部*/
a = Multiply1(a1, b1, c1, d1);
b = Multiply2(a1, b1, c1, d1);
printf("乘法后的实部和虚部分别是:\n");
print(a, b);
/*计算除法下的实部和虚部*/
printf("除法下的实部和虚部分别是:\n");
if(c1 * c1 + d1 * d1 == 0)
{
printf("不存在\n\n");
continue;
}
a = Div1(a1, b1, c1, d1);
b = Div2(a1, b1, c1, d1);
print(a, b);
printf("\n");
}
return 0;
}
后来又帮同学写了个,用结构体写的。结果后来老师说他写的不错,而我的看不出有什么好的,就是挺普通的一个代码。。。。
code 2:
#include
typedef struct complex
{
double Re;
double Im;
}complex;
/*使x, y分别赋给复数的实部和虚部*/
void zuhecomplex(complex &c, double x, double y)
{
c.Re = x;
c.Im = y;
}
/*实现复数的实部和虚部的加法*/
void Addcomplex(complex & c, complex c1, complex c2)
{
c.Re = c1.Re + c2.Re;
c.Im = c1.Im + c2.Im;
}
/*实现复数的减法*/
void Subcomplex(complex & c, complex c1, complex c2)
{
c.Re = c1.Re - c2.Re;
c.Im = c1.Im - c2.Im;
}
/*实现复数的乘法*/
void Mulcomplex(complex & c, complex c1, complex c2)
{
c.Re = c1.Re * c2.Re - c1.Im * c2.Im;
c.Im = c1.Re * c2.Im + c1.Im * c2.Re;
}
/*实现复数的除法*/
void Divcomplex(complex & c, complex c1, complex c2)
{
c.Re = (c1.Re * c2.Re + c1.Im * c2.Im) / (c2.Re * c2.Re + c2.Im * c2.Im);
c.Im = (c1.Im * c2.Re - c1.Re * c2.Im) / (c2.Re * c2.Re + c2.Im * c2.Im);
}
/*定义一个输出函数,便于控制输出,若是整数,则只输出整数;否则输出两位小数*/
void print(complex c)
{
if(c.Re == (int)c.Re)
{
printf("%.0f", c.Re);
if(c.Im == (int)c.Im)
{
if(c.Im > 0)
printf("+%.0fi\n", c.Im);
if(c.Im < 0)
printf("%.0fi\n", c.Im);
}
else
{
if(c.Im > 0)
printf("+%.2fi\n", c.Im);
if(c.Im < 0)
printf("%.0fi\n", c.Im);
}
}
else
{
printf("%.2f", c.Re);
if(c.Im == (int)c.Im)
{
if(c.Im > 0)
printf("+%.0fi\n", c.Im);
if(c.Im < 0)
printf("%.0fi\n", c.Im);
}
else
{
if(c.Im > 0)
printf("+%.2fi\n", c.Im);
if(c.Im < 0)
printf("%.0fi\n", c.Im);
}
}
printf("\n");
}
int main()
{
double a, b, c, d;
complex c1, c2, s;
int i;
printf("请分别输入复数1 和复数2 的实部和虚部:\n");
while(scanf("%lf%lf%lf%lf", &a, &b, &c, &d) != EOF )
{
zuhecomplex(c1, a, b);
zuhecomplex(c2, c, d);
printf("输入数字1--5选择运算\n1.加法\t2.减法\t3.乘法\t4.除法\t5.退出\t\n");
scanf("%d", &i);
switch(i)
{
case 1:
printf("加法后的复数是:\n");
Addcomplex(s, c1, c2);
print(s);
break;
case 2:
printf("减法后的复数是:\n");
Subcomplex(s, c1, c2);
print(s);
break;
case 3:
printf("乘法后的复数是:\n");
Mulcomplex(s, c1, c2);
print(s);
break;
case 4:
printf("除法后的复数是:\n");
Divcomplex(s, c1, c2);
print(s);
break;
case 5:
return 0;
}
printf("\n");
printf("请分别输入复数1 和复数2 的实部和虚部:\n");
}
return 0;
}