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