연결리스트를 이용한 두다항식의 덧셈 프로그램을 만들었는데 여기에서 addPoly 함수를 바꿔서 메인함수에서 주어진 두다항식에 대한 연산결과를 곱셈으로 바꿔서 제출하라는데.... 어떻게 해야 할지 모르겠습니다.
<?xml:namespace prefix = "o" ns = "urn:schemas-microsoft-com:office:office" />
#include <stdio.h>
#include <stdlib.h>
typedef struct ListNode{
float coef;
int expo;
struct ListNode* link;
} ListNode;
typedef struct ListHead{
ListNode* head;
} ListHead;
ListHead* createLinkedList(void) {
ListHead* L;
L = (ListHead *)malloc(sizeof(ListHead));
L->head = NULL;
return L;
}
void addLastNode(ListHead* L, float coef, int expo) {
ListNode* newNode;
ListNode* p;
newNode = (ListNode *)malloc(sizeof(ListNode));
newNode->coef = coef;
newNode->expo = expo;
newNode->link = NULL;
if(L->head == NULL){
L->head = newNode;
return;
}
else {
p = L->head;
while(p->link != NULL) {
p = p->link;
}
p->link = newNode;
}
}
void addPoly(ListHead* A, ListHead* B, ListHead* C) {
ListNode* pA = A->head;
ListNode* pB = B->head;
float sum;
while(pA && pB){
if(pA->expo == pB->expo){
sum = pA->coef + pB->coef;
addLastNode(C, sum, pA->expo);
pA=pA->link; pB=pB->link;
}
else if(pA->expo > pB->expo){
addLastNode(C, pA->coef, pA->expo);
pA=pA->link;
}
else {
addLastNode(C, pB->coef, pB->expo);
pB=pB->link;
}
}
for( ; pA!=NULL; pA=pA->link)
addLastNode(C, pA->coef, pA->expo);
for( ; pB!=NULL; pB=pB->link)
addLastNode(C, pB->coef, pB->expo);
}
void printPoly(ListHead* L) {
ListNode* p = L->head;
for(;p;p=p->link){
printf("%3.0fx^%d", p->coef, p->expo);
}
}
void main(void){
puts("\n 작성자 : 조교 ㅋ");
ListHead *A, *B, *C;
A = createLinkedList();
B = createLinkedList();
C = createLinkedList();
addLastNode(A, 4,3);
addLastNode(A, 3,2);
addLastNode(A, 5,1);
printf("\n A(x)=");
printPoly(A);
addLastNode(B, 3,4);
addLastNode(B, 1,3);
addLastNode(B, 2,1);
addLastNode(B, 1,0);
printf("\n B(x)=");
printPoly(B);
addPoly(A, B, C);
printf("\n C(x)=");
printPoly(C);
getchar();
}
<?xml:namespace prefix = "v" ns = "urn:schemas-microsoft-com:vml" /><?xml:namespace prefix = "w" ns = "urn:schemas-microsoft-com:office:word" />
댓글 0