一元多项式的操作.docx_第1页
一元多项式的操作.docx_第2页
一元多项式的操作.docx_第3页
一元多项式的操作.docx_第4页
一元多项式的操作.docx_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课程设计题目:(1.2)一元多项式的操作班级:姓名:XXX学号:完成日期:2014/12/6一元多项式的操作。(任意选择三项要求)问题描述:设计一个一元稀疏多项式简单计算器。要求:(1)输入并建立多项式。(2)输出多项式,输出形式为整数序列:n,c1,e1,c2,e2,cn,en,其中n是多项式的项数,ci和ei分别是第i项的系数和指数,序列按指数降序排列。(3)多项式a和b相加,建立多项式a+b。(4)多项式a和b相减,建立多项式a-b。(5)计算多项式在x处的值。(6)求多项式a的导函数。(7)多项式a和b相乘,建立多项式a*b。1、需求分析:(1).输入形式:函数名+(+表达式名或表达式或不加任何东西+)+;再按回车;其中大写字母开头为表达式名,变量名只能为x;如:Create(A,2x);Show(*);Add(A,A,3);Show(A);Cal(A,2);Delete(A);Quit();数值类型:表达式:A=coef*xexpn;其中:coef为x的系数,为浮点型;expn为x的指数,为整型即;A=0.2x-3;(2).输出型式:Error:.Create OK!;A=2x+3;Delete OK!A(x=2)=7;(3)程序所能达到的功能。表达式的创建、删除、显示、以及表达式的加、减、乘运算,以及给x赋值,计算出表达式相应的值。(4)测试数据。Create(A,2x);Show(*);Add(A,A,3);Show(A);Cal(A,2);Delete(A);Quit();2、概要设计图1 表达式结构设计3、详细设计(1)基本操作:创建表达式:void CreatList_NULL(LinkList *L);创建空链表int createByName(char* name);2)表达式操作:排序:void Sort(LinkList *L);去重:void quchong(LinkList *L);删除表达式:void deleteByName(char* name);显示表达式:void show(char *name);(3)表达式间的操作:表达式相加减:void Adds(LinkList *L,LinkList li)表达式相乘:void Multiplication(LinkList *L,LinkList li1,LinkList li2);(4)数据结构typedef struct/表达式的一项float coef;/x的系数int expn;/x的指数char nch;/参数名x 没用到term,*Tset,ElemType;/LinkListtypedef struct LNodeElemType data;/数据struct LNode *Next;/下一个节点LNode,*LinkList,*Node;/链表图2 测试结果7、附录(附全部代码)/编译环境:DEV-C+/日期:2014/12/19/语言:c/名称:表达式运算/包含文件:/const.h 常量定义/LinkList.h链表操作/一元多项式.c 源文件/const.h 常量定义/#ifndef _CONST_H_#define _CONST_H_#define OK 1#define TRUE 1#define FALSE 0#define INFEASIBLE -1#ifndef OVERFLOW#define OVERFLOW -2#endif#define NOANSWER -1#define null 0#define nullptr 0#define PI 3.141592654#define GOOD 1#define BAD 2#define OVER 2#ifndef ERROR#define ERROR 0#endiftypedef int BOOL;#endif/LinkList.h链表操作/#ifndef _LINKLIST_H_#define _LINKLIST_H_/LinkList/2014 11 11/#includeconst.h#includemalloc.htypedef structfloat coef;int expn;char nch;term,*Tset,ElemType;typedef int Status;/LinkListtypedef struct LNodeElemType data;struct LNode *Next;LNode,*LinkList,*Node;Node Find(LinkList L,int i);/查找第i+1个结点int GetLength(LinkList L);/获取链表长度Status GetElem(LinkList L,int i,ElemType *e);/获取链表第i+1个元素Status SetElem(LinkList L,int i,ElemType e);/设置链表第i+1个元素Status ListInsert_L(LinkList L,int i,ElemType e);/插入元素Status ListDelete(LinkList L,int i,ElemType *e);/删除元素void CreateList_L(LinkList *L,ElemType *e,int n);/创建链表void CreatList_NULL(LinkList *L);/创建空链表void ClearList(LinkList L);/清除链表void Sort_L(LinkList *L,int (*compare)(ElemType a,ElemType b);/排序void MergeList_L(LinkList La,LinkList Lb,LinkList *Lc);/合并链表/LinkList;Clear(LinkList L)L-data.coef=0;L-data.nch=0;L-data.expn=0;Node Find(LinkList L,int i)/查找第i+1个结点Node p=L;while(p&(i-)p=p-Next;if(!p)return nullptr;return p;int GetLength(LinkList L)/获取链表长度Node p=L-Next;int i=0;while(p)p=p-Next;+i;return i;Status GetElem(LinkList L,int i,ElemType *e)/获取链表第i+1个元素LinkList p=L;int j=0;p=Find(p,i);if(!p)return ERROR;*e=p-data;return OK;Status SetElem(LinkList L,int i,ElemType e)/获取链表第i+1个元素LinkList p=L;int j=0;p=Find(p,i);if(!p)return ERROR;p-data=e;return OK;Status ListInsert_L(LinkList L,int i,ElemType e)/插入元素LinkList p=L,s;int j=0;if(i=0|GetLength(L)+1data=e;s-Next=p-Next;p-Next=s;return OK;Status ListDelete(LinkList L,int i,ElemType *e)/删除元素LinkList p=L,q;if(i=0|GetLength(L)+1Next;p-Next=q-Next;*e=q-data;free(q);return OK;void CreateList_L(LinkList *L,ElemType *e,int n)/创建链表Node p,q;*L=q=(LinkList)malloc(sizeof(LNode);Clear(q);/q-data=0;q-Next=nullptr;while(e&n-)p=(Node)malloc(sizeof(LNode);p-data=*e;q-Next=p;q=p;+e;q-Next=nullptr;void CreatList_NULL(LinkList *L)/创建空链表*L=(LinkList)malloc(sizeof(LNode);(*L)-Next=nullptr;Clear(*L);/(*L)-data=0;void ClearList(LinkList L)/清除链表int length=GetLength(L);ElemType e;while(length)ListDelete(L,length,&e);-length;void Sort_L(LinkList *L,int (*compare)(ElemType a,ElemType b)/排序int n=GetLength(*L),i,j;Node p=(*L)-Next,q=p-Next;ElemType a0,b0;for(i=1;i=n-1;+i)for(j=0;jdata;b0=q-data;if(*compare)(a0,b0)p-data=b0;q-data=a0;p=q;q=q-Next;/LinkList/2014 11 11/#endif/一元多项式.c 源文件/#include#include#include#include#include#include#includeLinkList.htypedef LinkList polymial;polymial p_arr100;char pname10020;polymial indexx;int index_len;/*create(A,2x);show(A);*/int search(const char* str,char* ch,int start,int end)int i,length=strlen(str),j,len2=strlen(ch);if(start0|len2=0|length=0)return -1;if(end=-1)end=length;for(i=start;iend;+i)for(j=0;jlen2;+j)if(chj=stri)return i;return -1;float strtofloat(const char *str,int start0,int length)int i,k=1,start=start0;float num=0,m0=1;BOOL k0=FALSE;if(length=0)return 1;if(strstart0=-)k=-1;+start;else if(strstart0=+)+start;if(length=1&start-start0=1)return k;for(i=start;istart0+length;+i)if(k0)m0*=0.1;if(stri=.)if(!k0)k0=TRUE;elsereturn 0;elsenum*=10;num+=(stri-0);return m0*num*k;int strtoint(const char *str,int start0,int length)int i,k=1,start=start0,num=0;if(length=0)return 0;if(strstart0=-)k=-1;+start;else if(strstart0=+)+start;for(i=start;istart0+length;+i)num*=10;num+=(stri-0); return num*k;void GetElemtype(polymial L,char* str,int start,int end)int a,length=strlen(str);ElemType e,e0;BOOL IsC=FALSE;char sh=x;char ch=+-*;if(length=0)return ;if(end0)end=length;a=search(str,&sh,start,end);if(strstart=*)IsC=TRUE;+start;if(a=0&stra+10&strend-1=)end=search(str,ch,end+1,-1);if(start=length&end0)return ;GetElemtype(L,str,start,end);/void strncopy(char* str,const char* str2,int start,int length)int i=0,len=strlen(str2);if(start0|lengthlen)return ;for(i=start;istart+length;i+)stri-start=str2i;stri-start=0;void str_upper(char* str)int i,length=strlen(str);for(i=0;i=A&stri=Z)stri+=32;int findByName(char* name)ElemType e;int i,len=GetLength(indexx);for(i=1;i=0)printf(Error:%s have already exist !n,name);return 0;data.expn=index_len;strcpy(pnameindex_len,name);CreatList_NULL(&p_arrindex_len);ListInsert_L(indexx,GetLength(indexx)+1,data);index_len+;printf(create %s OK!n,name);return 1;void swap(ElemType* a,ElemType* b)ElemType t=*a;*a=*b;*b=t;void Sort(LinkList *L)Node q,p,p0;if(GetLength(*L)=0)return;q=(*L)-Next;p=q-Next;p0=q;if(!q|!p)return;while(q)while(p)if(p-data.expndata.expn)swap(&p-data,&q-data);p0=p;p=p-Next;q=q-Next;if(q)p=q-Next;p0=q;else break;void quchong(LinkList *L)int n=GetLength(*L),i,j;ElemType e1,e2;for(i=1;in;+i)for(j=i+1;j=n;+j)GetElem(*L,i,&e1);GetElem(*L,j,&e2);if(e1.expn=e2.expn)e1.coef+=e2.coef;SetElem(*L,i,e1);ListDelete(*L,j,&e1);-j;-n;else if(fabs(e2.coef)=A&ch=A&ch01)if(ch0=+&ch1=A&ch1=A&ch1=Z)return 3;return 0;void Adds(LinkList *L,LinkList li)int len=GetLength(li),i;ElemType e; for(i=1;i=len;+i)GetElem(li,i,&e);ListInsert_L(*L,GetLength(*L)+1,e);Sort(L);quchong(L);void Multiplication(LinkList *L,LinkList li1,LinkList li2)int i,j,len1=GetLength(li1),len2=GetLength(li2);ElemType e1,e2;for(i=1;i=len1;i+)for(j=1;j1e-16)ListInsert_L(*L,GetLength(*L)+1,e1);ClearList(li2);Sort(L);quchong(L);void Printf(char* name)ElemType e,e0;int i,j,ind,len=GetLength(indexx);for(i=1;i0)for(j=1;j=ind;+j)GetElem(p_arre.expn,j,&e0);if(j=1)printf(%0.2fx%d,e0.coef,e0.expn);elseprintf(%+0.2fx%d,e0.coef,e0.expn);printf(;n);else printf(none);n);return;printf(Error:Cannot find %s.n,name);void Size(char* name)ElemType e,e0;int i,j,ind,len=GetLength(indexx);for(i=1;i=len;+i)GetElem(indexx,i,&e);if(strcmp(pnamee.expn,name)=0)ind=GetLength(p_arre.expn);/printf(len=%d;n,ind);printf(size(%s(x)=%d;n,name,ind);return;printf(Error:Cannot find %s.n,name);void show(char *name)ElemType e,e0;BOOL k=FALSE;int i,j,ind,len=GetLength(indexx);if(strlen(name)=1&name0=*)k=TRUE;for(i=1;i0)for(j=1;j1e-16)if(e0.expn=0)printf(%g,e0.coef);else if(fabs(1-e0.coef)0)printf(x%d,e0.expn);else printf(x%d,e0.expn);elseif(e0.expn=1)printf(%gx,e0.coef);else if(e0.expn0)printf(%gx%d,e0.coef,e0.expn);else printf(%gx%d,e0.coef,e0.expn);elseprintf(0); elseif(fabs(e0.coef)1e-16)if(e0.expn=0)printf(%+g,e0.coef);else if(fabs(1-e0.coef)0)printf(+x%d,e0.expn);else printf(+x%d,e0.expn);elseif(e0.expn=1)printf(%+gx,e0.coef);else if(e0.expn0)printf(%+gx%d,e0.coef,e0.expn);else printf(%+gx%d,e0.coef,e0.expn); printf(;n);else printf(none);n);if(!k)return;if(!k)printf(Error:Cannot find %s.n,name);void PrintfAll()ElemType e,e0;int i,j,ind,len=GetLength(indexx);for(i=1;i0)for(j=1;j=ind;+j)GetElem(p_arre.expn,j,&e0);if(j=1)printf(%0.2fx%d,e0.coef,e0.expn);elseprintf(%+0.2fx%d,e0.coef,e0.expn);printf(;n);else printf(none);n);double Calculate(char* name,double x)double sum=0;ElemType e,e0;int i,j,ind,len=GetLength(indexx);for(i=1;i0)for(j=1;j=ind;+j)GetElem(p_arre.expn,j,&e0);sum+=(e0.coef*pow(x,e0.expn);printf(%g;n,sum);else printf(0;n);return;return sum;LinkList* Copy_list(LinkList li,int k)LinkList* l;int len=GetLength(li),i;ElemType e;l=(LinkList*)malloc(sizeof(LinkList);CreatList_NULL(l);for(i=1;i0)ClearList(li);return l;void deleteByName(char* name)ElemType e;int i,len=GetLength(indexx);for(i=1;i=0)fx=search(str,str_s,start,-1);strncopy(cmd_strlength+,str,start,fx-start);if(strfx=)str_upper(cmd_str0);if(strcmp(quit,cmd_str0)=0)exit(0);else if(strcmp(help,cmd_str0)=0)printf(nn); printf( 格式:n);printf(函数名+(+表达式名或表达式或不加任何东西+)+;再按回车,其中大写字母开头为表达式名,变量名只能为xn);printf( 主要功能:n);printf(创建表达式:ntcreate(A,B,C,D);ntcreate(A,2x+3+4x-1);n);printf(表达式相加、减:ntadd(A,B,C,-D);t-A=B+C-Dntadd(A,2x,A);t-A=2x*An);printf(表达式相乘:ntmul(A,B,-C,D);t-A=B*(-C)*D;ntmul(A,2x,A,B);t-A=2x*A*Bn);printf(删除表达式:ntdelete(A,B,C,D);n);printf(计算:ntcal(A,0,1,2);t-A(x=0)=?,A(x=1)=?,A(x=2)=?ntcal(1.2,A,B,C);t-A(x=1.2)=?,B(x=1.2)=?,C(x=1.2)=?n);printf(显示表达式:ntshow(A);ntshow(*);t-显示所有表达式n);printf(退出:ntquit();n);printf(帮助:nthelp();n);printf(nn 注意:n);printf(如果输入有误,直接按;再按Enter键结束当前语句,不支持退格键!n);printf(nn); else if(strcmp(create,cmd_str0)=0)for(i=1;i0)GetElem(indexx,start,&e);Sort(li); quchong(li);/printf(len=%dn,GetLength(*li);p_arre.expn=*li;else if(strcmp(delete,cmd_str0)=0)for(i=1;ilength;+i)deleteByName(cmd_stri);else if(strcmp(add,cmd_str0)=0)for(i=1;i0)if(i=1&k1)printf(Error:第一个参数不能带符号!n);return;str0=cmd_stri;if(k1)str0+;index=findByName(str0);if(index1)printf(Error:%s canont find!n,str0);return;createByName(str0);index=findByName(str0);GetElem(indexx,index,&e);if(i=1)fr=e.expn;la=(LinkList*)malloc(sizeof(LinkList);CreatList_NULL(la);elseli

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论