多項式加減乘除法演算法實現

2021-05-22 19:22:10 字數 4456 閱讀 6436

#include

#include

#include

typedef struct _polynodepolynode,*polyptr;

void createpoly(polynode **p, char ch);//建立多項式鍊錶

polyptr polyadd(polynode *a,polynode *b);//多項式加

polyptr polyminus(polynode *a,polynode *b);//減

polyptr polymulti(polynode *a,polynode *b);//乘

polyptr polydiv(polynode *a,polynode *b);//除

void order(polynode **p);//排序

void display(polynode *p);//展示多項式

void destroy(polynode **p);//銷毀多項式

void menu();//命令選單

int isput(char ch);

//選單

void menu()

//判斷選單選擇

int ischoice(int choice)

int isput(char ch)}}

return 1;

}void createpoly(polynode **p, char ch)

while('/0' != *t)

while('+' != *t && '-' != *t && '*' != *t && '/' != *t && 

'/0' != *t)

//抽取數字

if(1 == iscoef && 0 != i)

if(0 == iscoef)

*t;}

else

i = 0;

}//while 遍歷到加減乘除,則退出迴圈,到下一新的節點

printf("係數:%f,指數:%d/n",q->coef,q->exp);

iscoef = 1;

if('/0' != *t)

if(0 == j)

if(null == *p)

else

l = q;

}//while遍歷整個字串

}polyptr polyadd(polynode *a,polynode *b)

while(null != p)

p = b;

while(null != p)

l->next = copya;//把copya,copyb兩個多項式連線起來,整理一下 就ok了.

order(©b);

// order(©b);

// printf("相加結果為:");

// display(copyb);

return copyb;

// destroy(©b);

}polyptr polyminus(polynode *a,polynode *b)

while(null != p)

p = b;

while(null != p)

l->next = copya;//把copya,copyb兩個多項式連線起來,整理一下 就ok了.

order(©b);

// order(©b);

// printf("相減結果為:");

// display(copyb);

return copyb;

// destroy(©b);

}polyptr polymulti(polynode *a,polynode *b)

while(null != pa)

pa=pa->next;

}order(©ab);

// printf("相乘結果為:");

// display(copyab);

return copyab;

// destroy(©ab);

}polyptr polydiv(polynode *a,polynode *b)

while(null != p)

p = b;

while(null != p)

order(©a);

order(©b);

while(copya->coef !=0 && copya->exp > -5)

// printf("相除結果為:");

// display(result);

return result;

// destroy(©ab);

void display(polynode *p)

if(1 == p->coef)

else

p = p->next;

while(null != p)

else

}else

else

}p = p->next;

}printf("/n");

}void destroy(polynode **p)

}void order(polynode **p)

}if(null == *p || null == (*p)->next)//如果只剩1項或空,則不 需要整理,退出函式

return;

//氣泡排序

out = incurr = *p;

while(null != out->next)

}out = out->next;

incurr = *p;

}//去除0項

prev = curr = *p;

curr = curr->next;

while(null != curr)

else

}//合併同類項

out = incurr = *p;

while(null != out->next)

}incurr = out = out->next;

if(null == out)

return;}}

void main()

while(8 != choice)

printf("輸入多項式a:/n");

scanf("%s",&ch);  

printf("/n%s/n",&ch); /

while(!isput(ch))

createpoly(&polya,ch);//建立多項式a鍊錶

display(polya);//

printf("輸入多項式b:/n");

scanf("%s",&ch);

while(!isput(ch))

createpoly(&polyb,ch);//建立多項式b鍊錶

order(&polyb);

order(&polya);//整理排序多項式

printf("建立多項式成功!多項式:/na為:");

display(polya);

printf("b為:");

display(polyb);

break;

case 2:

result=polyadd(polya,polyb);

printf("相加結果為:");

display(result);

//destroy(&result);

break;

case 3:

result=polyminus(polya,polyb);

printf("相減結果為:");

display(result);

//destroy(&result);

break;

case 4:

result=polymulti(polya,polyb);

printf("相乘結果為:");

display(result);

//destroy(&result);

break;

case 5:

result=polydiv(polya,polyb);

printf("相除結果為:");

display(result);

//destroy(&result);

break;

case 6:

printf("------顯示多項式------/na  :");

display(polya);

printf("b  :");

display(polyb);

break;

case 7:

destroy(&polya);

destroy(&polyb);

printf("此多項式已被清空./n");

break;

default:

return ;

}choice = 0;

menu();

scanf("%d",&choice);

while(!ischoice(choice) || 0 == choice)}}

大數加減乘除法

逆序函式 void rev char str,int len 大數加法 首先將兩個大數儲存到陣列中,然後對陣列逆序後進行逐位分別相加,相加後判斷是否有進製 用carry變數來記錄 實現 加法 int main if carry 1 putchar 1 for int i len 1 i 0 i pu...

web加減乘除法c C 實現簡單的加減乘除計算器

第一次學習c 做了個簡單的加減乘除計算器,只能實現兩個因數的運算。主要是練習下c 程式設計,和以前用過的vb差不多。與vb6不同的是,c 區分大小寫。windows視窗程式主要也是由一些控制項組成,響應響應的事件 event 實現具體的功能。1.效果圖如下所示 2.如下所示 using system...

多項式除法

給一n次多項式f x m次多項式g x 求一多項式q x r x 滿足 令f r x 表示函式f x 係數翻轉後的函式 because f x a 0x n a 1x a n therefore f r x a nx n a x a 0 x n a n a frac a 0 frac x nf fr...