PTA C语言结构体 7-5 复数四则运算 (15 分)

本题要求编写程序,计算2个复数的和、差、积、商。

输入格式:

输入在一行中按照a1 b1 a2 b2的格式给出2个复数C1=a1+b1i和C2=a2+b2i的实部和虚部。题目保证C2不为0。

输出格式:

分别在4行中按照(a1+b1i) 运算符 (a2+b2i) = 结果的格式顺序输出2个复数的和、差、积、商,数字精确到小数点后1位。如果结果的实部或者虚部为0,则不输出。如果结果为0,则输出0.0。

输入样例1:

2 3.08 -2.04 5.06

结尾无空行

输出样例1:

(2.0+3.1i) + (-2.0+5.1i) = 8.1i
(2.0+3.1i) - (-2.0+5.1i) = 4.0-2.0i
(2.0+3.1i) * (-2.0+5.1i) = -19.7+3.8i
(2.0+3.1i) / (-2.0+5.1i) = 0.4-0.6i

结尾无空行

输入样例2:

1 1 -1 -1.01

输出样例2:

(1.0+1.0i) + (-1.0-1.0i) = 0.0
(1.0+1.0i) - (-1.0-1.0i) = 2.0+2.0i
(1.0+1.0i) * (-1.0-1.0i) = -2.0i
(1.0+1.0i) / (-1.0-1.0i) = -1.0
#include<stdio.h>
#include<math.h>
void result(double a1,double b1,double a2,double b2,int i); 
int main()
{
	double  a1,b1,a2,b2;
	scanf("%lf%lf%lf%lf",&a1,&b1,&a2,&b2);
	
	for(int i=0;i<4;i++)
	{
		if(i==0)
		{
			if(b1>=0&&b2>=0)
			printf("(%.1lf+%.1lfi) + (%.1lf+%.1lfi) = ",a1,b1,a2,b2);
			else if(b1<0 && b2>=0)
			printf("(%.1lf%.1lfi) + (%.1lf+%.1lfi) = ",a1,b1,a2,b2);
			else if(b1<0 && b2<0)
			printf("(%.1lf%.1lfi) + (%.1lf%.1lfi) = ",a1,b1,a2,b2);
			else
			printf("(%.1lf+%.1lfi) + (%.1lf%.1lfi) = ",a1,b1,a2,b2);
			result(a1,b1,a2,b2,i);
		}
		else if(i==1){
			if(b1>=0&&b2>=0)
			printf("(%.1lf+%.1lfi) - (%.1lf+%.1lfi) = ",a1,b1,a2,b2);
			else if(b1<0 && b2>=0)
			printf("(%.1lf%.1lfi) - (%.1lf+%.1lfi) = ",a1,b1,a2,b2);
			else if(b1<0 &&b2<0)
			printf("(%.1lf%.1lfi) - (%.1lf%.1lfi) = ",a1,b1,a2,b2);
			else
			printf("(%.1lf+%.1lfi) - (%.1lf%.1lfi) = ",a1,b1,a2,b2);
			result(a1,b1,a2,b2,i);
		}
		else if(i==2){
			if(b1>=0&&b2>=0)
			printf("(%.1lf+%.1lfi) * (%.1lf+%.1lfi) = ",a1,b1,a2,b2);
			else if(b1<0 && b2>=0)
			printf("(%.1lf%.1lfi) * (%.1lf+%.1lfi) = ",a1,b1,a2,b2);
			else if(b1<0&&b2<0)
			printf("(%.1lf%.1lfi) * (%.1lf%.1lfi) = ",a1,b1,a2,b2);
			else
			printf("(%.1lf+%.1lfi) * (%.1lf%.1lfi) = ",a1,b1,a2,b2);
			result(a1,b1,a2,b2,i);
		}
		else if(i==3){
			if(b1>=0&&b2>=0)
			printf("(%.1lf+%.1lfi) / (%.1lf+%.1lfi) = ",a1,b1,a2,b2);
			else if(b1<0 && b2>=0)
			printf("(%.1lf%.1lfi) / (%.1lf+%.1lfi) = ",a1,b1,a2,b2);
			else if(b1<0&&b2<0)
			printf("(%.1lf%.1lfi) / (%.1lf%.1lfi) = ",a1,b1,a2,b2);
			else
			printf("(%.1lf+%.1lfi) / (%.1lf%.1lfi) = ",a1,b1,a2,b2);
			result(a1,b1,a2,b2,i);
		}
	}
}
void result(double a1,double b1,double a2,double b2,int i){
	double really,v;
	if(i==0){
		really=a1+a2;
		v=b1+b2;
	}
	else if(i==1){
		really=a1-a2;
		v=b1-b2;
	}
	else if(i==2){
		really=a1*a2-b1*b2;
		v=a2*b1+a1*b2;
	}
	else if(i==3){
		/*double fenzi,fenmu;
//		MultReally(a1,b1,a2,-b2)+MultV(a1,b1,a2,-b2);
		fenmu=a2*a2-b2*b2;
		really=MultReally(a1,b1,a2,-b2)/fenmu;
		v=MultV(a1,b1,a2,-b2)/fenmu;*/
		
		really=(a1*a2+b1*b2)/(a2*a2+b2*b2);
    	v=(a2*b1-a1*b2)/(a2*a2+b2*b2);
		if(a2==0&&b2==0){
			really=0;
			v=0;
			
		}
	}
	
//	if(really==0) printf("yes\n");
	if(fabs(really)<0.1&&fabs(v)>0.1){//实部为0 
		printf("%.1fi\n",v);
	}
	else if(fabs(really)>0.1&&fabs(v)<0.1)
	{//虚部为0 
		printf("%.1lf\n",really);
	}
	else if(fabs(really)>0.1&&fabs(v)>0.1){
		if(v<0)
			printf("%.1lf%.1lfi\n",really,v);
			
		else
			printf("%.1lf+%.1lfi\n",really,v);
	}
	else if(fabs(really)<0.1&&fabs(v)<0.1) printf("0.0\n");
}

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在C语言中,我们可以使用结构来表示复数,并进行四则运算操作。下面是一个示例代码: ```c #include <stdio.h> // 定义复数结构 typedef struct { float real; float imag; } Complex; // 复数加法 Complex add(Complex a, Complex b) { Complex result; result.real = a.real + b.real; result.imag = a.imag + b.imag; return result; } // 复数减法 Complex subtract(Complex a, Complex b) { Complex result; result.real = a.real - b.real; result.imag = a.imag - b.imag; return result; } // 复数乘法 Complex multiply(Complex a, Complex b) { Complex result; result.real = a.real * b.real - a.imag * b.imag; result.imag = a.real * b.imag + a.imag * b.real; return result; } // 复数除法 Complex divide(Complex a, Complex b) { Complex result; float denominator = b.real * b.real + b.imag * b.imag; result.real = (a.real * b.real + a.imag * b.imag) / denominator; result.imag = (a.imag * b.real - a.real * b.imag) / denominator; return result; } int main() { // 创建两个复数对象 Complex num1, num2; // 输入第一个复数的实部和虚部 printf("Enter the real and imaginary parts of the first complex number: "); scanf("%f %f", &num1.real, &num1.imag); // 输入第二个复数的实部和虚部 printf("Enter the real and imaginary parts of the second complex number: "); scanf("%f %f", &num2.real, &num2.imag); // 进行四则运算 Complex sum = add(num1, num2); Complex difference = subtract(num1, num2); Complex product = multiply(num1, num2); Complex quotient = divide(num1, num2); // 输出结果 printf("Sum: %.2f + %.2fi\n", sum.real, sum.imag); printf("Difference: %.2f + %.2fi\n", difference.real, difference.imag); printf("Product: %.2f + %.2fi\n", product.real, product.imag); printf("Quotient: %.2f + %.2fi\n", quotient.real, quotient.imag); return 0; } ``` 这个示例代码演示了如何定义一个复数结构,并进行加法、减法、乘法和除法运算。用户可以输入两个复数的实部和虚部,然后程序会输出运算结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值