任务描述
本关任务:编程实现两个复数的加、减、乘、除运算。
相关知识
用函数来实现复数之间的加减乘除,有两种方法返回计算结果:
使用结构体指针作函数的形参,将函数的计算结果返回;
将函数的计算结果作为函数返回值返回。
编程要求
根据提示,在右侧编辑器补充代码,实现两个复数的加、减、乘、除运算,将函数的计算结果作为函数返回值返回,复数之间的加法、减法、乘法和除法分别用不用的函数来实现。具体要求如下:
函数 input() 实现复数的输入;
函数 output() 实现复数的输出;
函数 add()、sub()、mul()、div()分别实现复数的加减乘除;
函数 main() 定义变量并分别调用以上子函数。
测试说明
平台会对你编写的代码进行测试。
测试输入:
1.2 3.4 - -5.6 -7.9
输入说明:输入时只需分别键入实部和虚部,以空格分割,两个复数之间用运算符分隔。
预期输出:
(1.2+3.4i) - (-5.6-7.9i) = (-6.8+11.3i)
输出说明:输出时按(a+bi)的格式在屏幕上打印结果,输出时 a、b 都保留一位小数。注意考虑特殊情况,无法计算时输出字符串"error"。
测试输入:
1.2 3.4 --5.6 -7.9
预期输出:
(1.2+3.4i) - (-5.6-7.9i) = (6.8+11.3i)
开始你的任务吧,祝你成功!
#include<stdio.h>
typedef struct complex
{
float real;
float imag;
}COMPLEX;
void input(COMPLEX *s);
void output(COMPLEX s);
COMPLEX add(COMPLEX str1,COMPLEX str2);
COMPLEX sub(COMPLEX str1,COMPLEX str2);
COMPLEX mul(COMPLEX str1,COMPLEX str2);
COMPLEX div(COMPLEX str1,COMPLEX str2);
/********** Begin **********/
int main()
{
COMPLEX str,str1,str2;
char ch;
input(&str1);
scanf(" %c",&ch);
input(&str2);
switch(ch)
{
case '+':
str = add(str1,str2);
output(str1);
printf(" %c ",ch);
output(str2);
printf(" = ");
output(str);
printf("\n");
break;
case '-':
str = sub(str1,str2);
output(str1);
printf(" %c ",ch);
output(str2);
printf(" = ");
output(str);
printf("\n");
break;
case '*':
str = mul(str1,str2);
output(str1);
printf(" %c ",ch);
output(str2);
printf(" = ");
output(str);
printf("\n");
break;
case '/':
str = div(str1,str2);
output(str1);
printf(" %c ",ch);
output(str2);
printf(" = ");
output(str);
printf("\n");
break;
default:
printf("error\n");
break;
}
return 0;
}
void input(COMPLEX *s)
{
scanf("%f%f",&s->real,&s->imag);
}
void output(COMPLEX s)
{
if(s.imag>=0)
{
printf("(%0.1f+%0.1fi)",s.real,s.imag);
}
else
{
printf("(%0.1f%0.1fi)",s.real,s.imag);
}
}
COMPLEX add(COMPLEX str1,COMPLEX str2)
{
COMPLEX str;
str.real=str1.real+str2.real;
str.imag=str1.imag+str2.imag;
return str;
}
COMPLEX sub(COMPLEX str1,COMPLEX str2)
{
COMPLEX str;
str.real=str1.real-str2.real;
str.imag=str1.imag-str2.imag;
return str;
}
COMPLEX mul(COMPLEX str1,COMPLEX str2)
{
COMPLEX str;
str.real=str1.real*str2.real-str1.imag*str2.imag;
str.imag=str1.real*str2.imag+str1.imag*str2.real;
return str;
}
COMPLEX div(COMPLEX str1,COMPLEX str2)
{
COMPLEX str;
str.real=(str1.real*str2.real+str1.imag*str2.imag)/(str2.real*str2.real+str2.imag*str2.imag);
str.imag=(str1.imag*str2.real-str1.real*str2.imag)/(str2.real*str2.real+str2.imag*str2.imag);
return str;
}
/********** End **********/
思路其实不难,但是要注意细节,一步一步来。