数据结构c语言复数运算

#include<stdio.h>#include<stdlib.h>typedefstruct{doubler,i;//r为实部,i为虚部}complex;comple... #include <stdio.h>#include<stdlib.h>typedef struct{ double r,i; //r为实部,i为虚部 }complex; complex* add(complex *a,complex *b); //复数a + 复数b complex* minus(complex *a,complex *b); //复数a - 复数b complex* multiply(complex *a,complex *b); //复数a * 复数b void printComplex(complex *a); //输出 complex* add(complex *a,complex *b) { complex *add; int m,n; m = a->r; n = b->r; add->r = m+n; m = a->i; n = b->i; add->i = m+n; return add;}complex* minus(complex *a,complex *b) { complex *minus; int o,p; o = a->r; p = b->r; minus->r = o-p ; o =a->i; p = b->i; minus->i = o-p; return minus;}complex* multiply(complex *a,complex *b) { complex *multiply; int u,w,s,t; u = a->r; w = b->r; s = a->i; t = b->i; multiply->r = u*w-s*t; multiply->i = s*w+u*t; return multiply;}void printComplex(complex *a) { if(a->i==0) printf("%.2lf + 0.00i\n",a->r); else if(a->r==0) printf("0.00 + %.2lfi\n",a->i); else printf("%.2lf + %.2lfi\n",a->r,a->i);}int main(){ complex a,b,*re; char c; while(~scanf("%lf %lf %lf %lf %c",&a.r,&a.i,&b.r,&b.i,&c)){ switch(c){ case '+': re = add(&a,&b); break; case '-': re = minus(&a,&b); break; case '*': re = multiply(&a,&b); break; default:; } printComplex(re); free(re); } return 0;}有大佬能帮我改一下吗?主函数和开头的结构体是已知的,那些接口实现是自己写的,但是总是RunError,只用改那些接口函数 展开
 我来答
帐号已注销
高粉答主

2020-02-10 · 每个回答都超有意思的
知道答主
回答量:2169
采纳率:0%
帮助的人:23.2万
展开全部

1、首先打开vc6.0, 新建一个项目。

2、添加stdio.h头文件。

3、添加math.h头文件。

4、添加main主函数。

5、定义结构体z。

6、定义double类型val变量。

7、初始化z。

8、使用cabs函数。

9、使用printf打印信息。

10、运行程序,看看结果。

fallx
2018-04-19 · TA获得超过5482个赞
知道大有可为答主
回答量:2321
采纳率:73%
帮助的人:642万
展开全部
/*
c语言复数运算
*/
#include<stdio.h>
#include<stdlib.h>
typedef struct
{
double r,i; //r为实部,i为虚部 

}complex;

complex* add(complex *a,complex *b); //复数a + 复数b 
complex* minus(complex *a,complex *b);  //复数a - 复数b 
complex* multiply(complex *a,complex *b); //复数a * 复数b 
void printComplex(complex *a); //输出 
complex* add(complex *a,complex *b) {
complex *add;
add->r =a->r+b->r;
add->i =a->i+b->i;
return add;
}
complex* minus(complex *a,complex *b) 
{
complex *minus;
minus->r =a->r-b->r;
minus->i =a->i-b->i;
return minus;
}
complex* multiply(complex *a,complex *b) 
{
complex *multiply;
multiply->r = a->r*b->r-a->i*b->i;
multiply->i = a->i*b->r+a->r*b->i;
return multiply;
}
void printComplex(complex *a) //输出要注意虚部有负数的情况
{
if(a->r!=0)  
printf("%.2lf",a->r); //不要断行,先输出实部
else
printf("0.00");
if(a->i>0) //大于0,正常输出+虚部
printf(" + %.2lfi\n",a->i);
else if(a->i<0)  //虚部是负数,不用输出+号了,直接输出负数
printf(" %.2lfi\n",a->i);
else
printf(" + 0.00i\n");//虚部为0
}

帮你改了下,再去试试吧。一时之间我也想不出还有什么漏洞了。祝好运。如果是自己写主函数的话,改一改那个输入吧,输入很容易会造成问题的

这一句: scanf("...%f  %c ",...,c),一个不好输入就会出错,c可能会获取到空白。

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式