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

一元稀疏多項式求導c語言

發布時間: 2022-06-02 15:14:49

1. c語言一元多項式求導,以-1 -1結束

while(z!=0)

循環面沒改變z值z直1死循環

2. 請問一下C語言程序 菜單建立問題 如 「 一元稀疏多項式的運算 」這個問題中的第七小問,跪求高手。周五要

Add函數只有兩個形參:
int Add(LinList *la,LinList *lb)/*多項式相加,相加後存於以la為頭結點的鏈表中*/
為什麼main里調用時傳三個實參呢:
Add(&la,&lb,&lc);

3. c語言 一元稀疏多項式的運算

數據關系:R=約定a1為棧底,an 為棧頂。基本操作:Push(&s,e)
初始條件:棧s已經存在。
操作結果:插入元素e為新的棧頂元素
Pop(&s,&e)
初始條件:棧s已經存在且非空。
操作結果:刪除s的棧頂元素,並用e返回其值。

4. 計算一元稀疏多項式

這是我以前做的數據結構課程設計,加減乘除、求值、求導等功能。
希望可以幫上你的忙。

#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;
}

5. C語言 一元稀疏多項式的運算

有網友碰到過這樣的c語言 一元稀疏多項式的運算,問題詳細內容為:問題描述:設有兩個帶頭指針的單鏈表表示兩個一元稀疏多項式A、B,實現兩個一元稀疏多項式的處理。實現要求:⑴輸入並建立多項式;⑵輸出多項式,輸出形式為整數序列:n,c1,e1,c2,...問題描述:設有兩個帶頭指針的單鏈表表示兩個一元稀疏多項式A、B,實現兩個一元稀疏多項式的處理。
實現要求:
⑴ 輸入並建立多項式;
⑵ 輸出多項式,輸出形式為整數序列:n,c1,e1,c2,e2……cn,en,其中n是多項式的項數,ci,ei分別為第i項的系數和指數。序列按指數降序排列;
⑶ 多項式A和B相加,建立多項式A+B,輸出相加的多項式;
⑷ 多項式A和B相減,建立多項式A-B,輸出相減的多項式;
⑸ 多項式A和B相乘,建立多項式A×B,輸出相乘的多項式;
⑹ 設計一個菜單,至少具有上述操作要求的基本功能。
測試數據:
(1) (2x+5x8-3.1x11)+(7-5x8+11x9)
(2) (6x-3-x+4.4x2-1.2x9)-(-6x-3+5.4x2+7.8x15)
(3)(x+x2+x3)+0
(4)(x+x3)-(-x-x-3)展開,我搜你通過互聯網收集了相關的一些解決方案,希望對有過相同或者相似問題的網友提供幫助,具體如下:
解決方案1:
數據關系:R=約定a1為棧底,an 為棧頂。基本操作:Push(&s,e)
初始條件:棧s已經存在。
操作結果:插入元素e為新的棧頂元素
Pop(&s,&e)
初始條件:棧s已經存在且非空。
操作結果:刪除s的棧頂元素,並用e返回其值。
c語言 一元稀疏多項式的運算
答:數據關系:R=約定a1為棧底,an 為棧頂。基本操作:Push(&s,e) 初始條件:棧s已經存在。 操作結果:插入元素e為新的棧頂元素 Pop(&s,&e) 初始條件:棧s已經存在且非空。 操作結果:刪除s的棧頂元素,並用e返回其值。
請問一下C語言程序 菜單建立問題 如 「 一元稀疏多.

6. 數據結構課程設計(C語言版) 一元稀疏多項式的運算

數據關系:R=約定a1為棧底,an
為棧頂。基本操作:Push(&s,e)
初始條件:棧s已經存在。
操作結果:插入元素e為新的棧頂元素
Pop(&s,&e)
初始條件:棧s已經存在且非空。
操作結果:刪除s的棧頂元素,並用e返回其值

7. 鏈表 一元多項式求導問題 C語言

(1)Pt1->expn!=0
(2)Pt1->coef*Pt1->expn
(3)Pt1->expn-1
(4)P2==NULL
(5)Tail=Pt2 或許應該為 (Tail=Pt2)->next=Null

前三個分析不錯
(4)的if.....else..... 語句是給當前計算完成的Pt2找「組織」的
第一次運行的時候P2==Null,這個接點是首節點,Pt2要賦值給P2,終成為函數的返回值
之後再運行判斷,P2都不為Null,這時候應該將節點接於之前的節點後面Tail->next=Pt2
可見Tail用來暫時存放上一個計算結束的節點

所以(5)就是Tail=Pt2,在循環的最後,將當先節點指針賦給Tail
因為緊接著循環就結束了,Pt2會重新賦值為新空間的地址,要先用Tail保存起它

怎麼說這個程序還是不太健壯
如果空格能填兩句的話,(5)還應該填一句Pt2->next=Null,
或者合寫為 (Tail=Pt2)->next=Null
那樣最後一個節點的next為空,代表鏈表結束

好像還有點問題就是,如果原來的多項式就剩一個常數項
那麼調用這個函數,返回空指針,實際應該返回一個單節點 系數為0,指數為0的鏈表
不過填空就只能做到上邊的結果了