當前位置:首頁 » 編程語言 » c語言兩個多項式

c語言兩個多項式

發布時間: 2022-05-09 23:58:07

c語言,描述多項式加法

1. #include"malloc.h"
2. typedef struct Polyn /*定義多項式每一項的類型*/
3. {
4. float cofe; /*每一項系數*/
5. int expn; /*每一項的指數*/
6. struct Polyn *next;
7. struct Polyn *prior;
8. }*Pol.yn,SNode;
9. void setPolyn(Polyn *t1,Polyn *t2,int n) /*建立多項式*/
10. {
11. float a;
12. int i,b;
13. *t1=(SNode *)malloc(sizeof(SNode)); /*創建頭節點*/
14. (*t1)->next=NULL;
15. for(i=0;i<n;i++)
16. {
17. *t2=(SNode *)malloc(sizeof(SNode));
18. scanf("%f,%d;",&a,&b);
19. (*t2)->cofe=a; (*t2)->expn=b;
20. (*t1)->next->prior=(*t2);
21. (*t2)->prior=(*t1);
22. (*t2)->next=(*t1)->next;
23. (*t1)->next=(*t2);
24. } /*創建每一項並連接成多項式*/
25. }
26. void print(Polyn *t) /*輸出多項式*/
27. {
28. Polyn p;
29. for(p=(*t)->next;p!=NULL;p=p->next)
30. printf("%f,%d;",p->cofe,p->expn);
31. printf("\n");
32. }
33. void arrange(Polyn *t) /*化簡多項式*/
34. {
35. float m1;
36. int m2;
37. Polyn p,q,r,s;
38. for(p=(*t)->next;p!=NULL;p=p->next)
39. for(q=p->next;q!=NULL;q=q->next)
40. if((p->expn)>(q->expn))
41. {
42. m1=p->cofe;p->cofe=q->cofe;q->cofe=m1;
43. m2=p->expn;p->expn=q->expn;q->expn=m2;
44. } /*冒泡法多項式指數排序*/
45. for(p=(*t)->next;p!=NULL;p=p->next)
46. if((p->expn)==(p->next->expn))
47. {
48. r=p->next;
49. p->cofe+=p->next->cofe;
50. p->next=p->next->next;
51. p=p->prior; /*指針指向上一結點(須重新處理現在處理 的結點)*/
52. free(r);
53. if((p->next->cofe)==0)
54. {
55. s=p->next;
56. p->next=p->next->next;
57. free(s);
58. }
59. } /*多項式相同指數項系數求和,化簡多項式*/
60. }
61. void linkPolyn(Polyn *t1,Polyn *t2) /*兩個多項式連接*/
62. {
63. Polyn p,q;
64. for(p=(*t2)->next;p!=NULL;p=p->next)
65. q=p;
66. p=(*t2)->next;
67. q->next=(*t1)->next;
68. (*t1)->next->prior=q;
69. (*t1)->next=p;
70. p->prior=(*t1);
71. }
72. main() /*主函數*/
73. {
74. Polyn La,la,Lb,lb;
75. int n,m; /*多項式項數*/
76. printf("enter La』s lenth:");
77. scanf("%d",&n);
78. setPolyn(&La,&la,n);
79. arrange(&La);
80. printf("after arrange La is:\n");
81. print(&La); /*輸入多項式La,化簡並輸出*/
82. printf("enter Lb』s lenth:");
83. scanf("%d",&m);
84. setPolyn(&Lb,&lb,m);
85. arrange(&Lb);
86. printf("after arrange Lb is:\n");
87. print(&Lb); /*輸入多項式Lb,化簡並輸出*/
88. linkPolyn(&La,&Lb); /*La與Lb連接,形成新的La*/
89. arrange(&La); /*化簡La*/
90. printf("after add Polyn is :\n");
91. print(&La); /*輸出結果*/
92. }

Ⅱ 如何用C語言實現兩個一元多項式的相加和相乘

沒有別的好辦法,你看這樣行不行,不行你自己再想想吧
#include
void
main()
{
int
a1,b1,c1,d1,e1,f1,a2,b2,c2,d2,e2,f2;
printf("ax^5+bx^4+cx^3+dx^2+ex+f=0\n");
printf("請輸入:a
b
c
d
e
f\n");
printf("第一個:");
scanf("%d%d%d%d%d%d",&a1,&b1,&c1,&d1,&e1,&f1);
printf("第二個:");
scanf("%d%d%d%d%d%d",&a2,&b2,&c2,&d2,&e2,&f2);
printf("兩式相加後得:\n");
printf("%dx^5+%dx^4+%dx^3+%dx^2+%dx+%d=0\n",a1+a2,b1+b2,c1+c2,d1+d2,e1+e2,f1+f2);
}
由於變數太多!輸出時要注意哦
希望回答對你有幫助!

Ⅲ 用C語言編程:輸入兩個多項式的各項系數和指數,編寫程序求出他們的和,並要求與手寫習慣相同的格式輸出

//試試看這個,以前寫的,應該滿足你的要求

#include<stdio.h>
#include<stdlib.h>
#include<math.h>

typedefstruct_PolyNode{
intindex;
intcofficient;
}NodeType;

typedefstruct_polynomial{
NodeTypedata;
struct_polynomial*next;
}Polynomial;

voidappend(Polynomial*head,NodeTypedata){
Polynomial*p=(Polynomial*)malloc(sizeof(Polynomial));
p->data=data;
p->next=head->next;
head->next=p;
}

voidinput(Polynomial*head){
NodeTypedata;
do{
scanf("%d%d",&data.cofficient,&data.index);
append(head,data);
}while(data.cofficient!=0&&data.index!=-1);
}

/**
*合並同類項並去除系數為0的項
*/
voidmerge(Polynomial*head){
Polynomial*p;
for(p=head->next;p->next;p=p->next)
if(p->data.index==p->next->data.index){
p->data.cofficient+=p->next->data.cofficient;
p->next->data.cofficient=0;
}
for(p=head;p->next;)
if(p->next->data.cofficient==0){
Polynomial*q;
q=p->next;
p->next=q->next;
free(q);
}
else
p=p->next;
}

/**
*按指數從高到低排序
*/
voidsort(Polynomial*head){
Polynomial*p,*q;
for(p=head->next;p->next;p=p->next){
NodeTypet=p->data;
for(q=p->next;q;q=q->next){
if(t.index<q->data.index){
p->data=q->data;
q->data=t;
t=p->data;
}
}
}
}

Polynomial*add(Polynomial*a,Polynomial*b){
Polynomial*p,*ret=(Polynomial*)malloc(sizeof(Polynomial));
ret->next=NULL;
for(p=a->next;p;p=p->next)
append(ret,p->data);
for(p=b->next;p;p=p->next)
append(ret,p->data);
returnret;
}

Polynomial*multiply(Polynomial*a,Polynomial*b){
Polynomial*p,*q,*ret=(Polynomial*)malloc(sizeof(Polynomial));
ret->next=NULL;
for(p=a->next;p;p=p->next)
for(q=b->next;q;q=q->next){
NodeTypedata={p->data.index+q->data.index,p->data.cofficient*q->data.cofficient};
append(ret,data);
}
returnret;
}

voiddisplay(Polynomial*head){
sort(head);
merge(head);
Polynomial*p;
for(p=head->next;p;p=p->next){
if(p->data.cofficient<0)
printf("-");
elseif(p!=head->next)
printf("+");
if(!(abs(p->data.cofficient)==1&&p->data.index>0))
printf("%d",abs(p->data.cofficient));
if(p->data.index>0){
printf("X");
if(p->data.index>1)
printf("^%d",p->data.index);
}
}
printf(" ");
}

intmain(){
Polynomial*a=(Polynomial*)malloc(sizeof(Polynomial)),
*b=(Polynomial*)malloc(sizeof(Polynomial));
input(a);
input(b);
display(a);
display(b);
display(add(a,b));
display(multiply(a,b));
return0;
}

Ⅳ C語言——兩個一元多項式P(x)和Q(x)相加的問題

第一類書上有就不寫了;
第二類:
數據結構
int
data;
int
index;
linklist
next;
void
f_p_add(linklist
&a,linklist
b)
{//把b中的元素一個一個的插入到a中
linklist
p=a->next,t;
b=b->next;
while(b)
{
while(b->index!=p->index)//尋找指數與b->data相同的結點
{
if(!p->next)//搜索到最後沒有找到指數與b->data相同的結點,把它插入到最後
{
t=b;
b=b->next;
t->next=NULL;
p->next=t;
break;
}
if(b->index==p->index)//找到指數與b->data相同的結點
{
p->data=p->data+b->data;
t=b;
b=b->next;
free(t);
}
p=p->next;
}
b=b->next;
}//while(b)
}
網吧的機子沒裝vc,也就沒運行。

Ⅳ c語言寫倆個多項式相乘

這個是母函數的知識,這一塊我沒怎麼看,樓主可以自己網路一下。大概的意思就是: a[x]:x表示指數,a[x]存系數。如 3x^2+4x+5:可表示為:a[2]=3,a[1]=4,a[0]=5. 多項式加減就是a[x]相加減。多項式相乘就是x相加。也就是下標的運算

Ⅵ 給定兩個多項式,實現兩個多項式相加演算法。用c語言編程

輸入data2的時候,你看你for裡面是j,scanf裡面是i,讀不進去
for(j=0;j<n;j++)
scanf("%d%d",&data2[i].a,&data2[i].b);
最後兩行

for(i=0;i<=t;i++)
printf("%d %d\n",data[t].a,data[t].b);
i是步過值,結果用t輸出,怎麼也得用data[i].a吧

Ⅶ 數據結構c語言 用單鏈表儲存一元多項式,並實現兩個多項式的相加運算(語法沒有錯誤)可能指針錯了

void Add(LinkList *P1,LinkList *P2,LinkList *&P3)裡面的演算法有點問題!

我依照你的演算法,補充了一下程序!裡面新編寫了一個函數void CopyList(LinkList * a,LinkList *b) ;
同時void Add(LinkList *P1,LinkList *P2,LinkList *&P3做了一點修改!也許,程序的可讀性不好,你可以自己再修改!代碼如下:

#include<stdio.h>
#include <malloc.h>
#define MAX 20 //多項式最多項數
typedef struct{
double ratio;
int exp;
} ElemType;
typedef struct LNode
{
ElemType data;
struct LNode *next;
} LinkList;
void CreateListR(LinkList *&L,ElemType a[],int n)
{ LinkList *s,*r;
int i;
L=(LinkList *)malloc(sizeof(LinkList));
r=L;
for (i=0;i<n;i++)
{ s=(LinkList *)malloc(sizeof(LinkList));
s->data=a[i];
r->next=s;
r=s;
}
r->next=NULL;
}
/*
將一個鏈表的部分或全部結點復制到另一個鏈表中,
a是新鏈表的最後一個結點,b是被復制鏈表的某一結點
即讓要復制的結點加到新鏈表的尾部*/
void CopyList(LinkList * a,LinkList *b) //
{
LinkList *temp,*last; //temp臨時指針,last指向新鏈表的最後一個結點
last=a;
/*循環體中實現從結點b開始到鏈表結束,將各結點復制到新鏈表中*/
while(b!=NULL)
{
temp=(LinkList *)malloc(sizeof(LinkList)); //新建一個結點
temp->data=b->data; //將鏈表當前要復制的結點b復制到新結點中
last->next=temp; //將新建的結點加到新鏈表的末端
last=temp; //last指向尾結點,剛才新建的結點已成為新鏈表的尾結點
b=b->next; //遍歷鏈表的下一個結點b
}
last->next=NULL; //新鏈表尾結點中next指針的值設為NULL,即新鏈表創建完成
}
void DestroyList(LinkList *&L) //銷毀鏈表
{
LinkList *pre =L, *p=L->next;
while (p != NULL)
{
free(pre);
pre = p;
p = pre->next;
}
free(pre);
}
void DispList(LinkList *L)
{ LinkList *p=L->next;
while (p!=NULL)
{ printf("%fx^%d ",p->data.ratio,p->data.exp);
p=p->next;
}
printf("\n");
}
void Add(LinkList *P1,LinkList *P2,LinkList *&P3)
{ LinkList *p=P1->next,*q=P2->next;
LinkList *head; //鏈表P3的頭指針
head=(LinkList *)malloc(sizeof(LinkList)); //新建頭結點
P3=head;
int i;
for (i = 0; i<MAX; i++)
{
P1=(LinkList *)malloc(sizeof(LinkList)); //新建一個結點
P3->next=P1; //將新建的結點加到合並後鏈表中
P3=P1;

/*注意這里是'<',鏈表的結點已經從小到大排列有序,
每次比較都選擇較小的結點加到合並後的鏈表P3中*/

if ((p->data.exp)<(q->data.exp))
{
P3->data.exp = p->data.exp;
P3->data.ratio = p->data.ratio;
if (p->next!=NULL) //如果鏈表P1的下一個結點存在,則遍歷下一個結點
p = p->next;
else //否則,將另一個鏈表P2剩餘的結點加到鏈表P3中,鏈表P3建立完成
{
CopyList(P3,q);
break;
}
}

/*下面其他兩種情況的處理都是同一個道理,
在比較過程中,只要其中一個鏈表的所有結點都遍歷了,
此時只需要將另一個鏈表的剩餘結點都加到P3中,就可以完成鏈表的合並
*/

else if ((p->data.exp) == (q->data.exp))
{
P3->data.ratio = (p->data.ratio) + (q->data.ratio);
P3->data.exp = p->data.exp;
if (p ->next!= NULL)
p = p->next;
else
{
CopyList(P3,q->next);
break;
}
if (q->next != NULL)
q = q->next;
else
{
CopyList(P3,p->next);
break;
}
}
else{
P3->data.exp = q->data.exp;
P3->data.ratio = q->data.ratio;
if (q->next != NULL)
q= q->next;
else
{
CopyList(P3,p);
break;
}
}
}
/*在建立鏈表過程中,指針P3的值一直在改變,因此在完成合並鏈表後必須使P3指向頭結點*/
P3=head;
}
void BubbleSort(ElemType st[],int n)
{
int i, j;
ElemType tmp;
for (i = 0; i < n; i++)
{
for(j=n-1;j>i;j--)
if(st[j].exp<st[j-1].exp)
{
tmp=st[j];
st[j]=st[j-1];
st[j - 1] = tmp;
}
}
}
void main()
{
int num1=5, num2=5;
LinkList *L1, *L2, *L3;
L1 = (LinkList *)malloc(sizeof(LinkList));
L2 = (LinkList *)malloc(sizeof(LinkList));
L3 = (LinkList *)malloc(sizeof(LinkList));
ElemType st1[] = { {5,5}, {4,4}, {7,7}, {6,6}, {2,2} };
ElemType st2[] = { {5,5}, {8,8}, {7,7}, {3,3}, {2,2} };
BubbleSort(st1, num1);
BubbleSort(st2, num2);
CreateListR(L1, st1, num1);
CreateListR(L2, st2, num2);
DispList(L1);
DispList(L2);
Add(L1, L2, L3);
DispList(L3);
DestroyList(L1);
DestroyList(L2);
DestroyList(L3);

}

Ⅷ C語言:用單鏈表實現任意兩個一元多項式的加、減法運算

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 7
typedef enum { add, nul, sub, div1, yu, l, r }OP;
int a[N][N] = {
{ 0, 0, -1, -1, -1, 1, 2 },
{ 0, 0, -1, -1, -1, 1, 2 },
{ 1, 1, 0, 0, 0, 1, 2 },
{ 1, 1, 0, 0, 0, 1, 2 },
{ 1, 1, 0, 0, 0, 1, 2 },
};

int top;
OP beg;
int b[1024];
OP op[1024];

void init_nu( ){ top = 0; }
void push_nu( int term ){ b[top++] = term; }
int pop_nu( ){ return b[--top]; }
int is_empty_nu( ){ return top == 0; }
void destory_nu( ) { top = 0; }

void init_sign( ){ beg = 0; }
void push_sign( OP sign ){ op[beg++] = sign; }
void destory_sign( ){ beg = 0; }
OP pop_sign( ){ return op[--beg];}
OP get_sign( ){ return op[beg - 1]; }
int is_empty_sign( ){return beg == 0; }
int eval()
{
int i, j;
i = pop_nu();
j = pop_nu();
switch( pop_sign() )
{
case '+': push_nu( j + i ); break;
case '-': push_nu( j - i ); break;
case '*': push_nu( j * i ); break;
case '/': push_nu( j / i ); break;
case '%': push_nu( j & i ); break;
defult: break;
}
}
int change( char *s )
{
int i;
int n = strlen( s );
for( i = 0; i < n; i++ )
{
if( s[i] >= '0' && s[i] <= '9' )
push_nu( 0 );
while( s[i] >= '0' && s[i] <= '9' )
push_nu( 10 * pop_nu() + s[i++] - '0' );
switch( s[i] )
{
case '+': while( a[add][get_sign()] <= 0 )

eval();
push_sign( add ); break;
case '-': while( a[nul][get_sign()] <= 0 )
eval();
push_sign( nul ); break;
case '*': while( a[sub][get_sign()] <= 0 )
eval();
push_sign( sub ); break;
case '/': while( a[div1][get_sign()] <= 0 )
eval();
push_sign( div1 ); break;
case '%': while( a[yu][get_sign()] <= 0 )
eval();
push_sign( yu ); break;
case '(': push_sign( l ); break;
case ')': while( (get_sign()) != l )
eval();
pop_sign();
break;
defult: break;
}

}
return pop_nu();
}
int main( void )
{
char *s = "((5-3)*2+4/2&2+1)";
init_nu();
init_sign();
printf( "%d\n", change( s ));
destory_nu();
destory_sign();
return 0;
}

以前編的,希望對你有幫助。

別忘了給我分。

Ⅸ 用C語言設計函數求兩個一元多項式的乘積,要求能夠運行,求編程大神指點。

你是要求這個表達式的值,還是顯示表達式的描述方式哦?沒有看明白輸出。

Ⅹ 急急急 關於c語言 兩個一元多項式相加的問題

char,
a[n],
b[n],
c[n];
(把2個n次多項式按升序排列,系數分別放在a[n],b[n]中,空缺的項,系數為0,c[i]中為何的系數)
int
i;
for(i=0;i<n;i++)
c[i]=a[i]+b[i];

熱點內容
寫shell腳本 發布:2025-05-11 04:37:41 瀏覽:934
電腦伺服器打開有什麼用 發布:2025-05-11 04:36:49 瀏覽:98
sqlserver2008查詢時間 發布:2025-05-11 04:15:28 瀏覽:386
安卓孤膽車神被封號怎麼解封 發布:2025-05-11 04:05:22 瀏覽:940
高壓洗車泡沫怎麼配置 發布:2025-05-11 04:00:47 瀏覽:547
騰訊輕量伺服器怎麼使用 發布:2025-05-11 03:52:46 瀏覽:174
4位密碼組合有多少種至少有一個0 發布:2025-05-11 03:44:03 瀏覽:338
八卦手指演算法 發布:2025-05-11 03:23:32 瀏覽:281
編譯成exe是什麼意思 發布:2025-05-11 03:23:28 瀏覽:470
javaweb技術內幕 發布:2025-05-11 03:20:14 瀏覽:803