1.程序设计与实现。
1.一元多项式计算。
a)需求分析。
任务要求:能够按照指数降序排列建立并输出多项式;能够完成两个多项式的相加、相减,并将结果输出。
问题分析:本程序的关键在于如何将输入的一元多项式按指数的降序进行排列,二难点就是将输入的两个一元多项式进行相加、想减操作。
本程序需要解决一下几个问题:
a.如何将输入的一元多项式按指数的降序进行排列;
b.如何确定要输入的多项式的项数;
c.如何将输入的两个一元多项式进行显示出来;
d.如何将输入的两个一元多项式进行相加操作;
e.如何将输入的两个一元多项式进行想减操作;
次程序的链表的应用,通过链表实现一元多项式的相加相减操作。
要对一元多项式进行表示:
一元多项式的表示在计算机内可以用链表来表示为了节省存储空间,我们只存储多项式中系数为0的项。链表的每个节点存放多项式的一个系数非零项,它包含三个域,分别存放该项的系数、项数以及指向下一个多项式项节点的指针。图(1)为该节点的结构:
系数指数指针。
图(1)创建一元多项式链表,对一元多项式的运算中会出现各种可能情况进行分析,实现一元多项式的相加、相减操作。
b)概要设计。
本题设计要求是能够按照指数降序排列建立并输出多项式;能够完成两个多项式的相加、相减,并将结果输入。
1、 数据结构的选用:
为了实现任意多项式的加法、减法,因此选择单链表的结构体,它有一个系数,指数,下一个指针3个元素;例如,图(2)中的两个线性链表分别表示一元多项式a17=7+3x+9+和一元多项式。
b(x)=8x+-。从图中可见,每个节点表示多项式的一项。
图(2)多项式表的单链表存储结构。
2、 多项式输入。
采用尾插法的方式,输入多项式中一个项的系数和指数,即产生一个新的节点,建立其他的又指针,并用头结点指向它;为了半段一个多项式是否输入结束。再输入前先确定要输入的项数。
3、 程序流程图(3)
图(3)b.一元多项式的相加流程图如图(4)
c)详细设计。
算法描述:1、 定义结点类型。
用float cofe表示一元多项式的系数,int exp表示一元多项式的指数创建链表的结点类型。
struct node
float cofe;//结点类型。
int exp
2、 定义链表的类型。
struct lnode
polynomial data;//链表类型。
lnode*next;
3、创建含有n个链表类型结点的项,即创建一个n 项多项式,用函数void createlink(link&l,int n)表示,创建头结点(l->data).exp=-1;创建多项式没有成功,递归调用重新创建createlink(l,n);
4、用函数int judgeifexpsame(link l,link e)判断指数是否与多项式中已存在的某项相同,如果输入的一元多项式有重复的指数需要重新输入。
5、输出链表用函数void printlist(link l)表示,这个部分根据项系数的不同分为项的系数大于0的5种情况和项的系数小于0的5种情况。
6、链表内容的复制:把一个链表的内容复制给另外一个链表用函数void copylink(link&pc,link pc)表示。
一元多项式的相加流程图如图(4)
图(4)c)详细设计。
算法描述:1、 定义结点类型。
用float cofe表示一元多项式的系数,int exp表示一元多项式的指数创建链表的结点类型。
struct node
float cofe;//结点类型。
int exp
2、 定义链表的类型。
struct lnode
polynomial data;//链表类型。
lnode*next;
3、创建含有n个链表类型结点的项,即创建一个n 项多项式,用函数void createlink(link&l,int n)表示,创建头结点(l->data).exp=-1;创建多项式没有成功,递归调用重新创建createlink(l,n);
4、用函数int judgeifexpsame(link l,link e)判断指数是否与多项式中已存在的某项相同,如果输入的一元多项式有重复的指数需要重新输入。
5、输出链表用函数void printlist(link l)表示,这个部分根据项系数的不同分为项的系数大于0的5种情况和项的系数小于0的5种情况。
6、链表内容的复制:把一个链表的内容复制给另外一个链表用函数void copylink(link&pc,link pc)表示。
7、将多项式按照指数降序排列建立并输出,本程序用冒泡排序的方法将多项式的指数从大到小的顺序进行排列void paixu(link head1)
对链表进行排序过程中用循环来确定链表的长度。
while(head1!=null)
n++head1=head1->next
将链表中的元素按照从大到小的顺序排列。
if((p->data).exp<(q->data).exp)
elseswitch(key){
case 1:for(i=0;i<5;i++)
printf("第%d个学生的学号:",i+1);
scanf("%d",&student[i].num);
printf(" t姓名:")
scanf("%s",&student[i].name);
printf(" t分数:",i+1);
scanf("%d",&student[i].score);
break;
case 2:for(j=1;j<5;j++)
for(i=0;i<5-j;i++)
if(student[i].score
m=student[i];
student[i]=student[i+1];
student[i+1]=m;
for(i=0;i<5;i++)
printf("第%个学生的学号%d",i+1,student[i].num);
printf(" t\t姓名%s",student[i].name);
printf("\t\t分数%d",student[i].score);
数据结构课程设计
课程设计说明书 题目哈夫曼编码问题的设计和实现。课程名称数据结构课程设计。院 系 部 中心。专业。班级。学生姓名。学号。设计地点。指导教师。设计起止时间 2008 年6月 2日至 2008 年 6月 6 日。目录。1 问题描述 2 1.1 题目内容 2 1.2 基本要求 2 1.3 测试数据 2 2...
数据结构课程设计
数据结构 课程设计。实验报告。学院 信息工程学院。班级 姓名 学号 指导老师 题目2 一元多项式的计算。1 实验目的。1 掌握链表的灵活运用 2 学习链表初始化和建立一个新的链表 3 知道怎样去实现链表删除结点操作与插入结点 4 理解链表的基本操作 包括数据域数据的相加 并能灵活运用。2 实验内容。...
数据结构课程设计
班级 信计 1102 姓名 李娜娜。学号 1108060209 设计日期 2013.07.15 西安科技大学计算机学院 1.实验题目 编制一个演绎扫雷游戏的程序。2.问题描述。做一个n x m的扫雷游戏,每个方格包含两种状态 关闭 closed 和打开 opened 初始化时每个方格都是关闭的,一个...