一元多项式的乘法与除法

fxyuer2004 2004-08-30 07:40:02
一元多项式的乘法与除法,有空也可写写加法和减法的程序啊!帮帮忙啊!我给你加分多多!
要求:一定要用(链表)实现。
...全文
1386 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
abitz 2004-09-03
  • 打赏
  • 举报
回复
你可以编个程序打印ascii码值在1~255之间的所有字符,看看你所问到的数字都是哪些字符。但是如果你不知道\n\r等的话,你应该把C语言教材再好好看看。yorn只是个命名,yes or no的意思。写这个程序时水平很烂,一些编码风格是很不好的。你应该注意算法部分,不要受细枝末节的影响。
fxyuer2004 2004-09-02
  • 打赏
  • 举报
回复
printf("%cfor example, you can input '2 3 -3.2 2 1.3 5 enter'for the polynomial:",250);
'250'是什么意思啊?
printf("%c",oxc4); 'oxc4'是什么意思啊?
printf("%c",182); '182'是什么意思啊?
printf("%c",199); '199'是什么意思 啊?
yorn=corewin(3,23); '(3,23)'是什么意思啊?
cprintf("\r%cthe polynomial you inout is :\n\r",249); 'cprintf'是什么意思啊? '\n\r'是什么意思啊? '249'是什么意思啊?
printf ("+%g",p->link->coef); '+%g'是什么意思啊?
cprintf("\r%cthe puotient is :\n\r",249); 这句话是什么意思啊?
cprintf("\r%cthe remainder is :\n\r",249); 这句话是什么意思啊?
yorn=null; 'yorn'是什么意思啊?
C语言的注释符号是什么啊?
阿奈,帮帮我新生的忙啊?阿奈回答啊?
fxyuer2004 2004-08-31
  • 打赏
  • 举报
回复
为什么要画,——/*画一个双矩形线框*/啊?有什么作用吗?
fxyuer2004 2004-08-31
  • 打赏
  • 举报
回复
void setbkgnd() /*画背景*/
{
void box( int startx, int starty, int width, int high); /*画双线框*/
干嘛要 /*画背景*/ 和 /*画双线框*/
啊,我不理解,帮帮忙啊?解释一下?
fxyuer2004 2004-08-31
  • 打赏
  • 举报
回复
void setbkgnd(); /*画背景*/
void setsur(); /*画初始画面*/
兄弟, /*画背景*/ 和 /*画初始画面*/ 什么意思啊?
abitz 2004-08-31
  • 打赏
  • 举报
回复
大哥,这是我上大二时候写的实验课程序,那些什么背景,框之类的都是画着玩的,你在TC2.0下编译执行就知道了。你可以去掉这些没用的东西。乘除法的计算都有相应的函数,你看那些就行了。
abitz 2004-08-30
  • 打赏
  • 举报
回复
char compare(int a,int b) /*比较两个数的大小*/
{
if(a>b) return'>';
if(a==b) return'=';
if(a<b) return'<';
}


polynomial polysub(polynomial a,polynomial b) /*多项式的减法*/
{
void makesub(polynomial p); /*将各项系数取反*/
polynomial polyadd(polynomial a,polynomial b);
void DESTROY(polynomial p);

makesub(b);
polyadd(a,b);
DESTROY(b);
return a;
}


void makesub(polynomial p) /*将各项系数取反*/
{
while(p->link){
p->link->coef=-p->link->coef;
p=p->link;
}
}


void DESTROY(polynomial p)
{
polynomial temp;
while(p){
temp=p;
p=p->link;
free(temp);
}
}


polynomial polymult(polynomial a,polynomial b) /*多项式的乘法*/
{
polynomial makemult(polynomial p,float c,int e); /*将多项式p1各项乘以 cx<e>*/

polynomial p,q,temp;
q=b;
p=makemult(a,q->link->coef,q->link->exp);
q=q->link;
while(q->link){
temp=makemult(a,q->link->coef,q->link->exp);
q=q->link;
polyadd(p,temp);
DESTROY(temp);
}
return p;
}


polynomial makemult(polynomial p,float c,int e) /*将多项式p1各项乘以 cx<e>*/

{
polynomial q,r;
r=q=(polynomial)malloc(sizeof(struct polynode));
q->exp=-1;
q->coef=NULL;
while(p->link){
q->link=(polynomial)malloc(sizeof(struct polynode));
q->link->coef=p->link->coef*c;
q->link->exp=p->link->exp+e;
q=q->link;
p=p->link;
}
q->link=NULL;
return r;
}


void polydiv(polynomial r,polynomial p,polynomial q) /*多项式的除法,q为商式,r为余式*/
{
polynomial temp;
while(r->link->exp>=p->link->exp){ /*当余式的指数大于除式的指数时*/
temp=(polynomial)malloc(sizeof(struct polynode)); /*计算出一个商式*/
temp->exp=-1;
temp->coef=NULL;
temp->link=(polynomial)malloc(sizeof(struct polynode));
temp->link->coef=r->link->coef/p->link->coef;
temp->link->exp=r->link->exp-p->link->exp;
temp->link->link=NULL;
polyadd(q,temp); /*将商式求和*/
temp=polymult(p,temp);
polysub(r,temp); /*用余式减去商式乘以除式所得到的积,差放在r中*/

}
}


char corewin(int lefttopx,int lefttopy) /*提示继续或退出*/
{
char yorn,flag=NULL;

window(lefttopx,lefttopy,lefttopx+9,lefttopy);
textbackground(WHITE);
textcolor(RED);
clrscr();
gotoxy(2,1);
cprintf("C");
textcolor(BLACK);
cprintf("ontinue");

window(lefttopx+13,lefttopy,lefttopx+18,lefttopy);
textbackground(WHITE);
textcolor(RED);
clrscr();
gotoxy(2,1);
cprintf("E");
textcolor(BLACK);
cprintf("xit");

window(lefttopx,lefttopy,lefttopx+9,lefttopy);
gotoxy(2,1);

while((flag=getch())!='c'&&flag!='C'&&flag!='e'&&flag!='E');

while(flag!='\r'){
if(flag=='c'||flag=='C'){

yorn=flag;

window(lefttopx,lefttopy,lefttopx+9,lefttopy);
textbackground(GREEN);
textcolor(BLACK);
clrscr();
gotoxy(2,1);
cprintf("Continue");

window(lefttopx+13,lefttopy,lefttopx+18,lefttopy);
textbackground(WHITE);
textcolor(RED);
clrscr();
gotoxy(2,1);
cprintf("E");
textcolor(BLACK);
cprintf("xit");
gotoxy(2,1);

}

if(flag=='e'||flag=='E'){

yorn=flag;

window(lefttopx+13,lefttopy,lefttopx+18,lefttopy);
textbackground(RED);
textcolor(BLACK);
clrscr();
gotoxy(2,1);
cprintf("Exit");
gotoxy(2,1);

window(lefttopx,lefttopy,lefttopx+9,lefttopy);
textbackground(WHITE);
textcolor(RED);
clrscr();
gotoxy(2,1);
cprintf("C");
textcolor(BLACK);
cprintf("ontinue");
gotoxy(2,1);

}

window(1,1,80,25);
textbackground(BLUE);
textcolor(YELLOW);
gotoxy(lefttopx+26,lefttopy);
cprintf("%cpress Enter to make sure your choice.",249);

flag=getch();
}
return yorn;
}
abitz 2004-08-30
  • 打赏
  • 举报
回复
void getpoly(polynomial poly1,polynomial poly2)
{
polynomial initpoly(polynomial poly,int len); /*输入一个多项式*/
polynomial polyorder(polynomial p,int len); /*把一个多项式按降幂排列*/
void polyprint(polynomial p); /*打印一个多项式*/

int m,n;

window(2,7,78,23);
cprintf("%cinput the length of the ploynomial 1: ",249);
scanf("%d",&m);
cprintf("\r%cinput the polynomial:\n\r ",249);
poly1=initpoly(poly1,m); /*输入多项式1*/
poly1=polyorder(poly1,m); /*把多项式1按降幂排列*/
cprintf("\r%cthe ploynomial you input is:\n\r ",249);
polyprint(poly1); /*打印多项式1*/
cprintf("\n\r%cinput the length of the ploynomial 2: ",249);
scanf("%d",&n);
cprintf("\r%cinput the polynomial:\n\r ",249);
poly2=initpoly(poly2,n); /*输入多项式2*/
poly2=polyorder(poly2,n); /*把多项式2按降幂排列*/
cprintf("\r%cthe ploynomial you input is:\n\r ",249);
polyprint(poly2); /*打印多项式2*/
}


polynomial initpoly(polynomial q,int len) /*输入一个多项式*/
{
polynomial p;
int i;
float c;
int e;

p=q;
p->exp=-1;
p->coef=NULL;
for(i=1;i<=len;i++){
p->link=(polynomial)malloc(sizeof(struct polynode));
scanf("%f%d",&c,&e); /*输入多项式的系数和指数*/
p->link->coef=c;
p->link->exp=e;
p=p->link;
}
p->link=NULL;
return q;
}


polynomial polyorder(polynomial p,int len) /*把一个多项式按降幂排列*/
{
void INSERT(float c,int e,polynomial p); /*在一个多项式中插入一项*/
void DELETE(polynomial p); /*在一个多项式中删除一项*/

polynomial q,r;
int i,j;
r=q=p;
if(len==0||len==1) /*如果多项式的长度为0或1*/
return p; /*不需要排序*/
for(i=1;i<len;i++){
p=r;
for(j=1;j<=len-i;j++){ /*气泡法排序*/
if(p->link->exp<p->link->link->exp){
INSERT(p->link->link->coef,p->link->link->exp,p);
DELETE(p->link->link);
}
p=p->link;
}
}
q=r;
for(i=1;i<=len;i++)
q=q->link;
q->link=NULL;
return r;
}


void polyprint(polynomial p) /*打印一个多项式*/

{
if(p->link==NULL) /*打印一个空多项式为0*/
printf("0");
while(p->link){
if(p->link->coef<0.0)
if(p->link->exp>0)
printf("%gx<%d>",p->link->coef,p->link->exp);
else
printf("%g",p->link->coef);
else if(p->coef==NULL||p->exp==-1)
if(p->link->exp>0)
printf("%gx<%d>",p->link->coef,p->link->exp);
else if(p->link->exp==0)
printf("%g",p->link->coef);
else;
else if(p->link->exp>0)
printf("+%gx<%d>",p->link->coef,p->link->exp);
else if(p->link->exp==0)
printf("+%g",p->link->coef);
p=p->link;

}
}


void INSERT(float c,int e,polynomial p) /*在一个多项式中插入一项*/
{
polynomial temp;
temp=p->link;
p->link=(polynomial)malloc(sizeof(struct polynode));
p->link->coef=c;
p->link->exp=e;
p->link->link=temp;
}


void DELETE(polynomial p) /*在一个多项式中删除一项*/
{
polynomial temp;
temp=p->link;
p->link=p->link->link;
free(temp);
}


char getoptr() /*输入运算符*/
{
char op;

cprintf("\n\r%cinput the operator: ",249);
scanf("%c",&op);
scanf("%c",&op);
return op;
}


void result(polynomial p1,polynomial p2,char optr) /*按运算符进行相应的运算,并输出结果*/
{
polynomial polyadd(polynomial a,polynomial b); /*加法*/
polynomial polysub(polynomial a,polynomial b); /*减法*/
polynomial polymult(polynomial a,polynomial b); /*乘法*/
void polydiv(polynomial r,polynomial p,polynomial q); /*除法*/

polynomial result;

switch(optr){
case '+':
polyadd(p1,p2);
cprintf("\r%cthe result is:\n\r ",249);
polyprint(p1);
break;
case '-':
polysub(p1,p2);
cprintf("\r%cthe result is:\n\r ",249);
polyprint(p1);
break;
case '*':
result=polymult(p1,p2);
cprintf("\r%cthe result is:\n\r ",249);
polyprint(result);
break;
case '/':
{
polynomial q;
q=(polynomial)malloc(sizeof(struct polynode));
q->exp=-1;
q->coef=NULL;
q->link=NULL;
polydiv(p1,p2,q);
cprintf("\r%cthe quotient is:\n\r ",249);
polyprint(q);
cprintf("\n\r%cthe remainder is:\n\r ",249);
polyprint(p1);
}
}
}


polynomial polyadd(polynomial a,polynomial b)
{
void INSERT(float c,int e,polynomial p);
void DELETE(polynomial p);
char compare(int a,int b);

polynomial p,q;
p=a;
q=b;
while(p->link&&q->link){
switch(compare(p->link->exp,q->link->exp)){ /*比较指数大小*/
case '>':p=p->link;break; /*若第一个多项式指数较大,则指针后移*/
case '<': /*若第二个多项式指数较大*/
INSERT(q->link->coef,q->link->exp,p); /*将这一项插入到第一个多项式中*/
q=q->link;break;
case'=': /*若相等*/
p->link->coef+=q->link->coef; /*系数相加*/
if(p->link->coef==0.0) /*若和是0*/
DELETE(p); /*删除这一项*/
else /*若和不是0*/
p=p->link; /*指针后移*/
q=q->link; /*指针后移*/

}
}
if(q->link) /*若第二项未结束*/
p->link=q->link; /*接到第一个多项式的后边*/
return a;
}


abitz 2004-08-30
  • 打赏
  • 举报
回复
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<math.h>

#define NULL 0

struct polynode{ /*定义多项式的项的节点 */
float coef; /*系数*/
int exp; /*指数*/
struct polynode *link;
};

typedef struct polynode *polynomial;


void main()
{
void setbkgnd(); /*画背景*/
void setsur(); /*画初始画面*/
void getpoly(polynomial poly1,polynomial poly2); /*多项式的输入*/
char getoptr(); /*运算符的输入*/
void result(polynomial poly1,polynomial poly2,char op); /*结果的输出*/
char corewin(int lefttopx,int lefttopy); /*提示继续或退出*/

polynomial p1,p2,q;
char yorn,optr;
int count=1;

do{
yorn=NULL;

if(count==1){ /*若是首次进入*/
setbkgnd(); /*画背景*/
setsur(); /*作初始画面*/
}

setbkgnd(); /*画背景*/

count++;

p1=(polynomial)malloc(sizeof(struct polynode));
p2=(polynomial)malloc(sizeof(struct polynode));

getpoly(p1,p2); /*多项式的输入*/

optr=getoptr(); /*运算符的输入*/

result(p1,p2,optr); /*结果的输出*/

yorn=corewin(3,23); /*提示继续或退出*/

}while(yorn!='e'&&yorn!='E');
}


void setbkgnd() /*画背景*/
{
void box( int startx, int starty, int width, int high); /*画双线框*/

int j;

window(1,1,80,25);
textbackground(BLUE);
textcolor(WHITE);
clrscr();

box(1,1,79,24);
textcolor(YELLOW);
gotoxy(2,2);
printf("%cDiretories:",249); /*给出提示信息*/
gotoxy(3,3);
printf("%cThis is a program for polynomial operating.",250);
gotoxy(3,4);
printf("%cfor example , you can input '2 3 -3.2 2 1.3 5 Enter' for the polynomial:",250);
gotoxy(3,5);
printf(" '1.3x<5>+2x<3>-3.2x<2>'.");
gotoxy(1,6);
printf("%c",199);
for(j=1;j<78;j++)
printf("%c",0xc4);
printf("%c",182);
gotoxy(1,22);
printf("%c",199);
for(j=1;j<78;j++)
printf("%c",0xc4);
printf("%c",182);
}


void setsur() /*作初始画面*/
{
void box(int startx, int starty, int width, int high); /*画一个双矩形线框*/

window(21,8,60,16);
textbackground(LIGHTGRAY);
clrscr();
textcolor(WHITE);
box(2,1,39,9);
textcolor(BLACK);
gotoxy(10,3);
cprintf("Polynomial Operating");
gotoxy(14,4);
cprintf("Version 1.0 ");
gotoxy(13,6);
cprintf("LKP&ZZC ID_27");
gotoxy(10,7);
cprintf("0003104_HIT 2002.5");
window(1,1,80,25);
gotoxy(2,7);
getch();
}


void box( int startx, int starty, int width, int high) /*画一个双矩形线框*/
{
int i;

gotoxy(startx,starty);
putch(201); /*画|-*/
for(i=startx+1;i<width;i++)
putch(205); /*画-*/
putch(187);
for(i=starty+1;i<high;i++){
gotoxy(startx,i);putch(186); /*画|*/
gotoxy(width,i);putch(186); /*画|*/
}
gotoxy(startx,high);
putch(200); /*画|_*/
for(i=startx+1;i<width;i++)
putch(205); /* 画- */
putch(188); /*画_|*/
}


70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧