c语言复数四则运算

Python010

c语言复数四则运算,第1张

我们设计一个可进行复数运算的演示程序。要求实现下列六种基本运算

:1)由输入的实部和虚部生成一个复数

2)两个复数求和

3)两个复数求差

4)两个复数求积,

5)从已知复数中分离出实部

6)从已知复数中分离出虚部。

运算结果以相应的复数或实数的表示形式显示(最好用结构体的方法)

要是能用c++和stl,可以这样写#include <complex>#include <iostream>void main(){using namespace std complex<double>a(3, 2) complex<double>b(5, 6) complex<double>result(0,0) result = a*b/(a+b) cout <<result}

下面是具体的操作:

stdio.h>

#include<conio.h>

#include<stdlib.h>

#define ERR -1

#define MAX 100 /*定义堆栈的大小*/

int stack[MAX]/*用一维数组定义堆栈*/

int top=0/*定义堆栈指示*/

int push(int i) /*存储运算数,入栈操作*/

{

if(top<MAX)

{

stack[++top]=i/*堆栈仍有空间,栈顶指示上移一个位置*/

return 0

}

else

{

printf("The stack is full")

return ERR

}

}

int pop() /*取出运算数,出栈操作*/

{

int var/*定义待返回的栈顶元素*/

if(top!=NULL) /*堆栈中仍有元素*/

{

var=stack[top--]/*堆栈指示下移一个位置*/

return var/*返回栈顶元素*/

}

else

printf("The stack is empty!\n")

return ERR

}

void main()

{

int m,n

char l

int a,b,c

int k

do{

printf("\tAriothmatic Operate simulator\n")/*给出提示信息*/

printf("\n\tPlease input first number:")/*输入第一个运算数*/

scanf("%d",&m)

push(m)/*第一个运算数入栈*/

printf("\n\tPlease input second number:")/*输入第二个运算数*/

scanf("%d",&n)

push(n)/*第二个运算数入栈*/

printf("\n\tChoose operator(+/-/*//):")

l=getche()/*输入运算符*/

switch(l) /*判断运算符,转而执行相应代码*/

{

case '+':

b=pop()

a=pop()

c=a+b

printf("\n\n\tThe result is %d\n",c)

printf("\n")

break

case '-':

b=pop()

a=pop()

c=a-b

printf("\n\n\tThe result is %d\n",c)

printf("\n")

break

case '*':

b=pop()

a=pop()

c=a*b

printf("\n\n\tThe result is %d\n",c)

printf("\n")

break

case '/':

b=pop()

a=pop()

c=a/b

printf("\n\n\tThe result is %d\n",c)

printf("\n")

break

}

printf("\tContinue?(y/n):")/*提示用户是否结束程序*/

l=getche()

if(l=='n')

exit(0)

}while(1)

}

#include "math.h"

struct complex{

int a

int b

}

complex mul(complex x,complex y){

complex c

c.a=x.a*y.a-x.b*y.b

c.b=x.a*y.b+x.b*y.a

return c

}

complex div(complex x,complex y){

complex c

c.a=(x.a*y.a+x.b*y.b)/(y.a*y.a+y.b*y.b)

c.b=(x.b*y.a-x.a*y.b)/(y.a*y.a+y.b*y.b)

return c

}

complex powr(complex x,int n){

complex c

c.a=1

c.b=0

for (int i=0i<ni++)

c=mul(c,x)

return c

}

/*

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可能会获取到空白。