您的位置:首页 > 其它

蓝桥杯 算法训练 P1103 (结构体指针)

2016-03-06 09:58 309 查看
题目链接

编程实现两个复数的运算。设有两个复数 和 ,则他们的运算公式为:

  要求:(1)定义一个结构体类型来描述复数。

  (2)复数之间的加法、减法、乘法和除法分别用不用的函数来实现。

  (3)必须使用结构体指针的方法把函数的计算结果返回。

  说明:用户输入:运算符号(+,-,*,/) a b c d.

  输出:a+bi,输出时不管a,b是小于0或等于0都按该格式输出,输出时a,b都保留两位。

输入:

  - 2.5 3.6 1.5 4.9

输出:

  1.00+-1.30i

分析:一看就是一道大水题。

看到结构体指针。好久没编过了。不如试一试吧。(当然也可以不用结构,直接计算就行)

结果出现了几个问题:

1:结构体指针没有初始化。

2.复数的乘除法一开始弄出了。

复数运算规则:(百度百科):http://baike.baidu.com/link?url=9TakBcJvI2l0U04GPFqVrS0Pdsu9fOLYD5SH3jJPqcChCtiN1quIhFSMMjIy383UrOYFRh3O-9Prad8J3mwd_

#include"stdio.h"
#include"stdlib.h"
struct Num{
	double a;
	double b;
};
double a1,b1,a2,b2;
void Input()
{
	scanf("%lf%lf%lf%lf",&a1,&b1,&a2,&b2);
//	printf("%lf%lf%lf%lf\n",a1,b1,a2,b2);
	
}
Num *add()
{
	Num *ans;
	ans=(Num *)malloc(sizeof(Num));//初始化
	ans->a=a1+a2;
	ans->b=b1+b2;
	return ans;
}
Num *sub()
{
	Num *ans;
	ans=(Num *)malloc(sizeof(Num));
	ans->a=a1-a2;
	ans->b=b1-b2;
	return ans;
}
Num *mul()
{
	Num *ans;
	ans=(Num *)malloc(sizeof(Num));
	ans->a=a1*a2-b1*b2;
	ans->b=a1*b2+a2*b1;
	return ans;
}
Num *div()
{
	Num *ans;
	ans=(Num *)malloc(sizeof(Num));
	if(a2==0||b1==0||b2==0) return NULL;
	double den=a2*a2+b2*b2;
	ans->a=(a1*a2+b1*b2)/den;
	ans->b=(b1*a2-a1*b2)/den;
	return ans;
}
int main()
{
	char op;
	Num *ans;
	ans=(Num *)malloc(sizeof(Num));
	scanf("%c",&op);
	Input();
	switch(op)
	{
		case '+':ans=add();break;
		case '-':ans=sub();break;
		case '*':ans=mul();break;
		case '/':ans=div();break;
		default :break;
	}
	printf("%.2lf+",ans->a);//奇怪输出格式。 
	printf("%.2lfi",ans->b);
	return 0;
 }



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: