當前位置:首頁 » 編程語言 » c語言一元多項式的乘法
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言一元多項式的乘法

發布時間: 2022-05-07 00:40:47

A. 求用C語言編寫求兩個一元多項式相乘的代碼

你提的這個要求實在是太自高了。你的這個大作業肯定是不會有人滿足你的。因為從編寫程序的角度上講,使用任何一種編程語言編寫帶有一定復雜功能的任何程序,實際本質上都是一項艱苦的腦力勞動。即:除了編寫程序之外,更多的時間和精力是需要放在調試程序上面的。
另外,你的要求中涉及到在編程過程中需要用到的很多計算機軟體的理論知識。例如:數據結構和演算法的設計(例如:鏈表的創建、排序等)、整個程序總體的設計風格、以及即使你在集成編程環境下面錄入完全部的程序源代碼,但是程序肯定是必須要經過一系列的不斷調試(例如:在可疑的語句處設置斷點、單步跟蹤等)、編譯、鏈接,直到運行出最終的正確結果。
故你的這個 C 語言大作業,別的任何人無法幫助你實現你的程序功能,只能夠依靠自己的刻苦努力來完成它了。

B. C語言的一元多項式相乘問題,高手救急!

#include "stdio.h"
#include "alloc.h"
#include "conio.h"
typedef struct node
{ int e,c;
struct node *next;
}PN;
PN *createLink()
{ int n;
PN *head, *p;
p=head=(PN*)malloc(sizeof(PN));
printf("n=");
scanf("%d",&n);
while(n)
{ p->next=(PN*)(PN*)malloc(sizeof(PN));
p=p->next;
printf("c,e:");
scanf("%d%d",&p->c,&p->e);
n--;
}
p->next=NULL;
return head;
}
void printLink(PN *h)
{ PN *p=h->next;
while(p)
{ printf("(%d,%d) ", p->c, p->e);
p=p->next;
}
printf("\n");
}
void freeLink(PN *h)
{ PN *p=h;
while(p)
{ h=h->next;
free(p);
p=h;
}
}
PN *add(PN *ha, PN *hb)
{ PN *hc,*pc,*pa=ha->next,*pb=hb->next;
int c,e;
hc=pc=(PN*)malloc(sizeof(PN));
while( pa || pb )
{ if(pa&&(pb==NULL||pa->e<pb->e))
{ e=pa->e;
c=pa->c;
pa=pa->next;
}
else if(pb&&(pa==NULL||pb->e<pa->e))
{ e=pb->e;
c=pb->c;
pb=pb->next;
}
else
{ e=pb->e;
c=pa->c+pb->c;
pb=pb->next;
pa=pa->next;
}
if(c)
{ pc->next=(PN*)malloc(sizeof(PN));
pc=pc->next;
pc->c=c;
pc->e=e;
}
}
pc->next=NULL;
return hc;
}
PN * onexmul(PN *pa, PN *hb)
{ PN *hc=(PN*)malloc(sizeof(PN)),*pc,*pb=hb->next;
pc=hc;
while(pb)
{ pc->next=(PN*)malloc(sizeof(PN));
pc=pc->next;
pc->c=pa->c*pb->c;
pc->e=pa->e+pb->e;
pb=pb->next;
}
pc->next=NULL;
return hc;
}
PN *mulxmul(PN *ha, PN *hb)
{ PN *hc=(PN*)malloc(sizeof(PN)), *t, *pa=ha->next;
hc->next=NULL;
while(pa)
{ t=onexmul(pa,hb);
hc=add(hc,t); /* hc=hc+t */
freeLink(t);
pa=pa->next;
}
return hc;
}

main()
{ PN *ha,*hb,*hc;
clrscr();
ha=createLink();
hb=createLink();
printLink(ha);
printLink(hb);

hc=add(ha,hb);
printLink(hc);
freeLink(hc);

hc=mulxmul(ha,hb);
printLink(hc);

freeLink(ha);
freeLink(hb);
freeLink(hc);
}

這個是可以的,你可以看看,里有也有加法。

C. C語言編寫一元多項式相乘,求解!!

你提的這個要求實在是太高了。你的這個大作業肯定是不會有人滿足你的。因為從編寫程序的角度上講,使用任何一種編程語言編寫帶有一定復雜功能的任何程序,實際本質上都是一項艱苦的腦力勞動。即:除了編寫程序之外,更多的時間和精力是需要放在調試程序上面的。

另外,你的要求中涉及到在編程過程中需要用到的很多計算機軟體的理論知識。例如:數據結構和演算法的設計(例如:鏈表的創建、排序等)、整個程序總體的設計風格、以及即使你在集成編程環境下面錄入完全部的程序源代碼,但是程序肯定是必須要經過一系列的不斷調試(例如:在可疑的語句處設置斷點、單步跟蹤等)、編譯、鏈接,直到運行出最終的正確結果。

故你的這個 C 語言大作業,別的任何人無法幫助你實現你的程序功能,只能夠依靠自己的刻苦努力來完成它了。

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

用鏈表存儲
typedef struct node{
int xishu;
int cifang;
node *next;
}node;
輸入的時候只輸入多項式的系數和對應的乘方數

相加減的時候可以從一個鏈表的第一項開始,在第二個鏈表中查找同類項,如果有的話就系數相加,並從第二個鏈表中刪除該項,指針後移,重復直到第一個鏈結束,然後把第二個鏈剩餘鏈連在後邊就好了~

乘法的時候從第一個鏈頭開始,與第二個鏈的逐項系數相成,乘方相加,然後再後移指針,直至鏈尾

E. 怎麼用C語言做一個一元多項式的程序


#include<stdio.h>
#include<windows.h>
voidre(intmax,intnumber);//判斷符號輸出
intmain()
{
intnumber[101]={0};//存放指數冪
intx1,x2;
intesc=1,max=0;
for(inti=0;esc==1;i++){
scanf("%d%d",&x1,&x2);
if(i==0){
max=x1;
}
if(x2!=0){
number[x1]+=x2;//同一個次冪的系數都存在數組的同一個位置
//printf("%d",number[x1]);
}
if(x1==0){//數據停止錄入的指令
esc=0;
}
//printf("min=%d,max=%d ",min,max);
}
intn_number[101]={0};//存放指數冪
intn_max=0;
for(inti=0;esc==0;i++){
scanf("%d%d",&x1,&x2);
if(i==0){
n_max=x1;
}
if(x2!=0){
n_number[x1]+=x2;//同一個次冪的系數都存在數組的同一個位置
//printf("%d",number[x1]);
}
if(x1==0){//數據停止錄入的指令
esc=1;
}
//printf("min=%d,max=%d ",min,max);
}
if(n_max>max){//整個if用於將兩個多項式的系數傳給其中最大冪指數較大的數組
for(inti=4;i>=0;i--){
if(number[i]!=0||n_number[i]!=0){
n_number[i]+=number[i];
//printf("n_number[%d]=%d ",i,n_number);
}
if(n_number[i]!=0){
intdata=n_number[i];
//printf("%d",n_number[i]);
re(i,data);
}
}
}else{
for(inti=100;i>=0;i--){
if(number[i]!=0||n_number[i]!=0){
number[i]+=n_number[i];
}
if(number[i]!=0){
intdata=number[i];
//printf("%d",number[i]);
re(i,data);
}
}
}
printf(" ");
system("pause");
return0;
}
voidre(inti,intnumber)
{
if(number!=1){
printf("%d",number);//如果系數為1不輸出系數,如果系數為-1輸出負號
}elseif(number==-1){
printf("-");
}
if(i){//當指數不為0時輸出x
printf("x");
}
if(i>1){//防止出現冪數為1的情況
printf("%d",i);
}
if(i>0&&number>0){//系數為負數時不輸出+號
printf("+");
}
}

F. 求數據結構程序C語言版,計算任意兩個一元多項式的加減乘法,輸出結果多項式,要求實現多項式的插入和刪除

struct poly
{
int cishu;//次方數
int xishu; //系數
};
/*在寫加減乘除時:首先輸入一個多項式其實就是一個結構體數組 每個數組元素由 次數和系數組成 排序(按照次數的大小順序排序) 求出每個多項式的長度, 再 每個加減乘除函數裡面的堆上分配一個新的結構體數組(malloc)以兩者中最長的長度分配,加減乘除時先遍歷長度大的再遍歷長度小的 兩個for循環OK!然後將剩下的再來一個循環一下剩下的沒有合並同類項的,返回合並後的多項式...插入好說,刪除也好說!這個代碼量還有點不想寫 */
typedef struct poly Polygon;
int Input(Polygon*);//輸入函數返回輸入多項式的長度
void sort(Polygon*);//排序
Polygon *Add(Polygon*,Polygon*);//加
Polygon* Minus(Ploygon*,Polygon*);//減
Polygon* Mul(Polygon*,Polygon*);//乘
Polygon* Div(Polygon*,Polygon*);//除
void Output(Polygon*);//輸出
void Insert(Polygon*)//查入

G. 用C語言實現一元多項式相乘

#include<stdio.h>
void Mul(int a[],int b[],int w)
{int shi[40];
int q,k,p,l;
for ( k=0;k<40;k++)
{shi[k]=0;}
for( q=w;q>=0;q--)
{for( p=w;p>=0;p--)
{
shi[q+p]=shi[q+p]+a[q]*b[p];
}
}
printf("\nP(x)*Q(x) = ");
for( l=2*w;l>=0;l--)
{
printf("%dX^%d + ",shi[l],l);
}
printf("0\n");
}
int main()
{
int i,j,k,m;
int x[20];
int y[20];
printf("請輸入一元N次多項式的N:");
scanf("%d",&i);
for(j=0;j<=i;j++)
{
printf("P(x) %d次項系數:",j);
scanf("%d",&x[j]);
printf("Q(x) %d次項系數:",j);
scanf("%d",&y[j]);
}
printf("\nP(x) = ");
for (k=i;k>=0;k--)
{printf("%dX^%d + ",x[k],k);}
printf("0");
printf("\nQ(x) = ");
for (m=i;m>=0;m--)
{printf("%dX^%d + ",y[m],m);}
printf("0");
Mul(x,y,i);
}

H. 一元多項式的實現(C語言)

#define TURE 1
#define FALSE 0
#include<stdio.h>
#include<stdlib.h>
typedef struct
{
float coef;
int e;
}ElementType;
typedef struct node
{
ElementType data;
struct node *next;//這也是為什麼要定義struct node 而非struct的原因
}Lnode,*LinkList;

int Head_CreatLinkList (LinkList &L,int n,ElementType a[])//頭插法建立鏈表
{
int i;
LinkList head,p;
L=(LinkList)malloc(sizeof(Lnode));
L->next=NULL;
head=L;
for(i=0;i<n;i++)
{
p=(LinkList)malloc(sizeof(Lnode));
p->next=NULL;
p->data.coef=a[i].coef;
p->data.e=a[i].e;
head->next=p;
head=p;
}
return TURE;
}
int GetElement(LinkList L)
{
int m;
m=L->data.e;
//printf("%d",m);
return m;
}
int Comp(int a,int b )
{
if(a>b)
return 1;
else if(a<b)
return -1;
else
return 0;
}
int Union_LinkList(LinkList &L1,LinkList &L2,LinkList &L3)
{
LinkList p1,p2,p3,flag1,flag2;//flag標記指針,用於刪除L2中節點
p1=L1->next;
p2=L2->next;
L3=p3=L1;//L3改變將導致L1的改變,即最終L3和L1相同
while(p1&&p2)
{
switch(Comp(GetElement( p1),GetElement( p2)))
{
case -1:
{
p3->next=p1;
p3=p1;
p1=p1->next;
break;
}
case 1:
{
p3->next=p2;
p3=p2;
p2=p2->next;
break;
}
case 0:
{
p1->data.coef=p1->data.coef+p2->data.coef;
if(p1->data.coef==0)
{
flag1=p1;
p1=p1->next;
free(flag1);
}
flag2=p2;
p2=p2->next;
free(flag2);
break;
}
}
}
p3->next=p1?p1:p2;
free(L2);
return TURE;
}

int Display_LinkList(LinkList L)
{
LinkList p;
p=L;
if(!p)
return FALSE;

while(p->next)
{
p=p->next;
printf("[%f%, %d]\t",p->data.coef,p->data.e);
}
printf("\n");
return TURE;

}

void main()
{
LinkList a,b,c;
ElementType a1[6]={{1,1},{2,7},{3,3},{4,4},{5,9},{1,10}};
ElementType a2[4]={{-1,1},{2,7},{3,8},{-5,9}};
Head_CreatLinkList (a,6,a1);
Head_CreatLinkList (b,4,a2);

Display_LinkList(a);
Display_LinkList(b);
Union_LinkList(a,b,c);
Display_LinkList(c);

}
這是自己以前寫的一個多項式加法的程序,現在也沒檢查了,希望你自己好好調試一下,至於減法和除法,只要加一點吧。希望對你有幫助

I. 求C語言一元多項式的運算的代碼

#include <stdio.h>
#include <stdlib.h>
#define SHI sizeof(struct oxiangshi)
#define NULL 0
struct oxiangshi
{int xishu,shu;
struct oxiangshi*next;
};

struct oxiangshi*create()
{struct oxiangshi*head,*p1,*p2;
int n;
n=0;
head=NULL;
p2=NULL;
p1=NULL;
p1=(struct oxiangshi*)malloc(SHI);
scanf("%d %d",&p1->xishu,&p1->shu);
while(p1->xishu!=NULL)
{++n;
if(n==1){head=p1;p2=p1;}
else{p2->next=p1;p2=p1,p2->next=NULL;}
p1=(struct oxiangshi*)malloc(SHI);
scanf("%d %d",&p1->xishu,&p1->shu);
p1->next=NULL;
}
free(p1);
return (head);
}

void paixu(struct oxiangshi*head)
{struct oxiangshi*p1,*p2;
int t=0;
p1=head;
p2=head;
for( ; ;p1=p1->next)
{ if(p1->next==NULL)break;
for(p2=p1->next; ;p2=p2->next)
{ if(p1->shu>p2->shu)
{ t=p1->shu;
p1->shu=p2->shu;
p2->shu=t;

t=p1->xishu;
p1->xishu=p2->xishu;
p2->xishu=t;
}

if(p2->next==NULL)break;
}
}
}

struct oxiangshi*add(struct oxiangshi*head1,struct oxiangshi*head2)
{struct oxiangshi*p1,*p2,*s,*p3,*head3;
int n=1;
p1=head1;
p2=head2;
head3=NULL;
p3=NULL;
while(p1!=NULL&&p2!=NULL)
{s=(struct oxiangshi*)malloc(SHI);
++n;
if(n==1) head3=s;
if(p1->shu>p2->shu)
{s->shu=p2->shu;
s->xishu=p2->xishu;
p2=p2->next;
}
else if(p1->shu<p2->shu)
{s->shu=p1->shu;
s->xishu=p1->xishu;
p1=p1->next;
}
else
{s->shu=p1->shu;
s->xishu=p1->xishu+p2->xishu;
p1=p1->next;
p2=p2->next;
}
p3->next=s;
p3=s;

}
p3->next=NULL;
if(p1!=NULL)
p3->next=p1;
if(p2!=NULL)
p3->next=p2;
return (head3);
}

struct oxiangshi* minus(struct oxiangshi*head1,struct oxiangshi*head2)
{struct oxiangshi*p2;
p2=head2;
while(p2!=NULL)
{p2->xishu=(-1)*p2->xishu;
p2=p2->next;
}
return (add(head1,head2));
}

struct oxiangshi* multiply(struct oxiangshi*px,struct oxiangshi*py)
{ int n=0,i=0,j=0;
struct oxiangshi*heada,*headb,*pa,*pb,*lasta,*lastb,*p2,*p1;
p1=heada=headb=pa=pb=lasta=lastb=NULL;
p2=py;

while (p2!=NULL)
{n++;
if(n==1)
{ p1=px;
while(p1!=NULL)
{i++;
pa=(struct oxiangshi*)malloc(SHI);
if(i==1) heada=pa;
else lasta->next=pa;
lasta=pa;
pa->xishu=p1->xishu*p2->xishu;
pa->shu=p1->shu+p2->shu;
pa->next=NULL;
p1=p1->next;
}
}
else
{ p1=px;
while(p1!=NULL)
{j++;
pb=(struct oxiangshi*)malloc(SHI);
if(j==1) headb=pb;
else lastb->next=pb;
lastb=pb;
pb->xishu=p1->xishu*p2->xishu;
pb->shu=p1->shu+p2->shu;
pb->next=NULL;
p1=p1->next;
}

}
p2=p2->next;
if(n!=1)heada=add(heada,headb);
}
return(heada);

}

void print (struct oxiangshi*head3)
{struct oxiangshi*p3;
p3=head3;

do
{ if(p3->shu==0)
{printf("%d",p3->xishu);
p3=p3->next;
continue;
}
else if(p3==head3)
{printf("%dx%d",p3->xishu,p3->shu);
p3=p3->next;
continue;
}
else if(p3->xishu<0)
printf("%dx%d",p3->xishu,p3->shu);
else if(p3->xishu>0)
printf("+%dx%d",p3->xishu,p3->shu);
p3=p3->next;
}while(p3!=NULL);
printf("\n\n");
}

void main()
{struct oxiangshi*p1,*p2,*p3;
int c=0;char d;
do
{

printf("please input A:\n");
p1=create();
paixu(p1);
printf("\nthe A is:");
print(p1);

printf("please input B:\n");
p2=create();
paixu(p2);
printf("\nthe B is:");
print(p2);

printf("\n please choice :\n");
printf("*********************************\n");
printf("1.add 2.minu 3.multiply\n");
printf("*********************************\n");
scanf("%d",&c);
switch(c)
{case 1:p3=add(p1,p2);break;
case 2:p3=minus(p1,p2);break;
case 3:p3=multiply(p1,p2);break;
default:printf("\nerror");

}
printf("\nthe result is :");
print(p3);
printf("do you still have anything to do?(y/n):\n");
scanf("%c",&d);
getchar();
clrscr();

}while(d!='n'&&d!='N');

}

J. C語言,多項式相乘

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

typedefstructnode{
intcoefficient,power;
structnode*next;
}term;

term*new_term(intcoefficient,intpower){
term*t=(term*)malloc(sizeof(term));
t->next=NULL;
t->coefficient=coefficient;
t->power=power;
returnt;
}

voidfree_term(term*t){
free(t);
}

typedefstructlist{
termhead;
}polynomial;

voidinit_polynomial(polynomial*p){
p->head.next=NULL;
}

voidclear_polynomial(polynomial*p){
term*t=p->head.next;
term*del;
while(t!=NULL){
del=t;
t=t->next;
free_term(del);
}
p->head.next=NULL;
}

voidinsert_polynomial(polynomial*p,term*t){
t->next=p->head.next;
p->head.next=t;
}

voidsort(polynomial*p){
term*t;
term*next;
intfinish=0,temp;
while(!finish){
finish=1;
t=p->head.next;
while(t!=NULL){
next=t->next;
if(next!=NULL){
if(t->power<next->power){
temp=t->coefficient;
t->coefficient=next->coefficient;
next->coefficient=temp;
temp=t->power;
t->power=next->power;
next->power=temp;
finish=0;
}
}
t=next;
}
}
}

voidcombine(polynomial*p){
term*t=p->head.next;
term*next;
while(t!=NULL){
next=t->next;
if(next!=NULL&&next->power==t->power){
t->coefficient+=next->coefficient;
t->next=next->next;
free_term(next);
}
else{
t=next;
}
}
}

voidmultiply(polynomial*p1,polynomial*p2,polynomial*p3){
term*t1=p1->head.next;
term*t2;
clear_polynomial(p3);
init_polynomial(p3);
while(t1!=NULL){
t2=p2->head.next;
while(t2!=NULL){
insert_polynomial(p3,new_term(t1->coefficient*t2->coefficient,t1->power+t2->power));
t2=t2->next;
}
t1=t1->next;
}
sort(p3);
combine(p3);
}

voidinput(polynomial*p){
intcoef,power;
charc;
init_polynomial(p);
while(true){
scanf("%d%d",&coef,&power);
insert_polynomial(p,new_term(coef,power));
c=getchar();
if(c==' ')break;
}
sort(p);
combine(p);
}

voidoutput(polynomial*p){
term*t=p->head.next;
while(t!=NULL){
printf("%d%d",t->coefficient,t->power);
t=t->next;
}
}

intmain(){
inti;
polynomialp[3];
for(i=0;i<3;i++){
init_polynomial(&p[i]);
}
for(i=0;i<2;i++){
input(&p[i]);
}
multiply(&p[0],&p[1],&p[2]);
output(&p[2]);
}