以下是我用雙向鏈結串列寫的多項式四則運算,包括加減還有輸入x的值可以求出答案,但是乘法跟除法我還寫不出來(乘法跑不動,除法還沒寫)~~~
請問大大可以提供一些寶貴的意見供我參考ㄇ,謝謝~~~
====程式碼====
#include
#include
#include
#include <math.h>
#define N 6
int list1[N],list2[N];
struct plist
{
int coef;
int exp;
struct plist *next;
};
typedef struct plist pnode;
typedef pnode *plink;
plink poly1;
plink poly2;
plink result;
void printpoly(plink poly) //印出多項式
{
plink ptr; ptr = poly->next;
while ( poly != ptr )
{ printf("%dX^%d",ptr->coef,ptr->exp);
ptr = ptr->next;
if (poly!=ptr&&ptr->coef>0)
printf(" ");
}
printf("\n");
}
plink createpoly(int *array,int len) //create一個多項式
{
plink head;
plink before;
plink new_node;
int i;
head = ( plink ) malloc(sizeof(pnode));
if ( !head )
return NULL;
head->exp = -1;
before = head;
for ( i = len - 1; i >= 0; i-- )
if ( array[i] != 0 )
{
new_node = ( plink ) malloc(sizeof(pnode));
if ( !new_node )
return NULL;
new_node->coef = array[i];
new_node->exp = i;
new_node->next = NULL;
before->next = new_node;
before = new_node;
}
new_node->next = head;
return head;
}
int poly_eva(int poly1[],int number) //輸入x求出值
{
int i,result=0;
for(i=0;inext;
head2 = poly2->next; result = ( plink ) malloc(sizeof(pnode));
if ( !new_node )
return NULL;
result->exp = -1;
before = result; while ( poly1 != head1 || poly2 != head2 )
{ new_node = ( plink ) malloc(sizeof(pnode));
if ( !new_node )
return NULL;
if ( head1->exp < head2->exp )
{
new_node->coef = head2->coef;
new_node->exp = head2->exp;
head2 = head2->next;
}
else
if ( head1->exp > head2->exp )
{
new_node->coef = head1->coef;
new_node->exp = head1->exp;
head1 = head1->next;
}
else
{ new_node->coef = head1->coef head2->coef;
new_node->exp = head1->exp;
head1 = head1->next;
head2 = head2->next;
}
before->next = new_node;
before = new_node;
}
new_node->next = result; return result;
}
plink poly_sub(plink poly1,plink poly2) //減法
{
plink head1;
plink head2;
plink result;
plink before;
plink new_node; head1 = poly1->next;
head2 = poly2->next; result = ( plink ) malloc(sizeof(pnode));
if ( !new_node )
return NULL;
result->exp = -1;
before = result;
while ( poly1 != head1 || poly2 != head2 )
{ new_node = ( plink ) malloc(sizeof(pnode));
if ( !new_node )
return NULL;
if ( head1->exp < head2->exp )
{
new_node->coef = head2->coef;
new_node->exp = head2->exp;
head2 = head2->next;
}
else
if ( head1->exp > head2->exp )
{
new_node->coef = head1->coef;
new_node->exp = head1->exp;
head1 = head1->next;
}
else
{ new_node->coef = head1->coef - head2->coef;
new_node->exp = head1->exp;
head1 = head1->next;
head2 = head2->next;
}
before->next = new_node;
before = new_node;
}
new_node->next = result; return result;
}
plink poly_mul(plink poly1,plink poly2) //乘法(未完成)
{
plink head1;
plink head2;
plink result;
plink before;
plink new_node; head1 = poly1->next;
head2 = poly2->next; result = ( plink ) malloc(sizeof(pnode));
if ( !result )
return NULL;
result->exp = -1;
before = result;
while(head1!=NULL)
{ new_node = ( plink ) malloc(sizeof(pnode));
new_node->coef = head1->coef * head2->coef;
new_node->exp = head1->exp head2->exp; while(head2!=NULL)
{
head2 = head2->next;
new_node->coef = head1->coef * head2->coef;
new_node->exp = head1->exp head2->coef; }
before->next = new_node;
before = new_node;
}
new_node->next = result; return result;
}
void input() //由使用者輸入係數
{
int i;
printf("\nEnter p(x) coef:");
for(i=0;i<6;i )
scanf("%d",&list1[i]);
printf("Enter s(x) coef:");
for(i=0;i<6;i )
scanf("%d",&list2[i]);
}
void print()
{
poly1 = createpoly(list1,6);
printf("p(x):");
printpoly(poly1);
poly2 = createpoly(list2,6);
printf("s(x):");
printpoly(poly2);
}
void main()
{
int i,x,sum;
char choice;
START:
clrscr();
printf("==========MENU==========\n");
printf("1.Evaluation.\n");
printf("2.Add.\n");
printf("3.Substract.\n");
printf("4.Multiply.\n");
printf("5.Divide.\n");
printf("Please enter the choice:");
choice=getche(); switch(choice)
{
case '1': printf("\nEnter p(x) coef:");
for(i=0;i<6;i )
scanf("%d",&list1[i]);
poly1 = createpoly(list1,6);
printf("p(x):");
printpoly(poly1);
printf("Enter the value of x:");
scanf("%d",&x);
sum = poly_eva(list1,x);
printf("p(x)=%d",sum); break; case '2': input();
print();
result = poly_add(poly1,poly2);
printf("p(x) s(x):");
printpoly(result);
break; case '3': input();
print();
result = poly_sub(poly1,poly2);
printf("p(x)-s(x):");
printpoly(result);
break; case '4': input();
print();
printf("p(x)*s(x):");
poly_mul(poly1,poly2);
printpoly(result);
break; case '5': input();
print();
// result = poly_div(poly1,poly2);
printf("q(x):\n");
printf("r(x):");
//printpoly(result);
break; default: goto START; }
getch();
}