复数的四则运算_2020-3-16_代码保存

题目要求

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

背景

一开始使用的是所有判断都在主函数里面,花了100+行数,pta过是过了,但是感觉太过于臃肿,想要尝试一下模块化的解题思路,然后好不容易码出来,发现第二个"sample 2 输出为0"死活过不了,人傻了.

#include<stdio.h>
#include<stdlib.h>

struct jg {
	double sb;//实部
	double xb;//虚部
}ja, jian, cheng, chu;

struct ds {
	double num1;//储存具体数据
	int flag;//储存该数是否应被省略的标志符
};

void output(double a, double b, double c, double d, double S, double X, char fh)//打印函数
{
	int i, flag = 0;
	struct ds num[6];

	//printf("\n函数数据读取完成(%.1f+%.1fi)与(%.1f+%.1fi),得数为(%.1f+%.1fi)\n", a, b, c, d, S, X);
	num[0].num1 = a;
	num[1].num1 = b;
	num[2].num1 = c;
	num[3].num1 = d;
	num[4].num1 = S;
	num[5].num1 = X;
	//printf("函数数据录入完成(%.1lf+%.1lfi)与(%.1lf+%.1lfi),得数为(%.1lf+%.1lfi)\n", num[0].num1, num[1].num1, num[2].num1, num[3].num1, num[4].num1, num[5].num1);

	for (i = 0; i < 6; i++)
	{
		if (num[i].num1 < -0.05 || num[i].num1 > 0.05)
		{
			num[i].flag = 1;
		}
		else
		{
			num[i].flag = 0;
		}
	}
	//printf("输入各个num是否为可省略%d-%d-%d-%d-%d-%d\n", num[0].flag, num[1].flag, num[2].flag, num[3].flag, num[4].flag, num[5].flag);

	printf("(%.1lf+%.1lfi) %c (%.1lf+%.1lfi) = ", a, b, fh, c, d);
	if (num[4].flag == 1)
	{
		flag++;
		printf("%.1lf", num[4].num1);
	}
	if (num[5].flag == 1)
	{
		flag++;
		if (num[5].num1 > 0 && flag == 2)
		{
			printf("+");
		}
		printf("%.1lfi", num[5].num1);
	}
	if (flag == 0)
	{
		printf("0.0");
	}
	printf("\n");
}
void main()//主函数
{
	double a, b, c, d;
	fscanf(stdin, "%lf %lf %lf %lf", &a, &b, &c, &d);
	//printf("录入完成,录入的数据为(%.1lf+%.1lfi)与(%.1lf+%.1lfi)\n", a, b, c, d);
	char fh[4] = { '+','-','*','/' };//储存符号
	ja.sb = a + c;
	ja.xb = b + d;
	jian.sb = a - c;
	jian.xb = b - d;
	cheng.sb = a * c - b * d;
	cheng.xb = a * d + b * c;
	chu.sb = (a * c + b * d) / (c * c + d * d);
	chu.xb = (b * c - a * d) / (c * c + d * d);
	output(a, b, c, d, ja.sb, ja.xb, fh[0]);
	output(a, b, c, d, jian.sb, jian.xb, fh[1]);
	output(a, b, c, d, cheng.sb, cheng.xb, fh[2]);
	output(a, b, c, d, chu.sb, chu.xb, fh[3]);
}

先存着,以后有空了再看看是哪里有问题.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值