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

多項式運算c語言

發布時間: 2023-02-09 20:32:11

① 急!c語言 計算多項式的程序

#include
#include
void
main(
)
{
double
coe[20],
x,
sum
=
0;
int
i,
n;
printf("請輸入總項數:
");
scanf("%d",
&n);
printf("請按指數從高到低的順序輸入各項系數:
");
for(i
=
n;
i
>=
0;
i--)
scanf("%lf",
&coe[i]);
printf("請輸入變數x的值:
");
scanf("%lf",
&x);
for(i
=
n;
i
>=
0;
i--)
sum
=
sum
*
x
+
coe[i];
printf("\n結果為:
%lf\n",
sum);
}

② C語言多項式

#include <stdio.h>
#define DEGREE_MAX 8
void get_poly(double coeff[], int *degree)
{
int i;
printf("please enter the biggest degree:");
scanf("%d", degree);
for (i = *degree; i >= 0; i--) {
printf("enter %d `s Coefficient:", i);
scanf("%lf", &coeff[i]);
}
printf("\nyour polynomial is:\n");
for (i = *degree; i >= 0; i--) {
printf("%.2lfX^%d%c", coeff[i], i, (i > 0?' ' : '\n'));
}
}
double eval_poly(const double coeff[], int degree, double x)
{
int i;
double m = x, ret = 0;
ret += coeff[0];
for (i = 1; i <= degree; i++) {
ret += coeff[i]*m;
m *= x;
}
return ret;
}
int main() {
double coeff[DEGREE_MAX],x;
int degree;
get_poly(coeff, °ree);
printf("\nplease enter X value:");
scanf("%lf", &x);
printf("the answer is %.2lf\n", eval_poly(coeff, degree, x));
return 0;
}

③ C語言程序題:編寫程序實現多項式計算

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

#defineEPS1E-6

typedefstructitem{
doublecoefficient;
intpower;
structitem*next;
}*POLYNOMIAL,*pItem;

POLYNOMIALCreate(){//創建多項式
pItemhead,p;
doublecoe;
intpwr;
head=p=(pItem)malloc(sizeof(item));
while(1){
printf("系數冪次(00結束):");
scanf("%lf%d",&coe,&pwr);
if(fabs(coe)<=EPS&&!pwr)break;
p->next=(pItem)malloc(sizeof(item));
p->next->coefficient=coe;
p->next->power=pwr;
p=p->next;
}
p->next=NULL;
returnhead;
}

voidSort(POLYNOMIALhead){//按冪次降排序
pItempt,q,p=head;
while(p->next){
q=p->next;
while(q->next){
if(p->next->power<q->next->power){
pt=p->next;
p->next=q->next;
q->next=p->next->next;
p->next->next=pt;
}
elseq=q->next;
}
p=p->next;
}
}

voidShow(POLYNOMIALhead){//顯示多項式
POLYNOMIALp=head->next;
intflag=1;
if(p==NULL)return;
while(p){
if(flag){
if(fabs(p->coefficient)>=EPS){
if(p->power==0)printf("%.2lf",p->coefficient);
elseif(p->power==1){
if(p->coefficient==1.0)printf("x");
elseif(p->coefficient==-1.0)printf("-x");
elseprintf("%.2lfx",p->coefficient);
}
elseif(p->coefficient==1.0)printf("x^%d",p->power);
elseif(p->coefficient==-1.0)printf("-x^%d",p->power);
elseprintf("%.2lfx^%d",p->coefficient,p->power);
flag=0;
}
}
elseif(p->coefficient>0.0&&fabs(p->coefficient)>=EPS){
if(p->power==0)printf("+%.2lf",p->coefficient);
elseif(p->power==1){
if(p->coefficient==1.0)printf("+x");
elseprintf("+%.2lfx",p->coefficient);
}
elseif(p->coefficient==1.0)printf("+x^%d",p->power);
elseprintf("+%.2lfx^%d",p->coefficient,p->power);
}
elseif(p->coefficient<0.0&&fabs(p->coefficient)>=EPS){
if(p->power==0)printf("-%.2lf",-p->coefficient);
elseif(p->power==1){
if(p->coefficient==-1.0)printf("-x");
elseprintf("-%.2lfx",-p->coefficient);
}
elseif(p->coefficient==-1.0)printf("-x^%d",p->power);
elseprintf("-%.2lfx^%d",-p->coefficient,p->power);
}
p=p->next;
}
printf(" ");
}

doublePower(doublex,intn){
doublevalue=1.0;
inti;
for(i=0;i<n;++i)value*=x;
returnvalue;
}

doubleValue(POLYNOMIALhead,doublex){//多項式求值
POLYNOMIALp;
doublevalue=0.0;
for(p=head->next;p;p=p->next)
value+=p->coefficient*Power(x,p->power);
returnvalue;
}

POLYNOMIALCopy(POLYNOMIALA){
POLYNOMIALhead,t,p;
head=t=(pItem)malloc(sizeof(item));
for(p=A->next;p;p=p->next){
t->next=(pItem)malloc(sizeof(item));
t->next->coefficient=p->coefficient;
t->next->power=p->power;
t=t->next;
}
t->next=NULL;
returnhead;
}

POLYNOMIALAdditive(POLYNOMIALA,POLYNOMIALB){//多項式相加
POLYNOMIALhead,p,q,t;
head=Copy(A);
for(p=B;p->next;p=p->next){
q=head;
while(q->next){
if(p->next->power==q->next->power){
q->next->coefficient+=p->next->coefficient;
if(fabs(q->next->coefficient)<=EPS){
t=q->next;
q->next=t->next;
free(t);
}
break;
}
q=q->next;
}
if(q->next==NULL){
q->next=(pItem)malloc(sizeof(item));
q->next->coefficient=p->next->coefficient;
q->next->power=p->next->power;
q->next->next=NULL;
}
}
Sort(head);
returnhead;
}

POLYNOMIALSubtract(POLYNOMIALA,POLYNOMIALB){//多項式相減
POLYNOMIALhead,p,q,t;
head=Copy(A);
for(p=B;p->next;p=p->next){
q=head;
while(q->next){
if(p->next->power==q->next->power){
q->next->coefficient-=p->next->coefficient;
if(fabs(q->next->coefficient)<=EPS){
t=q->next;
q->next=t->next;
free(t);
}
break;
}
q=q->next;
}
if(q->next==NULL){
q->next=(pItem)malloc(sizeof(item));
q->next->coefficient=-p->next->coefficient;
q->next->power=p->next->power;
q->next->next=NULL;
}
}
Sort(head);
returnhead;
}

POLYNOMIALMultiplication(POLYNOMIALA,POLYNOMIALB){//多項式相乘
POLYNOMIALhead,t,p,q;
head=t=(pItem)malloc(sizeof(item));
for(p=A->next;p;p=p->next){//完成相乘過程
for(q=B->next;q;q=q->next){
t->next=(pItem)malloc(sizeof(item));
t->next->coefficient=p->coefficient*q->coefficient;
t->next->power=p->power+q->power;
t=t->next;
}
}
t->next=NULL;
Sort(head);//排序
p=head;
while(p->next){//合並同類項
q=p->next;
while(q->next){
if(p->next->power==q->next->power){
p->next->coefficient+=q->next->coefficient;
t=q->next;
q->next=t->next;
free(t);
}
elseq=q->next;
}
p=p->next;
}
returnhead;
}

voidFreeMemory(POLYNOMIALhead){
POLYNOMIALq,p=head;
while(p){
q=p;
p=q->next;
free(q);
}
}

intmain(){
printf("創建多項式A: ");
POLYNOMIALA=Create();
Sort(A);
printf("A(x)=");Show(A);
printf("創建多項式B: ");
POLYNOMIALB=Create();
Sort(B);
printf("B(x)=");Show(B);
POLYNOMIALC=Additive(A,B);
printf("C(x)=");Show(C);
POLYNOMIALD=Subtract(A,B);
printf("D(x)=");Show(D);
POLYNOMIALE=Multiplication(A,B);
printf("E(x)=");Show(E);
printf("A(%.2lf)=%.4lf ",2.0,Value(A,2.0));
printf("B(%.2lf)=%.4lf ",2.0,Value(B,2.0));
printf("C(%.2lf)=%.4lf ",2.0,Value(C,2.0));
printf("D(%.2lf)=%.4lf ",2.0,Value(D,2.0));
printf("E(%.2lf)=%.4lf ",2.0,Value(E,2.0));
FreeMemory(A);
FreeMemory(B);
FreeMemory(C);
FreeMemory(D);
FreeMemory(E);
return0;
}

④ 一元多項式計算C語言

除以上功能外,還有乘法和除法的計算和導數計算呢。 這是我以前做的數據結構課程設計。希望能幫上你的忙。 #include<stdio.h> #include<malloc.h> typedef struct Polynomial{ float coef; int expn; struct Polynomial *next; }*Polyn,Polynomial; //Polyn為結點指針類型 void Insert(Polyn p,Polyn h){ if(p->coef==0) free(p); //系數為0的話釋放結點 else{ Polyn q1,q2; q1=h;q2=h->next; while(q2&&p->expn<q2->expn){ //查找插入位置 q1=q2; q2=q2->next; } if(q2&&p->expn==q2->expn){ //將指數相同相合並 q2->coef+=p->coef; free(p); if(!q2->coef){ //系數為0的話釋放結點 q1->next=q2->next; free(q2); } } else{ //指數為新時將結點插入 p->next=q2; q1->next=p; } } }//Insert Polyn CreatePolyn(Polyn head,int m){//建立一個頭指針為head、項數為m的一元多項式 int i; Polyn p; p=head=(Polyn)malloc(sizeof(struct Polynomial)); head->next=NULL; for(i=0;i<m;i++){ p=(Polyn)malloc(sizeof(struct Polynomial));//建立新結點以接收數據 printf("請輸入第%d項的系數與指數:",i+1); scanf("%f %d",&p->coef,&p->expn); Insert(p,head); //調用Insert函數插入結點 } return head; }//CreatePolyn void DestroyPolyn(Polyn p){//銷毀多項式p Polyn q1,q2; q1=p->next; q2=q1->next; while(q1->next){ free(q1); q1=q2;//指針後移 q2=q2->next; } } void PrintPolyn(Polyn P){ Polyn q=P->next; int flag=1;//項數計數器 if(!q) { //若多項式為空,輸出0 putchar('0'); printf("\n"); return; } while (q){ if(q->coef>0&&flag!=1) putchar('+'); //系數大於0且不是第一項 if(q->coef!=1&&q->coef!=-1){//系數非1或-1的普通情況 printf("%g",q->coef); if(q->expn==1) putchar('X'); else if(q->expn) printf("X^%d",q->expn); } else{ if(q->coef==1){ if(!q->expn) putchar('1'); else if(q->expn==1) putchar('X'); else printf("X^%d",q->expn); } if(q->coef==-1){ if(!q->expn) printf("-1"); else if(q->expn==1) printf("-X"); else printf("-X^%d",q->expn); } } q=q->next; flag++; }//while printf("\n"); }//PrintPolyn int compare(Polyn a,Polyn b){ if(a&&b){ if(!b||a->expn>b->expn) return 1; else if(!a||a->expn<b->expn) return -1; else return 0; } else if(!a&&b) return -1;//a多項式已空,但b多項式非空 else return 1;//b多項式已空,但a多項式非空 }//compare Polyn AddPolyn(Polyn pa,Polyn pb){//求解並建立多項式a+b,返回其頭指針 Polyn qa=pa->next; Polyn qb=pb->next; Polyn headc,hc,qc; hc=(Polyn)malloc(sizeof(struct Polynomial));//建立頭結點 hc->next=NULL; headc=hc; while(qa||qb){ qc=(Polyn)malloc(sizeof(struct Polynomial)); switch(compare(qa,qb)){ case 1: { qc->coef=qa->coef; qc->expn=qa->expn; qa=qa->next; break; } case 0: { qc->coef=qa->coef+qb->coef; qc->expn=qa->expn; qa=qa->next; qb=qb->next; break; } case -1: { qc->coef=qb->coef; qc->expn=qb->expn; qb=qb->next; break; } }//switch if(qc->coef!=0){ qc->next=hc->next; hc->next=qc; hc=qc; } else free(qc);//當相加系數為0時,釋放該結點 }//while return headc; }//AddPolyn Polyn SubtractPolyn(Polyn pa,Polyn pb){//求解並建立多項式a+b,返回其頭指針 Polyn h=pb; Polyn p=pb->next; Polyn pd; while(p){ //將pb的系數取反 p->coef*=-1; p=p->next; } pd=AddPolyn(pa,h); for(p=h->next;p;p=p->next) //恢復pb的系數 p->coef*=-1; return pd; }//SubtractPolyn float ValuePolyn(Polyn head,float x){//輸入x值,計算並返回多項式的值 Polyn p; int i; float sum=0,t; for(p=head->next;p;p=p->next){ t=1; for(i=p->expn;i!=0;){ if(i<0){t/=x;i++;}//指數小於0,進行除法 else{t*=x;i--;}//指數大於0,進行乘法 } sum+=p->coef*t; } return sum; }//ValuePolyn Polyn Derivative(Polyn head){//求解並建立a的導函數多項式,並返回其頭指針 Polyn q=head->next,p1,p2,hd; hd=p1=(Polyn)malloc(sizeof(struct Polynomial));//建立頭結點 hd->next=NULL; while(q){ if(q->expn!=0){ //該項不是常數項時 p2=(Polyn)malloc(sizeof(struct Polynomial)); p2->coef=q->coef*q->expn; p2->expn=q->expn-1; p2->next=p1->next;//連接結點 p1->next=p2; p1=p2; } q=q->next; } return hd; }//Dervative Polyn MultiplyPolyn(Polyn pa,Polyn pb){//求解並建立多項式a*b,返回其頭指針 Polyn hf,pf; Polyn qa=pa->next; Polyn qb=pb->next; hf=(Polyn)malloc(sizeof(struct Polynomial));//建立頭結點 hf->next=NULL; for(;qa;qa=qa->next){ for(qb=pb->next;qb;qb=qb->next){ pf=(Polyn)malloc(sizeof(struct Polynomial)); pf->coef=qa->coef*qb->coef; pf->expn=qa->expn+qb->expn; Insert(pf,hf);//調用Insert函數以合並指數相同的項 } } return hf; }//MultiplyPolyn void DevicePolyn(Polyn pa,Polyn pb){//求解並建立多項式a*b,返回其頭指針 Polyn hf,pf,af,temp1,temp2,q; Polyn qa=pa->next; Polyn qb=pb->next; hf=(Polyn)malloc(sizeof(struct Polynomial));//建立頭結點,存儲商 hf->next=NULL; pf=(Polyn)malloc(sizeof(struct Polynomial));//建立頭結點,存儲余數 pf->next=NULL; temp1=(Polyn)malloc(sizeof(struct Polynomial)); temp1->next=NULL; temp2=(Polyn)malloc(sizeof(struct Polynomial)); temp2->next=NULL; temp1=AddPolyn(temp1,pa); while(qa!=NULL&&qa->expn>=qb->expn){ temp2->next=(Polyn)malloc(sizeof(struct Polynomial)); temp2->next->coef=(qa->coef)/(qb->coef); temp2->next->expn=(qa->expn)-(qb->expn); Insert(temp2->next,hf); pa=SubtractPolyn(pa,MultiplyPolyn(pb,temp2)); qa=pa->next; temp2->next=NULL; } pf=SubtractPolyn(temp1,MultiplyPolyn(hf,pb)); pb=temp1; printf("商是:"); PrintPolyn(hf); printf("余數是:"); PrintPolyn(pf); }//DevicePolyn int main(){ int m,n,flag=0; float x; Polyn pa=0,pb=0,pc,pd,pe,pf;//定義各式的頭指針,pa與pb在使用前付初值NULL printf("請輸入a的項數:"); scanf("%d",&m); pa=CreatePolyn(pa,m);//建立多項式a printf("請輸入b的項數:"); scanf("%d",&n); pb=CreatePolyn(pb,n);//建立多項式a //輸出菜單 printf("**********************************************\n"); printf("操作提示:\n\t1.輸出多項式a和b\n\t2.建立多項式a+b\n\t3.建立多項式a-b\n"); printf("\t4.計算多項式a在x處的值\n\t5.求多項式a的導函數\n\t6.建立多項式a*b\n"); printf("\t7.建立多項式a/b\n\t8.退出\n**********************************************\n"); for(;;flag=0){ printf("執行操作"); scanf("%d",&flag); if(flag==1){ printf("多項式a:");PrintPolyn(pa); printf("多項式b:");PrintPolyn(pb);continue; } if(flag==2){ pc=AddPolyn(pa,pb); printf("多項式a+b:");PrintPolyn(pc); DestroyPolyn(pc);continue; } if(flag==3){ pd=SubtractPolyn(pa,pb); printf("多項式a-b:");PrintPolyn(pd); DestroyPolyn(pd);continue; } if(flag==4){ printf("輸入x的值:x="); scanf("%f",&x); printf("多項式a的值%g\n",ValuePolyn(pa,x));continue; } if(flag==5){ pe=Derivative(pa); printf("多項式a的導函數:");PrintPolyn(pe); DestroyPolyn(pe);continue; } if(flag==6){ pf=MultiplyPolyn(pa,pb); printf("多項式a*b:");PrintPolyn(pf); DestroyPolyn(pf);continue; } if(flag==7){ DevicePolyn(pa,pb); continue; } if(flag==8) break; if(flag<1||flag>8) printf("Error!!!\n");continue; }//for DestroyPolyn(pa); DestroyPolyn(pb); return 0; }

熱點內容
java返回this 發布:2025-10-20 08:28:16 瀏覽:581
製作腳本網站 發布:2025-10-20 08:17:34 瀏覽:875
python中的init方法 發布:2025-10-20 08:17:33 瀏覽:570
圖案密碼什麼意思 發布:2025-10-20 08:16:56 瀏覽:755
怎麼清理微信視頻緩存 發布:2025-10-20 08:12:37 瀏覽:672
c語言編譯器怎麼看執行過程 發布:2025-10-20 08:00:32 瀏覽:999
郵箱如何填寫發信伺服器 發布:2025-10-20 07:45:27 瀏覽:242
shell腳本入門案例 發布:2025-10-20 07:44:45 瀏覽:102
怎麼上傳照片瀏覽上傳 發布:2025-10-20 07:44:03 瀏覽:794
python股票數據獲取 發布:2025-10-20 07:39:44 瀏覽:700