#include<stdio.h>
#include<stdlib.h>
typedef struct Node{
int index;
int ss;
int xs;
struct Node *next;
}Node, *Linkedlist;
Linkedlist complex_output(int p,int q){
if(q>0){
printf("%d+%di
",p,q);
}
else if(q<0)
printf("%d%di
",p,q);
else
printf("%d
",p);
return 0;
}
Linkedlist insert(Linkedlist head,Node *node){
node->next=head;
head=node;
return head;
}
void output(){
printf("-----------------------------------
");
printf(" 实验
");
printf("-----------------------------------
");
printf("1.输入复数
");
printf("2.复数求和
");
printf("3.复数求差
");
printf("4.复数求积
");
printf("5.分离实部
");
printf("6.分离虚部
");
printf("-----------------------------------
");
}
void link_output(Linkedlist head){
Node *current_node = head;
while(current_node!=NULL){
//printf("%d.%d+%di",current_node->index,current_node->ss,current_node->xs);
printf("%d. ",current_node->index);
complex_output(current_node->ss,current_node->xs);
current_node=current_node->next;
}
}
Linkedlist find_index(Linkedlist head,int p){
Node *current_node=head;
Node *a=NULL;
while(current_node!=NULL){
if (current_node->index==p){
a=current_node;
return a;
break;
}
}
}
void add(Linkedlist head,int p,int q){
Linkedlist a = find_index(head,p);
Linkedlist b = find_index(head,q);
complex_output(a->ss+b->ss,a->xs+b->xs);
}
void sub(Linkedlist head,int p,int q){
Linkedlist a = find_index(head,p);
Linkedlist b = find_index(head,q);
complex_output(a->ss-b->ss,a->xs-b->xs);
}
void mul(Linkedlist head,int p,int q){
Linkedlist a = find_index(head,p);
Linkedlist b = find_index(head,q);
int c,d;
c=(a->ss*b->ss)-(a->xs*b->xs);
d=(a->ss*b->xs)-(a->xs*b->ss);
complex_output(c,d);
}
void cut_ss(Linkedlist head,int p){
Linkedlist a = find_index(head,p);
printf("%d
",a->ss);
}
void cut_xs(Linkedlist head,int p){
Linkedlist a = find_index(head,p);
printf("%d
",a->xs);
}
int main()
{
Linkedlist linkedlist=NULL;
output();
int a;
int b=0;
int p,q;
while(1){
scanf("%d",&a);
if(a==1){
b++;
printf("添加复数,请输入实部 虚部:
");
scanf("%d %d",&p,&q);
Node *node = (Node *)malloc(sizeof(Node));
node->index=b;
node->ss=p;
node->xs=q;
node->next=NULL;
linkedlist=insert(linkedlist,node);
printf("添加成功!
");
link_output(linkedlist);
}
else if (a==2)
{
printf("输入求和序号:
");
scanf("%d%d",&p,&q);
if(p>b||q>b){
printf("错误!请输入:
");
continue;
}
add(linkedlist,p,q);
}
else if (a==3)
{
printf("输入求差序号:
");
scanf("%d%d",&p,&q);
if(p>b||q>b){
printf("错误!请输入:
");
continue;
}
sub(linkedlist,p,q);
}
else if (a==4)
{
printf("输入求积序号:
");
scanf("%d%d",&p,&q);
if(p>b||q>b){
printf("错误!请输入:
");
continue;
}
mul(linkedlist,p,q);
}
else if (a==5)
{
printf("输入分离序号:
");
scanf("%d",&p);
if(p>b){
printf("错误!请输入:
");
continue;
}
cut_ss(linkedlist,p);
}
else if(a==6)
{
printf("输入分离序号:
");
scanf("%d",&p);
if(p>b){
printf("错误!请输入:
");
continue;
}
cut_xs(linkedlist,p);
}
printf("请输入:
");
}
return 0;
}