線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1781
推到 Plurk!
推到 Facebook!

多項式四則運算

尚未結案
jakie720313
一般會員


發表:15
回覆:7
積分:4
註冊:2003-11-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-12-21 19:18:18 IP:61.230.xxx.xxx 未訂閱
以下是我用雙向鏈結串列寫的多項式四則運算,包括加減還有輸入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(); }
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-12-21 20:45:37 IP:61.231.xxx.xxx 未訂閱
jakie720313您好: 請參考版規,讓您的程式碼更方便閱讀    http://delphi.ktop.com.tw/topic.php?TOPIC_ID=41948 順心
系統時間:2024-05-18 6:22:44
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!