当前位置:首页 » 编程语言 » c语言一元多项式求导
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言一元多项式求导

发布时间: 2022-01-20 18:36:33

❶ 求c语言程序 一元多项式

一元多项式.....你这可包括了差不多所有的一元多项式了。要写成千上万个函数来实现。要是简单的到立方还好说,要是加上求导10次方就真的要写n多函数了。有点不太现实

❷ 数据结构 一元多项式求导问题

你的测试数据为什么是0 -1 -1啊?怎么是三个参数啊?不是应该就两个么?一个是系数一个是幂啊!

那这样呢?
==============================================
#include <stdio.h>
#include <malloc.h>
typedef struct polynode
{
int c;
int e;
struct polynode *next;
} poly;
poly *creatpoly()
{
poly *p, *q, *h;
q = NULL, h = NULL;
int c;
int e;

while (e!=-1)
{
scanf("%d%d", &c, &e); /*将scanf位置改变下*/
h = (poly*)malloc(sizeof(poly));
h->c = c;
h->e = e;
h->next = NULL;
if (q == NULL)
q = h;
else
p->next = h;
p = h;
}
return q;
}

poly *qiu(poly *p)
{
poly *s;
s = p;
while (p)
{
p->c = (p->c)*(p->e);
p->e = (p->e) - 1;
p = p->next;
}

return s;
}

void print(poly *p)
{
int i = 0;
if (p->e == - 1)
{
printf("0");
i++;
}

{
while (p->next != NULL)
{
if (p->c != 0)
{
printf("%d %d ", p->c, p->e);
i++;
}
else
;

p = p->next;
}
if (p->next == NULL)
{
if (p->c != 0 && p->e > -1) /*加上约束条件p->e>-1*/
{
printf("%d %d ", p->c, p->e);
i++;
}
else
;
}

if (i == 0)
printf("0");
printf("\n");
}
}

int main()
{
poly *d, *h;
d = creatpoly();
h = qiu(d);
print(h);
getchar();
getchar();
return 0;
}

❸ 链表 一元多项式求导问题 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的链表
不过填空就只能做到上边的结果了

❹ c语言,求导

这位是在别人的地方来的,这是地址:
http://blog.csdn.net/qq_26816591/article/details/48690359
//一元多项式的求导
#include<stdio.h>
#include<malloc.h>//动态申请空间的函数的头文件
typedef struct node //定义节点类型
{
float coef; //多项式的系数
int expn; //多项式的指数
struct node * next; //结点指针域
}PLOYList;
void insert(PLOYList *head,PLOYList *input) //查找位置插入新链节的函数,且让输入的多项式呈降序排列
{
PLOYList *pre,*now;
int signal=0;
pre=head;
if(pre->next==NULL) {pre->next=input;} //如果只有一个头结点,则把新结点直接连在后面
else
{
now=pre->next;//如果不是只有一个头结点,则设置now指针
while(signal==0)
{
if(input->expn < now->expn)
{
if(now->next==NULL)
{
now->next=input;
signal=1;
}
else
{
pre=now;
now=pre->next;//始终让新输入的数的指数与最后一个结点中的数的指数比较,小于则插在其后面
}
}
else if( input->expn > now->expn )
{
input->next=now;
pre->next=input;
signal=1;
}//若新结点中指数比最后一个结点即now中的指数大,则插入now之前
else//若指数相等则需合并为一个结点,若相加后指数为0则释放该结点
{
now->coef=now->coef+input->coef;
signal=1;
free(input);
if(now->coef==0)
{
pre->next=now->next;
free(now);
}
}//else
} //while
}//else
}//void

PLOYList *creat(char ch) //输入多项式
{
PLOYList *head,*input;
float x;
int y;
head=(PLOYList *)malloc(sizeof(PLOYList)); //创建链表头
head->next=NULL;
scanf("%f %d",&x,&y);//实现用户输入的第一个项,包括其指数和系数
while(x!=0)//当用户没有输入结束标志0时可一直输入多项式的项,且输入一个创建一个结点
{
input=(PLOYList *)malloc(sizeof(PLOYList)); //创建新链节
input->coef=x;
input->expn=y;
input->next=NULL;
insert(head,input); //每输入一项就将其排序,是的链表中多项式呈降序排列
scanf("%f %d",&x,&y);
}
return head;
}
PLOYList *der(PLOYList *head)//多项式求导
{
PLOYList *p;
p = head -> next;
while (p)
{
p -> coef = p -> coef * p -> expn;
p -> expn = p -> expn--;
p = p -> next;
}
return head;
}//将多项式的每项系数和指数相乘得到新的系数,指数减一得到新的指数即完成求导

void print(PLOYList *fun) //输出多项式,fun指要输出的多项式链表的表头
{
PLOYList *printing;
int flag=0;
printing=fun->next;
if(fun->next==NULL)//若为空表,则无需输出
{
printf("0\n");
return;
}
while(flag==0)
{
if(printing->coef>0&&fun->next!=printing)
printf("+");
if(printing->coef==1);
else if(printing->coef==-1)
printf("-");
else
printf("%f",printing->coef);
if(printing->expn!=0) printf("x^%d",printing->expn);
else if((printing->coef==1)||(printing->coef==-1))
printf("1");
if(printing->next==NULL)
flag=1;
else
printing=printing->next;
}
printf("\n");
}
void main()
{
PLOYList *f;
printf(" 注:输入多项式格式为:系数1 指数1 系数2 指数2 …… ,并以0 0 结束:\n");
printf("请输入一个一元多项式:");
f = creat('f');
printf("这个多项式为:f(x)= ");
print(f);
printf("求导结果为:F(x)=f'(x)= ");
f=der(f);
print(f);
printf("\n\n");

}

❺ C语言一元多项式求导,以-1 -1结束

while(z!=0)

循环面没改变z值z直1死循环

❻ C语言 一元多项式的计算 关于x的一元多项式函数化简器 给定一个关于x的

这位是在别人的地方来的,这是地址:创建链表头head->next=NULL;scanf("%f%d",&x,&y);//实现用户输入的第一个项,包括其指数和系数while(x!=0)//当用户没有输入结束标志0时可一直输入多项式的项,且输入一个创建一个结点{input=(PLOYList*)malloc(sizeof(PLOYList));//创建新链节input->coef=x;input->expn=y;input->next=NULL;insert(head,input);//每输入一项就将其排序,是的链表中多项式呈降序排列scanf("%f%d",&x,&y);}returnhead;}PLOYList*der(PLOYList*head)//多项式求导{PLOYList*p;p=head->next;while(p){p->coef=p->coef*p->expn;p->expn=p->expn--;p=p->next;}returnhead;}//将多项式的每项系数和指数相乘得到新的系数,指数减一得到新的指数即完成求导voidprint(PLOYList*fun)//输出多项式,fun指要输出的多项式链表的表头{PLOYList*printing;intflag=0;printing=fun->next;if(fun->next==NULL)//若为空表,则无需输出{printf("0\n");return;}while(flag==0){if(printing->coef>0&&fun->next!=printing)printf("+");if(printing->coef==1);elseif(printing->coef==-1)printf("-");elseprintf("%f",printing->coef);if(printing->expn!=0)printf("x^%d",printing->expn);elseif((printing->coef==1)||(printing->coef==-1))printf("1");if(printing->next==NULL)flag=1;elseprinting=printing->next;}printf("\n");}voidmain(){PLOYList*f;printf("注:输入多项式格式为:系数1指数1系数2指数2……,并以00结束:\n");printf("请输入一个一元多项式:");f=creat('f');printf("这个多项式为:f(x)=");print(f);printf("求导结果为:F(x)=f'(x)=");f=der(f);print(f);printf("\n\n");}

❼ 如何用C语言实现一元多项式简单计算器的设计

  1. 一元多项式简单的计算器的功能:
    1)输入并建立多项式;
    2)输出多项式;
    3)两个多项式相加,输出和多项式;
    4)两个多项式相减,输出差多项式。

  2. 例程

    #include<dos.h>/*DOS接口函数*/
    #include<math.h>/*数学函数的定义*/
    #include<conio.h>/*屏幕操作函数*/
    #include<stdio.h>/*I/O函数*/
    #include<stdlib.h>/*库函数*/
    #include<stdarg.h>/*变量长度参数表*/
    #include<graphics.h>/*图形函数*/
    #include<string.h>/*字符串函数*/
    #include<ctype.h>/*字符操作函数*/
    #defineUP0x48/*光标上移键*/
    #defineDOWN0x50/*光标下移键*/
    #defineLEFT0x4b/*光标左移键*/
    #defineRIGHT0x4d/*光标右移键*/
    #defineENTER0x0d/*回车键*/
    void*rar;/*全局变量,保存光标图象*/
    structpalettetypepalette;/*使用调色板信息*/
    intGraphDriver;/*图形设备驱动*/
    intGraphMode;/*图形模式值*/
    intErrorCode;/*错误代码*/
    intMaxColors;/*可用颜色的最大数值*/
    intMaxX,MaxY;/*屏幕的最大分辨率*/
    doubleAspectRatio;/*屏幕的像素比*/
    voiddrawboder(void);/*画边框函数*/
    voidinitialize(void);/*初始化函数*/
    voidcomputer(void);/*计算器计算函数*/
    voidchangetextstyle(intfont,intdirection,intcharsize);/*改变文本样式函数*/
    voidmwindow(char*header);/*窗口函数*/
    intspecialkey(void);/*获取特殊键函数*/
    intarrow();/*设置箭头光标函数*/
    /*主函数*/
    intmain()
    {
    initialize();/*设置系统进入图形模式*/
    computer();/*运行计算器*/
    closegraph();/*系统关闭图形模式返回文本模式*/
    return(0);/*结束程序*/
    }
    /*设置系统进入图形模式*/
    voidinitialize(void)
    {
    intxasp,yasp;/*用于读x和y方向纵横比*/
    GraphDriver=DETECT;/*自动检测显示器*/
    initgraph(&GraphDriver,&GraphMode,"");
    /*初始化图形系统*/
    ErrorCode=graphresult();/*读初始化结果*/
    if(ErrorCode!=grOk)/*如果初始化时出现错误*/
    {
    printf("GraphicsSystemError:%s ",
    grapherrormsg(ErrorCode));/*显示错误代码*/
    exit(1);/*退出*/
    }
    getpalette(&palette);/*读面板信息*/
    MaxColors=getmaxcolor()+1;/*读取颜色的最大值*/
    MaxX=getmaxx();/*读屏幕尺寸*/
    MaxY=getmaxy();/*读屏幕尺寸*/
    getaspectratio(&xasp,&yasp);/*拷贝纵横比到变量中*/
    AspectRatio=(double)xasp/(double)yasp;/*计算纵横比值*/
    }
    /*计算器函数*/
    voidcomputer(void)
    {
    structviewporttypevp;/*定义视口类型变量*/
    intcolor,height,width;
    intx,y,x0,y0,i,j,v,m,n,act,flag=1;
    floatnum1=0,num2=0,result;/*操作数和计算结果变量*/
    charcnum[5],str2[20]={""},c,temp[20]={""};
    charstr1[]="1230.456+-789*/Qc=^%";/*定义字符串在按钮图形上显示的符号*/
    mwindow("Calculator");/*显示主窗口*/
    color=7;/*设置灰颜色值*/
    getviewsettings(&vp);/*读取当前窗口的大小*/
    width=(vp.right+1)/10;/*设置按钮宽度*/
    height=(vp.bottom-10)/10;/*设置按钮高度*/
    x=width/2;/*设置x的坐标值*/
    y=height/2;/*设置y的坐标值*/
    setfillstyle(SOLID_FILL,color+3);
    bar(x+width*2,y,x+7*width,y+height);
    /*画一个二维矩形条显示运算数和结果*/
    setcolor(color+3);/*设置淡绿颜色边框线*/
    rectangle(x+width*2,y,x+7*width,y+height);
    /*画一个矩形边框线*/
    setcolor(RED);/*设置颜色为红色*/
    outtextxy(x+3*width,y+height/2,"0.");/*输出字符串"0."*/
    x=2*width-width/2;/*设置x的坐标值*/
    y=2*height+height/2;/*设置y的坐标值*/
    for(j=0;j<4;++j)/*画按钮*/
    {
    for(i=0;i<5;++i)
    {
    setfillstyle(SOLID_FILL,color);
    setcolor(RED);
    bar(x,y,x+width,y+height);/*画一个矩形条*/
    rectangle(x,y,x+width,y+height);
    sprintf(str2,"%c",str1[j*5+i]);
    /*将字符保存到str2中*/
    outtextxy(x+(width/2),y+height/2,str2);
    x=x+width+(width/2);/*移动列坐标*/
    }
    y+=(height/2)*3;/*移动行坐标*/
    x=2*width-width/2;/*复位列坐标*/
    }
    x0=2*width;
    y0=3*height;
    x=x0;
    y=y0;
    gotoxy(x,y);/*移动光标到x,y位置*/
    arrow();/*显示光标*/
    putimage(x,y,rar,XOR_PUT);
    m=0;
    n=0;
    strcpy(str2,"");/*设置str2为空串*/
    while((v=specialkey())!=45)/*当压下Alt+x键结束程序,否则执行下面的循环*/
    {
    while((v=specialkey())!=ENTER)/*当压下键不是回车时*/
    {
    putimage(x,y,rar,XOR_PUT);/*显示光标图象*/
    if(v==RIGHT)/*右移箭头时新位置计算*/
    if(x>=x0+6*width)
    /*如果右移,移到尾,则移动到最左边字符位置*/
    {
    x=x0;
    m=0;
    }
    else
    {
    x=x+width+width/2;
    m++;
    }/*否则,右移到下一个字符位置*/
    if(v==LEFT)/*左移箭头时新位置计算*/
    if(x<=x0)
    {
    x=x0+6*width;
    m=4;
    }/*如果移到头,再左移,则移动到最右边字符位置*/
    else
    {
    x=x-width-width/2;
    m--;
    }/*否则,左移到前一个字符位置*/
    if(v==UP)/*上移箭头时新位置计算*/
    if(y<=y0)
    {
    y=y0+4*height+height/2;
    n=3;
    }/*如果移到头,再上移,则移动到最下边字符位置*/
    else
    {
    y=y-height-height/2;
    n--;
    }/*否则,移到上边一个字符位置*/
    if(v==DOWN)/*下移箭头时新位置计算*/
    if(y>=7*height)
    {
    y=y0;
    n=0;
    }/*如果移到尾,再下移,则移动到最上边字符位置*/
    else
    {
    y=y+height+height/2;
    n++;
    }/*否则,移到下边一个字符位置*/
    putimage(x,y,rar,XOR_PUT);/*在新的位置显示光标箭头*/
    }
    c=str1[n*5+m];/*将字符保存到变量c中*/
    if(isdigit(c)||c=='.')/*判断是否是数字或小数点*/
    {
    if(flag==-1)/*如果标志为-1,表明为负数*/
    {
    strcpy(str2,"-");/*将负号连接到字符串中*/
    flag=1;
    }/*将标志值恢复为1*/
    sprintf(temp,"%c",c);/*将字符保存到字符串变量temp中*/
    strcat(str2,temp);/*将temp中的字符串连接到str2中*/
    setfillstyle(SOLID_FILL,color+3);
    bar(2*width+width/2,height/2,15*width/2,3*height/2);
    outtextxy(5*width,height,str2);/*显示字符串*/
    }
    if(c=='+')
    {
    num1=atof(str2);/*将第一个操作数转换为浮点数*/
    strcpy(str2,"");/*将str2清空*/
    act=1;/*做计算加法标志值*/
    setfillstyle(SOLID_FILL,color+3);
    bar(2*width+width/2,height/2,15*width/2,3*height/2);
    outtextxy(5*width,height,"0.");/*显示字符串*/
    }
    if(c=='-')
    {
    if(strcmp(str2,"")==0)/*如果str2为空,说明是负号,而不是减号*/
    flag=-1;/*设置负数标志*/
    else
    {
    num1=atof(str2);/*将第二个操作数转换为浮点数*/
    strcpy(str2,"");/*将str2清空*/
    act=2;/*做计算减法标志值*/
    setfillstyle(SOLID_FILL,color+3);
    bar(2*width+width/2,height/2,15*width/2,3*height/2);/*画矩形*/
    outtextxy(5*width,height,"0.");/*显示字符串*/
    }
    }
    if(c=='*')
    {
    num1=atof(str2);/*将第二个操作数转换为浮点数*/
    strcpy(str2,"");/*将str2清空*/
    act=3;/*做计算乘法标志值*/
    setfillstyle(SOLID_FILL,color+3);bar(2*width+width/2,height/2,15*width/2,3*height/2);
    outtextxy(5*width,height,"0.");/*显示字符串*/
    }
    if(c=='/')
    {
    num1=atof(str2);/*将第二个操作数转换为浮点数*/
    strcpy(str2,"");/*将str2清空*/
    act=4;/*做计算除法标志值*/
    setfillstyle(SOLID_FILL,color+3);
    bar(2*width+width/2,height/2,15*width/2,3*height/2);
    outtextxy(5*width,height,"0.");/*显示字符串*/
    }
    if(c=='^')
    {
    num1=atof(str2);/*将第二个操作数转换为浮点数*/
    strcpy(str2,"");/*将str2清空*/
    act=5;/*做计算乘方标志值*/
    setfillstyle(SOLID_FILL,color+3);/*设置用淡绿色实体填充*/
    bar(2*width+width/2,height/2,15*width/2,3*height/2);/*画矩形*/
    outtextxy(5*width,height,"0.");/*显示字符串*/
    }
    if(c=='%')
    {
    num1=atof(str2);/*将第二个操作数转换为浮点数*/
    strcpy(str2,"");/*将str2清空*/
    act=6;/*做计算模运算乘方标志值*/
    setfillstyle(SOLID_FILL,color+3);/*设置用淡绿色实体填充*/
    bar(2*width+width/2,height/2,15*width/2,3*height/2);/*画矩形*/
    outtextxy(5*width,height,"0.");/*显示字符串*/
    }
    if(c=='=')
    {
    num2=atof(str2);/*将第二个操作数转换为浮点数*/
    switch(act)/*根据运算符号计算*/
    {
    case1:result=num1+num2;break;/*做加法*/
    case2:result=num1-num2;break;/*做减法*/
    case3:result=num1*num2;break;/*做乘法*/
    case4:result=num1/num2;break;/*做除法*/
    case5:result=pow(num1,num2);break;/*做x的y次方*/
    case6:result=fmod(num1,num2);break;/*做模运算*/
    }
    setfillstyle(SOLID_FILL,color+3);/*设置用淡绿色实体填充*/
    bar(2*width+width/2,height/2,15*width/2,3*height/2);/*覆盖结果区*/
    sprintf(temp,"%f",result);/*将结果保存到temp中*/
    outtextxy(5*width,height,temp);/*显示结果*/
    }
    if(c=='c')
    {
    num1=0;/*将两个操作数复位0,符号标志为1*/
    num2=0;
    flag=1;
    strcpy(str2,"");/*将str2清空*/
    setfillstyle(SOLID_FILL,color+3);/*设置用淡绿色实体填充*/
    bar(2*width+width/2,height/2,15*width/2,3*height/2);/*覆盖结果区*/
    outtextxy(5*width,height,"0.");/*显示字符串*/
    }
    if(c=='Q')exit(0);/*如果选择了q回车,结束计算程序*/
    }
    putimage(x,y,rar,XOR_PUT);/*在退出之前消去光标箭头*/
    return;/*返回*/
    }
    /*窗口函数*/
    voidmwindow(char*header)
    {
    intheight;
    cleardevice();/*清除图形屏幕*/
    setcolor(MaxColors-1);/*设置当前颜色为白色*/
    setviewport(20,20,MaxX/2,MaxY/2,1);/*设置视口大小*/
    height=textheight("H");/*读取基本文本大小*/
    settextstyle(DEFAULT_FONT,HORIZ_DIR,1);/*设置文本样式*/
    settextjustify(CENTER_TEXT,TOP_TEXT);/*设置字符排列方式*/
    outtextxy(MaxX/4,2,header);/*输出标题*/
    setviewport(20,20+height+4,MaxX/2+4,MaxY/2+20,1);/*设置视口大小*/
    drawboder();/*画边框*/
    }
    voiddrawboder(void)/*画边框*/
    {
    structviewporttypevp;/*定义视口类型变量*/
    setcolor(MaxColors-1);/*设置当前颜色为白色*/
    setlinestyle(SOLID_LINE,0,NORM_WIDTH);/*设置画线方式*/
    getviewsettings(&vp);/*将当前视口信息装入vp所指的结构中*/
    rectangle(0,0,vp.right-vp.left,vp.bottom-vp.top);/*画矩形边框*/
    }
    /*设计鼠标图形函数*/
    intarrow()
    {
    intsize;
    intraw[]={4,4,4,8,6,8,14,16,16,16,8,6,8,4,4,4};/*定义多边形坐标*/
    setfillstyle(SOLID_FILL,2);/*设置填充模式*/
    fillpoly(8,raw);/*画出一光标箭头*/
    size=imagesize(4,4,16,16);/*测试图象大小*/
    rar=malloc(size);/*分配内存区域*/
    getimage(4,4,16,16,rar);/*存放光标箭头图象*/
    putimage(4,4,rar,XOR_PUT);/*消去光标箭头图象*/
    return0;
    }
    /*按键函数*/
    intspecialkey(void)
    {
    intkey;
    while(bioskey(1)==0);/*等待键盘输入*/
    key=bioskey(0);/*键盘输入*/
    key=key&0xff?key&0xff:key>>8;/*只取特殊键的扫描值,其余为0*/
    return(key);/*返回键值*/
    }

❽ 怎样用链表解决一元多项式的求导问题,求代码

一元多项式求导,首先用链表存储的话,每个结点应该对应一项的系数和指数,另外要有一个next指针指向下一项的结点,计算的时候遍历链表对每一项按倒数计算方式计算就可以了,代码可以参考以下网址别人的回答http://..com/question/77802626.html

❾ 一元多项式求导 什么意思

几元是指未知数的个数,一元就是一个未知数。多项式比如x^2+x+1就是一元二次三项式,至于求导就是求切线方程,有求导公式的,上面那个式子求导就是2x+1

❿ c语言 多项式求导

#include<stdio.h> #include<stdlib.h> typedef struct polynode { int conf;/*常数*/ int exp;/*指数*/ struct polynode *next; }polynode; int main() { polynode *p,*q,*h; /*建立多项式*/ int conf,exp; h=(polynode*)malloc(sizeof(polynode)); q=h; scanf("%d %d",&conf,&exp); while(conf!=-1||exp!=-1) { p=(polynode*)malloc(sizeof(polynode)); p->conf=conf; p->exp=exp; q->next=p; q=p; scanf("%d %d",&conf,&exp); } q->next=NULL; \\你是这里写错了,写成NUll了 q=h; while(q->next!=NULL) /*求导*/ { q=q->next; if(q->exp>=1) { q->conf=(q->conf)*(q->exp); q->exp-=1; } else if(q->exp==0) { q=NULL; } else { printf("error"); break; } } q=h; while(q->next!=NULL)/*输出*/ { q=q->next; printf("%d %d",q->conf,q->exp); } return 0; } 改成这样就能运行了