一元稀疏多项式计算器.docx

上传人:b****6 文档编号:7566357 上传时间:2023-01-25 格式:DOCX 页数:13 大小:147.47KB
下载 相关 举报
一元稀疏多项式计算器.docx_第1页
第1页 / 共13页
一元稀疏多项式计算器.docx_第2页
第2页 / 共13页
一元稀疏多项式计算器.docx_第3页
第3页 / 共13页
一元稀疏多项式计算器.docx_第4页
第4页 / 共13页
一元稀疏多项式计算器.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

一元稀疏多项式计算器.docx

《一元稀疏多项式计算器.docx》由会员分享,可在线阅读,更多相关《一元稀疏多项式计算器.docx(13页珍藏版)》请在冰豆网上搜索。

一元稀疏多项式计算器.docx

一元稀疏多项式计算器

#include"stdio.h"

#include"stdlib.h"

#include"conio.h"

typedefintelemtype;

typedefstructlist//定义结构体链表

{

floatc;//多项式的常数域

elemtypee;//指数域

structlist*next;//指针域

}lnode,*linklist;//结构体名称

voidcreate_jisuanqi_linklist(linklist*l)//初始化结构体

{

(*l)=(linklist)malloc(sizeof(lnode));

(*l)->next=NULL;

}

voidinsert_jisuqnai_linklist(linklistl)//创建结构体

{

inte,n,i=1;

floatc;

lnode*p=l;

printf("Howmanytermsinthepolynomial:

");

scanf("%d",&n);//输入多项式中的项数

while(n)

{

lnode*q=(linklist)malloc(sizeof(linklist));

printf("PleaseinputNO.%d'scande:

",i);

fflush(stdin);//清除缓存数据

scanf("%f%d",&c,&e);//分别输入多项式的常数域和指数域

q->c=c;

q->e=e;

p->next=q;//将结点q接入链表中

q->next=NULL;

p=q;

n--;

i++;

}

}

voidchose_jisuanqi_linklist(linklist*l)//对多项式按指数进行降序排序

{

lnode*p=(*l)->next;

lnode*q=(lnode*)malloc(sizeof(linklist));//定义一个结点,用于循环比较指数域的值

inttempc,tempe;

while(p!

=NULL)//一直循环,直到遍历完链表中所有结点

{

q=p;

while(q!

=NULL)

{

if(p->ee)//交换两节点中的常数和指数域的值

{

tempe=p->e;

tempc=p->c;

p->e=q->e;

p->c=q->c;

q->e=tempe;

q->c=tempc;

}

q=q->next;//指针下移

}

p=p->next;

}

}

lnode*add_jisuanqi_linklist(linklista,linklistb)//执行多项式A与B相加

{

linklistc;//定义一个链表C用于存放两个多项式的和

intx;

create_jisuanqi_linklist(&c);//创建该多项式

lnode*p1=a->next;

lnode*p2=b->next;

lnode*t=c;

t->next=NULL;

lnode*p3=t;

while(p1)//遍历两个多项式中所有结点,找到指数域相同的结点,将其常数域相加存放到链表C中

{

p2=b->next;

while(p2)

{

if(p1->e==p2->e)

{

lnode*q=(lnode*)malloc(sizeof(lnode));

x=p1->c+p2->c;//将常数域相加

q->c=x;

q->e=p1->e;

p3->next=q;

q->next=NULL;

p3=q;

break;

}

else

p2=p2->next;

}

p1=p1->next;

}

p1=a->next;//指针复位指向头结点的next

while(p1)//链表a与c比较,将a中指数域的值未在c中出现的结点连接在链表c后

{

lnode*q=t->next;

while(q)

{

if(p1->e!

=q->e)

q=q->next;

elsebreak;

}

if(q==NULL)

{

lnode*q1=(lnode*)malloc(sizeof(lnode));

q1->c=p1->c;

q1->e=p1->e;

p3->next=q1;

q1->next=NULL;

p3=q1;

}

p1=p1->next;

}

p2=b->next;

while(p2)//链表a与c比较,将a中指数域的值未在c中出现的结点连接在链表c后

{

lnode*q=t->next;

while(q)

{

if(p2->e!

=q->e)

q=q->next;

elsebreak;

}

if(q==NULL)

{

lnode*q2=(lnode*)malloc(sizeof(lnode));

q2->c=p2->c;

q2->e=p2->e;

p3->next=q2;

q2->next=NULL;

p3=q2;

}

p2=p2->next;

}

chose_jisuanqi_linklist(&c);//对链表c进行安指数降序排序

returnt;//返回c的头结点

}

lnode*jian_jisuanqi_linklist(linklista,linklistb)//执行多项式A与B相减

{

linklistc;

intx;

create_jisuanqi_linklist(&c);

lnode*p1=a->next;

lnode*p2=b->next;

lnode*t=c;

t->next=NULL;

lnode*p3=t;

while(p1)

{

p2=b->next;

while(p2)

{

if(p1->e==p2->e)

{

lnode*q=(lnode*)malloc(sizeof(lnode));

x=p1->c-p2->c;//将两个多项式的常数项相减

q->c=x;

q->e=p1->e;

p3->next=q;

q->next=NULL;

p3=q;

break;

}

else

p2=p2->next;

}

p1=p1->next;

}

p1=a->next;

while(p1)

{

lnode*q=t->next;

while(q)

{

if(p1->e!

=q->e)

q=q->next;

elsebreak;

}

if(q==NULL)

{

lnode*q1=(lnode*)malloc(sizeof(lnode));

q1->c=p1->c;

q1->e=p1->e;

p3->next=q1;

q1->next=NULL;

p3=q1;

}

p1=p1->next;

}

p2=b->next;

while(p2)

{

lnode*q=t->next;

while(q)

{

if(p2->e!

=q->e)

q=q->next;

elsebreak;

}

if(q==NULL)

{

lnode*q2=(lnode*)malloc(sizeof(lnode));

q2->c=p2->c;

q2->e=p2->e;

p3->next=q2;

q2->next=NULL;

p3=q2;

}

p2=p2->next;

}

chose_jisuanqi_linklist(&c);

returnt;

}

voiddisplay_jisuanqi_linklist(linklistl)//输出链表

{

lnode*p=l->next;

printf("%3.1f^%d",p->c,p->e);

p=p->next;

while(p)

{

if(p->c>0)//如果多项式的常数项大于0,则在输出项前面加一个“+”

{

printf("+%3.1f^%d",p->c,p->e);

p=p->next;

}

elseif(p->c<0)//如果多项式的常数项小于0,则输出原式

{

printf("%3.1f^%d",p->c,p->e);

p=p->next;

}

else//常数项为0,不输出

p=p->next;

}

printf("\n");

}

#include"stdio.h"

#include"stdlib.h"

#include"conio.h"

#include"jisuanqi_linklist.h"

voidmain()//主函数

{

linklista,b,c,d;

intk;

start:

printf("\n\t\t\t欢迎使用多项式计算器系统\n");//进入系统提示

do

{

printf("\t|*********************************************************|\n");//选择模块

printf("\t|1.输入多项式A、B,并对其进行指数降序排列|\n");

printf("\t|2.输出多项式A、B|\n");

printf("\t|3.计算多项式C=A+B|\n");

printf("\t|4.计算多项式D=A-B|\n");

printf("\t|5.输出多项式C、D|\n");

printf("\t|0.退出系统|\n");

printf("\t|*********************************************************|\n");

printf("\t选择功能选项:

");

scanf("%d",&k);//输入要选择的功能选项

switch(k)//对号调用子函数

{

case1:

system("cls");//清屏

{

create_jisuanqi_linklist(&a);

insert_jisuqnai_linklist(a);

chose_jisuanqi_linklist(&a);

create_jisuanqi_linklist(&b);

insert_jisuqnai_linklist(b);

chose_jisuanqi_linklist(&b);

}system("cls");break;

case2:

system("cls");

{

printf("PolynomialAis:

\n");

display_jisuanqi_linklist(a);

printf("\nPolynomialBis:

\n");

display_jisuanqi_linklist(b);

getch();

}system("cls");break;

case3:

system("cls");

{

c=add_jisuanqi_linklist(a,b);

printf("CalculaepolynomialC=A+Bissuccessful!

!

");

getch();

}system("cls");break;

case4:

system("cls");

{

d=jian_jisuanqi_linklist(a,b);

printf("CalculaepolynomialC=A-Bissuccessful!

!

");

getch();

}system("cls");break;

case5:

system("cls");

{

printf("PolynomialCis:

\n");

display_jisuanqi_linklist(c);

printf("\nPolynomialDis:

\n");

display_jisuanqi_linklist(d);

getch();

}system("cls");break;

case0:

system("exit");exit(0);

default:

system("cls");gotostart;

}

}

while

(1);

}

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 面试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1