题目要求
本题要求编写程序,计算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]);
}
先存着,以后有空了再看看是哪里有问题.