#include <stdio.h>
#include <stdlib.h>
typedef struct Node{
float shi;
float xu;
struct Node *next;
}Node,*Linklist;
void insert(Linklist L,float a,float b){
Linklist p,q;
p=L;
while(p->next)
p=p->next;
q=(Linklist)malloc(sizeof(Node));
q->shi=a;
q->xu=b;
q->next=NULL;
p->next=q;
p=q;
}
void search(Linklist L,int count){
Linklist p;
p=L;
while(count){
p=p->next;
count--;
}
printf("%f+%fi\n",p->shi,p->xu);
}
void plus(Linklist L,int count,int countt){
Linklist p,q;
p=L;
q=L;
while(count){
p=p->next;
count--;
}
while(countt){
q=q->next;
countt--;
}
printf("%f+%fi\n",p->shi+q->shi,p->xu+q->xu);
}
void jian(Linklist L,int count,int countt){
Linklist p,q;
p=L;
q=L;
while(count){
p=p->next;
count--;
}
while(countt){
q=q->next;
countt--;
}
printf("%f+%fi\n",p->shi-q->shi,p->xu-q->xu);
}
void ji(Linklist L,int count,int countt){
Linklist p,q;
p=L;
q=L;
while(count){
p=p->next;
count--;
}
while(countt){
q=q->next;
countt--;
}
printf("%f+%fi\n",p->shi*q->shi-p->xu*q->xu,p->xu*q->shi+q->xu*p->shi);
}
void searchshi(Linklist L,int count){
Linklist p;
p=L;
while(count){
p=p->next;
count--;
}
printf("实部是%f\n",p->shi);
}
void searchxu(Linklist L,int count){
Linklist p;
p=L;
while(count){
p=p->next;
count--;
}
printf("虚部是%f\n",p->xu);
}
void main(){
printf("数据结构实验一复数\n");
printf("操作及编号如下:\n1.输入实部和虚部生成一个复数\n2.查看已输入的复数\n");
printf("3.两复数求和\n");
printf("4.两复数求差\n");
printf("5.两复数求积\n");
printf("6.分离出实部\n");
printf("7.分离出虚部\n");
printf("0.退出\n");
Linklist L;
L=(Linklist)malloc(sizeof(Node));
L->next=NULL;
int i,j;
int count=0,countt=0,choice=0;
while(1){
printf("输入操作编号\n");
scanf("%d",&choice);
if(!(choice))
break;
switch(choice){
case 1:{
printf("分别输入实部,虚部\n");
scanf("%d",&i);
scanf("%d",&j);
insert(L,i,j);
break;
}
case 2:{
printf("输入要查看第几个复数\n");
scanf("%d",&count);
search(L,count);
break;
}
case 3:{
printf("分别输入求和两复数的序号,先小后大\n");
scanf("%d",&count);
scanf("%d",&countt);
plus(L,count,countt);
break;
}
case 4:{
printf("分别输入求差两复数的序号\n");
scanf("%d",&count);
scanf("%d",&countt);
jian(L,count,countt);
break;
}
case 5:{
printf("分别输入求积两复数序号\n");
scanf("%d",&count);
scanf("%d",&countt);
ji(L,count,countt);
break;
}
case 6:{
printf("输入查看哪个数的实部\n");
scanf("%d",&count);
searchshi(L,count);
break;
}
case 7:{
printf("输入查看哪个数的虚部\n");
scanf("%d",&count);
searchxu(L,count);
break;
}
}
}
}