#include<stdio.h>
#include<stdlib.h>
typedef struct Fushu
{
int shi, xu;
struct Fushu *next;
}Fushu;
//void init(Fushu *s) {
//s->next = NULL;
//s->shi = 0;
//s->xu = 0;
//}
Fushu *insert(Fushu *fushu, Fushu *w) {
Fushu *current;
current = fushu;
if (current == NULL)
{
fushu = w;
current = fushu;
current = current->next;
return fushu;
}
while (1)
{
if (current->next == NULL)
{
current->next = w;
//current = current->next;
break;
} //current->next = w;
current = current->next;
}
return fushu;
}
Fushu *add(Fushu *m, Fushu *n) {
Fushu *w = (Fushu *)malloc(sizeof(Fushu));;
w->shi = m->shi + n->shi;
w->xu = m->xu + n->xu;
w->next = NULL;
return w;
}
Fushu *minus(Fushu *m, Fushu *n) {
Fushu *w =(Fushu *)malloc(sizeof(Fushu));
w->shi = m->shi - n->shi;
w->xu = m->xu - n->xu;
w->next = NULL;
return w;
}
Fushu *multiply(Fushu *m, Fushu *n) {
Fushu *w = (Fushu *)malloc(sizeof(Fushu));
w->shi = m->shi * n->shi - m->xu * n->xu;
w->xu = m->shi * n->xu + m->xu * n->shi;
w->next = NULL;
return w;
}
int shi(Fushu *a) {
return a->shi;
}
int xu(Fushu *a) {
return a->xu;
}
int main(int argc, char const *argv[])
{
int a, b, c, d, e, i;
Fushu *fu = NULL;
Fushu *fu1, *fu2; //= (Fushu *)malloc(sizeof(Fushu))
Fushu *result;
printf("你想执行的操作:\n1:插入\n2:加法\n3:减法\n4:乘法\n5:实部\n6:虚部\n");
scanf("%d", &a);
while (1) {
if (a == 1)
{
printf("请输入实部和虚部\n");
scanf("%d %d", &b, &c);
Fushu *input = (Fushu *)malloc(sizeof(Fushu));
input->shi = b;
input->xu = c;
input->next = NULL;
fu = insert(fu, input);
}
else if (a == 2)
{
Fushu *cu;
cu = fu;
i = 1;
while (cu) {
printf("%d. %d + %di\n", i, cu->shi, cu->xu);
i++;
cu = cu->next;
}printf("请输入操作对象 x y\n");
scanf("%d%d", &d, &e);
fu1 = fu;
fu2 = fu;
for (int j = 1; j < d; j++){
fu1 = fu1->next;
}for (int k = 1; k < e; k++){
fu2 = fu2->next;
}
result = add(fu1, fu2);
printf("结果是%d + %di\n", result->shi, result->xu);
}else if(a == 3){
Fushu *cu;
cu = fu;
i = 1;
while (cu) {
printf("%d. %d + %di\n", i, cu->shi, cu->xu);
i++;
cu = cu->next;
}printf("请输入操作对象 x y\n");
scanf("%d%d", &d, &e);
fu1 = fu;
fu2 = fu;
for (int j = 1; j < d; j++)
{
fu1 = fu1->next;
}for (int k = 1; k < e; k++)
{
fu2 = fu2->next;
}
result = minus(fu1, fu2);
printf("结果是%d + %di\n", result->shi, result->xu);
}else if(a == 4){
Fushu *cu;
cu = fu;
i = 1;
while (cu) {
printf("%d. %d + %di\n", i, cu->shi, cu->xu);
i++;
cu = cu->next;
}printf("请输入操作对象 x y\n");
scanf("%d%d", &d, &e);
fu1 = fu;
fu2 = fu;
for (int j = 1; j < d; j++)
{
fu1 = fu1->next;
}for (int k = 1; k < e; k++)
{
fu2 = fu2->next;
}
result = multiply(fu1, fu2);
printf("结果是%d + %di\n", result->shi, result->xu);
}else if(a == 5){
printf("请输入需要查找的序号\n");
scanf("%d",&d);
fu1 = fu;
for(i = 1;i < d;i++){
fu1 = fu1->next;
}printf("实部是%d\n",shi(fu1));
}else if(a == 6){
printf("请输入需要查找的序号\n");
scanf("%d",&d);
fu1 = fu;
for(i = 1;i < d;i++){
fu1 = fu1->next;
}printf("虚部是%d\n",xu(fu1));
}
printf("是否继续?\nY/N\n");
char ct;
scanf("%s", &ct);
if (ct == 'N')
{
break;
}
else {
printf("请输入操作\n");
scanf("%d", &a);
}
}free(fu);
free(result);
return 0;
}